소스 검색

Merge remote-tracking branch 'origin/test' into test

caozj 1 년 전
부모
커밋
2e4012ccc9
18개의 변경된 파일403개의 추가작업 그리고 56개의 파일을 삭제
  1. 10 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java
  2. 10 7
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java
  3. 41 5
      hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml
  4. 10 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java
  5. 1 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java
  6. 12 2
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  7. 44 0
      hx-sale/src/main/java/com/fjhx/sale/controller/purchase/SalePurchaseController.java
  8. 1 1
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  9. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  10. 37 6
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  11. 1 1
      hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java
  12. 28 0
      hx-sale/src/main/java/com/fjhx/sale/service/purchase/SalePurchaseService.java
  13. 142 0
      hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/SalePurchaseServiceImpl.java
  14. 28 10
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  15. 19 17
      hx-sale/src/main/resources/mapper/pack/PackShipmentMapper.xml
  16. 5 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockWaitDetails.java
  17. 8 5
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java
  18. 1 1
      hx-wms/src/main/resources/mapper/stock/StockWaitDetailsMapper.xml

+ 10 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java

@@ -92,4 +92,14 @@ public class AccountRunningWaterVo extends AccountRunningWater {
      * 资金账户账户
      */
     private String accountManagementOpening;
+
+    /**
+     * 订单编码集合
+     */
+    private String contractCodes;
+
+    /**
+     * 销售合同id集合
+     */
+    private String contractIds;
 }

+ 10 - 7
hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.account.service.transaction.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.po.AccountManagement;
@@ -12,7 +13,6 @@ import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.account.service.transaction.TransactionDepartmentService;
 import com.fjhx.account.service.transaction.TransactionService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.ruoyi.common.utils.wrapper.SqlField;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -43,12 +43,15 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
         wrapper.eq(Transaction::getDepartmentId, dto.getDepartmentId());
         wrapper.eq(Transaction::getType, dto.getType());
         //关键字搜索
-        List<Long> accountIds = accountManagementService.listObject(AccountManagement::getId,
-                q -> q.like(AccountManagement::getName, dto.getKeyword()));
-        wrapper.keyword(dto.getKeyword(),
-                new SqlField(Transaction::getAmount),
-                new SqlField(Transaction::getRemark)
-        ).or().in(Transaction::getAccountId, accountIds);
+        if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            List<Long> accountIds = accountManagementService.listObject(AccountManagement::getId,
+                    q -> q.like(AccountManagement::getName, dto.getKeyword()));
+            wrapper.and(q -> q
+                    .like(Transaction::getAmount, dto.getKeyword())
+                    .or().like(Transaction::getRemark, dto.getKeyword())
+                    .or().in(Transaction::getAccountId, accountIds)
+            );
+        }
         //排序
         wrapper.orderByDesc("t", Transaction::getId);
         Page<TransactionVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);

+ 41 - 5
hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml

@@ -1,12 +1,48 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.account.mapper.account.AccountRunningWaterMapper">
+    <!--这段代码正常是不需要跨库查询的。但是一开始封装包的时候分装的不合理,pom里面包是不能互相引用的。account包继承sale包会出现依赖冲突,目前不好改动,只能跨库查询-->
     <select id="getPage" resultType="com.fjhx.account.entity.account.vo.AccountRunningWaterVo">
