Quellcode durchsuchen

应付账款功能完善

lipf vor 3 Monaten
Ursprung
Commit
c24fb92b0f

+ 2 - 2
commons/src/main/java/com/jzg/commons/core/base/BaseController.java

@@ -115,7 +115,7 @@ public class BaseController {
 
         List<String> userPerms = new ArrayList<>();
         String userJsonStr = redissonClient.getBucket(authorizationHeader).get().toString();
-        log.info("获取平台权限:authorizationHeader=[{}],userJsonStr=[{}]",authorizationHeader, userJsonStr);
+        //log.info("获取平台权限:authorizationHeader=[{}],userJsonStr=[{}]",authorizationHeader, userJsonStr);
         JSONObject userInfo = JSONObject.parseObject(userJsonStr);
         JSONArray auths = userInfo.getJSONArray("auths");
         auths.forEach(auth->{
@@ -152,7 +152,7 @@ public class BaseController {
         }
         valiedToken(authorizationHeader);
         String userJsonStr = redissonClient.getBucket(authorizationHeader).get().toString();
-        log.info("authorizationHeader=[{}], userJsonStr=[{}]",authorizationHeader, userJsonStr);
+        //log.info("authorizationHeader=[{}], userJsonStr=[{}]",authorizationHeader, userJsonStr);
         JSONObject userInfo = JSONObject.parseObject(userJsonStr);
         return userInfo.getString("system");
     }

+ 0 - 3
commons/src/main/java/com/jzg/commons/entity/dto/ApplyWithdrawParam.java

@@ -1,12 +1,9 @@
 package com.jzg.commons.entity.dto;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.jzg.commons.core.base.PageRequest;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
 
 @Schema(description = "申请提现param")
 @Data

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/vo/AmountAuditVo.java

@@ -1,6 +1,7 @@
 package com.jzg.commons.entity.vo;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -76,6 +77,11 @@ public class AmountAuditVo  extends BaseModel {
     @Schema(description = "内部银行卡开户行名称")
     private String bankName;
 
+    @TableField(exist = false)
+    @ExcelProperty("银行卡持卡人姓名")
+    @Schema(description = "银行卡持卡人姓名")
+    private String cardHolderName;
+
     @ExcelProperty("内部银行卡开户行号")
     @Schema(description = "内部银行卡开户行号")
     private String bankNum;

+ 3 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -1378,8 +1378,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         // 比例信息
         if (insFeeOrders != null) {
             resultVo.setInsFeeOrders(new InsFeeOrdersVo(insFeeOrders));
-            List<PtlAgreementCostTypeVo> ptlAgreementCostTypeList = orgClient.queryByCostId(insFeeOrders.getCostId());
-            PtlAgreement ptlAgreement = orgClient.getByAgreementId(insOrdersVo.getInsOrders().getAgreementId());
+            // modify by lipf,  resultVo.setCostRatio(new PtlAgreementCostRatioVo(ptlAgreementCostTypeList, ptlAgreement)); 这一行代码被注视掉,那么上面两个查询也就没有必要调用了
+            // List<PtlAgreementCostTypeVo> ptlAgreementCostTypeList = orgClient.queryByCostId(insFeeOrders.getCostId());
+            //PtlAgreement ptlAgreement = orgClient.getByAgreementId(insOrdersVo.getInsOrders().getAgreementId());
             //resultVo.setCostRatio(new PtlAgreementCostRatioVo(ptlAgreementCostTypeList, ptlAgreement));
             resultVo.setCostRatio(new PtlAgreementCostRatioVo(insFeeOrders));
         }

+ 2 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java

@@ -137,7 +137,7 @@ public class AmountAuditingController extends BaseController {
      */
     @PostMapping("/applyWithdraw")
     @Operation(summary = "申请提现")
-    public HttpResult applyWithdraw(@RequestBody ApplyWithdrawParam applyWithdrawParam){
-        return sysAmountAuditingService.applyWithdraw(applyWithdrawParam) ? HttpResult.ok("提现成功") : HttpResult.error("提现失败");
+    public HttpResult<String> applyWithdraw(@RequestBody ApplyWithdrawParam applyWithdrawParam){
+        return sysAmountAuditingService.applyWithdraw(applyWithdrawParam);
     }
 }

+ 6 - 3
tenant/organization/src/main/java/com/jzg/organization/service/SysAmountAuditingService.java

@@ -49,6 +49,7 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditing> {
 
     /**
      * 提现付款
+     *
      * @param param
      */
     HttpResult<String> verifyAmount(AmountAuditEditParam param);
@@ -82,10 +83,12 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditing> {
 
     /**
      * 申请提现
-     * @param applyWithdrawParam
-     * @return
+     *      有待审核的提现申请的时候,不能再次进行体现申请
+     *
+     * @param applyWithdrawParam 提现申请相关参数
+     * @return HttpResult<String> 业务员提现处理结果
      */
-    Boolean applyWithdraw(ApplyWithdrawParam applyWithdrawParam);
+    HttpResult<String> applyWithdraw(ApplyWithdrawParam applyWithdrawParam);
 
     /**
      * 导出申请列表

+ 19 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgInfoBankCardService.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.po.SysUserJzgInfoBankCard;
 import com.jzg.commons.entity.vo.SysUserJzgInfoBankCardVo;
 
 import java.util.List;
+import java.util.Map;
 
 public interface SysUserJzgInfoBankCardService extends IService<SysUserJzgInfoBankCard> {
 
@@ -20,6 +21,24 @@ public interface SysUserJzgInfoBankCardService extends IService<SysUserJzgInfoBa
      */
     Page<SysUserJzgInfoBankCardDto> getBankCardPageList(Page page, SysUserJzgInfoBankCardVo sysUserJzgInfoBankCardVo);
 
+    /**
+     * 查询所有的银行卡账号
+     *
+     * @return List<SysUserJzgInfoBankCard>
+     * @author lipf
+     * @date 2026/6/3 14:42
+     */
+    List<SysUserJzgInfoBankCard> queryAllBankCard();
+
+    /**
+     * 查询所有的银行卡账号
+     *
+     * @return Map<String, SysUserJzgInfoBankCard> key 是银行卡号, value是银行卡实体
+     * @author lipf
+     * @date 2026/6/3 14:42
+     */
+    Map<String, SysUserJzgInfoBankCard> queryAllBankCardMap();
+
     List<SysUserJzgInfoBankCardDto> getBankCardByUserId(String userInfoId, String systemCode);
 
     boolean setDefaultCard(SysUserJzgInfoBankCardVo sysUserJzgInfoBankCardVo);

+ 40 - 7
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java

@@ -14,6 +14,7 @@ import com.jzg.commons.entity.dto.*;
 import com.jzg.commons.entity.po.SysAmountAuditing;
 import com.jzg.commons.entity.po.SysUserAccount;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
+import com.jzg.commons.entity.po.SysUserJzgInfoBankCard;
 import com.jzg.commons.entity.vo.AmountAuditVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
@@ -38,6 +39,7 @@ import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
@@ -77,6 +79,14 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     @Override
     public Page<AmountAuditVo> queryPage(AmountAuditParam param) {
         Page<AmountAuditVo> page = baseMapper.queryPage(param.getPage(), param);
+        List<AmountAuditVo> records = page.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            Map<String, SysUserJzgInfoBankCard> bankCards = sysUserJzgInfoBankCardService.queryAllBankCardMap();
+            for (AmountAuditVo record : records) {
+                SysUserJzgInfoBankCard bankCard = bankCards.getOrDefault(record.getBankCardNum(), new SysUserJzgInfoBankCard());
+                record.setCardHolderName(bankCard.getCardHolderName());
+            }
+        }
         return page;
     }
 
@@ -163,10 +173,16 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
 
     }
 
+    /**
+     * 提现付款
+     *
+     * @param param
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult<String> verifyAmount(AmountAuditEditParam param) {
         String userName = baseController.getUserName();
+        String userId = baseController.getUserId();
         log.info("用户开始进行付款操作。userName=[{}],param=[{}]",userName,JSONUtil.toJsonStr(param));
         if(StrUtil.isEmpty(param.getAccountId())){
             return HttpResult.error("付款账户不能为空");
@@ -188,7 +204,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         }
         if(StringUtils.isNotBlank(audit.getReceiveUser())){
             if(userName.equals(audit.getReceiveUser())){
-                StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.SUCCESS_AUDIT,audit.getAuditingStatus()+"");
+                StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.SUCCESS_AUDIT,audit.getAuditingStatus()+"", userName,userId);
                 audit.setAuditingStatus(stateFailResult.getCurrentState());
                 audit.setPicId(param.getPicId());
                 audit.setVoucherId(param.getVoucherId());
@@ -203,7 +219,9 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
                     log.info("账户金额少于提现金额,请审核账户。 userId=[{}}], userAccount.getSumAmount()=[{}],audit.getAmount()=[{}]",userAccount.getUserId(), userAccount.getSumAmount(), audit.getAmount());
                     throw new SystemException("账户金额少于提现金额,请审核账户");
                 }
-                userAccount.setSumAmount(userAccount.getSumAmount().subtract(audit.getAmount()));
+                // 应付总计: 只添加,不减。 modify by lipf ,2026年6月3日14:30:33
+                // sumAmount = sumAmountPaid + SumAmountUnpaid
+                //userAccount.setSumAmount(userAccount.getSumAmount().subtract(audit.getAmount()));
                 userAccount.setSumAmountPaid(userAccount.getSumAmountPaid().add(audit.getAmount()));
                 userAccount.setSumAmountUnpaid(userAccount.getSumAmountUnpaid().subtract(audit.getAmount()));
 
@@ -220,7 +238,8 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     @Override
     public void rejectAmount(AmountAuditRejectParam param) {
         String userName = baseController.getUserName();
-        log.info("用户[{}]驳回体现申请. param=[{}]",userName,JSONUtil.toJsonStr(param));
+        String userId  = baseController.getUserId();
+        log.info("用户[{}][{}]驳回体现申请. param=[{}]",userName,userId, JSONUtil.toJsonStr(param));
         SysAmountAuditing audit = this.getById(param.getId());
         if(audit.getAuditingStatus() > 0){
             if(audit.getAuditingStatus() == 1){
@@ -237,7 +256,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
             AssertionUtils.isFail(true, "申请已被"+audit.getReceiveUser()+"领取返回待付款提现申请列表!");
         }
 
-        StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.FAIL_AUDIT,audit.getAuditingStatus()+"");
+        StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.FAIL_AUDIT,audit.getAuditingStatus()+"",userName , userId );
         audit.setAuditingStatus(stateFailResult.getCurrentState());
         audit.setRejectReason(param.getRejectReason());
         audit.setRejectPerson(userName);
@@ -255,6 +274,14 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     public Page<AmountAuditVo> myPayment(AmountAuditParam param) {
         log.info("应付账款-我的付款。param=[{}]", JSONUtil.toJsonStr(param));
         Page<AmountAuditVo> amountAuditVoPage = baseMapper.queryPaymentPage(param.getPage(), param, baseController.getUserName());
+        List<AmountAuditVo> records = amountAuditVoPage.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            Map<String, SysUserJzgInfoBankCard> bankCards = sysUserJzgInfoBankCardService.queryAllBankCardMap();
+            for (AmountAuditVo record : records) {
+                SysUserJzgInfoBankCard bankCard = bankCards.getOrDefault(record.getBankCardNum(), new SysUserJzgInfoBankCard());
+                record.setCardHolderName(bankCard.getCardHolderName());
+            }
+        }
         return amountAuditVoPage;
     }
 
@@ -265,16 +292,22 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     }
 
     @Override
-    public Boolean applyWithdraw(ApplyWithdrawParam applyWithdrawParam) {
+    public HttpResult<String> applyWithdraw(ApplyWithdrawParam applyWithdrawParam) {
         String userName = baseController.getUserName();
         String userId = baseController.getUserId();
         log.info("业务员提交提现申请:userName=[{}],userId=[{}],applyWithdrawParam=[{}]",userId, userName, JSONUtil.toJsonStr(applyWithdrawParam));
+        // 当前有处于待审核状态的提现申请的时候,不能再次提交提现申请 add by lipf,  2026年6月3日14:09:07
+        List<SysAmountAuditing> auditings = baseMapper.queryPaymentByUserId(userId, 0);
+        if(CollUtil.isNotEmpty(auditings)){
+            log.info("用户[{}][{}]存在未审核的提现申请,请审核通过后再继续提现",userId,userName);
+            return HttpResult.error("用户存在未审核的提现申请。请审核通过后再继续提现");
+        }
         if(applyWithdrawParam.getWithdrawAmount().compareTo(BigDecimal.ZERO) <= 0){
             log.info("业务员[{}]提现提现金额不能为负值[{}]",userName, applyWithdrawParam.getWithdrawAmount());
             throw new SystemException("提现金额错误,请重新输入");
         }
         SysUserAccount sysUserAccount = userAccountService.queryByUserId(userId);
-        AssertionUtils.isFail(Objects.isNull(sysUserAccount),"找不到用户");
+        AssertionUtils.isFail(Objects.isNull(sysUserAccount),"找不到用户账号");
 
         // sys_amount_auditing 表中的 balance_amount 字段,表示冻结的金额, 避免重复提现
         // 查询处于提现进程中的申请记录。 汇总其中的冻结金额
@@ -300,7 +333,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         // 构造提现对象
         SysAmountAuditing sysAmountAuditing = new SysAmountAuditing(applyWithdrawParam,sysUserAccount,sysUserJzgInfoBankCardDto,baseController.getUserId());
         baseMapper.insert(sysAmountAuditing);
-        return true;
+        return HttpResult.ok("提现申请完成");
     }
 
     /**

+ 31 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java

@@ -3,6 +3,7 @@ package com.jzg.organization.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
@@ -11,14 +12,12 @@ import com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto;
 import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.po.SysUserJzgInfoBankCard;
 import com.jzg.commons.entity.po.SysUserJzgInfoBankCardRecord;
-import com.jzg.commons.entity.po.SysUserJzgInfoSalesmanBO;
 import com.jzg.commons.entity.vo.SysUserJzgInfoBankCardVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.organization.mapper.SysUploadFilesMapper;
 import com.jzg.organization.mapper.SysUserJzgInfoBankCardMapper;
 import com.jzg.organization.mapper.SysUserJzgInfoBankCardRecordMapper;
-import com.jzg.organization.mapper.SysUserJzgInfoSalesmanMapper;
 import com.jzg.organization.service.SysUserJzgInfoBankCardService;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
 import jakarta.annotation.Resource;
@@ -63,6 +62,36 @@ public class SysUserJzgInfoBankCardServiceImpl extends ServiceImpl<SysUserJzgInf
         return sysUserJzgInfoBankCardMapper.getBankCardByUserId(userInfoId,systemCode);
     }
 
+    /**
+     * 查询所有的银行卡账号
+     *
+     * @return List<SysUserJzgInfoBankCard>
+     * @author lipf
+     * @date 2026/6/3 14:42
+     */
+    @Override
+    public List<SysUserJzgInfoBankCard> queryAllBankCard() {
+        List<SysUserJzgInfoBankCard> bankCards = baseMapper.selectList(new QueryWrapper<SysUserJzgInfoBankCard>().eq("is_delete", 0));
+        log.debug("一共查询出[{}]个银行卡", CollUtil.size(bankCards));
+        return bankCards;
+    }
+
+    /**
+     * 查询所有的银行卡账号
+     *
+     * @return Map<String, SysUserJzgInfoBankCard> key 是银行卡号, value是银行卡实体
+     * @author lipf
+     * @date 2026/6/3 14:42
+     */
+    @Override
+    public Map<String, SysUserJzgInfoBankCard> queryAllBankCardMap() {
+        List<SysUserJzgInfoBankCard> bankCards = this.queryAllBankCard();
+        return bankCards.stream()
+                .collect(Collectors.toMap(SysUserJzgInfoBankCard::getBankCardNumber,
+                        Function.identity(),
+                        (o1, o2) -> o1));
+    }
+
     /**
      * 财务管理-业务管账户-查询
      *

+ 24 - 11
tenant/organization/src/main/java/com/jzg/organization/state/listener/AuditStateListener.java

@@ -4,7 +4,8 @@ import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.organization.state.AuditState;
 import jakarta.annotation.Resource;
-import org.checkerframework.checker.units.qual.A;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.messaging.Message;
 import org.springframework.messaging.support.MessageBuilder;
 import org.springframework.statemachine.StateMachine;
@@ -22,6 +23,8 @@ public class AuditStateListener {
     @Resource
     private StateMachine<AuditState.AuditStateEnum, AuditState.AuditStateEvent> auditStateMachine;
 
+    private static final Logger log = LoggerFactory.getLogger(AuditStateListener.class);
+
     private synchronized boolean sendEvent(Mono<Message<AuditState.AuditStateEvent>> message) {
         AtomicBoolean result = new AtomicBoolean(false);
         try {
@@ -47,16 +50,20 @@ public class AuditStateListener {
                 result.set(true);
             }
         } catch (Exception e) {
-
+            log.error("AuditStateListener error", e);
         } finally {
             auditStateMachine.stopReactively();
             return result.get();
         }
     }
 
-    private StateResult callEvent(String auditStatus, AuditState.AuditStateEvent event) {
+    private StateResult callEvent(String auditStatus, AuditState.AuditStateEvent event, String userName, String userId) {
         StateResult stateResult = new StateResult();
-        Mono<Message<AuditState.AuditStateEvent>> message = Mono.just(MessageBuilder.withPayload(event).setHeader("entity",auditStatus).build());
+        Mono<Message<AuditState.AuditStateEvent>> message = Mono.just(MessageBuilder.withPayload(event)
+                .setHeader("entity",auditStatus)
+                .setHeader("userName",userName)
+                .setHeader("userId",userId)
+                .build());
         stateResult.setResult(sendEvent(message));
         stateResult.setCurrentState(auditStateMachine.getState().getId().getValue());
         return stateResult;
@@ -64,32 +71,38 @@ public class AuditStateListener {
 
     /**
      * 审核失败
+     *
      * @param cureentStatus
+     * @param userName
+     * @param userId
      * @return
      */
-    public StateResult auditFail(String cureentStatus) {
-        return callEvent(cureentStatus, AuditState.AuditStateEvent.AUDIT_FAIL_EVENT);
+    public StateResult auditFail(String cureentStatus, String userName, String userId) {
+        return callEvent(cureentStatus, AuditState.AuditStateEvent.AUDIT_FAIL_EVENT, userName, userId);
     }
 
     /**
      * 审核成功
+     *
      * @param currentStatus
+     * @param userName 审核用户
+     * @param userId 审核用户的序号
      * @return
      */
-    public StateResult auditSuccess(String currentStatus) {
-        return callEvent(currentStatus, AuditState.AuditStateEvent.AUDIT_SUCCESS_EVENT);
+    public StateResult auditSuccess(String currentStatus, String userName, String userId) {
+        return callEvent(currentStatus, AuditState.AuditStateEvent.AUDIT_SUCCESS_EVENT,userName ,userId);
     }
 
-    public StateResult statusChange(AuditState.AuditStateEnum auditStateEnum, String currentStatus) {
+    public StateResult statusChange(AuditState.AuditStateEnum auditStateEnum, String currentStatus, String userName, String userId) {
         StateResult stateResult = new StateResult();
         switch(auditStateEnum){
             //审核失败
             case FAIL_AUDIT -> {
-                stateResult = this.auditFail(currentStatus);
+                stateResult = this.auditFail(currentStatus, userName,userId );
             }
             //审核成功
             case SUCCESS_AUDIT -> {
-                stateResult = this.auditSuccess(currentStatus);
+                stateResult = this.auditSuccess(currentStatus,userName,userId);
             }
             default -> {
                 stateResult.setResult(false);

+ 2 - 1
tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml

@@ -158,7 +158,8 @@
         saa.account_name AS accountName ,
         saa.bank_card_num AS bankCardNum,
         saa.bank_name AS bankName,
-        saa.bank_num AS bankNum
+        saa.bank_num AS bankNum,
+        saa.auditing_time
         FROM sys_amount_auditing saa
         LEFT JOIN sys_user_jzg_info suji on saa.user_id = suji.user_id
         LEFT JOIN sys_user su on su.id = saa.user_id