Browse Source

销售订单导入

chenw 6 years ago
parent
commit
6c7448ad25

+ 1 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -52,6 +52,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_SAMEVENDAP_SAVE(79357, "已存在相同供应商和币别的期初数据,不能新增"),
     BIZ_SAMEVENDAP_SAVE(79357, "已存在相同供应商和币别的期初数据,不能新增"),
     BIZ_SAMECUSTAR_SAVE(79358, "已存在相同客户和币别的期初数据,不能新增"),
     BIZ_SAMECUSTAR_SAVE(79358, "已存在相同客户和币别的期初数据,不能新增"),
     BIZ_MAINCURRENCY_DELETE(79359, "该币别为本位币,不能删除"),
     BIZ_MAINCURRENCY_DELETE(79359, "该币别为本位币,不能删除"),
+    BIZ_CUSTOMER_CODE_NOT_EXISTS(79360, "客户%s不存在或已禁用"),
 
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),
     NULL_DATA(23232,"无数据"),

+ 17 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java

@@ -191,12 +191,29 @@ public class SaleController {
        return Result.success();
        return Result.success();
     }
     }
 
 
+    /**
+     * 转采购订单
+     * @param id
+     * @return
+     */
     @PostMapping("/saleTurnPurchase/{id}")
     @PostMapping("/saleTurnPurchase/{id}")
     public Result saleTurnPurchase(@PathVariable("id") Long id){
     public Result saleTurnPurchase(@PathVariable("id") Long id){
         DocBaseDTO baseDTO = saleService.saleTurnPurchase(id);
         DocBaseDTO baseDTO = saleService.saleTurnPurchase(id);
         return Result.success(baseDTO);
         return Result.success(baseDTO);
     }
     }
 
 
