فهرست منبع

提现管理导出导入

weifanli 3 سال پیش
والد
کامیت
631863b2cc

+ 16 - 4
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -2,7 +2,11 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -30,7 +34,8 @@ import java.util.*;
 @RequestMapping("/userWithdrawal")
 @Api(value = "用户账户提现表", tags = "用户账户提现表")
 public class UserWithdrawalController extends BaseController {
-
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
     @Autowired
     private UserWithdrawalService userWithdrawalService;
 
@@ -62,13 +67,16 @@ public class UserWithdrawalController extends BaseController {
         List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
         List<UserWithdrawalExport> list = new ArrayList<>();
         withdrawalVoList.forEach(o -> {
+            if(AuthStatusEnum.PASS.equals(o.getStatus())){
+                return;
+            }
             UserWithdrawalExport export = new UserWithdrawalExport();
             try {
                 BeanUtils.copyProperties(export, o);
                 StringBuffer buffer = new StringBuffer(export.getId().toString());
                 buffer.append(export.getUserId());
-                buffer.append(export.getAmount());
-                buffer.append(export.getActualAmount());
+                buffer.append(export.getAmount().setScale(2));
+                buffer.append(export.getActualAmount().setScale(2));
                 String s = DigestUtils.md5DigestAsHex(buffer.toString().getBytes());
                 export.setSign(s);
                 list.add(export);
@@ -91,9 +99,13 @@ public class UserWithdrawalController extends BaseController {
         if (null == file) {
             return HttpResponseResult.failed("请上传文件");
         }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
         ExcelDataReader<UserWithdrawalExport> reader = ExcelUtils.getReader(UserWithdrawalExport.class, file);
         try {
-            userWithdrawalService.importExcel(reader.getDataList());
+            userWithdrawalService.importExcel(reader.getDataList(),user.getId());
             return HttpResponseResult.succeed();
         }catch (ExcelException e){
             return HttpResponseResult.failed(HttpStatus.INTERNAL_SERVER_ERROR,e.getErrMsgList(),"导入文件异常");

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/WithdrawalStatusConvert.java

@@ -26,16 +26,16 @@ public class WithdrawalStatusConvert implements Converter<AuthStatusEnum> {
     @Override
     public AuthStatusEnum convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         try {
-            return AuthStatusEnum.valueOf(cellData.getStringValue());
-        }catch (Exception e){
+            return AuthStatusEnum.getByName(cellData.getStringValue().trim());
+        } catch (Exception e) {
             return null;
         }
     }
 
     @Override
     public CellData convertToExcelData(AuthStatusEnum statusEnum, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
-        if(null != statusEnum){
-            return new CellData(statusEnum.getCode());
+        if (null != statusEnum) {
+            return new CellData(statusEnum.getName());
         }
         return new CellData("异常数据");
     }

+ 11 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserWithdrawalExport.java

@@ -35,14 +35,15 @@ public class UserWithdrawalExport {
     private String bankCard;
     @ExcelProperty(value = "转账金额", index = 7)
     private BigDecimal actualAmount;
-    @NotBlank(message = "银行流水号不能为空")
     @ExcelProperty(value = "银行流水号", index = 8)
     private String bankFlowNo;
     @NotNull(message = "提现状态不能为空")
     @ExcelProperty(value = "提现状态 审核中/通过/不通过", index = 9,converter = WithdrawalStatusConvert.class)
     private AuthStatusEnum status;
+    @ExcelProperty(value = "审核原因", index = 10)
+    private String verifyReason;
     @NotBlank(message = "签名不能为空")
-    @ExcelProperty(value = "签名", index = 10)
+    @ExcelProperty(value = "签名", index = 11)
     private String sign;
 
     public Long getId() {
@@ -132,4 +133,12 @@ public class UserWithdrawalExport {
     public void setSign(String sign) {
         this.sign = sign;
     }
+
+    public String getVerifyReason() {
+        return verifyReason;
+    }
+
+    public void setVerifyReason(String verifyReason) {
+        this.verifyReason = verifyReason;
+    }
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java

@@ -51,7 +51,11 @@ public class UserWithdrawal implements Serializable {
     @TableField(value = "status_")
     private AuthStatusEnum status;
     @ApiModelProperty("审核人")
+    @TableField(value = "verify_user_id_")
     private Long verifyUserId;
+    @ApiModelProperty("审核原因")
+    @TableField(value = "verify_reason_")
+    private String verifyReason;
     @ApiModelProperty("发起时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -159,4 +163,12 @@ public class UserWithdrawal implements Serializable {
     public void setVerifyUserId(Long verifyUserId) {
         this.verifyUserId = verifyUserId;
     }
+
+    public String getVerifyReason() {
+        return verifyReason;
+    }
+
+    public void setVerifyReason(String verifyReason) {
+        this.verifyReason = verifyReason;
+    }
 }

+ 16 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthStatusEnum.java

@@ -16,11 +16,11 @@ public enum AuthStatusEnum implements BaseEnum<String, AuthStatusEnum> {
     UNPASS("不通过");
     @EnumValue
     private String code;
-    private String msg;
+    private String name;
 
-    AuthStatusEnum(String msg) {
+    AuthStatusEnum(String name) {
         this.code = getCode();
-        this.msg = msg;
+        this.name = name;
     }
 
     @Override
@@ -32,11 +32,20 @@ public enum AuthStatusEnum implements BaseEnum<String, AuthStatusEnum> {
         this.code = code;
     }
 
-    public String getMsg() {
-        return msg;
+    public String getName() {
+        return name;
     }
 
-    public void setMsg(String msg) {
-        this.msg = msg;
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public static AuthStatusEnum getByName(String name) {
+        for (AuthStatusEnum statusEnum : AuthStatusEnum.values()) {
+            if (statusEnum.getName().equals(name)) {
+                return statusEnum;
+            }
+        }
+        return null;
     }
 }

+ 1 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java

@@ -9,7 +9,6 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
 import com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 
 import java.util.List;
@@ -67,5 +66,5 @@ public interface UserWithdrawalService extends IService<UserWithdrawal>  {
 	 * @updateTime 2022/4/20 9:45
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.util.List<com.yonge.toolset.utils.easyexcel.ErrMsg>>
 	 */
-    void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList);
+    void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId);
 }

+ 23 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java

@@ -38,6 +38,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.DigestUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
@@ -128,31 +129,43 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     }
 
     @Override
-    @Transactional
-    public void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList) {
+    @Transactional(rollbackFor = Exception.class)
+    public void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId) {
         List<ErrMsg> errMsgList = new ArrayList<>();
         dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
         List<UserWithdrawal> userWithdrawalList = new ArrayList<>();
         for (ExcelDataReaderProperty<UserWithdrawalExport> dataReaderProperty : dataList) {
             String errMsg = dataReaderProperty.getErrorMessage();
-            if (StringUtil.isEmpty(errMsg)) {
+            if (!StringUtil.isEmpty(errMsg)) {
                 errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), errMsg));
                 continue;
             }
             UserWithdrawalExport data = dataReaderProperty.getClazz();
             StringBuffer buffer = new StringBuffer(data.getId().toString());
             buffer.append(data.getUserId());
-            buffer.append(data.getAmount());
-            buffer.append(data.getActualAmount());
+            buffer.append(data.getAmount().setScale(2));
+            buffer.append(data.getActualAmount().setScale(2));
             String sign = DigestUtils.md5DigestAsHex(buffer.toString().getBytes());
             if (!data.getSign().equals(sign)) {
                 errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), "验签失败"));
                 continue;
             }
+            if(AuthStatusEnum.PASS.equals(data.getStatus()) && StringUtil.isEmpty(data.getBankFlowNo())){
+                errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), "审核通过时,转账流水号不能为空"));
+                continue;
+            }
+            if(!AuthStatusEnum.DOING.equals(data.getStatus())
+                    && StringUtil.isEmpty(data.getVerifyReason())){
+                errMsgList.add(new ErrMsg(dataReaderProperty.getRowIndex(), "审核理由不能为空"));
+                continue;
+            }
             UserWithdrawal userWithdrawal = new UserWithdrawal();
             userWithdrawal.setId(data.getId());
             userWithdrawal.setBankFlowNo(data.getBankFlowNo());
             userWithdrawal.setStatus(data.getStatus());
+            userWithdrawal.setVerifyReason(data.getVerifyReason());
+            userWithdrawal.setVerifyUserId(userId);
+            userWithdrawal.setTransferTime(new Date());
             userWithdrawalList.add(userWithdrawal);
         }
         if (!CollectionUtils.isEmpty(errMsgList)) {
@@ -169,7 +182,11 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
      */
     private void authWithdrawalBancth(List<UserWithdrawal> userWithdrawalList) {
         for (UserWithdrawal userWithdrawal : userWithdrawalList) {
-            baseMapper.updateById(userWithdrawal);
+            UserWithdrawal old = baseMapper.selectById(userWithdrawal.getId());
+            if(null != old && !AuthStatusEnum.PASS.equals(old.getStatus())
+                && !old.getStatus().equals(userWithdrawal.getStatus())){
+                baseMapper.updateById(userWithdrawal);
+            }
         }
     }
 

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml

@@ -12,6 +12,7 @@
         <result column="transfer_time_" property="transferTime" />
         <result column="status_" property="status" />
         <result column="verify_user_id_" property="verifyUserId" />
+        <result column="verify_reason_" property="verifyReason" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
     </resultMap>
@@ -28,6 +29,7 @@
         , t.transfer_time_ as transferTime
         , t.status_ as status
         , t.verify_user_id_ as verifyUserId
+        , t.verify_reason_ as verifyReason
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         </sql>

+ 2 - 2
toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelDataReader.java

@@ -88,14 +88,14 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
     private ExcelDataReaderProperty<T> executed(T data, AnalysisContext context) {
         ExcelDataReaderProperty<T> property = new ExcelDataReaderProperty<>();
         property.setClazz(data);
+        Integer rowIndex = context.readRowHolder().getRowIndex();
+        property.setRowIndex(rowIndex);
         //执行注解校验
         Set<ConstraintViolation<T>> set = vf.validate(data);
         if (CollectionUtils.isNotEmpty(set)) {
             String collect = set.stream()
                     .map(ConstraintViolation::getMessage)
                     .collect(Collectors.joining());
-            Integer rowIndex = context.readRowHolder().getRowIndex();
-            property.setRowIndex(rowIndex);
             property.setErrorMessage(collect);
         }
         return property;