Selaa lähdekoodia

资金模块-付款/收款/核销完核销金额回写收付款状态到出入库单据

huangx 7 vuotta sitten
vanhempi
commit
887e53ab79

+ 8 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/SubledgerMapper.java

@@ -24,4 +24,12 @@ public interface SubledgerMapper {
     int updateByPrimaryKey(Subledger record);
 
     List<Subledger> selectSubledgerBycondition(@Param("con") String con, @Param("companyId") Long companyId);
+
+    String selectPayView(@Param("companyid") Long companyid , @Param("code") String code , @Param("kind") String kind);
+
+    String selectRecView(@Param("companyid") Long companyid , @Param("code") String code , @Param("kind") String kind);
+
+
+    void updateProdInOut(@Param("companyid") Long companyid , @Param("code") String code , @Param("kind") String kind ,
+                         @Param("status") String status , @Param("statuscode") String statuscode);
 }

+ 45 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java

@@ -259,6 +259,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         for (Paybalancedetail detail: paybalancedetail) {
             Subledger subledger1 = new Subledger();
             Subledger nowSubledger = subledgerMapper.selectByPrimaryKey(detail.getPbd_slid());
+            if (nowSubledger == null){
+                throw new BizException(500, BizExceptionCode.SUBLEDGER_NOT_EXIS.getMessage());
+            }
             subledger1.setId(Long.valueOf(String.valueOf(detail.getPbd_slid())));
             Double yamount = nowSubledger.getSl_yamount()==null?new Double(0):nowSubledger.getSl_yamount();
             Double namount = nowSubledger.getSl_namount()==null?new Double(0):nowSubledger.getSl_namount();
@@ -282,6 +285,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         }else {
             statsinfoMapper.update(statsinfo);
         }
+        //更新出入库单据的付款状态
+        this.updateProdInoutStatus(id);
+
         DocBaseDTO baseDTO = getBaseDTOById(id);
 //        commonService.commonAudit(BillCodeSeq.PAYBALANCE.getCaller(),
 //                "pb_id="+baseDTO.getId(),"pb_status","pb_statuscode",
@@ -291,6 +297,39 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         return baseDTO;
     }
 
+    /**
+     * 根据来源单据更新出入库单据状态 C VC               N
+     * @param id
+     */
+    private void updateProdInoutStatus(Long id){
+        List<Paybalancedetail> list = paybalancedetailMapper.selectByPrimaryKey(Math.toIntExact(id));
+
+        if(list!=null && list.size()>0){
+            for (Paybalancedetail detail:list) {
+                String kind = detail.getPbd_slkind();
+                if(kind.equals("采购验收单") || kind.equals("采购验退单")) {
+                    String status = subledgerMapper.selectPayView(BaseContextHolder.getCompanyId(),detail.getPbd_slcode(),
+                            kind);
+                    String statuscode = "";
+                    if(status!=null){
+                        switch (status) {
+                            case  "已付款" :
+                                statuscode = Status.PAYALL.name();
+                            case "部分付款":
+                                statuscode = Status.PAYPART.name();
+                            default: statuscode = Status.PAYNONE.name();
+                        }
+                    }else{
+                        statuscode = "PAYNONE";
+                        status = "未付款";
+                    }
+                    subledgerMapper.updateProdInOut(BaseContextHolder.getCompanyId(),detail.getPbd_slcode(),
+                            kind,status,statuscode);
+                }
+            }
+        }
+    }
+
     @Override
     public void unAudit(int id) {
         //更新供应商资料
@@ -334,6 +373,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         for(Paybalancedetail detail: paybalancedetail) {
             Subledger subledger1 = new Subledger();
             Subledger nowSubledger = subledgerMapper.selectByPrimaryKey(detail.getPbd_slid());
+            if (nowSubledger == null){
+                throw new BizException(500, BizExceptionCode.SUBLEDGER_NOT_EXIS.getMessage());
+            }
             subledger1.setId(Long.valueOf(String.valueOf(detail.getPbd_slid())));
             Double yamount = nowSubledger.getSl_yamount()==null?new Double(0):nowSubledger.getSl_yamount();
             Double namount = nowSubledger.getSl_namount()==null?new Double(0):nowSubledger.getSl_namount();
@@ -370,6 +412,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         }else {
             statsinfoMapper.update(statsinfo);
         }
+
+        //更新出入库单据的付款状态
+        this.updateProdInoutStatus(Long.valueOf(id));
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
         messageLogService.unAudit(baseDTO);

+ 39 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java

@@ -325,6 +325,9 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         }else {
             statsinfoMapper.update(statsinfo);
         }
