yuansh před 1 dnem
rodič
revize
7cd61c7114

+ 446 - 158
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleInvoiceController.java

@@ -33,9 +33,14 @@ import org.jeecg.common.util.UUIDGenerator;
 import org.jeecg.modules.baseCode.entity.*;
 import org.jeecg.modules.baseCode.service.*;
 import org.jeecg.modules.cuspCode.entity.CuspCustomerProfile;
+import org.jeecg.modules.cuspCode.entity.CuspSupplierProfile;
 import org.jeecg.modules.cuspCode.service.ICuspCustomerProfileService;
+import org.jeecg.modules.cuspCode.service.ICuspSupplierProfileService;
 import org.jeecg.modules.platCode.entity.PlatCommissionOrder;
+import org.jeecg.modules.platCode.entity.PlatCommissionOrderProduct;
 import org.jeecg.modules.platCode.mapper.PlatCommissionOrderMapper;
+import org.jeecg.modules.platCode.service.IPlatCommissionOrderProductService;
+import org.jeecg.modules.platCode.service.IPlatCommissionOrderService;
 import org.jeecg.modules.purCode.entity.PurOrder;
 import org.jeecg.modules.purCode.service.IPurOrderService;
 import org.jeecg.modules.saleCode.entity.*;
@@ -137,6 +142,13 @@ public class SaleInvoiceController {
     private PlatCommissionOrderMapper platCommissionOrderMapper;
     @Autowired
     private ISaleQuotationProductService saleQuotationProductService;
+    @Autowired
+    private IPlatCommissionOrderService platCommissionOrderService;
+    @Autowired
+    private IPlatCommissionOrderProductService platCommissionOrderProductService;
+
+    @Autowired
+    private ICuspSupplierProfileService cuspSupplierProfileService;
 
     @Value(value = "${jeecg.path.upload}")
     private String uploadpath;
@@ -527,6 +539,13 @@ public class SaleInvoiceController {
 
         //发货通知单单号
         String sourceCode = saleInvoice.getSourceCode();
+
+        String project = saleInvoice.getProject();
+        if (StringUtils.isBlank(project)) {
+
+            return Result.error("项目不存在,无法关联数据");
+        }
+
         if (StringUtils.isBlank(sourceCode)) {
 
             return Result.error("sourceCode不存在,未找到对应数据");
@@ -560,10 +579,24 @@ public class SaleInvoiceController {
             String xsCode = list.get(0).getSourceCode();
             QueryWrapper<PurOrder> queryPurOrder = new QueryWrapper();
             queryPurOrder.likeRight("source_code2", xsCode);
+            queryPurOrder.eq("close", "0");
             List<PurOrder> cgList = purOrderService.list(queryPurOrder);
             if (cgList.size() > 0) {
+
                 return Result.OK(cgList.get(0));
 //                sourceId = cgList.get(0).getId();
+            }else{
+
+                QueryWrapper<PurOrder> queryPurOrder2 = new QueryWrapper();
+                queryPurOrder2.eq("project", project);
+                queryPurOrder2.eq("close", "0");
+                List<PurOrder> cgList2 = purOrderService.list(queryPurOrder2);
+                if (cgList2.size() > 0) {
+                    return Result.OK(cgList2.get(0));
+                }else{
+                    return Result.error("采购订单已关闭,未找到对应新订单数据");
+                }
+
             }
 
         } else if (type.equals("saleContract")) {
@@ -768,39 +801,41 @@ public class SaleInvoiceController {
         String sourceCode = saleInvoice.getSourceCode();//发货通知单
         String sourceCode2 = saleInvoice.getSourceCode2();//佣金订单
 
-        SaleDelivery saleDelivery = saleDeliveryService.getByBillCode(saleInvoice.getSourceCode());
-        SaleOrder saleOrder = saleOrderService.getByBillCode(saleDelivery.getSourceCode());
-        String saleCreateBy = "";
-        if (saleOrder != null) {
-            saleCreateBy = saleOrder.getCreateBy();
-        }
-        if (saleOrder == null || saleOrder.getDoubleDiscount() == null) {
-            saleOrder = new SaleOrder();
-            templates = templatesN;
-        } else {
-            templates = templatesZ;
-        }
+        if(StringUtils.isNotBlank(sourceCode)){
+
+            SaleDelivery saleDelivery = saleDeliveryService.getByBillCode(sourceCode);
+            SaleOrder saleOrder = saleOrderService.getByBillCode(saleDelivery.getSourceCode());
+            String saleCreateBy = "";
+            if (saleOrder != null) {
+                saleCreateBy = saleOrder.getCreateBy();
+            }
+            if (saleOrder == null || saleOrder.getDoubleDiscount() == null) {
+                saleOrder = new SaleOrder();
+                templates = templatesN;
+            } else {
+                templates = templatesZ;
+            }
 //        List<SaleOrderProduct> orderProductList = saleOrderProductService.selectByMainId(saleOrder.getId());
-        List<SaleInvoiceProduct> productList = saleInvoiceProductService.selectByMainId(id);
-        List<SaleInvoiceShip> invoiceShipList = saleInvoiceShipService.selectByMainId(id);
-        String productClass = saleDelivery.getProductionClass();
-        String orderCode = saleDelivery.getSourceCode();
-        String currency = saleDelivery.getCurrency();
-        saleInvoice.setProductionClass(productClass);
-        saleInvoice.setCurrency(currency);
+            List<SaleInvoiceProduct> productList = saleInvoiceProductService.selectByMainId(id);
+            List<SaleInvoiceShip> invoiceShipList = saleInvoiceShipService.selectByMainId(id);
+            String productClass = saleDelivery.getProductionClass();
+            String orderCode = saleDelivery.getSourceCode();
+            String currency = saleDelivery.getCurrency();
+            saleInvoice.setProductionClass(productClass);
+            saleInvoice.setCurrency(currency);
 
 
-        if (templates != null) {
-            try {
+            if (templates != null) {
+                try {
 
-                String productionClass = saleInvoice.getProductionClass();
-                if (StringUtils.isNotBlank(productionClass)) {
+                    String productionClass = saleInvoice.getProductionClass();
+                    if (StringUtils.isNotBlank(productionClass)) {
 
-                    BaseProductClass classEnt = baseProductClassService.getById(productionClass);
-                    if (classEnt != null) {
-                        saleInvoice.setProductionClass(classEnt.getName());
+                        BaseProductClass classEnt = baseProductClassService.getById(productionClass);
+                        if (classEnt != null) {
+                            saleInvoice.setProductionClass(classEnt.getName());
+                        }
                     }
-                }
 
 //                if(saleOrder != null){
 //                    saleInvoice.setContacts(saleOrder.getSalesmanName());
@@ -827,157 +862,406 @@ public class SaleInvoiceController {
 //                }
 
 
-                String paymentTerms = null;
-                String customerId = saleInvoice.getCustomer();
-                if (StringUtils.isNotBlank(customerId)) {
+                    String paymentTerms = null;
+                    String customerId = saleInvoice.getCustomer();
+                    if (StringUtils.isNotBlank(customerId)) {
 
-                    CuspCustomerProfile classEnt = cuspCustomerProfileService.getById(customerId);
-                    if (classEnt != null) {
-                        paymentTerms = classEnt.getPaymentTerms();
+                        CuspCustomerProfile classEnt = cuspCustomerProfileService.getById(customerId);
+                        if (classEnt != null) {
+                            paymentTerms = classEnt.getPaymentTerms();
 
-                        saleInvoice.setContacts(classEnt.getContacts());
-                        saleInvoice.setPhone(classEnt.getPhone());
-                        saleInvoice.setEmail(classEnt.getEmail());
+                            saleInvoice.setContacts(classEnt.getContacts());
+                            saleInvoice.setPhone(classEnt.getPhone());
+                            saleInvoice.setEmail(classEnt.getEmail());
+                        }
                     }
-                }
 
-                // 获取计产品档案
-                List<BaseProductArchive> productArchiveList = new ArrayList<>();
-                if (oConvertUtils.listIsNotEmpty(productList)){
-                    LambdaQueryWrapper<BaseProductArchive> productWrapper = new LambdaQueryWrapper<>();
-                    productWrapper.in(BaseProductArchive::getId, productList.stream().map(SaleInvoiceProduct::getProductId).collect(Collectors.toList()));
-                    productArchiveList = baseProductArchiveService.list(productWrapper);
-                }
-                // 获取发货单行
-                List<SaleDeliveryDetails> saleDeliveryDetailsList = new ArrayList<>();
-                if (oConvertUtils.isNotEmpty(productList)){
-                    LambdaQueryWrapper<SaleDeliveryDetails> queryWrapper = new LambdaQueryWrapper<>();
-                    queryWrapper.in(SaleDeliveryDetails::getId, productList.stream().map(SaleInvoiceProduct::getSourceId).collect(Collectors.toList()));
-                    saleDeliveryDetailsList = saleDeliveryDetailsService.list(queryWrapper);
-                }
-                // 获取销售订单行
-                List<SaleOrderProduct> saleOrderProductList = new ArrayList<>();
-                if (oConvertUtils.listIsNotEmpty(saleDeliveryDetailsList)){
-                    LambdaQueryWrapper<SaleOrderProduct> productWrapper = new LambdaQueryWrapper<>();
-                    productWrapper.in(SaleOrderProduct::getId, saleDeliveryDetailsList.stream().map(SaleDeliveryDetails::getSourceId).collect(Collectors.toList()));
-                    saleOrderProductList = saleOrderProductService.list(productWrapper);
-                }
-                // 获取报价单行
-                List<SaleQuotationProduct> saleQuotationProductList = new ArrayList<>();
-                if (oConvertUtils.listIsNotEmpty(saleOrderProductList)){
-                    LambdaQueryWrapper<SaleQuotationProduct> productWrapper = new LambdaQueryWrapper<>();
-                    productWrapper.in(SaleQuotationProduct::getId, saleOrderProductList.stream().map(SaleOrderProduct::getSourceId).collect(Collectors.toList()));
-                    saleQuotationProductList = saleQuotationProductService.list(productWrapper);
-                }
-                // 获取销售订单
+                    // 获取计产品档案
+                    List<BaseProductArchive> productArchiveList = new ArrayList<>();
+                    if (oConvertUtils.listIsNotEmpty(productList)){
+                        LambdaQueryWrapper<BaseProductArchive> productWrapper = new LambdaQueryWrapper<>();
+                        productWrapper.in(BaseProductArchive::getId, productList.stream().map(SaleInvoiceProduct::getProductId).collect(Collectors.toList()));
+                        productArchiveList = baseProductArchiveService.list(productWrapper);
+                    }
+                    // 获取发货单行
+                    List<SaleDeliveryDetails> saleDeliveryDetailsList = new ArrayList<>();
+                    if (oConvertUtils.isNotEmpty(productList)){
+                        LambdaQueryWrapper<SaleDeliveryDetails> queryWrapper = new LambdaQueryWrapper<>();
+                        queryWrapper.in(SaleDeliveryDetails::getId, productList.stream().map(SaleInvoiceProduct::getSourceId).collect(Collectors.toList()));
+                        saleDeliveryDetailsList = saleDeliveryDetailsService.list(queryWrapper);
+                    }
+                    // 获取销售订单行
+                    List<SaleOrderProduct> saleOrderProductList = new ArrayList<>();
+                    if (oConvertUtils.listIsNotEmpty(saleDeliveryDetailsList)){
+                        LambdaQueryWrapper<SaleOrderProduct> productWrapper = new LambdaQueryWrapper<>();
+                        productWrapper.in(SaleOrderProduct::getId, saleDeliveryDetailsList.stream().map(SaleDeliveryDetails::getSourceId).collect(Collectors.toList()));
+                        saleOrderProductList = saleOrderProductService.list(productWrapper);
+                    }
+                    // 获取报价单行
+                    List<SaleQuotationProduct> saleQuotationProductList = new ArrayList<>();
+                    if (oConvertUtils.listIsNotEmpty(saleOrderProductList)){
+                        LambdaQueryWrapper<SaleQuotationProduct> productWrapper = new LambdaQueryWrapper<>();
+                        productWrapper.in(SaleQuotationProduct::getId, saleOrderProductList.stream().map(SaleOrderProduct::getSourceId).collect(Collectors.toList()));
+                        saleQuotationProductList = saleQuotationProductService.list(productWrapper);
+                    }
+                    // 获取销售订单
 //                saleInvoice.setPaymentTerms(saleOrder.getPaymentTerms());
-                saleInvoice.setPaymentTerms(paymentTerms);
-                // 客户订单号
-                saleInvoice.setContactsNo(saleOrder.getCustomerOrder());
-                // 查询数据字典
-                String currencyText = sysDictService.queryDictTextByKey("currency", saleInvoice.getCurrency());
-                saleInvoice.setCurrencyText(currencyText);
-                String paymentTermsText = sysDictService.queryDictTextByKey("customer_payment_terms", saleInvoice.getPaymentTerms());
-                saleInvoice.setPaymentTermsText(paymentTermsText);
-                List<DictModel> unitDictList = sysDictService.queryDictItemsByCode("measurement_unit");
-
-                // 产品设置
-                int rowNum = 1;
-                BigDecimal invoiceMoney = BigDecimal.ZERO;
-                for(SaleInvoiceProduct o:productList){
-                    BigDecimal amount = o.getTaxMoney() == null ? BigDecimal.ZERO: o.getTaxMoney();
-                    invoiceMoney = invoiceMoney.add(amount);
-                    o.setRowNumber(rowNum++);
-
-
-                    BaseProductArchive findProduct = productArchiveList.stream().filter(e->e.getId().equals(o.getProductId())).findFirst().orElse(null);
-                    if (findProduct != null){
-                        o.setUnit(findProduct.getMeasurementUnit());
-                        if (findProduct.getMeasurementUnit() != null){
-                            DictModel findDict = unitDictList.stream().filter(d->d.getValue().equals(findProduct.getMeasurementUnit())).findFirst().orElse(null);
-                            if (findDict != null){
-                                o.setUnit(findDict.getText());
+                    saleInvoice.setPaymentTerms(paymentTerms);
+                    // 客户订单号
+                    saleInvoice.setContactsNo(saleOrder.getCustomerOrder());
+                    // 查询数据字典
+                    String currencyText = sysDictService.queryDictTextByKey("currency", saleInvoice.getCurrency());
+                    saleInvoice.setCurrencyText(currencyText);
+                    String paymentTermsText = sysDictService.queryDictTextByKey("customer_payment_terms", saleInvoice.getPaymentTerms());
+                    saleInvoice.setPaymentTermsText(paymentTermsText);
+                    List<DictModel> unitDictList = sysDictService.queryDictItemsByCode("measurement_unit");
+
+                    // 产品设置
+                    int rowNum = 1;
+                    BigDecimal invoiceMoney = BigDecimal.ZERO;
+                    for(SaleInvoiceProduct o:productList){
+                        BigDecimal amount = o.getTaxMoney() == null ? BigDecimal.ZERO: o.getTaxMoney();
+                        invoiceMoney = invoiceMoney.add(amount);
+                        o.setRowNumber(rowNum++);
+
+
+                        BaseProductArchive findProduct = productArchiveList.stream().filter(e->e.getId().equals(o.getProductId())).findFirst().orElse(null);
+                        if (findProduct != null){
+                            o.setUnit(findProduct.getMeasurementUnit());
+                            if (findProduct.getMeasurementUnit() != null){
+                                DictModel findDict = unitDictList.stream().filter(d->d.getValue().equals(findProduct.getMeasurementUnit())).findFirst().orElse(null);
+                                if (findDict != null){
+                                    o.setUnit(findDict.getText());
+                                }
+                            }
+                        }
+                        SaleDeliveryDetails saleDeliveryDetails = saleDeliveryDetailsList.stream().filter(e->e.getId().equals(o.getSourceId())).findFirst().orElse(null);
+                        if (saleDeliveryDetails != null) {
+                            SaleOrderProduct saleOrderProduct = saleOrderProductList.stream().filter(e -> e.getId().equals(saleDeliveryDetails.getSourceId())).findFirst().orElse(null);
+                            if (saleOrderProduct != null) {
+
+                                SaleQuotationProduct saleQuotationProduct = saleQuotationProductList.stream().filter(e -> e.getId().equals(saleOrderProduct.getSourceId())).findFirst().orElse(null);
+
+                                if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getDiscount())) {
+                                    o.setDiscountText(saleQuotationProduct.getDiscount().intValue() + "%");
+                                }
+                                if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getSalePrice())) {
+
+
+                                    BigDecimal dic = saleQuotationProduct.getDiscount() ==null?BigDecimal.ZERO:saleQuotationProduct.getDiscount();
+                                    BigDecimal dis = (new BigDecimal("100").subtract(dic)).divide(new BigDecimal("100"));
+
+                                    BigDecimal getSalePrice = saleQuotationProduct.getSalePrice() == null ? BigDecimal.ZERO : saleQuotationProduct.getSalePrice();
+                                    BigDecimal setTaxPrice = getSalePrice.divide(dis, 2, BigDecimal.ROUND_HALF_UP);
+                                    o.setTaxPrice(setTaxPrice);
+
+//                                o.setTaxPrice(saleQuotationProduct.getSalePrice());
+                                }
+//                            if (oConvertUtils.isNotEmpty(saleOrderProduct.getDiscount()) && saleOrderProduct.getDiscount().intValue() != 0) {
+//                                o.setDiscountText(saleOrderProduct.getDiscount().intValue() + "%");
+//                            }
                             }
                         }
                     }
-                    SaleDeliveryDetails saleDeliveryDetails = saleDeliveryDetailsList.stream().filter(e->e.getId().equals(o.getSourceId())).findFirst().orElse(null);
-                    if (saleDeliveryDetails != null) {
-                        SaleOrderProduct saleOrderProduct = saleOrderProductList.stream().filter(e -> e.getId().equals(saleDeliveryDetails.getSourceId())).findFirst().orElse(null);
-                        if (saleOrderProduct != null) {
+                    saleInvoice.setInvoiceMoney(invoiceMoney.setScale(2));
+
+                    if (oConvertUtils.isNotEmpty(saleOrder.getDoubleDiscount())) {
+                        saleInvoice.setDiscountText(saleOrder.getDoubleDiscount().intValue() + "%");
+                    }
+
+
+                    String shipname = "";
+                    String imo = "";
+
+                    if(oConvertUtils.listIsNotEmpty(invoiceShipList)){
 
-                            SaleQuotationProduct saleQuotationProduct = saleQuotationProductList.stream().filter(e -> e.getId().equals(saleOrderProduct.getSourceId())).findFirst().orElse(null);
+                        shipname = invoiceShipList.stream().map(SaleInvoiceShip::getShipName).distinct().collect(Collectors.joining());
 
-                            if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getDiscount())) {
-                                o.setDiscountText(saleQuotationProduct.getDiscount().intValue() + "%");
+                        LambdaQueryWrapper<BaseShipArchive> shipArchiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                        shipArchiveLambdaQueryWrapper.in(BaseShipArchive::getId,invoiceShipList.stream().map(SaleInvoiceShip::getShipId).collect(Collectors.joining()));
+                        List<BaseShipArchive> baseShipArchiveList = baseShipArchiveService.list(shipArchiveLambdaQueryWrapper);
+
+                        if(oConvertUtils.listIsNotEmpty(baseShipArchiveList)){
+                            imo = baseShipArchiveList.stream().map(BaseShipArchive::getImo).distinct().collect(Collectors.joining());
+                        }
+                    }
+                    saleInvoice.setShipName(shipname);
+                    saleInvoice.setImo(imo);
+
+                    if(productList.size() > 0){
+
+                        saleInvoice.setQualityGrade(productList.get(0).getQualityGrade());
+                    }
+                    // 账期
+                    saleInvoice.setBillDateText(DateUtils.date2Str(saleInvoice.getBillDate(), DateUtils.date_sdf.get()));
+                    saleInvoice.setDueDateText(saleInvoice.getBillDateText());
+                    if (oConvertUtils.isNotEmpty(paymentTermsText)){
+                        if (paymentTermsText.indexOf(" ")>-1){
+                            String[] split = paymentTermsText.split(" ");
+                            if (oConvertUtils.getInt(split[0], 0)>0) {
+                                saleInvoice.setDueDateText(DateUtils.date2Str(DateUtils.dateAdd(saleInvoice.getBillDate(), Calendar.DATE, Integer.parseInt(split[0])), DateUtils.date_sdf.get()));
                             }
-                            if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getSalePrice())) {
+                        }
+                    }
+                    // 订单金额
+                    BigDecimal orderMoney = BigDecimal.ZERO;
+//                for (SaleOrderProduct o : orderProductList) {
+                    for (SaleInvoiceProduct o : productList) {
+                        BigDecimal amount = o.getTaxMoney() == null ? BigDecimal.ZERO : o.getTaxMoney();
+                        orderMoney = orderMoney.add(amount);
+                    }
+                    saleInvoice.setOrderMoney(orderMoney.setScale(2));
+                    saleInvoice.setAgreementTerms(saleOrder.getAgreementTerms());
+                    // 制单人信息
+//                SysUser sysUser = sysUserService.getUserByName(saleInvoice.getCreateBy());
+//                if(saleOrder !=null && StringUtils.isNotBlank(saleOrder.getCreateBy())){
+//                    SysUser sysUser = sysUserService.getUserByName(saleOrder.getCreateBy());
+//                    if(sysUser !=null){
+//                        saleInvoice.setSalesPhone(sysUser.getPhone());
+//                        saleInvoice.setSalesEmail(sysUser.getEmail());
+//                        saleInvoice.setSalesmanName(sysUser.getRealname());
+//                    }
+                    saleInvoice.setSalesmanName(saleCreateBy);
+//                }
 
+                    String templateFilePath = uploadpath + templates.getTemplateFile();
+                    String tempFilePath = uploadpath + "/"+ UUIDGenerator.generate()+".xlsx";
 
-                                BigDecimal dic = saleQuotationProduct.getDiscount() ==null?BigDecimal.ZERO:saleQuotationProduct.getDiscount();
-                                BigDecimal dis = (new BigDecimal("100").subtract(dic)).divide(new BigDecimal("100"));
+                    try (ExcelWriter excelWriter = EasyExcel.write(tempFilePath).withTemplate(templateFilePath).build()) {
+                        WriteSheet writeSheet = EasyExcel.writerSheet().build();
+                        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(Boolean.TRUE).build();
+                        excelWriter.fill(new FillWrapper(productList), fillConfig, writeSheet);
+                        excelWriter.fill(saleInvoice, writeSheet);
+                    }
+                    List<String> noteList = new ArrayList<>();
+                    productList.forEach(p->noteList.add(p.getNotes()));
 
-                                BigDecimal getSalePrice = saleQuotationProduct.getSalePrice() == null ? BigDecimal.ZERO : saleQuotationProduct.getSalePrice();
-                                BigDecimal setTaxPrice = getSalePrice.divide(dis, 2, BigDecimal.ROUND_HALF_UP);
-                                o.setTaxPrice(setTaxPrice);
+                    ExcelExportUtils.excelInsertRowNotes(getOutputStream(saleInvoice.getInvoiceCode()+".xlsx", response),
+                            tempFilePath, 19, noteList, 1, 4);
 
-//                                o.setTaxPrice(saleQuotationProduct.getSalePrice());
+
+
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                }
+
+            }
+
+        }else{
+
+
+
+            if(StringUtils.isBlank(sourceCode2)){
+                return;
+            }
+
+            QueryWrapper<PlatCommissionOrder> commonQuery = new QueryWrapper<>();
+            commonQuery.eq("del_flag","0");
+            commonQuery.eq("bill_code",sourceCode2);
+            List<PlatCommissionOrder> listCommon = platCommissionOrderService.list(commonQuery);
+            PlatCommissionOrder saleDelivery = listCommon.get(0);
+
+            List<PlatCommissionOrderProduct> commonProductList = platCommissionOrderProductService.selectByMainId(saleDelivery.getId());
+
+            String saleCreateBy = saleDelivery.getCreateBy();
+            templates = templatesN;
+
+            List<SaleInvoiceProduct> productList = saleInvoiceProductService.selectByMainId(id);
+            List<SaleInvoiceShip> invoiceShipList = saleInvoiceShipService.selectByMainId(id);
+            String productClass = commonProductList.get(0).getProductClass();
+            String orderCode = null;
+            String currency = saleDelivery.getCurrency();
+            saleInvoice.setProductionClass(productClass);
+            saleInvoice.setCurrency(currency);
+
+            if (templates != null) {
+                try {
+
+                    String productionClass = saleInvoice.getProductionClass();
+                    if (StringUtils.isNotBlank(productionClass)) {
+
+                        BaseProductClass classEnt = baseProductClassService.getById(productionClass);
+                        if (classEnt != null) {
+                            saleInvoice.setProductionClass(classEnt.getName());
+                        }
+                    }
+
+//                if(saleOrder != null){
+//                    saleInvoice.setContacts(saleOrder.getSalesmanName());
+//                }
+
+//                if (StringUtils.isNotBlank(orderCode)) {
+//                    LambdaQueryWrapper<SaleDelivery> saleDeliveryQueryWrapper = new LambdaQueryWrapper<>();
+//                    saleDeliveryQueryWrapper.eq(SaleDelivery::getBillCode,orderCode);
+//                    List<SaleDelivery> list = saleDeliveryService.list(saleDeliveryQueryWrapper);
+//                    if(list.size() > 0){
+//                        SaleDelivery saleDeliveryEntity = list.get(0);
+//                        String saleOrderCode = saleDeliveryEntity.getSourceCode();
+//                        if (StringUtils.isNotBlank(saleOrderCode)) {
+//                            LambdaQueryWrapper<SaleOrder> saleOrderQueryWrapper = new LambdaQueryWrapper<>();
+//                            saleOrderQueryWrapper.eq(SaleOrder::getBillCode,saleOrderCode);
+//                            List<SaleOrder> listSaleOrder = saleOrderService.list(saleOrderQueryWrapper);
+//                            if(listSaleOrder.size() > 0){
+////                                saleInvoice.setContacts(saleOrder.getLiaisonInfo());
+//                                saleInvoice.setContacts(saleOrder.getLiaisonInfo());
+//                            }
+//                        }
+//
+//                    }
+//                }
+
+
+                    String paymentTerms = null;
+                    String customerId = saleInvoice.getCustomer();
+                    if (StringUtils.isNotBlank(customerId)) {
+                        CuspSupplierProfile supplierEnt = cuspSupplierProfileService.getById(customerId);
+//                        CuspCustomerProfile classEnt = cuspCustomerProfileService.getById(customerId);
+                        if (supplierEnt != null) {
+                            paymentTerms = supplierEnt.getPaymentTerms();
+
+                            saleInvoice.setContacts(supplierEnt.getContacts());
+                            saleInvoice.setPhone(supplierEnt.getPhone());
+                            saleInvoice.setEmail(supplierEnt.getEmail());
+                        }
+                    }
+
+                    // 获取计产品档案
+                    List<BaseProductArchive> productArchiveList = new ArrayList<>();
+                    if (oConvertUtils.listIsNotEmpty(productList)){
+                        LambdaQueryWrapper<BaseProductArchive> productWrapper = new LambdaQueryWrapper<>();
+                        productWrapper.in(BaseProductArchive::getId, productList.stream().map(SaleInvoiceProduct::getProductId).collect(Collectors.toList()));
+                        productArchiveList = baseProductArchiveService.list(productWrapper);
+                    }
+                    // 获取发货单行
+                    List<SaleDeliveryDetails> saleDeliveryDetailsList = new ArrayList<>();
+                    if (oConvertUtils.isNotEmpty(productList)){
+                        LambdaQueryWrapper<SaleDeliveryDetails> queryWrapper = new LambdaQueryWrapper<>();
+                        queryWrapper.in(SaleDeliveryDetails::getId, productList.stream().map(SaleInvoiceProduct::getSourceId).collect(Collectors.toList()));
+                        saleDeliveryDetailsList = saleDeliveryDetailsService.list(queryWrapper);
+                    }
+                    // 获取销售订单行
+                    List<SaleOrderProduct> saleOrderProductList = new ArrayList<>();
+                    if (oConvertUtils.listIsNotEmpty(saleDeliveryDetailsList)){
+                        LambdaQueryWrapper<SaleOrderProduct> productWrapper = new LambdaQueryWrapper<>();
+                        productWrapper.in(SaleOrderProduct::getId, saleDeliveryDetailsList.stream().map(SaleDeliveryDetails::getSourceId).collect(Collectors.toList()));
+                        saleOrderProductList = saleOrderProductService.list(productWrapper);
+                    }
+                    // 获取报价单行
+                    List<SaleQuotationProduct> saleQuotationProductList = new ArrayList<>();
+                    if (oConvertUtils.listIsNotEmpty(saleOrderProductList)){
+                        LambdaQueryWrapper<SaleQuotationProduct> productWrapper = new LambdaQueryWrapper<>();
+                        productWrapper.in(SaleQuotationProduct::getId, saleOrderProductList.stream().map(SaleOrderProduct::getSourceId).collect(Collectors.toList()));
+                        saleQuotationProductList = saleQuotationProductService.list(productWrapper);
+                    }
+                    // 获取销售订单
+//                saleInvoice.setPaymentTerms(saleOrder.getPaymentTerms());
+                    saleInvoice.setPaymentTerms(paymentTerms);
+                    // 客户订单号
+                    saleInvoice.setContactsNo("");
+                    // 查询数据字典
+                    String currencyText = sysDictService.queryDictTextByKey("currency", saleInvoice.getCurrency());
+                    saleInvoice.setCurrencyText(currencyText);
+                    String paymentTermsText = sysDictService.queryDictTextByKey("customer_payment_terms", saleInvoice.getPaymentTerms());
+                    saleInvoice.setPaymentTermsText(paymentTermsText);
+                    List<DictModel> unitDictList = sysDictService.queryDictItemsByCode("measurement_unit");
+
+                    // 产品设置
+                    int rowNum = 1;
+                    BigDecimal invoiceMoney = BigDecimal.ZERO;
+                    for(SaleInvoiceProduct o:productList){
+                        BigDecimal amount = o.getTaxMoney() == null ? BigDecimal.ZERO: o.getTaxMoney();
+                        invoiceMoney = invoiceMoney.add(amount);
+                        o.setRowNumber(rowNum++);
+
+
+                        BaseProductArchive findProduct = productArchiveList.stream().filter(e->e.getId().equals(o.getProductId())).findFirst().orElse(null);
+                        if (findProduct != null){
+                            o.setUnit(findProduct.getMeasurementUnit());
+                            if (findProduct.getMeasurementUnit() != null){
+                                DictModel findDict = unitDictList.stream().filter(d->d.getValue().equals(findProduct.getMeasurementUnit())).findFirst().orElse(null);
+                                if (findDict != null){
+                                    o.setUnit(findDict.getText());
+                                }
                             }
+                        }
+                        SaleDeliveryDetails saleDeliveryDetails = saleDeliveryDetailsList.stream().filter(e->e.getId().equals(o.getSourceId())).findFirst().orElse(null);
+                        if (saleDeliveryDetails != null) {
+                            SaleOrderProduct saleOrderProduct = saleOrderProductList.stream().filter(e -> e.getId().equals(saleDeliveryDetails.getSourceId())).findFirst().orElse(null);
+                            if (saleOrderProduct != null) {
+
+                                SaleQuotationProduct saleQuotationProduct = saleQuotationProductList.stream().filter(e -> e.getId().equals(saleOrderProduct.getSourceId())).findFirst().orElse(null);
+
+                                if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getDiscount())) {
+                                    o.setDiscountText(saleQuotationProduct.getDiscount().intValue() + "%");
+                                }
+                                if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getSalePrice())) {
+
+
+                                    BigDecimal dic = saleQuotationProduct.getDiscount() ==null?BigDecimal.ZERO:saleQuotationProduct.getDiscount();
+                                    BigDecimal dis = (new BigDecimal("100").subtract(dic)).divide(new BigDecimal("100"));
+
+                                    BigDecimal getSalePrice = saleQuotationProduct.getSalePrice() == null ? BigDecimal.ZERO : saleQuotationProduct.getSalePrice();
+                                    BigDecimal setTaxPrice = getSalePrice.divide(dis, 2, BigDecimal.ROUND_HALF_UP);
+                                    o.setTaxPrice(setTaxPrice);
+
+//                                o.setTaxPrice(saleQuotationProduct.getSalePrice());
+                                }
 //                            if (oConvertUtils.isNotEmpty(saleOrderProduct.getDiscount()) && saleOrderProduct.getDiscount().intValue() != 0) {
 //                                o.setDiscountText(saleOrderProduct.getDiscount().intValue() + "%");
 //                            }
+                            }
                         }
                     }
-                }
-                saleInvoice.setInvoiceMoney(invoiceMoney.setScale(2));
+                    saleInvoice.setInvoiceMoney(invoiceMoney.setScale(2));
 
-                if (oConvertUtils.isNotEmpty(saleOrder.getDoubleDiscount())) {
-                    saleInvoice.setDiscountText(saleOrder.getDoubleDiscount().intValue() + "%");
-                }
+//                    if (oConvertUtils.isNotEmpty(saleOrder.getDoubleDiscount())) {
+//                        saleInvoice.setDiscountText(saleOrder.getDoubleDiscount().intValue() + "%");
+//                    }
 
 
-                String shipname = "";
-                String imo = "";
+                    String shipname = "";
+                    String imo = "";
 
-                if(oConvertUtils.listIsNotEmpty(invoiceShipList)){
+                    if(oConvertUtils.listIsNotEmpty(invoiceShipList)){
 
-                    shipname = invoiceShipList.stream().map(SaleInvoiceShip::getShipName).distinct().collect(Collectors.joining());
+                        shipname = invoiceShipList.stream().map(SaleInvoiceShip::getShipName).distinct().collect(Collectors.joining());
 
-                    LambdaQueryWrapper<BaseShipArchive> shipArchiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                    shipArchiveLambdaQueryWrapper.in(BaseShipArchive::getId,invoiceShipList.stream().map(SaleInvoiceShip::getShipId).collect(Collectors.joining()));
-                    List<BaseShipArchive> baseShipArchiveList = baseShipArchiveService.list(shipArchiveLambdaQueryWrapper);
+                        LambdaQueryWrapper<BaseShipArchive> shipArchiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                        shipArchiveLambdaQueryWrapper.in(BaseShipArchive::getId,invoiceShipList.stream().map(SaleInvoiceShip::getShipId).collect(Collectors.joining()));
+                        List<BaseShipArchive> baseShipArchiveList = baseShipArchiveService.list(shipArchiveLambdaQueryWrapper);
 
-                    if(oConvertUtils.listIsNotEmpty(baseShipArchiveList)){
-                        imo = baseShipArchiveList.stream().map(BaseShipArchive::getImo).distinct().collect(Collectors.joining());
+                        if(oConvertUtils.listIsNotEmpty(baseShipArchiveList)){
+                            imo = baseShipArchiveList.stream().map(BaseShipArchive::getImo).distinct().collect(Collectors.joining());
+                        }
                     }
-                }
-                saleInvoice.setShipName(shipname);
-                saleInvoice.setImo(imo);
+                    saleInvoice.setShipName(shipname);
+                    saleInvoice.setImo(imo);
 
-                if(productList.size() > 0){
+                    if(productList.size() > 0){
 
-                    saleInvoice.setQualityGrade(productList.get(0).getQualityGrade());
-                }
-                // 账期
-                saleInvoice.setBillDateText(DateUtils.date2Str(saleInvoice.getBillDate(), DateUtils.date_sdf.get()));
-                saleInvoice.setDueDateText(saleInvoice.getBillDateText());
-                if (oConvertUtils.isNotEmpty(paymentTermsText)){
-                    if (paymentTermsText.indexOf(" ")>-1){
-                        String[] split = paymentTermsText.split(" ");
-                        if (oConvertUtils.getInt(split[0], 0)>0) {
-                            saleInvoice.setDueDateText(DateUtils.date2Str(DateUtils.dateAdd(saleInvoice.getBillDate(), Calendar.DATE, Integer.parseInt(split[0])), DateUtils.date_sdf.get()));
+                        saleInvoice.setQualityGrade(productList.get(0).getQualityGrade());
+                    }
+                    // 账期
+                    saleInvoice.setBillDateText(DateUtils.date2Str(saleInvoice.getBillDate(), DateUtils.date_sdf.get()));
+                    saleInvoice.setDueDateText(saleInvoice.getBillDateText());
+                    if (oConvertUtils.isNotEmpty(paymentTermsText)){
+                        if (paymentTermsText.indexOf(" ")>-1){
+                            String[] split = paymentTermsText.split(" ");
+                            if (oConvertUtils.getInt(split[0], 0)>0) {
+                                saleInvoice.setDueDateText(DateUtils.date2Str(DateUtils.dateAdd(saleInvoice.getBillDate(), Calendar.DATE, Integer.parseInt(split[0])), DateUtils.date_sdf.get()));
+                            }
                         }
                     }
-                }
-                // 订单金额
-                BigDecimal orderMoney = BigDecimal.ZERO;
+                    // 订单金额
+                    BigDecimal orderMoney = BigDecimal.ZERO;
 //                for (SaleOrderProduct o : orderProductList) {
-                for (SaleInvoiceProduct o : productList) {
-                    BigDecimal amount = o.getTaxMoney() == null ? BigDecimal.ZERO : o.getTaxMoney();
-                    orderMoney = orderMoney.add(amount);
-                }
-                saleInvoice.setOrderMoney(orderMoney.setScale(2));
-                saleInvoice.setAgreementTerms(saleOrder.getAgreementTerms());
-                // 制单人信息
+                    for (SaleInvoiceProduct o : productList) {
+                        BigDecimal amount = o.getTaxMoney() == null ? BigDecimal.ZERO : o.getTaxMoney();
+                        orderMoney = orderMoney.add(amount);
+                    }
+                    saleInvoice.setOrderMoney(orderMoney.setScale(2));
+//                    saleInvoice.setAgreementTerms(saleOrder.getAgreementTerms());
+                    // 制单人信息
 //                SysUser sysUser = sysUserService.getUserByName(saleInvoice.getCreateBy());
 //                if(saleOrder !=null && StringUtils.isNotBlank(saleOrder.getCreateBy())){
 //                    SysUser sysUser = sysUserService.getUserByName(saleOrder.getCreateBy());
@@ -989,29 +1273,33 @@ public class SaleInvoiceController {
                     saleInvoice.setSalesmanName(saleCreateBy);
 //                }
 
-                String templateFilePath = uploadpath + templates.getTemplateFile();
-                String tempFilePath = uploadpath + "/"+ UUIDGenerator.generate()+".xlsx";
+                    String templateFilePath = uploadpath + templates.getTemplateFile();
+                    String tempFilePath = uploadpath + "/"+ UUIDGenerator.generate()+".xlsx";
 
-                try (ExcelWriter excelWriter = EasyExcel.write(tempFilePath).withTemplate(templateFilePath).build()) {
-                    WriteSheet writeSheet = EasyExcel.writerSheet().build();
-                    FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(Boolean.TRUE).build();
-                    excelWriter.fill(new FillWrapper(productList), fillConfig, writeSheet);
-                    excelWriter.fill(saleInvoice, writeSheet);
-                }
-                List<String> noteList = new ArrayList<>();
-                productList.forEach(p->noteList.add(p.getNotes()));
+                    try (ExcelWriter excelWriter = EasyExcel.write(tempFilePath).withTemplate(templateFilePath).build()) {
+                        WriteSheet writeSheet = EasyExcel.writerSheet().build();
+                        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(Boolean.TRUE).build();
+                        excelWriter.fill(new FillWrapper(productList), fillConfig, writeSheet);
+                        excelWriter.fill(saleInvoice, writeSheet);
+                    }
+                    List<String> noteList = new ArrayList<>();
+                    productList.forEach(p->noteList.add(p.getNotes()));
 
-                ExcelExportUtils.excelInsertRowNotes(getOutputStream(saleInvoice.getInvoiceCode()+".xlsx", response),
-                        tempFilePath, 19, noteList, 1, 4);
+                    ExcelExportUtils.excelInsertRowNotes(getOutputStream(saleInvoice.getInvoiceCode()+".xlsx", response),
+                            tempFilePath, 19, noteList, 1, 4);
 
 
 
-            } catch (Exception ex) {
-                ex.printStackTrace();
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                }
+
             }
 
         }
 
+
+
     }
 
     /**

+ 1 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleOrderController.java

@@ -938,6 +938,7 @@ public class SaleOrderController {
      */
     @RequiresPermissions("saleCode:sale_order:exportXls")
     @RequestMapping(value = "/exportXls")
+    @PermissionData(pageComponent = "saleCode/salesOrder/SaleOrderFormList")
     public ModelAndView exportXls(HttpServletRequest request, SaleOrder saleOrder) {
         // Step.1 组装查询条件查询数据
         QueryWrapper<SaleOrder> queryWrapper = QueryGenerator.initQueryWrapper(saleOrder, request.getParameterMap());

+ 2 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleInvoiceServiceImpl.java

@@ -74,6 +74,8 @@ public class SaleInvoiceServiceImpl extends ServiceImpl<SaleInvoiceMapper, SaleI
 			SaleDelivery en = new SaleDelivery();
 			en.setInvoiceCode(saleInvoice.getInvoiceCode());
 			saleDeliveryMapper.update(en,qu);
+			sourceCode2 = null;
+			saleInvoice.setSourceCode2(null);
 		}
 		if(StringUtils.isNotBlank(sourceCode2)){
 			QueryWrapper<PlatCommissionOrder> qu = new QueryWrapper<>();