Jelajahi Sumber

1.更新销售合同回款明细

WoNiu 4 tahun lalu
induk
melakukan
19c3ff334e

+ 1 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunClientDao.java

@@ -11,4 +11,5 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface ChuanyunClientDao extends GalaxisRepository<ChuanyunClientDO,String> {
+    ChuanyunClientDO findByName(String name);
 }

+ 2 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunCompanyDao.java

@@ -18,4 +18,6 @@ public interface ChuanyunCompanyDao extends GalaxisRepository<ChuanyunCompanyDO,
      * @return
      */
     ChuanyunCompanyDO findByObjectId(String id);
+
+    ChuanyunCompanyDO findByCompanyName(String companyname);
 }

+ 28 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesCollectionDetailDTO.java

@@ -0,0 +1,28 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class ChuanyunSalesCollectionDetailDTO {
+
+    private ChuanyunSalesCollectionDetailPrimaryKey chuanyunSalesCollectionDetailPrimaryKey;
+
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime plandate;
+
+    private BigDecimal planaccount;
+
+    private BigDecimal planpercent;
+
+    private String desnote;
+
+    private String accountnote;
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesCollectionDetailPrimaryKey.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+@Data
+public class ChuanyunSalesCollectionDetailPrimaryKey {
+
+    private String docno;
+
+    private String doclineno;
+}

+ 1 - 1
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractOfferDTO.java

@@ -12,7 +12,7 @@ public class ChuanyunSalesContractOfferDTO {
 
     private String itemname;
 
-    private String qty;
+    private BigDecimal qty;
 
     private BigDecimal orderprice;
 

+ 16 - 0
src/main/java/com/galaxis/manatee/manager/ClawFeign.java

@@ -103,6 +103,22 @@ public interface ClawFeign {
     PageDTO<ChuanyunSalesContractOfferDTO> findChuanyunSalesContractOffer(@RequestParam Map<String,String> map);
 
     /**
+     * 查询销售合同回款明细
+     * @param map
+     * @return
+     */
+    @GetMapping("/salescollection/findAllByParameters")
+    PageDTO<ChuanyunSalesCollectionDetailDTO> findChuanyunSalesCollectionDetail(@RequestParam Map<String,String> map);
+
+    /**
+     * 根据合同号查询回款明细
+     * @param docno
+     * @return
+     */
+    @GetMapping("/salescollection/findallbydocno")
+    List<ChuanyunSalesCollectionDetailDTO> findCollectionByDocno(@RequestParam String docno);
+
+    /**
      * 根据合同号查询报价
      * @param docno
      * @return

+ 180 - 40
src/main/java/com/galaxis/manatee/task/U9InfoTask.java

@@ -22,14 +22,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
 import javax.persistence.OneToMany;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 @Slf4j
@@ -39,18 +37,22 @@ public class U9InfoTask {
     private final ChuanYunManager chuanYunManager;
     private final ClawFeign clawFeign;
     private final ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao;
+    private final ChuanyunCompanyDao chuanyunCompanyDao;
+    private final ChuanyunClientDao chuanyunClientDao;
 
 
-    public U9InfoTask(ChuanYunManager chuanYunManager, ClawFeign clawFeign, ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao) {
+    public U9InfoTask(ChuanYunManager chuanYunManager, ClawFeign clawFeign, ChuanyunBudgetStatisticsDao chuanyunBudgetStatisticsDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunClientDao chuanyunClientDao) {
         this.chuanYunManager = chuanYunManager;
         this.clawFeign = clawFeign;
         this.chuanyunBudgetStatisticsDao = chuanyunBudgetStatisticsDao;
-
+        this.chuanyunCompanyDao = chuanyunCompanyDao;
+        this.chuanyunClientDao = chuanyunClientDao;
     }
 
     @Scheduled(fixedDelay = 3600000L)
     private void getDataFromU9() {
-//        saveSalesContract();
+//        saveSalesCollection();
+        saveSalesContract();
         savePurCost();
         saveCashFlow();
         saveSupplier();
@@ -134,49 +136,132 @@ public class U9InfoTask {
             List<ChuanyunSalesContractDTO> list = pageInfo.getContent();
             list.forEach(chuanyunSalesContractDTO -> {
                 try {
-                SalesContractDTO salesContractDTO = new SalesContractDTO(chuanyunSalesContractDTO);
-                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
-                String newDate = dateTimeFormatter.format(chuanyunSalesContractDTO.getBusinessdate());
-                LocalDateTime dt = LocalDateTime.parse(newDate,dateTimeFormatter);
-                salesContractDTO.setSignedDateTime(dt);
-                if (chuanyunSalesContractDTO.getReceivedate()!=null){
-                    String receiveDate = dateTimeFormatter.format(chuanyunSalesContractDTO.getReceivedate());
-                    LocalDateTime dt1 = LocalDateTime.parse(receiveDate,dateTimeFormatter);
-                    salesContractDTO.setReceivedDateTime(dt1);
-                }
-                List<ChuanyunSalesContractOfferDTO> offerDTOList = clawFeign.findAllByDocno(chuanyunSalesContractDTO.getDocno());
-                List<SalesContractOfferDTO> salesContractOfferDTOList = new ArrayList<>();
-                offerDTOList.forEach(chuanyunSalesContractOfferDTO -> {
-                    SalesContractOfferDTO salesContractOfferDTO = new SalesContractOfferDTO(chuanyunSalesContractOfferDTO);
-                    salesContractOfferDTOList.add(salesContractOfferDTO);
-                });
-                salesContractDTO.setChuanyunSaleContractDetailDOList(salesContractOfferDTOList);
-                var purcostString=objectMapper.writeValueAsString(salesContractDTO);
-                List<String> macthers = new ArrayList<>();
-                macthers.add("F0000001_2,"+chuanyunSalesContractDTO.getDocno());
-                var filter= Filter.instance(0,1,true,"And",macthers);
-                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunSaleContractDO.SCHEMA_CODE,filter);
-                ChuanyunSaveDTO chuanyunSaveDTO;
-                if (chuanyunFindAllResponse.getReturnData() == null) {
+                    if (!StringUtils.isEmpty(chuanyunSalesContractDTO.getOrgname())){
+                        chuanyunSalesContractDTO.setOrgname(chuanyunCompanyDao.findByCompanyName(chuanyunSalesContractDTO.getOrgname()).getObjectId());
+                    }
+                    if (StringUtils.isEmpty(chuanyunSalesContractDTO.getCustname())){
+                        chuanyunSalesContractDTO.setCustname(chuanyunClientDao.findByName(chuanyunSalesContractDTO.getCustname()).getObjectId());
+                    }
+                    SalesContractDTO salesContractDTO = new SalesContractDTO(chuanyunSalesContractDTO);
+                    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
+                    String newDate = dateTimeFormatter.format(chuanyunSalesContractDTO.getBusinessdate());
+                    LocalDateTime dt = LocalDateTime.parse(newDate,dateTimeFormatter);
+                    salesContractDTO.setSignedDateTime(dt);
+                    if (chuanyunSalesContractDTO.getReceivedate()!=null){
+                        String receiveDate = dateTimeFormatter.format(chuanyunSalesContractDTO.getReceivedate());
+                        LocalDateTime dt1 = LocalDateTime.parse(receiveDate,dateTimeFormatter);
+                        salesContractDTO.setReceivedDateTime(dt1);
+                    }
+                    List<String> projectmatchers = new ArrayList<>();
+                    projectmatchers.add("F0000002_2,"+chuanyunSalesContractDTO.getProjectcode());
+                    var projectfilter= Filter.instance(0,Integer.MAX_VALUE,true,"And",projectmatchers);
+                    var chuanyunFindResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,projectfilter);
+                    if (chuanyunFindResponse.getReturnData()!=null){
+                        List<ChuanyunGroupProjectDO> projectresult=objectMapper.convertValue(chuanyunFindResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        salesContractDTO.setProjectId(projectresult.get(0).getObjectId());
+                    }
+                    List<ChuanyunSalesContractOfferDTO> offerDTOList = clawFeign.findAllByDocno(chuanyunSalesContractDTO.getDocno());
+                    List<SalesContractOfferDTO> salesContractOfferDTOList = new ArrayList<>();
+                    offerDTOList.forEach(chuanyunSalesContractOfferDTO -> {
+                        SalesContractOfferDTO salesContractOfferDTO = new SalesContractOfferDTO(chuanyunSalesContractOfferDTO);
+                        salesContractOfferDTOList.add(salesContractOfferDTO);
+                    });
+                    salesContractDTO.setChuanyunSaleContractDetailDOList(salesContractOfferDTOList);
+                    var purcostString=objectMapper.writeValueAsString(salesContractDTO);
+                    List<String> macthers = new ArrayList<>();
+                    macthers.add("F0000001_2,"+chuanyunSalesContractDTO.getDocno());
+                    var filter= Filter.instance(0,1,true,"And",macthers);
+                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunSaleContractDO.SCHEMA_CODE,filter);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData() != null) {
+                        List<ChuanyunSaleContractDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        chuanyunSaveDTO=chuanYunManager.delete(ChuanyunSaleContractDO.SCHEMA_CODE,result.get(0).getObjectId());
+                    }
                     chuanyunSaveDTO =chuanYunManager.save(ChuanyunSaleContractDO.SCHEMA_CODE,purcostString,true);
-                }else {
-                    List<ChuanyunSaleContractDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                    //更新
-                    chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectCashFlowDO.SCHEMA_CODE,result.get(0).getObjectId(),purcostString);
-                }
                     if(chuanyunSaveDTO.getSuccessful()){
                         log.info("新增销售合同管理成功");
                     }else{
                         log.warn("新增销售合同管理失败");
                     }
-                } catch (JsonProcessingException | BigSizeException e) {
-                    e.printStackTrace();
-                }
+                    } catch (JsonProcessingException | BigSizeException e) {
+                        e.printStackTrace();
+                    }
             });
         }
     }
 
     /**
+     * 更新销售合同回款明细
+     */
+    private void saveSalesCollection(){
+        var objectMapper=new ObjectMapper();
+        var start=0;
+        var totalCount=0L;
+        var flag=true;
+        while (flag){
+            try {
+                var filter= Filter.instance(start,start+pageSize,true);
+                //获取销售合同管理
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunSaleContractDO.SCHEMA_CODE,filter);
+                if(chuanyunFindAllResponse.getReturnData()==null){
+                    flag=false;
+                    continue;
+                }
+                if(chuanyunFindAllResponse.getReturnData().getTotalCount()>=start+pageSize){
+                    start+=pageSize;
+                }else{
+                    flag=false;
+                }
+                List<ChuanyunSaleContractDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                totalCount=chuanyunFindAllResponse.getReturnData().getTotalCount();
+                result.forEach(chuanyunSaleContractDO -> {
+                    //根据合同号获取回款明细
+                    List<ChuanyunSalesCollectionDetailDTO> collectionDetailDTOList = clawFeign.findCollectionByDocno(chuanyunSaleContractDO.getContractCode());
+                    if (collectionDetailDTOList!=null&&collectionDetailDTOList.size()>0){
+                        try {
+                            SalesCollectionDTO salesCollectionDTO = new SalesCollectionDTO();
+                            salesCollectionDTO.setSaleContractId(chuanyunSaleContractDO.getObjectId());
+                            Set<ReceivePlanDTO> receivePlanDTOS = new HashSet<>();
+                            collectionDetailDTOList.forEach(chuanyunSalesCollectionDetailDTO -> {
+                                ReceivePlanDTO receivePlanDTO = new ReceivePlanDTO(chuanyunSalesCollectionDetailDTO);
+                                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
+                                String newDate = dateTimeFormatter.format(chuanyunSalesCollectionDetailDTO.getPlandate());
+                                LocalDateTime dt = LocalDateTime.parse(newDate,dateTimeFormatter);
+                                receivePlanDTO.setPlanDateTime(dt);
+                                receivePlanDTOS.add(receivePlanDTO);
+                            });
+                            salesCollectionDTO.setPlanList(receivePlanDTOS);
+                            var purcostString=objectMapper.writeValueAsString(salesCollectionDTO);
+                            //根据合同号新增回款明细
+                            List<String> macthers = new ArrayList<>();
+                            macthers.add("F0000002_2,"+chuanyunSaleContractDO.getContractCode());
+                            var newfilter= Filter.instance(0,1,true,"And",macthers);
+                            var newchuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunPaymentReceiveDO.SCHEMA_CODE,newfilter);
+                            ChuanyunSaveDTO chuanyunSaveDTO;
+                            if (newchuanyunFindAllResponse.getReturnData() != null) {
+                                List<ChuanyunPaymentReceiveDO> receiveDOSresult=objectMapper.convertValue(newchuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                                chuanyunSaveDTO=chuanYunManager.delete(ChuanyunPaymentReceiveDO.SCHEMA_CODE,receiveDOSresult.get(0).getObjectId());
+                            }
+                            chuanyunSaveDTO =chuanYunManager.save(ChuanyunPaymentReceiveDO.SCHEMA_CODE,purcostString,true);
+                            if(chuanyunSaveDTO.getSuccessful()){
+                                log.info("新增销售合同汇款明细成功");
+                            }else{
+                                log.warn("新增销售合同汇款明细失败");
+                            }
+                        } catch (JsonProcessingException | BigSizeException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
+            }catch (Exception e){
+                e.printStackTrace();
+                log.error(e.getMessage());
+            }
+
+        }
+    }
+
+    /**
      * 更新项目收付款
      */
     private void saveCashFlow() {
@@ -592,6 +677,9 @@ public class U9InfoTask {
         @JsonProperty("F0000027")
         private String clientId;
 
+        @JsonProperty("F0000020")
+        private String projectId;
+
         @JsonProperty("F0000025")
         private String projectCode;
 
@@ -701,7 +789,7 @@ public class U9InfoTask {
         private String productName;
 
         @JsonProperty("F0000012")
-        private String number;
+        private BigDecimal number;
 
         @JsonProperty("F0000070")
         private BigDecimal unitPrice;
@@ -744,4 +832,56 @@ public class U9InfoTask {
             }
         }
     }
+
+    @Data
+    class SalesCollectionDTO{
+
+        @JsonProperty("F0000001")
+        private String saleContractId;
+
+        @JsonProperty("D001789F2a010fe1818a4020b1ff5a33533f9e44")
+        @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
+        private Set<ReceivePlanDTO> planList;
+    }
+
+    @Data
+    class ReceivePlanDTO{
+
+        @JsonProperty("F0000033")
+        @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+        @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+        private LocalDateTime planDateTime;
+
+        @JsonProperty("F0000036")
+        private BigDecimal receiveAmount;
+
+        @JsonProperty("F0000035")
+        private BigDecimal rate;
+
+        @JsonProperty("F0000034")
+        private String step;
+
+        @JsonProperty("F0000032")
+        private String receiveCondition;
+
+        public ReceivePlanDTO(ChuanyunSalesCollectionDetailDTO chuanyunSalesCollectionDetailDTO){
+            if (null!=chuanyunSalesCollectionDetailDTO){
+                if (null!=chuanyunSalesCollectionDetailDTO.getPlanaccount()){
+                    this.receiveAmount=chuanyunSalesCollectionDetailDTO.getPlanaccount();
+                }
+                if (null!=chuanyunSalesCollectionDetailDTO.getPlanpercent()){
+                    this.rate=chuanyunSalesCollectionDetailDTO.getPlanpercent();
+                }
+                if (null!=chuanyunSalesCollectionDetailDTO.getPlanpercent()){
+                    this.rate=chuanyunSalesCollectionDetailDTO.getPlanpercent();
+                }
+                if (null!=chuanyunSalesCollectionDetailDTO.getDesnote()){
+                    this.step=chuanyunSalesCollectionDetailDTO.getDesnote();
+                }
+                if (null!=chuanyunSalesCollectionDetailDTO.getAccountnote()){
+                    this.receiveCondition=chuanyunSalesCollectionDetailDTO.getAccountnote();
+                }
+            }
+        }
+    }
 }