-        select arw.*,
-               am.alias accountManagementName,
-               am.corporation_id
-        from account_running_water arw
-                 left join account_management am on arw.account_management_id = am.id
+        SELECT arw.*,
+               (SELECT IF
+                           (t1.type = 20, GROUP_CONCAT(c.`code`), GROUP_CONCAT(t4.`code`)) contractCodes
+                FROM account_payment t1
+                         LEFT JOIN account_request_funds t2 ON t1.business_id = t2.id
+                         LEFT JOIN account_request_funds_detail t3 ON t2.id = t3.account_request_funds_id
+                         LEFT JOIN `bytesailing_sale`.contract t4 ON t3.contract_id = t4.id
+                    --采购付款来源
+                         LEFT JOIN bytesailing_purchase.pay pa ON t1.business_id = pa.id
+                         LEFT JOIN bytesailing_purchase.pay_detail pad
+        ON pad.pay_id = pa.id
+            LEFT JOIN bytesailing_purchase.purchase p ON pad.purchase_id = p.id
+            LEFT JOIN bytesailing_sale.contract c ON p.data_resource_id = c.id
+        WHERE
+            t1.id = arw.business_id
+            ) AS contractCodes
+            , (
+        SELECT
+            IF
+            ( t1.type = 20, GROUP_CONCAT( c.id ), GROUP_CONCAT( t4.id ) ) contractIds
+        FROM
+            account_payment t1
+            LEFT JOIN account_request_funds t2
+        ON t1.business_id = t2.id
+            LEFT JOIN account_request_funds_detail t3 ON t2.id = t3.account_request_funds_id
+            LEFT JOIN `bytesailing_sale`.contract t4 ON t3.contract_id = t4.id
+            --采购付款来源
+            LEFT JOIN bytesailing_purchase.pay pa ON t1.business_id = pa.id
+            LEFT JOIN bytesailing_purchase.pay_detail pad ON pad.pay_id = pa.id
+            LEFT JOIN bytesailing_purchase.purchase p ON pad.purchase_id = p.id
+            LEFT JOIN bytesailing_sale.contract c ON p.data_resource_id = c.id
+        WHERE
+            t1.id = arw.business_id
+            ) AS contractIds
+            , am.alias accountManagementName
+            , am.corporation_id
+        FROM
+            account_running_water arw
+            LEFT JOIN account_management am
+        ON arw.account_management_id = am.id
             ${ew.customSqlSegment}
     </select>
     <select id="getDetail" resultType="com.fjhx.account.entity.account.vo.AccountRunningWaterVo">

+ 10 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java

@@ -130,4 +130,14 @@ public class Purchase extends BasePo {
      * 业务来源ID (外销合同id)
      */
     private Long dataResourceId;
+
+    /**
+     * 0无发票  1增值税专用发票 2增值税普通发票
+     */
+    private String invoiceType;
+
+    /**
+     * 税率
+     */
+    private BigDecimal rate;
 }

+ 1 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -371,7 +371,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         if (StringUtils.isEmpty(supplyId)) {
             throw new ServiceException("供应商ID不能为空");
         }
-        List<Purchase> list = this.list(Wrappers.<Purchase>query().lambda().eq(Purchase::getSupplyId, supplyId).eq(Purchase::getPurchaseStatus, PurchaseStatusEnum.PASS.getKey()));
+        List<Purchase> list = this.list(Wrappers.<Purchase>query().lambda().eq(Purchase::getSupplyId, supplyId).eq(Purchase::getPurchaseStatus, PurchaseStatusEnum.PASS.getKey()).ne(Purchase::getInvoiceType,"0"));
         List<Long> ids = list.stream().distinct().map(Purchase::getId).collect(Collectors.toList());
         List<InvoiceDetailsVo> invoiceDetailsList = invoiceDetailsService.getSumMoneyByPurchaseIds(ids);
         Map<Long, BigDecimal> invoiceMap = invoiceDetailsList.stream().collect(Collectors.toMap(InvoiceDetailsVo::getPurchaseId, InvoiceDetailsVo::getSumMoney));

+ 12 - 2
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -1,5 +1,7 @@
 package com.fjhx.sale.controller.contract;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
