Bläddra i källkod

样品单、交接单变更逻辑更改

caozj 1 år sedan
förälder
incheckning
129dd68a83

+ 2 - 1
hx-common/src/main/java/com/fjhx/common/enums/FlowStatusEnum1.java

@@ -17,7 +17,8 @@ public enum FlowStatusEnum1 {
     UNDER_REVIEW(10, "审批中"),
     REJECT(20, "驳回"),
     PASS(30, "通过"),
-    UPDATE(70, "变更"),
+    UPDATE_LOADING(60, "变更中"),
+    UPDATE(70, "已变更"),
     CANCELLATION(88, "作废"),
     TERMINATION(99, "终止"),
     ;

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

@@ -367,4 +367,7 @@ public class Contract extends BasePo {
      */
     private String effective;
 
+    @TableField(exist = false)
+    private Long upId;
+
 }

+ 3 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/sample/po/Sample.java

@@ -290,4 +290,7 @@ public class Sample extends BasePo {
     @TableField(exist = false)
     private List<SampleProject> sampleProjectList;
 
+    @TableField(exist = false)
+    private Long upId;
+
 }

+ 1 - 2
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -71,7 +71,7 @@ public class ContractFlow extends FlowDelegate {
         if(StringUtils.isEmpty(contract.getCurrency())){
             throw new ServiceException("币种不能为空");
         }
-
+        contract.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
         contract.setCode(codingRuleService.createCode(CodingRuleEnum.CONTRACT.getKey(), contract.getBuyCorporationId()));
 
         // 保存合同产品
@@ -117,7 +117,6 @@ public class ContractFlow extends FlowDelegate {
         contract.setId(contractId);
         SysUser loginUser = SecurityUtils.getLoginUser().getUser();
         contract.setUserName(loginUser.getNickName());
-        contract.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
         contract.setBuyCityId(contract.getCityId());
         contract.setBuyCountryId(contract.getCountryId());
         contract.setBuyProvinceId(contract.getProvinceId());

+ 18 - 6
hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java

@@ -3,10 +3,7 @@ package com.fjhx.sale.flow;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.toolkit.*;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.flow.core.FlowDelegate;
@@ -16,6 +13,7 @@ import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.po.ContractProject;
 import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.fjhx.sale.entity.sample.po.Sample;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractProjectService;
 import com.fjhx.sale.service.contract.ContractService;
@@ -103,6 +101,7 @@ public class ContractUpdateFlow extends FlowDelegate {
             code = code.substring(0, code.lastIndexOf("("));
         }
         contract.setCode(code + "(" + index + ")");
+        contract.setStatus(FlowStatusEnum1.UPDATE_LOADING.getKey());
         /**
          * 计算新合同的剩余数量
          */
@@ -151,13 +150,25 @@ public class ContractUpdateFlow extends FlowDelegate {
         if (oldContract == null) {
             throw new ServiceException("原合同不存在");
         }
+        long temOldId = IdWorker.getId();
+        long temNewId = IdWorker.getId();
+        Contract temOldUpContract = new Contract();
+        temOldUpContract.setId(temOldId);
+        temOldUpContract.setUpId(oldContractId);
+        Contract temNewUpContract = new Contract();
+        temNewUpContract.setId(temNewId);
+        temNewUpContract.setUpId(businessId);
+        //替换新旧数据ID为临时ID
+        contractService.updateContract(temOldUpContract);
+        contractService.updateContract(temNewUpContract);
         /**
          * 处理新合同---
          */
         newContract.setId(oldContractId);//id赋值为旧合同的id
         newContract.setStatus(FlowStatusEnum1.PASS.getKey());
         newContract.setApprovedDate(new Date());
-        contractService.update(newContract,Wrappers.<Contract>query().lambda().eq(Contract::getId,businessId));
+        newContract.setUpId(businessId);
+        contractService.updateContract(newContract);
         //修改合同产品相关数据
         contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,oldContractId).eq(ContractProduct::getContractId,businessId));
         //修改合同收费相关数据
@@ -170,7 +181,8 @@ public class ContractUpdateFlow extends FlowDelegate {
         oldContract.setId(businessId);
         oldContract.setStatus(FlowStatusEnum1.UPDATE.getKey());
         oldContract.setIsChange("1");
-        contractService.update(oldContract,Wrappers.<Contract>query().lambda().eq(Contract::getId,oldContractId));
+        newContract.setUpId(oldContractId);
+        contractService.updateContract(oldContract);
         //修改合同产品相关数据
         contractProductService.update(Wrappers.<ContractProduct>update().lambda().set(ContractProduct::getContractId,businessId).eq(ContractProduct::getContractId,oldContractId));
         //修改合同收费相关数据

+ 5 - 3
hx-sale/src/main/java/com/fjhx/sale/flow/SampleFlow.java

@@ -79,17 +79,17 @@ public class SampleFlow extends FlowDelegate {
 
         SampleDto sample = submitData.toJavaObject(SampleDto.class);
         sample.setCode(codingRuleService.createCode(CodingRuleEnum.SAMPLE.getKey(),sample.getBuyCorporationId()));
-        long id = start(sample);
+        sample.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
+        long id = start(sample,0);
         return id;
     }
-    public Long start(SampleDto sample){
+    public Long start(SampleDto sample,int type){
         //赋值城市省份信息
         CustomizeAreaUtil.setAreaId(sample);
         sample.setBuyCityId(sample.getCityId());
         sample.setBuyCountryId(sample.getCountryId());
         sample.setBuyProvinceId(sample.getProvinceId());
 //        sample.setCode(CodeEnum.SAMPLE_CODE.getCode());
-        sample.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
         sample.setUserName(SecurityUtils.getUsername());
 
         sampleService.save(sample);
@@ -106,6 +106,7 @@ public class SampleFlow extends FlowDelegate {
         List<SampleProject> sampleProjectList = sample.getSampleProjectList();
         if(CollectionUtils.isNotEmpty(sampleProjectList)){//保存收费项目
             for(SampleProject c : sampleProjectList){
+                c.setId(IdWorker.getId());
                 c.setSampleId(sample.getId());
             }
             sampleProjectService.saveBatch(sampleProjectList);
@@ -113,6 +114,7 @@ public class SampleFlow extends FlowDelegate {
         List<SampleShipment> sampleShipmentList = sample.getSampleShipmentList();
         if(CollectionUtils.isNotEmpty(sampleShipmentList)){//保存自定义出货
             for(SampleShipment c : sampleShipmentList){
+                c.setId(IdWorker.getId());
                 c.setSampleId(sample.getId());
             }
             sampleShipmentService.saveBatch(sampleShipmentList);

+ 18 - 7
hx-sale/src/main/java/com/fjhx/sale/flow/SampleUpdateFlow.java

@@ -2,10 +2,7 @@ package com.fjhx.sale.flow;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.toolkit.*;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.sale.entity.sample.dto.SampleDto;
@@ -97,6 +94,7 @@ public class SampleUpdateFlow extends FlowDelegate {
             code = code.substring(0, code.lastIndexOf("("));
         }
         newSample.setCode(code + "(" + index + ")");
+        newSample.setStatus(FlowStatusEnum1.UPDATE_LOADING.getKey());
         /**
          * 计算新样品单的剩余数量
          */
@@ -123,7 +121,7 @@ public class SampleUpdateFlow extends FlowDelegate {
                 }
             }
         }
-        return sampleFlow.start(newSample);
+        return sampleFlow.start(newSample,1);
     }
 
     /**
@@ -145,13 +143,25 @@ public class SampleUpdateFlow extends FlowDelegate {
         if (oldSample == null) {
             throw new ServiceException("原样品单不存在");
         }
+        long temOldId = IdWorker.getId();
+        long temNewId = IdWorker.getId();
+        Sample temOldUpSample = new Sample();
+        temOldUpSample.setId(temOldId);
+        temOldUpSample.setUpId(oldSampleId);
+        Sample temNewUpSample = new Sample();
+        temNewUpSample.setId(temNewId);
+        temNewUpSample.setUpId(businessId);
+        //替换新旧数据ID为临时ID
+        sampleService.updateSample(temOldUpSample);
+        sampleService.updateSample(temNewUpSample);
         /**
          * 处理新样品单---
          */
         newSample.setId(oldSampleId);//id赋值为旧样品单的id
         newSample.setStatus(FlowStatusEnum1.PASS.getKey());
         newSample.setApprovedDate(new Date());
-        sampleService.update(newSample,Wrappers.<Sample>query().lambda().eq(Sample::getId,businessId));
+        newSample.setUpId(businessId);
+        sampleService.updateSample(newSample);
         //修改样品单产品相关数据
         sampleProductService.update(Wrappers.<SampleProduct>update().lambda().set(SampleProduct::getSampleId,oldSampleId).eq(SampleProduct::getSampleId,businessId));
         //修改样品单收费相关数据
@@ -164,7 +174,8 @@ public class SampleUpdateFlow extends FlowDelegate {
         oldSample.setId(businessId);
         oldSample.setStatus(FlowStatusEnum1.UPDATE.getKey());
         oldSample.setIsChange("1");
-        sampleService.update(oldSample,Wrappers.<Sample>query().lambda().eq(Sample::getId,oldSampleId));
+        oldSample.setUpId(oldSampleId);
+        sampleService.updateSample(oldSample);
         //修改样品单产品相关数据
         sampleProductService.update(Wrappers.<SampleProduct>update().lambda().set(SampleProduct::getSampleId,businessId).eq(SampleProduct::getSampleId,oldSampleId));
         //修改样品单收费相关数据

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -99,4 +99,6 @@ public interface ContractMapper extends BaseMapper<Contract> {
 
     Page<ContractVo> getContractAndSamplePagez(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
 
+    void updateContract(Contract contract);
+
 }

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/sample/SampleMapper.java

@@ -31,4 +31,6 @@ public interface SampleMapper extends BaseMapper<Sample> {
      * @return
      */
     Page<ContractProductVo> sampleHandoverList(@Param("page") Page<Object> page, @Param("ew") IWrapper<Sample> wrapper);
+
+    void updateSample(Sample sample);
 }

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -183,4 +183,6 @@ public interface ContractService extends BaseService<Contract> {
      * 根据合同id获取合同的资金流水信息
      */
     List<AccountRunningWaterVo> getAccountRunningWaterByContractId(Long contractId);
+
+    void updateContract(Contract contract);
 }

+ 18 - 2
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -97,6 +97,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.core.context.SecurityContext;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -499,6 +500,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
                 /**
                  * 处理退税金额
                  */
+                v.setRefundableAmount(BigDecimal.ZERO);
                 List<TaxRefundDetails> rList = refundDetailsMap.getOrDefault(v.getContractId(),null);
                 if(CollectionUtils.isNotEmpty(rList)){
                     BigDecimal taxReturnMoney = rList.stream().map(taxRefundDetails -> {
@@ -522,6 +524,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
                 /**
                  * 处理退税金额
                  */
+                v.setRefundableAmount(BigDecimal.ZERO);
                 List<TaxRefundDetails> rList = refundDetailsMap.getOrDefault(v.getContractId(),null);
                 if(CollectionUtils.isNotEmpty(rList)){
                     BigDecimal taxReturnMoney = rList.stream().map(taxRefundDetails -> {
@@ -559,8 +562,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             //计算毛利 收入-支出
             v.setGross(v.getIncomeAmount().subtract(v.getExpenditureAmount()));
             //计算毛利率 毛利/收入
-            v.setGrossRate(v.getGross().divide(v.getIncomeAmount(), RoundingMode.CEILING).multiply(new BigDecimal("100")));
-
+            if(v.getGross().compareTo(BigDecimal.ZERO)==0){
+                v.setGrossRate(BigDecimal.ZERO);
+            }else{
+                v.setGrossRate(v.getGross().divide(v.getIncomeAmount(), RoundingMode.CEILING).multiply(new BigDecimal("100")));
+            }
         }
         return page;
     }
@@ -1724,6 +1730,16 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         return baseMapper.getAccountRunningWaterByContractId(contractId);
     }
 
+    /**
+     * 修改合同
+     * @param contract
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateContract(Contract contract) {
+        baseMapper.updateContract(contract);
+    }
+
 
     /**
      * 获取应退税金额,应退税金额=付货款 * (税额/100) / (1 + (税额/100))

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/service/sample/SampleService.java

@@ -56,4 +56,6 @@ public interface SampleService extends BaseService<Sample> {
     Page<ContractProductVo> sampleHandoverList(SampleSelectDto dto);
 
     SamplePdfInfoVo getSamplePdfInfo(Long id);
+
+    void updateSample(Sample sample);
 }

+ 11 - 0
hx-sale/src/main/java/com/fjhx/sale/service/sample/impl/SampleServiceImpl.java

@@ -58,6 +58,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.core.context.SecurityContext;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
@@ -306,6 +307,16 @@ public class SampleServiceImpl extends ServiceImpl<SampleMapper, Sample> impleme
     }
 
     /**
+     * 修改数据
+     * @param sample
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateSample(Sample sample) {
+        this.baseMapper.updateSample(sample);
+    }
+
+    /**
      * 赋值样品单信息
      */
     private void setExportSampleInfo(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {

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

@@ -283,4 +283,14 @@
         ${ew.customSqlSegment}
     </select>
 
+    <update id="updateContract" parameterType="com.fjhx.sale.entity.contract.po.Contract">
+        update contract
+        <set>
+            <if test="id != null and id != '' ">id = #{id},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="approvedDate != null">approved_date = DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s'),</if>
+            update_time = sysdate()
+        </set>
+        where id = #{upId}
+    </update>
 </mapper>

+ 10 - 0
hx-sale/src/main/resources/mapper/sample/SampleMapper.xml

@@ -50,5 +50,15 @@
             t2.id = t3.business_id
         ${ew.customSqlSegment}
     </select>
+    <update id="updateSample" parameterType="com.fjhx.sale.entity.sample.po.Sample">
+        update sample
+        <set>
+            <if test="id != null and id != '' ">id = #{id},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+            <if test="approvedDate != null">approved_date = DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s'),</if>
+            update_time = sysdate()
+        </set>
+        where id = #{upId}
+    </update>
 
 </mapper>