Răsfoiți Sursa

查询出单订单信息包含开票状态以及管理的发票序号

lipf 4 luni în urmă
părinte
comite
52d9fa7886

+ 8 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -278,4 +278,12 @@ public class InsPlyIncome extends BaseModel {
     @Schema(description = "订单费用表")
     private InsFeeOrders insFeeOrders;
 
+    @TableField(exist = false)
+    @Schema(description = "是否已经开票")
+    private String invoiceStatusName;
+
+    @TableField(exist = false)
+    @Schema(description = "订单关联的发票信息")
+    private String invoiceId;
+
 }

+ 10 - 4
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java

@@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
 
 @Tag(name="订单审核接口")
 @RestController
@@ -79,12 +80,12 @@ public class InsFeeAuditController {
     }
 
     /**
-     * 领取审核订单
+     * 领取待审核订单
      * @return
      */
     @PostMapping("/auditReceive")
     @Operation(summary = "领取审核订单")
-    public HttpResult auditReceive(@RequestParam("orderNo") String orderNo){
+    public HttpResult<String> auditReceive(@RequestParam("orderNo") String orderNo){
         insFeeAuditService.auditReceive(orderNo);
         return HttpResult.ok("领取订单完成");
     }
@@ -125,8 +126,13 @@ public class InsFeeAuditController {
             log.info("审核订单发生异常:param=[{}], e", JSONUtil.toJsonStr(param), e);
             return HttpResult.ok(e.getMessage());
         }
-
-        return HttpResult.ok("订单审核成功");
+        if("1".equals(Objects.toString(param.getAuditStatus(),"") )){
+            return HttpResult.ok("订单审核成功");
+        }else if("2".equals(Objects.toString(param.getAuditStatus(),""))){
+            return HttpResult.ok("订单审核驳回成功");
+        }else{
+            return HttpResult.ok("订单审核状态不支持。"+param.getAuditStatus());
+        }
     }
 
     /**

+ 2 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java

@@ -43,7 +43,8 @@ public interface InsFeeAuditService extends IService<InsFeeAudit> {
 
     /**
      * 领取审核订单
-     * @param orderNo
+     *
+     * @param orderNo 订单编号
      */
     void auditReceive(String orderNo);
 

+ 21 - 11
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java

@@ -230,8 +230,14 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         return detailVo;
     }
 
+    /**
+     * 领取审核订单
+     *
+     * @param orderNo 订单编号
+     */
     @Override
     public void auditReceive(String orderNo) {
+        log.info("领取待审核订单。 orderNo=[{}]",orderNo);
         AssertionUtils.isFail(this.isLock(orderNo),"订单已被领取");
         InsFeeAudit audit = this.getById(orderNo);
         if(audit.getAuditStatus() > 0){
@@ -296,8 +302,11 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
     @Override
     public Boolean isLock(String orderNo) {
-        RBucket<Object> bucket = redissonClient.getBucket(ORDER_LOCK_PREFIX + orderNo);
-        return bucket.isExists();
+        String key = ORDER_LOCK_PREFIX + orderNo;
+        RBucket<Object> bucket = redissonClient.getBucket(key);
+        boolean exists = bucket.isExists();
+        log.info("订单锁定状态:[{}]-[{}]",key,exists);
+        return exists;
     }
 
     @Override
@@ -554,9 +563,18 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
             List<SysUserAccountIncomeLog>builderIncomeLog = this.builderIncomeLog(param.getOrderNo(),feeOrders,userAccount,distributor1,distributor2,distributor3);
             HttpResult result2 = orgClient.addUserAccountIncomeLog(builderIncomeLog);
             AssertionUtils.isFail(result2.getCode() != 200,"账户记录添加失败,审核失败");
+
+            //合伙人佣金比例
+            try {
+                partnerClient.extractFeeSave(orders.getQuoteNo(),orders.getId());
+            }catch (Exception e){
+                log.error("保存合伙人佣金计算异常:{}",e.getMessage(), e);
+            }
         }else{
+            log.info("订单审核驳回:param=[{}]", JSONUtil.toJsonStr(param));
             StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.FAIL_AUDIT,audit.getAuditStatus()+"");
-            audit.setAuditStatus(stateFailResult.getCurrentState());
+            log.error("订单审核驳回:stateFailResult=[{}]", JSONUtil.toJsonStr(stateFailResult));
+            audit.setAuditStatus(param.getAuditStatus());
         }
         audit.setRefuse(param.getRefuse());
         audit.setIsProblem(0);