@@ -12,6 +14,7 @@ import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.service.contract.ContractService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -102,8 +105,15 @@ public class ContractController {
      * 销售合同pdf
      */
     @PostMapping("/getContractPdfInfo")
-    public ContractPdfInfoVo getContractPdfInfo(@RequestBody BaseSelectDto dto) {
-        return contractService.getContractPdfInfo(dto.getId());
+    public ContractPdfInfoVo getContractPdfInfo(@RequestBody ContractDto dto) {
+        Long id;
+        if(StringUtils.isNotEmpty(dto.getCode())){
+            Contract contract = contractService.getOne(Wrappers.<Contract>query().lambda().eq(Contract::getCode,dto.getCode()).last("limit 1"));
+            id = ObjectUtils.isEmpty(contract)?0:contract.getId();
+        }else{
+            id = dto.getId();
+        }
+        return contractService.getContractPdfInfo(id);
     }
 
     /**

+ 44 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/purchase/SalePurchaseController.java

@@ -0,0 +1,44 @@
+package com.fjhx.sale.controller.purchase;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.sale.service.purchase.SalePurchaseService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 采购 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-04-06
+ */
+@DS(SourceConstant.PURCHASE)
+@RestController
+@RequestMapping("/sale/purchase")
+public class SalePurchaseController {
+
+    @Autowired
+    private SalePurchaseService salePurchaseService;
+
+    /**
+     * 采购编辑
+     */
+    @PostMapping("/cancellation")
+    public void cancellation(@RequestBody PurchaseDto purchaseDto) {
+        salePurchaseService.cancellation(purchaseDto);
+    }
+
+}

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -29,7 +29,7 @@ public class Contract extends BasePo {
     /**
      * 合同类型(1外销 2内销)
      */
-    private Integer contractType;
+    private String contractType;
 
     /**
      * 编码

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -139,5 +139,10 @@ public class ContractVo extends Contract {
 
     List<ContractShipment> contractShipmentList;
 
+    /**
+     * 合同类型字典值
+     */
+    private String contractTypeVal;
+
 }
 

+ 37 - 6
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -67,6 +67,9 @@ import com.fjhx.sale.service.contract.ContractProjectService;
 import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.contract.ContractShipmentService;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
+import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
+import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
+import com.fjhx.tenant.service.dict.DictTenantDataService;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.BaseSelectDto;
@@ -77,6 +80,7 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
 import com.ruoyi.framework.config.ThreadPoolConfig;
+import com.ruoyi.system.utils.UserUtil;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -162,6 +166,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Autowired
     private ContractShipmentService contractShipmentService;
 
+    @Autowired
+    private DictTenantDataService dictTenantDataService;
+
     /**
      * 分页
      *
@@ -219,6 +226,14 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         Page<ContractVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ContractVo> list = page.getRecords();
         if (CollectionUtils.isNotEmpty(list)) {
+            //获取合同类型字典内容
+            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+            DictTenantDataSelectDto dictTenantDataSelectDto = new DictTenantDataSelectDto();
+            dictTenantDataSelectDto.setDictCode("contract_type");
+            List<DictTenantDataVo> dictTenantDataVoList = dictTenantDataService.getList(dictTenantDataSelectDto);
+            Map<String, String> contractTypeStatusDic = dictTenantDataVoList.stream().collect(Collectors.toMap(DictTenantDataVo::getDictKey, DictTenantDataVo::getDictValue));
+            DynamicDataSourceContextHolder.poll();
+
             List<Long> customerIds = list.stream().map(Contract::getBuyCorporationId).collect(Collectors.toList());
             List<Customer> customerList = customerService.list(Wrappers.<Customer>query().lambda().in(Customer::getId, customerIds));
             Map<Long, List<Customer>> cusMap = customerList.stream().distinct().collect(Collectors.groupingBy(Customer::getId));
@@ -251,10 +266,17 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
                     p.setPackageFileInfoVOList(packageFileInfoVOList);
                 }
 
+                //获取合同类型字典内容
+                p.setContractTypeVal(contractTypeStatusDic.get(p.getContractType()));
+
             }
 
             // 赋值流程id
             flowExampleService.setFlowId(list, ContractVo::setFlowId);
+            //赋值原卖方公司名称 多公司
+            corporationService.attributeAssign(list, ContractVo::getSellCorporationId, (item, corporation) -> {
+                item.setSellCorporationName(corporation.getName());
+            });
         }
         return page;
     }
@@ -438,8 +460,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     @Override
     public ContractVo detail(Long id) {
-        Contract Contract = this.getById(id);
-        ContractVo result = BeanUtil.toBean(Contract, ContractVo.class);
+        Contract contract = this.getById(id);
+        Assert.notEmpty(contract, "查询不到合同信息");
+        ContractVo result = BeanUtil.toBean(contract, ContractVo.class);
 
         List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, id));
         productInfoService.attributeAssign(contractProductList, ContractProduct::getProductId, (item, product) -> {
@@ -458,7 +481,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             item.setProductCode(product.getCode());
         });
         result.setContractShipmentList(contractShipmentList);
-
+        //赋值国省市名称
+        Map<Long, String> areaMapByIds = CustomizeAreaUtil.getAreaMapByIds(Arrays.asList(result.getBuyCountryId(), result.getBuyProvinceId(), result.getBuyCityId()));
+        result.setBuyCountryName(areaMapByIds.get(result.getBuyCountryId()));
+        result.setBuyProvinceName(areaMapByIds.get(result.getBuyProvinceId()));
+        result.setBuyCityName(areaMapByIds.get(result.getBuyCityId()));
         return result;
     }
 
@@ -518,18 +545,18 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
         ContractPdfInfoVo contractPdfInfoVo = new ContractPdfInfoVo();
 
-        Integer contractType = contract.getContractType();
+        String contractType = contract.getContractType();
         if (contractType == null) {
             throw new ServiceException("销售合同类型为空");
         }
 
         switch (contractType) {
             // 外销合同
-            case 1:
+            case "1":
                 setExportContractInfo(contractPdfInfoVo, contract);
                 break;
             // 内销合同
-            case 2:
+            case "2":
                 // todo 内销合同实现逻辑
                 break;
             default:
@@ -1080,6 +1107,10 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         ContractDocumentaryBo bo = selectData.toJavaObject(ContractDocumentaryBo.class);
 
         IWrapper<Contract> wrapper = IWrapper.getWrapper();
+        //销售跟单权限过滤
+        List<Long> authUserIdList = UserUtil.getAuthUserIdList();
+        wrapper.in(Contract::getCreateUser, authUserIdList);
+
         wrapper.like(Contract::getCode, bo.getCode());
         wrapper.eq(Contract::getCreateUser, bo.getUserId());
         wrapper.eq(Contract::getStatus, 30);

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/service/intermediate/impl/IntermediateContractServiceImpl.java

@@ -91,7 +91,7 @@ public class IntermediateContractServiceImpl extends ServiceImpl<IntermediateCon
     public void edit(IntermediateContractDto intermediateContractDto) {
         intermediateContractDto.setId(null);
         Assert.notEmpty(intermediateContractDto.getDocumentsId(), "单证id不能为空");
-        IntermediateContract intermediateContract = this.getOne(q -> q.eq(IntermediateContract::getDocumentsId, intermediateContractDto.getId()));
+        IntermediateContract intermediateContract = this.getOne(q -> q.eq(IntermediateContract::getDocumentsId, intermediateContractDto.getDocumentsId()));
         if (ObjectUtil.isNotEmpty(intermediateContract)) {
             //编辑 赋值id
             intermediateContractDto.setId(intermediateContract.getId());

+ 28 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/SalePurchaseService.java

@@ -0,0 +1,28 @@
+package com.fjhx.sale.service.purchase;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 采购 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-06
+ */
+public interface SalePurchaseService extends BaseService<Purchase> {
+    /**
+     * 采购作废
+     */
+    void cancellation(PurchaseDto purchaseDto);
+
+}

+ 142 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/SalePurchaseServiceImpl.java

@@ -0,0 +1,142 @@
+package com.fjhx.sale.service.purchase.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.JSONWriter;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.entity.documentary.bo.DocumentaryData;
+import com.fjhx.common.enums.CodingRuleEnum;
+import com.fjhx.common.service.coding.CodingRuleService;
+import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.fjhx.purchase.entity.purchase.bo.PurchaseDocumentaryBo;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
+import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.purchase.po.PurchasePayRecordDetail;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDocumentaryVo;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.purchase.entity.subscribe.po.Subscribe;
+import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
+import com.fjhx.purchase.mapper.purchase.PurchaseMapper;
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
+import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
+import com.fjhx.purchase.service.pay.PayDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchasePayRecordDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
+import com.fjhx.purchase.service.subscribe.SubscribeService;
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.fjhx.sale.entity.sample.po.SampleProduct;
+import com.fjhx.sale.service.contract.ContractProductService;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.sale.service.purchase.SalePurchaseService;
+import com.fjhx.sale.service.sample.SampleProductService;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import com.fjhx.wms.service.warehouse.WarehouseService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 采购 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-06
+ */
+@DS(SourceConstant.PURCHASE)
+@Service
+public class SalePurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
+        implements SalePurchaseService {
+
+    @Autowired
+    private PurchaseService purchaseService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private ContractProductService contractProductService;
+
+    @Autowired
+    private SampleProductService sampleProductService;
+
+    /**
+     * 采购作废
+     * @param purchaseDto
+     */
+    @Override
+    @DSTransactional
+    public void cancellation(PurchaseDto purchaseDto) {
+        if(purchaseDto.getPurchaseStatus()==PurchaseStatusEnum.CENCELLATION.getKey()){//如果采购合同=作废//归还交接单的数量
+            //查询出当前采购的明细
+            Purchase purchase = purchaseService.getById(purchaseDto.getId());
+            List<ContractProduct> upContractProductList = new ArrayList<>();
+            List<SampleProduct> upSampleProductList = new ArrayList<>();
+            if(ObjectUtils.isNotEmpty(purchase)){
+                List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(Wrappers.<PurchaseDetail>query().lambda().eq(PurchaseDetail::getPurchaseId,purchase.getId()));
+                for(PurchaseDetail p:purchaseDetailList){
+                    if(p.getDataResource()==1){//业务来源 0自建  1外销合同采购 2:样品单
+                        //查询出外销合同产品
+                        ContractProduct contractProduct = contractProductService.getById(p.getDataResourceId());
+                        if(ObjectUtils.isEmpty(contractProduct)){
+                            throw new ServiceException("作废合同失败,当前采购产品数据有误");
+                        }
+                        BigDecimal sumExpendQuantity = contractProduct.getExpendQuantity().add(p.getCount());
+                        contractProduct.setExpendQuantity(sumExpendQuantity);
+                        upContractProductList.add(contractProduct);
+                    }
+                    if(p.getDataResource()==2){
+                        //查询出样品单产品
+                        SampleProduct sampleProduct = sampleProductService.getById(p.getDataResourceId());
+                        if(ObjectUtils.isEmpty(sampleProduct)){
+                            throw new ServiceException("作废合同失败,当前采购产品数据有误");
+                        }
+                        BigDecimal sumExpendQuantity = sampleProduct.getExpendQuantity().add(p.getCount());
+                        sampleProduct.setExpendQuantity(sumExpendQuantity);
+                        upSampleProductList.add(sampleProduct);
+                    }
+                }
+            }
+            if(CollectionUtils.isNotEmpty(upContractProductList)){
+                contractProductService.updateBatchById(upContractProductList);
+            }
+            if(CollectionUtils.isNotEmpty(upSampleProductList)){
+                sampleProductService.updateBatchById(upSampleProductList);
+            }
+        }
+        this.updateById(purchaseDto);
+    }
+}

+ 28 - 10
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -4,19 +4,21 @@
     <select id="getPage" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
         SELECT *
         FROM
-             (SELECT
-                  t1.*,
-                  IFNULL(t1.amount,0)*IFNULL(t1.rate,0) AS amountCNY,
-                  CASE
-                      WHEN (t1.amount - t1.sumClaimMoney) &lt;= 0 THEN
-                          20
+             (SELECT t1.*,
+                     IFNULL(t1.amount, 0) * IFNULL(t1.rate, 0) AS amountCNY,
+                     CASE
+                         WHEN (t1.amount - t1.sumClaimMoney) &lt;= 0 THEN
+                             20
                          WHEN t1.sumClaimMoney = 0 THEN
-                          0
+                             0
                          ELSE 10
-                      END                               AS refundStatusNew
+                         END                                   AS refundStatusNew
               FROM (SELECT t1.*,
-                           (SELECT IFNULL( SUM(IFNULL(money, 0) * IFNULL(rate,1) ), 0 ) FROM claim_contract
-                            WHERE contract_id = t1.id ) AS sumClaimMoney
+                           (SELECT IFNULL(SUM(IFNULL(cc.money, 0) * IFNULL(arw.rate, 1)), 0)
+                            FROM claim_contract cc
+                                     left join claim c on cc.claim_id = c.id
+                                     LEFT JOIN bytesailing_account.account_running_water arw on c.business_id = arw.id
+                            WHERE cc.contract_id = t1.id) AS sumClaimMoney
                     FROM contract t1) t1) t1
             ${ew.customSqlSegment}
     </select>
@@ -190,6 +192,22 @@
                  JOIN bytesailing_account.account_running_water arw ON arw.business_id = ap.id
                  LEFT JOIN bytesailing_account.account_management am ON arw.account_management_id = am.id
         WHERE c.id = #{contractId}
+        UNION ALL
+        SELECT arw.id,
+               arw.create_time,
+               30                 type,
+               arw.currency,
+               clc.money,
+               arw.remarks,
+               am.`name`          accountManagementName,
+               am.account_opening accountManagementOpening,
+               arw.`name`
+        FROM bytesailing_account.account_running_water arw
+                 JOIN claim cl ON cl.business_id = arw.id
+                 JOIN claim_contract clc ON clc.claim_id = cl.id
+                 JOIN contract c ON clc.contract_id = c.id
+                 LEFT JOIN bytesailing_account.account_management am ON arw.account_management_id = am.id
+        WHERE c.id = #{contractId}
     </select>
 
 </mapper>

+ 19 - 17
hx-sale/src/main/resources/mapper/pack/PackShipmentMapper.xml

@@ -24,36 +24,38 @@
     </select>
     <select id="productDetailList" resultType="java.util.Map">
         SELECT
-            id  as businessId,
-            remark,
-            null as subDescription,
-            null as customsCode,
-            quantity,
-            null as price,
-            10 as type
+        id as businessId,
+        remark,
+        null as subDescription,
+        null as customsCode,
+        quantity,
+        null as price,
+        10 as type
         FROM
-            pack_detail_goods dg
+        pack_detail_goods dg
         <where>
             <include refid="productDetail"/>
         </where>
         UNION
         SELECT
-            id  as businessId,
-            product_name remark,
-            null as subDescription,
-            null as customsCode,
-            quantity,
-            null as price,
-            20 as type
+        dg.id AS businessId,
+        json_unquote( pi.standard_json -> '$.englishName' ) remark,
+        dg.product_name AS subDescription,
+        json_unquote ( pi.standard_json -> '$.customsCode' ) AS customsCode,
+        dg.quantity,
+        cp.price AS price,
+        20 AS type
         FROM
-            pack_detail_product dg
+        pack_detail_product dg
+        LEFT JOIN bytesailing_item.product_info pi ON dg.product_id = pi.id
+        LEFT JOIN contract_product cp ON dg.contract_product_id = cp.id
         <where>
             <include refid="productDetail"/>
         </where>
     </select>
 
     <sql id="productDetail">
-        <foreach collection="ids" item="id" open="pack_detail_id in(" separator="," close=")">
+        <foreach collection="ids" item="id" open="dg.pack_detail_id in(" separator="," close=")">
             #{id}
         </foreach>
     </sql>

+ 5 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockWaitDetails.java

@@ -55,4 +55,9 @@ public class StockWaitDetails extends BasePo {
      */
     private BigDecimal purchaseQuantity;
 
+    /**
+     * 待入库明细状态 0待入库 1部分入库 2入库完成
+     */
+    private Integer status;
+
 }

+ 8 - 5
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java

@@ -53,9 +53,9 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
         wrapper.eq("sw", StockWait::getBusinessType, dto.getBusinessType());
 
         if (ObjectUtil.isEmpty(dto.getStatus())) {
-            wrapper.in("sw", StockWait::getStatus, 0, 1);
+            wrapper.in("swd", StockWait::getStatus, 0, 1);
         } else {
-            wrapper.eq("sw", StockWait::getStatus, dto.getStatus());
+            wrapper.eq("swd", StockWait::getStatus, dto.getStatus());
         }
 
         Page<StockWaitDetailsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
@@ -125,9 +125,12 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
             BigDecimal receiptQuantity = stockWaitDetails.getReceiptQuantity();
             receiptQuantity = ObjectUtil.isEmpty(receiptQuantity) ? BigDecimal.ZERO : receiptQuantity;
             stockWaitDetails.setReceiptQuantity(receiptQuantity.add(stockWaitDetailsDto.getQuantity()));
-//            if (stockWaitDetails.getReceiptQuantity().compareTo(stockWaitDetails.getQuantity()) > 0) {
-//                throw new ServiceException("出库数量+已出库数量不能大于待出库数量");
-//            }
+            //修改明细状态
+            if (stockWaitDetails.getReceiptQuantity().compareTo(stockWaitDetails.getQuantity()) >= 0) {
+                stockWaitDetails.setStatus(2);
+            } else {
+                stockWaitDetails.setStatus(1);
+            }
             updateById(stockWaitDetails);
         }
 

+ 1 - 1
hx-wms/src/main/resources/mapper/stock/StockWaitDetailsMapper.xml

@@ -7,7 +7,7 @@
             sw.business_code,
             sw.business_id,
             sw.business_type,
-            sw.`status`,
+            swd.`status`,
             swd.stock_wait_id,
             swd.product_id,
             swd.quantity,