Browse Source

feat(prodIoPay): 更新付款记录同步功能;增加sql语句相关;保存传入数据

hejq 7 years ago
parent
commit
0499271ec3

+ 17 - 1
db/ddl.sql

@@ -172,4 +172,20 @@ alter table `make$returnitem`
 -- 货款调账
 alter table `purc$apbilladjustment`
   add column aa_payment double comment '付款金额',
-  add column aa_paydate datetime comment '付款日期';
+  add column aa_paydate datetime comment '付款日期';
+
+-- date: 2019-01-03 15:48
+-- author: hejq
+-- content: 增加出入库单付款数据更新传输记录
+create table `prodiopay` (
+  `pi_id` bigint(20) not null auto_increment,
+  `pi_code` varchar(100) default null COMMENT '出入库单号',
+  `pi_class` varchar(100) default null COMMENT '出库单类型',
+  `pi_detno` smallint(6) default null COMMENT '明细序号',
+  `pi_enuu` bigint(20) default null COMMENT '录入企业UU',
+  `pi_amount` double default null COMMENT '付款金额',
+  `pi_source_date` datetime default null COMMENT '付款日期',
+  `pi_source_id` bigint(20) default null COMMENT 'erp明细id',
+  `pi_date` datetime default null COMMENT '录入日期',
+  primary key (`pi_id`)
+) ENGINE=InnoDB auto_increment=1 default CHARSET=utf8;

+ 9 - 3
src/main/java/com/uas/platform/b2b/erp/controller/ProdIoPayController.java

@@ -4,12 +4,15 @@ import com.uas.platform.b2b.erp.model.ProdIoPay;
 import com.uas.platform.b2b.erp.service.ProdIoPayService;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.*;
+import java.net.*;
 import java.util.List;
 
 /**
@@ -30,11 +33,14 @@ public class ProdIoPayController {
     /**
      * 客户付款记录同步到B2B更新
      *
-     * @param payloadList 付款数据
+     * @param data 付款数据
      */
     @RequestMapping(method = RequestMethod.POST)
-    public void updateProdIoPay(@RequestBody List<ProdIoPay> payloadList) {
+    public void updateProdIoPay(@RequestParam("data") String data) throws UnsupportedEncodingException {
+        String jsonStr = URLDecoder.decode(data, "UTF-8");
+        List<ProdIoPay> payloadList = FlexJsonUtils.fromJsonArray(jsonStr, ProdIoPay.class);
         payService.saveAndUpdate(payloadList);
+        LOGGER.log("出入库单付款记录更新", "批量更新付款记录", payloadList.size());
     }
 
 }

+ 16 - 0
src/main/java/com/uas/platform/b2b/erp/dao/ProdIoPayDao.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2b.erp.dao;
+
+import com.uas.platform.b2b.erp.model.ProdIoPay;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 出入库单据付款记录
+ *
+ * @author hejq
+ * @date 2019-01-03 16:25
+ */
+@Repository
+public interface ProdIoPayDao extends JpaSpecificationExecutor<ProdIoPay>,JpaRepository<ProdIoPay, Long> {
+}

+ 40 - 5
src/main/java/com/uas/platform/b2b/erp/model/ProdIoPay.java

@@ -3,6 +3,13 @@ package com.uas.platform.b2b.erp.model;
 
 import lombok.Data;
 
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.*;
 import java.util.Date;
 
 /**
@@ -12,42 +19,70 @@ import java.util.Date;
  * @date 2019-01-03 10:31
  */
 @Data