@@ -564,14 +582,6 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         audit.setAuditUser(userName);
         audit.setAuditTime(LocalDateTime.now());
         this.updateById(audit);
-
-        //合伙人佣金比例
-        try {
-            partnerClient.extractFeeSave(orders.getQuoteNo(),orders.getId());
-        }catch (Exception e){
-            log.error("保存合伙人佣金计算异常:{}",e.getMessage(), e);
-        }
-
     }
 
     /**

+ 5 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/state/listener/AuditStateListener.java

@@ -1,10 +1,11 @@
 package com.jzg.quotation.summary.state.listener;
 
-import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.summary.state.AuditState;
 import jakarta.annotation.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.messaging.Message;
 import org.springframework.messaging.support.MessageBuilder;
 import org.springframework.statemachine.StateMachine;
@@ -19,6 +20,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 @Component
 public class AuditStateListener {
 
+    private static final Logger log = LoggerFactory.getLogger(AuditStateListener.class);
+
     @Resource
     private StateMachine<AuditState.AuditStateEnum, AuditState.AuditStateEvent> costStateMachine;
 
@@ -47,7 +50,7 @@ public class AuditStateListener {
                 result.set(true);
             }
         } catch (Exception e) {
-
+            log.error("sendEvent发生异常",e);
         } finally {
             costStateMachine.stopReactively();
             return result.get();

+ 7 - 4
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -168,11 +168,14 @@ public class ReceivableController {
 
     @PostMapping("invoicingCheck")
     @Operation(summary = "开票检测")
-    public HttpResult invoicingCheck(@RequestBody InvoicingVo invoicingVo) {
+    public HttpResult<String> invoicingCheck(@RequestBody InvoicingVo invoicingVo) {
         boolean result = receivableService.invoicingCheck(invoicingVo);
-        // 查询订单的应收跟单金额
-
-        return result ? HttpResult.ok("无占用") : HttpResult.error("有订单占用");
+        if(result){
+            return HttpResult.ok("无占用");
+        }else{
+            List<String> invoiceIds = receivableService.queryIncomeBindInvoice(invoicingVo);
+            return HttpResult.error("订单已开票。发票序号是"+ invoiceIds.toString());
+        }
     }
 
     @PostMapping("getReceivableCompany")

+ 10 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.finance.dto.*;
 import com.jzg.commons.entity.finance.po.InsPlyIncome;
+import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoice;
+import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceLink;
 import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceSettlement;
 import com.jzg.commons.entity.finance.vo.InvoiceRecordQueryVo;
 import com.jzg.commons.entity.finance.vo.InvoiceRecordResult;
@@ -149,6 +151,14 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
     List<InvoiceAmountDto> getSuperviseAmount();
     Integer invoicingCheck(@Param("invoicingVo") InvoicingVo invoicingVo);
 
+    /**
+     * 查询订单绑定发票信息
+     *
+     * @author lipf
+     * @date 2026/5/21 11:57
+     */
+    List<InsPlyIncomeInvoiceLink> queryIncomeBindInvoice(@Param("invoicingVo") InvoicingVo invoicingVo);
+
     /**
      * 对接人结算报表
      * @param page

+ 10 - 1
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -294,4 +294,13 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     HttpResult<List<InsPlyIncome>> queryIncomeDatas(IncomeDataVO incomeDataVO);
 
     Boolean deleteInvoiceById(String id);
-}
+
+    /**
+     * 查询订单绑定的发票信息
+     *
+     * @return List<InsPlyIncomeInvoice> 订单绑定的发票信息
+     * @author lipf
+     * @date 2026/5/21 11:59
+     */
+    List<String> queryIncomeBindInvoice(InvoicingVo invoicingVo);
+    }