+    /**
+     * 导入保存至列表
+     * @param id
+     * @param update
+     * @return
+     */
+    @PostMapping("/saveToFormal")
+    public Result saveToFormal(Long id, boolean update){
+        saleService.saveToFormal(id, update);
+        return Result.success();
+    }
+
     /**
     /**
      * 企业商机
      * 企业商机
      * @param remindReqDTO
      * @param remindReqDTO

+ 22 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/DataImportMapper.java

@@ -0,0 +1,22 @@
+package com.usoftchina.saas.sale.mapper;
+
+import com.usoftchina.saas.commons.po.DataImport;
+import com.usoftchina.saas.commons.po.DataImportDetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DataImportMapper {
+    void deleteByCaller(@Param("caller") String caller, @Param("companyid") Long companyid);
+    int insertSelective(DataImport record);
+
+    void updateErr(@Param("err") String err, @Param("id") Integer id);
+
+    List<DataImportDetail> selectDataById(Long id);
+
+    DataImportDetail selectMainBycode(@Param("code") String code, @Param("id") int id, @Param("companyid") Long companyId);
+
+    void updateDataImport(Integer id);
+
+    void updateDataImportError(@Param("err") String err, @Param("id") int id);
+}

+ 6 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java

@@ -3,6 +3,8 @@ package com.usoftchina.saas.sale.mapper;
 import com.netflix.ribbon.proxy.annotation.ClientProperties;
 import com.netflix.ribbon.proxy.annotation.ClientProperties;
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.document.dto.CustomerDTO;
+import com.usoftchina.saas.document.dto.ProductDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.sale.po.Sale;
 import com.usoftchina.saas.sale.po.Sale;
@@ -72,4 +74,8 @@ public interface SaleMapper extends CommonBaseMapper<Sale> {
     void updateDelivery(@Param("id")Long id);
     void updateDelivery(@Param("id")Long id);
 
 
     void updateSaleDown(Long id);
     void updateSaleDown(Long id);
+
+    CustomerDTO selectCustByCustCode(@Param("code") String code, @Param("companyId") Long companyId);
+
+    ProductDTO selectProductByCode(@Param("code") String code, @Param("companyId") Long companyId);
 }
 }

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java

@@ -55,6 +55,8 @@ public interface SaleService {
 
 
     DocBaseDTO saleTurnPurchase(Long id);
     DocBaseDTO saleTurnPurchase(Long id);
 
 
+    void saveToFormal(Long id, boolean update);
+
     IPage<RemindRspDTO> getEnremind(RemindReqDTO remindReqDTO);
     IPage<RemindRspDTO> getEnremind(RemindReqDTO remindReqDTO);
 
 
     IPage<RemindRspDTO> findRemindByUserInfo(RemindReqDTO remindReqDTO);
     IPage<RemindRspDTO> findRemindByUserInfo(RemindReqDTO remindReqDTO);

+ 74 - 3
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java

@@ -1,7 +1,11 @@
 package com.usoftchina.saas.sale.service.impl;
 package com.usoftchina.saas.sale.service.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.commons.po.*;
+import com.usoftchina.saas.document.dto.CustomerDTO;
+import com.usoftchina.saas.document.dto.ProductDTO;
 import com.usoftchina.saas.inquiry.api.InquiryApi;
 import com.usoftchina.saas.inquiry.api.InquiryApi;
 import com.usoftchina.saas.inquiry.po.inquiry.*;
 import com.usoftchina.saas.inquiry.po.inquiry.*;
 import com.usoftchina.saas.account.api.AccountApi;
 import com.usoftchina.saas.account.api.AccountApi;
@@ -14,9 +18,6 @@ import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
-import com.usoftchina.saas.commons.po.BillCodeSeq;
-import com.usoftchina.saas.commons.po.Operation;
-import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageDefault;
@@ -80,6 +81,8 @@ public class SaleServiceImpl implements SaleService{
     private AccountApi accountApi;
     private AccountApi accountApi;
     @Autowired
     @Autowired
     private CompanyApi companyApi;
     private CompanyApi companyApi;
+    @Autowired
+    private DataImportMapper dataImportMapper;
 
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SaleServiceImpl.class);
     private static final Logger LOGGER = LoggerFactory.getLogger(SaleServiceImpl.class);
 
 
@@ -675,6 +678,74 @@ public class SaleServiceImpl implements SaleService{
         return baseDTO;
         return baseDTO;
     }
     }
 
 
+    @Override
+    @Transactional
+    public void saveToFormal(Long id, boolean update){
+        if (null == id || "0".equals(id)) {
+            throw new BizException(BizExceptionCode.NO_DATA);
+        }
+        String userName = BaseContextHolder.getUserName();
+        Long companyId = BaseContextHolder.getCompanyId();
+        SaleFormDTO saleFormDTO = null;
+        List<DataImportDetail> details = dataImportMapper.selectDataById(id);
+        if (!CollectionUtils.isEmpty(details)) {
+            Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
+            int detno = 0;
+            for (String code : datas.keySet()) {
+                saleFormDTO = new SaleFormDTO();
+                List<SaleDetailDTO> saleDetailDTOList = new ArrayList<>();
+                List<DataImportDetail> data = datas.get(code);
+                //准备主表数据
+                DataImportDetail main = dataImportMapper.selectMainBycode(code, id.intValue(), companyId);
+                if (StringUtils.isEmpty(main)){
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
+                SaleDTO saleDTO = JSONObject.parseObject(main.getDd_maindata(), SaleDTO.class);
+                CustomerDTO customerDTO = saleMapper.selectCustByCustCode(saleDTO.getSa_custcode(), companyId);
+                if (ObjectUtils.isEmpty(customerDTO)) {
+                    throw new BizException(BizExceptionCode.BIZ_CUSTOMER_CODE_NOT_EXISTS.getCode(),
+                            String.format(BizExceptionCode.BIZ_CUSTOMER_CODE_NOT_EXISTS.getMessage(), saleDTO.getSa_custname() + "(" + saleDTO.getSa_custcode() + ")"));
+                }
+                if (!customerDTO.getCu_name().equals(saleDTO.getSa_custname())) {
+                    throw new BizException(79360, "客户编号" + saleDTO.getSa_custcode() + "客户名称" + saleDTO.getSa_custname() + "匹配错误");
+                }
+                saleDTO.setSa_custid(customerDTO.getId().intValue());
+                saleDTO.setId(0L);
+                saleDTO.setCreateTime(new Date());
+                saleDTO.setCreatorName(userName);
+                saleDTO.setSa_date(new Date());
+                saleDTO.setSa_status(Status.UNAUDITED.getDisplay());
+                saleDTO.setSa_statuscode(Status.UNAUDITED.name());
+
+                saleFormDTO.setMain(saleDTO);
+                //准备从表数据
+                if (data.size() > 0) {
+                    detno = 1;
+                    for (DataImportDetail detail : data) {
+                        SaleDetailDTO saleDetailDTO = JSONObject.parseObject(detail.getDd_detaildata(), SaleDetailDTO.class);
+                        //校验明细物料
+                        ProductDTO productDTO = saleMapper.selectProductByCode(saleDetailDTO.getSd_prodcode(), companyId);
+                        if (ObjectUtils.isEmpty(productDTO)) {
+                            throw new BizException(79360, "物料" + saleDetailDTO.getSd_prodcode() + "不存在");
+                        }
+                        saleDetailDTO.setSd_prodid(productDTO.getId());
+                        saleDetailDTO.setSd_detno(detno++);
+                        saleDetailDTO.setId(0L);
+                        saleDetailDTO.setSd_price(saleDetailDTO.getSd_netprice() * (100 + saleDetailDTO.getSd_taxrate()) / 100);
+                        saleDetailDTO.setSd_nettotal(saleDetailDTO.getSd_netprice() * saleDetailDTO.getSd_qty());
+                        saleDetailDTO.setSd_total(saleDetailDTO.getSd_price() * saleDetailDTO.getSd_qty());
+
+                        saleDetailDTOList.add(saleDetailDTO);
+                    }
+                }
+                saleFormDTO.setItems(saleDetailDTOList);
+                //保存
+                saleFormDTO.setCodeModified(true);
+                saveFormData(saleFormDTO);
+            }
+        }
+    }
+
     /**
     /**
      * 获取企业商机
      * 获取企业商机
      * @param remindReqDTO
      * @param remindReqDTO