-public class ProdIoPay {
+@Table(name = "prodiopay")
+@Entity
+public class ProdIoPay implements Serializable {
+
+    /**
+     * serialVersionUID
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @Column(name = "pi_id")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
 
     /**
      * 单据编号
      */
+    @Column(name = "pi_code")
     private String piCode;
 
     /**
      * 单据类型
      */
+    @Column(name = "pi_class")
     private String piClass;
 
     /**
      * 明细行号
      */
+    @Column(name = "pi_detno")
     private Short piDetNo;
 
     /**
      * 付款金额
      */
+    @Column(name = "pi_amount")
     private Double amount;
 
     /**
      * 付款日期
      */
+    @Column(name = "pi_source_date")
     private Date inDate;
 
     /**
-     * 上传状态
+     * 明细id
      */
-    private String status;
+    @Column(name = "pi_source_id")
+    private Long pdId;
 
     /**
-     * 明细id
+     * 录入日期
      */
-    private Long pdId;
+    @Column(name = "pi_date")
+    private Date date;
+
+    /**
+     * 录入企业UU
+     */
+    @Column(name = "pi_enuu")
+    private Long enUU;
 
     public static final String SALE_ACCEPT = "采购验收单";
 

+ 142 - 11
src/main/java/com/uas/platform/b2b/erp/service/impl/ProdIoPayServiceImpl.java

@@ -1,14 +1,16 @@
 package com.uas.platform.b2b.erp.service.impl;
 
 import com.uas.platform.b2b.dao.CommonDao;
+import com.uas.platform.b2b.erp.dao.ProdIoPayDao;
 import com.uas.platform.b2b.erp.model.ProdIoPay;
 import com.uas.platform.b2b.erp.service.ProdIoPayService;
 import com.uas.platform.b2b.support.SystemSession;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -25,6 +27,9 @@ public class ProdIoPayServiceImpl implements ProdIoPayService {
     @Autowired
     private CommonDao commonDao;
 
+    @Autowired
+    private ProdIoPayDao payDao;
+
     /**
      * 更新出入库单付款金额
      *
@@ -37,14 +42,140 @@ public class ProdIoPayServiceImpl implements ProdIoPayService {
         classSet.forEach(clazz -> {
             List<ProdIoPay> filterPayList = payList.stream().filter(pay -> clazz.equals(pay.getPiClass())).collect(Collectors.toList());
             Long enUU = SystemSession.getUser().getEnterprise().getUu();
-            if (clazz.equals(ProdIoPay.SALE_ACCEPT)) {
-                sqlList.addAll(updateSaleAccept(filterPayList, enUU));
-            } else if (clazz.equals(ProdIoPay.SALE_RETURN)) {
-                sqlList.addAll(updateSaleReturn(filterPayList, enUU));
-            } else if (clazz.equals(ProdIoPay.SALE_BAD_IN)) {
-                sqlList.addAll(updateSaleBadIn(filterPayList, enUU));
+            switch (clazz) {
+                case ProdIoPay.SALE_ACCEPT:
+                    sqlList.addAll(updateSaleAccept(filterPayList, enUU));
+                    break;
+                case ProdIoPay.SALE_RETURN:
+                    sqlList.addAll(updateSaleReturn(filterPayList, enUU));
+                    break;
+                case ProdIoPay.SALE_BAD_IN:
+                    sqlList.addAll(updateSaleBadIn(filterPayList, enUU));
+                    break;
+                case ProdIoPay.SALE_BAD_OUT:
+                    sqlList.addAll(updateSaleBadOut(filterPayList, enUU));
+                    break;
+                case ProdIoPay.MAKE_ACCEPT:
+                    sqlList.addAll(updateMakeAccept(filterPayList, enUU));
+                    break;
+                case ProdIoPay.MAKE_RETURN:
+                    sqlList.addAll(updateMakeReturn(filterPayList, enUU));
+                    break;
+                case ProdIoPay.ADJUSTMENT:
+                    sqlList.addAll(updateAdjustment(filterPayList, enUU));
+                    break;
+                default:
+                    break;
+            }
+        });
+        if (!CollectionUtils.isEmpty(sqlList)) {
+            try {
+                commonDao.getJdbcTemplate().batchUpdate(sqlList.toArray(new String[sqlList.size()]));
+                savePayList(payList);
+            } catch (RuntimeException e) {
+                throw new RuntimeException("付款记录更新失败; " + e.getMessage());
             }
+        }
+    }
+
+    /**
+     * 保存付款记录
+     *
+     * @param payList 付款记录
+     */
+    private void savePayList(List<ProdIoPay> payList) {
+        payList.forEach(pay -> {
+            pay.setEnUU(SystemSession.getUser().getEnterprise().getUu());
+            pay.setDate(new Date(System.currentTimeMillis()));
+        });
+        payDao.save(payList);
+    }
+
+    /**
+     * 更新货款调账付款相关
+     *
+     * @param payList 货款调账付款数据
+     * @param enUU 企业UU(客户方)
+     * @return sqlList
+     */
+    private List<String> updateAdjustment(List<ProdIoPay> payList, Long enUU) {
+        List<String> sqlList = new ArrayList<>();
+        payList.forEach(pay -> {
+            String sql = "update purc$apbilladjustment" +
+                " set aa_payment = " + pay.getAmount() + "," +
+                " aa_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
+                " where aa_custuu = " + enUU +
+                " and aa_ordercode = '" + pay.getPiCode() + "'" +
+                " and aa_detno = " + pay.getPiDetNo();
+            sqlList.add(sql);
         });
+        return sqlList;
+    }
+
+    /**
+     * 更新委外验收单付款相关
+     *
+     * @param payList 委外验收单付款数据
+     * @param enUU 企业UU(客户方)
+     * @return sqlList
+     */
+    private List<String> updateMakeReturn(List<ProdIoPay> payList, Long enUU) {
+        List<String> sqlList = new ArrayList<>();
+        payList.forEach(pay -> {
+            String sql = "update make$returnitem" +
+                " right join make$return on mri_paid = mr_id" +
+                " set mri_payment = " + pay.getAmount() + "," +
+                " mri_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
+                " where mr_enuu = " + enUU +
+                " and mr_code = '" + pay.getPiCode() + "'" +
+                " and mri_number = " + pay.getPiDetNo();
+            sqlList.add(sql);
+        });
+        return sqlList;
+    }
+
+    /**
+     * 更新委外验收单付款相关
+     *
+     * @param payList 委外验收单付款数据
+     * @param enUU 企业UU(客户方)
+     * @return sqlList
+     */
+    private List<String> updateMakeAccept(List<ProdIoPay> payList, Long enUU) {
+        List<String> sqlList = new ArrayList<>();
+        payList.forEach(pay -> {
+            String sql = "update make$acceptitem" +
+                " right join make$accept on mai_paid = ma_id" +
+                " set mai_payment = " + pay.getAmount() + "," +
+                " mai_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
+                " where ma_enuu = " + enUU +
+                " and ma_code = '" + pay.getPiCode() + "'" +
+                " and mai_number = " + pay.getPiDetNo();
+            sqlList.add(sql);
+        });
+        return sqlList;
+    }
+
+    /**
+     * 更新不良品出库单付款相关
+     *
+     * @param payList 不良品入库单付款数据
+     * @param enUU 企业UU(客户方)
+     * @return sqlList
+     */
+    private List<String> updateSaleBadOut(List<ProdIoPay> payList, Long enUU) {
+        List<String> sqlList = new ArrayList<>();
+        payList.forEach(pay -> {
+            String sql = "update purc$badoutitem" +
+                " right join purc$badout on poi_poid = po_id" +
+                " set poi_payment = " + pay.getAmount() + "," +
+                " poi_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
+                " where po_enuu = " + enUU +
+                " and po_code = '" + pay.getPiCode() + "'" +
+                " and poi_number = " + pay.getPiDetNo();
+            sqlList.add(sql);
+        });
+        return sqlList;
     }
 
     /**
@@ -58,9 +189,9 @@ public class ProdIoPayServiceImpl implements ProdIoPayService {
         List<String> sqlList = new ArrayList<>();
         payList.forEach(pay -> {
             String sql = "update purc$badinitem" +
-                " right join purc$badin on pbi_pbid = pbi_id" +
+                " right join purc$badin on pbi_pbid = pb_id" +
                 " set pbi_payment = " + pay.getAmount() + "," +
-                " pbi_paydate = " + pay.getInDate() +
+                " pbi_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
                 " where pb_enuu = " + enUU +
                 " and pb_code = '" + pay.getPiCode() + "'" +
                 " and pbi_number = " + pay.getPiDetNo();
@@ -82,7 +213,7 @@ public class ProdIoPayServiceImpl implements ProdIoPayService {
             String sql = "update purc$returnitem" +
                 " right join purc$return on pri_prid = pr_id" +
                 " set pri_payment = " + pay.getAmount() + "," +
-                " pri_paydate = " + pay.getInDate() +
+                " pri_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
                 " where pr_enuu = " + enUU +
                 " and purc$return.pr_code = '" + pay.getPiCode() + "'" +
                 " and pri_number = " + pay.getPiDetNo();
@@ -104,7 +235,7 @@ public class ProdIoPayServiceImpl implements ProdIoPayService {
             String sql = "update purc$acceptitem" +
                 " right join purc$accept on pai_paid = pa_id" +
                 " set pai_payment = " + pay.getAmount() + "," +
-                " pai_paydate = " + pay.getInDate() +
+                " pai_paydate = '" + new java.sql.Date(pay.getInDate().getTime()) + "'" +
                 " where pa_enuu = " + enUU +
                 " and pa_code = '" + pay.getPiCode() + "'" +
                 " and pai_number = " + pay.getPiDetNo();