+ 31 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -397,6 +397,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      */
     List<InsPlyIncome> fillOtherInfo(List<InsPlyIncome> records){
         if(CollUtil.isNotEmpty(records)){
+            List<String> incomeIds = records.stream().map(InsPlyIncome::getId).toList();
+            InvoicingVo invoicingVo = new InvoicingVo();
+            invoicingVo.setIncomeIds(incomeIds);
+            List<InsPlyIncomeInvoiceLink> links = baseMapper.queryIncomeBindInvoice(invoicingVo);
+            Map<String, String> income2InvoceIdMap = links.stream()
+                    .filter(action -> StrUtil.isNotEmpty(action.getIncomeId()))
+                    .collect(Collectors.toMap(InsPlyIncomeInvoiceLink::getIncomeId, InsPlyIncomeInvoiceLink::getInvoiceId, (oleItem, newItem) -> oleItem));
+
+
             Map<String, String> typeAttrMaps = sysUserJzgInfoSalesmanService.queryYwyTypeAttrMap();
             records.forEach(insPlyIncome -> {
                 if("0".equals(insPlyIncome.getSettlementStatus())){
@@ -413,6 +422,10 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 // 费用信息
                 List<InsFeeOrders> insFeeOrderByOrderNo = insFeeOrdersClient.getInsFeeOrderByOrderNo(insPlyIncome.getOrderNo());
                 insPlyIncome.setInsFeeOrders(CollUtil.getFirst(insFeeOrderByOrderNo));
+
+                String invoiceId = income2InvoceIdMap.get(insPlyIncome.getId());
+                insPlyIncome.setInvoiceStatusName(StrUtil.isEmpty(invoiceId)? "未开票":"已开票");
+                insPlyIncome.setInvoiceId(invoiceId);
             });
         }
         return records;
@@ -423,6 +436,24 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return baseMapper.getReceivableList(receivableQueryVo);
     }
 
+
+    /**
+     * 查询订单绑定的发票信息
+     *
+     * @param invoicingVo
+     * @return List<String> 订单绑定的发票号
+     * @author lipf
+     * @date 2026/5/21 11:59
+     */
+    @Override
+    public List<String> queryIncomeBindInvoice(InvoicingVo invoicingVo) {
+        log.info("查询订单绑定的发票信息:invoicingVo=[{}]", JSONUtil.toJsonStr(invoicingVo));
+        List<InsPlyIncomeInvoiceLink> links = baseMapper.queryIncomeBindInvoice(invoicingVo);
+        List<String> invoiceIds = links.stream().map(InsPlyIncomeInvoiceLink::getInvoiceId).distinct().toList();
+        log.info("查询订单绑定的发票信息:invoicingVo=[{}].invoiceIds=[{}]", JSONUtil.toJsonStr(invoicingVo), JSONUtil.toJsonStr(invoiceIds));
+        return invoiceIds;
+    }
+
     @Override
     public boolean invoicingCheck(InvoicingVo invoicingVo) {
         Integer count = baseMapper.invoicingCheck(invoicingVo);

+ 11 - 0
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -1039,6 +1039,17 @@
             </foreach>
     </select>
 
+    <!-- 查询订单绑定的发票信息 lipf 2026年5月21日11:56:19 -->
+    <select id="queryIncomeBindInvoice" resultType="com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceLink">
+        SELECT  *  FROM
+        ins_ply_income_invoice_link
+        where
+        income_id IN
+        <foreach collection="invoicingVo.incomeIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
     <select id="getJqSumReceivable" resultType="String">
         SELECT
             sum( jq_commission_premium ) AS receivable_premium