+        //更新出入库单据的收款状态
+        this.updateProdInoutStatus(id);
+
         DocBaseDTO baseDTO = getBaseDTOById(id);
 //        commonService.commonAudit(BillCodeSeq.RECBALANCE.getCaller(),
 //                "rb_id="+baseDTO.getId(),"rb_status","rb_statuscode",
@@ -334,6 +337,39 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         return baseDTO;
     }
 
+    /**
+     * 根据来源单据更新出入库单据状态 C VC               N
+     * @param id
+     */
+    private void updateProdInoutStatus(Long id){
+        List<Recbalancedetail> list = recbalancedetailMapper.selectByPrimaryKey(Math.toIntExact(id));
+
+        if(list!=null && list.size()>0){
+            for (Recbalancedetail detail:list) {
+                String kind = detail.getRbd_slkind();
+                if(kind.equals("出货单") || kind.equals("销售退货单")) {
+                    String status = subledgerMapper.selectRecView(BaseContextHolder.getCompanyId(),detail.getRbd_slcode(),
+                            kind);
+                    String statuscode = "";
+                    if(status!=null){
+                        switch (status) {
+                            case  "已收款" :
+                                statuscode = Status.RECALL.name();
+                            case "部分收款":
+                                statuscode = Status.RECPART.name();
+                            default: statuscode = Status.RECNONE.name();
+                        }
+                    }else{
+                        statuscode = "RECNONE";
+                        status = "未收款";
+                    }
+                    subledgerMapper.updateProdInOut(BaseContextHolder.getCompanyId(),detail.getRbd_slcode(),
+                            kind,status,statuscode);
+                }
+            }
+        }
+    }
+
     @Override
     public void unAudit(Long id) {
         //更新供应商资料
@@ -417,6 +453,9 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         }else {
             statsinfoMapper.update(statsinfo);
         }
+        //更新出入库单据的收款状态
+        this.updateProdInoutStatus(id);
+
         DocBaseDTO baseDTO = getBaseDTOById(id);
         //日志记录
         messageLogService.unAudit(baseDTO);

+ 96 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java

@@ -367,6 +367,91 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         }
     }
 
+    /**
+     * 根据来源单据更新出入库单据状态 C VC               N
+     * @param id
+     */
+    private void updateProdInoutStatus(Long id){
+        List<Verificationdet> list = verificationdetMapper.selectByFK(id);
+
+        List<Verificationdetail> list2 = verificationdetailMapper.selectByFK(id);
+        if(list!=null && list.size()>0){
+            for (Verificationdet detail:list) {
+                String kind = detail.getVd_slkind();
+                String status = subledgerMapper.selectPayView(BaseContextHolder.getCompanyId(),detail.getVd_slcode(),
+                        kind);
+                String statuscode = "";
+                if(kind.equals("采购验收单") || kind.equals("采购验退单")) {
+                    if(status!=null){
+                        switch (status) {
+                            case  "已付款" :
+                                statuscode = Status.PAYALL.name();
+                            case "部分付款":
+                                statuscode = Status.PAYPART.name();
+                            default: statuscode = Status.PAYNONE.name();
+                        }
+                    }else{
+                        statuscode = "PAYNONE";
+                        status = "未付款";
+                    }
+                }else if(kind.equals("出货单") || kind.equals("销售退货单")){
+                    if(status!=null){
+                        switch (status) {
+                            case  "已收款" :
+                                statuscode = Status.RECALL.name();
+                            case "部分收款":
+                                statuscode = Status.RECPART.name();
+                            default: statuscode = Status.RECNONE.name();
+                        }
+                    }else{
+                        statuscode = "RECNONE";
+                        status = "未收款";
+                    }
+                }
+                subledgerMapper.updateProdInOut(BaseContextHolder.getCompanyId(),detail.getVd_slkind(),
+                        kind,status,statuscode);
+            }
+        }
+
+        if(list2!=null && list2.size()>0){
+            for (Verificationdetail detail:list2) {
+                String kind = detail.getVcd_slkind();
+                String status = subledgerMapper.selectPayView(BaseContextHolder.getCompanyId(),detail.getVcd_slcode(),
+                        kind);
+                String statuscode = "";
+                if(kind.equals("采购验收单") || kind.equals("采购验退单")) {
+                    if(status!=null){
+                        switch (status) {
+                            case  "已付款" :
+                                statuscode = Status.PAYALL.name();
+                            case "部分付款":
+                                statuscode = Status.PAYPART.name();
+                            default: statuscode = Status.PAYNONE.name();
+                        }
+                    }else{
+                        statuscode = "PAYNONE";
+                        status = "未付款";
+                    }
+                }else if(kind.equals("出货单") || kind.equals("销售退货单")){
+                    if(status!=null){
+                        switch (status) {
+                            case  "已收款" :
+                                statuscode = Status.RECALL.name();
+                            case "部分收款":
+                                statuscode = Status.RECPART.name();
+                            default: statuscode = Status.RECNONE.name();
+                        }
+                    }else{
+                        statuscode = "RECNONE";
+                        status = "未收款";
+                    }
+                }
+                subledgerMapper.updateProdInOut(BaseContextHolder.getCompanyId(),detail.getVcd_slcode(),
+                        kind,status,statuscode);
+            }
+        }
+    }
+
     @Override
     public void delete(Long id) {
         if (null != id) {
@@ -484,6 +569,9 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
                 }
             }
         }
+        //更新出入库状态
+        this.updateProdInoutStatus(id);
+
         baseDTO.setId(id);
         baseDTO.setName(BillCodeSeq.VERIFICATION.getCaller());
         baseDTO.setCode(formData.getMain().getVc_code());
@@ -700,6 +788,10 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         verification.setUpdaterId(BaseContextHolder.getUserId());
         //更新存在字段
         verificationMapper.updateByPrimaryKeySelective(verification);
+
+        //更新出入库状态
+        this.updateProdInoutStatus(id);
+
         DocBaseDTO baseDTO = new DocBaseDTO();
         baseDTO.setId(id);
         baseDTO.setCode(code);
@@ -913,6 +1005,8 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
             verification.setUpdaterName(BaseContextHolder.getUserName());
             verification.setUpdateTime(new Date());
             verificationMapper.updateByPrimaryKeySelective(verification);
+
+            this.updateProdInoutStatus(id);
         }
     }
 
@@ -951,6 +1045,8 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
             verification.setUpdaterName(BaseContextHolder.getUserName());
             verification.setUpdateTime(new Date());
             verificationMapper.updateByPrimaryKeySelective(verification);
+
+            this.updateProdInoutStatus(id);
         }
     }
 

+ 16 - 0
applications/money/money-server/src/main/resources/mapper/SubledgerMapper.xml

@@ -249,4 +249,20 @@
         where sl_code = #{sl_code,jdbcType=VARCHAR}
     </select>
 
+  <select id="selectPayView" resultType="java.lang.String">
+    select case when balance=pi_total then '已付款' when pi_total>balance then '部分付款'
+    when balance=0 then '未付款' ELSE '未付款' end as status from payment_received_view where companyId = #{companyid}
+    and pbd_slcode = #{code} and pbd_slkind = #{kind}
+  </select>
+
+  <select id="selectRecView" resultType="java.lang.String">
+    select case when balance=pi_total then '已收款' when pi_total>balance then '部分收款'
+    when balance=0 then '未收款' ELSE '未收款' end as status from payment_received_view where companyId = #{companyid}
+    and pbd_slcode = #{code} and pbd_slkind = #{kind}
+  </select>
+
+  <update id="updateProdInOut">
+    update prodinout set pi_prstatuscode=#{statuscode},pi_prstatus=#{status} where
+    companyid=#{companyid} and pi_class=#{kind} and pi_inoutno=#{code}
+  </update>
 </mapper>