Commit ffedf7d017491de4e27381b6bcf68eff3630aec9

Authored by 房远帅
1 parent fa6e1041

楚江ERP:撤销单审核流程

@@ -2,6 +2,8 @@ package com.lframework.xingyun.sc.entity; @@ -2,6 +2,8 @@ package com.lframework.xingyun.sc.entity;
2 2
3 import com.baomidou.mybatisplus.annotation.TableName; 3 import com.baomidou.mybatisplus.annotation.TableName;
4 import com.lframework.starter.web.core.dto.BaseDto; 4 import com.lframework.starter.web.core.dto.BaseDto;
  5 +
  6 +import java.math.BigDecimal;
5 import java.time.LocalDate; 7 import java.time.LocalDate;
6 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
7 import com.baomidou.mybatisplus.annotation.FieldFill; 9 import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -85,6 +87,12 @@ public class PurchaseOrderRevoke extends BaseEntity implements BaseDto { @@ -85,6 +87,12 @@ public class PurchaseOrderRevoke extends BaseEntity implements BaseDto {
85 private String confirmationVoucherFileName; 87 private String confirmationVoucherFileName;
86 88
87 /** 89 /**
  90 + * 撤销撤销数量总和(吨)(非持久化字段)
  91 + */
  92 + @TableField(exist = false)
  93 + private BigDecimal sumRevokeQuantity;
  94 +
  95 + /**
88 * 创建人ID 96 * 创建人ID
89 */ 97 */
90 @TableField(fill = FieldFill.INSERT) 98 @TableField(fill = FieldFill.INSERT)
@@ -6,6 +6,9 @@ import com.lframework.starter.bpm.service.BusinessDataHandlerService; @@ -6,6 +6,9 @@ import com.lframework.starter.bpm.service.BusinessDataHandlerService;
6 import com.lframework.starter.web.core.components.redis.RedisHandler; 6 import com.lframework.starter.web.core.components.redis.RedisHandler;
7 import com.lframework.starter.web.core.utils.JsonUtil; 7 import com.lframework.starter.web.core.utils.JsonUtil;
8 import com.lframework.xingyun.sc.entity.CorePersonnelHistory; 8 import com.lframework.xingyun.sc.entity.CorePersonnelHistory;
  9 +import com.lframework.xingyun.sc.entity.PurchaseOrderLine;
  10 +import com.lframework.xingyun.sc.entity.PurchaseOrderRevoke;
  11 +import com.lframework.xingyun.sc.entity.PurchaseOrderRevokeLine;
9 import com.lframework.xingyun.sc.enums.CustomerDevelopStatus; 12 import com.lframework.xingyun.sc.enums.CustomerDevelopStatus;
10 import com.lframework.xingyun.sc.service.contract.ContractDistributorStandardService; 13 import com.lframework.xingyun.sc.service.contract.ContractDistributorStandardService;
11 import com.lframework.xingyun.sc.service.customer.CorePersonnelHistoryService; 14 import com.lframework.xingyun.sc.service.customer.CorePersonnelHistoryService;
@@ -13,8 +16,13 @@ import com.lframework.xingyun.sc.service.customer.CustomerCreditHistoryService; @@ -13,8 +16,13 @@ import com.lframework.xingyun.sc.service.customer.CustomerCreditHistoryService;
13 import com.lframework.xingyun.sc.service.customer.CustomerCreditService; 16 import com.lframework.xingyun.sc.service.customer.CustomerCreditService;
14 import com.lframework.xingyun.sc.service.customer.CustomerDevelopPlanService; 17 import com.lframework.xingyun.sc.service.customer.CustomerDevelopPlanService;
15 import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService; 18 import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService;
  19 +import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService;
  20 +import com.lframework.xingyun.sc.service.order.PurchaseOrderRevokeLineService;
  21 +import com.lframework.xingyun.sc.service.order.PurchaseOrderRevokeService;
16 import com.lframework.xingyun.sc.vo.customer.credit.QueryCorePersonnelHistoryVo; 22 import com.lframework.xingyun.sc.vo.customer.credit.QueryCorePersonnelHistoryVo;
17 import com.lframework.xingyun.sc.vo.customer.credit.UpdateCustomerCreditVo; 23 import com.lframework.xingyun.sc.vo.customer.credit.UpdateCustomerCreditVo;
  24 +import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderLineVo;
  25 +import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderRevokeLineVo;
18 import lombok.extern.slf4j.Slf4j; 26 import lombok.extern.slf4j.Slf4j;
19 import org.apache.commons.collections.CollectionUtils; 27 import org.apache.commons.collections.CollectionUtils;
20 import org.apache.commons.collections4.MapUtils; 28 import org.apache.commons.collections4.MapUtils;
@@ -25,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
25 import org.springframework.stereotype.Component; 33 import org.springframework.stereotype.Component;
26 34
27 import javax.annotation.Resource; 35 import javax.annotation.Resource;
  36 +import java.math.BigDecimal;
28 import java.util.ArrayList; 37 import java.util.ArrayList;
29 import java.util.List; 38 import java.util.List;
30 import java.util.Map; 39 import java.util.Map;
@@ -48,6 +57,12 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -48,6 +57,12 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
48 private ContractDistributorStandardService contractDistributorStandardService; 57 private ContractDistributorStandardService contractDistributorStandardService;
49 @Resource 58 @Resource
50 private PurchaseOrderInfoService purchaseOrderInfoService; 59 private PurchaseOrderInfoService purchaseOrderInfoService;
  60 + @Resource
  61 + private PurchaseOrderLineService purchaseOrderLineService;
  62 + @Resource
  63 + private PurchaseOrderRevokeService purchaseOrderRevokeService;
  64 + @Resource
  65 + private PurchaseOrderRevokeLineService purchaseOrderRevokeLineService;
51 66
52 67
53 /** 68 /**
@@ -93,6 +108,9 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -93,6 +108,9 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
93 case "PURCHASE_ORDER": 108 case "PURCHASE_ORDER":
94 handlePurchaseOrderData(flowStatus, businessId); 109 handlePurchaseOrderData(flowStatus, businessId);
95 break; 110 break;
  111 + case "ORDER_CANCELLATION":
  112 + handlePurchaseOrderRevokeData(flowStatus, businessId);
  113 + break;
96 default: 114 default:
97 break; 115 break;
98 } 116 }
@@ -158,6 +176,62 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -158,6 +176,62 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
158 } 176 }
159 177
160 /** 178 /**
  179 + * 订货单撤销业务数据处理
  180 + *
  181 + * @param businessId 业务ID
  182 + */
  183 + private void handlePurchaseOrderRevokeData(String flowStatus, String businessId) {
  184 + if (FlowInstanceStatus.APPROVE_PASS.getCode().equals(flowStatus)
  185 + || FlowInstanceStatus.FINISH.getCode().equals(flowStatus)) {
  186 + purchaseOrderRevokeService.updateStatus(businessId, "PASS");
  187 + //撤销单物料行
  188 + QueryPurchaseOrderRevokeLineVo vo = new QueryPurchaseOrderRevokeLineVo();
  189 + vo.setPurchaseOrderRevokeId(businessId);
  190 + List<PurchaseOrderRevokeLine> query = purchaseOrderRevokeLineService.query(vo);
  191 + PurchaseOrderRevoke revoke = purchaseOrderRevokeService.findById(businessId);
  192 + QueryPurchaseOrderLineVo vo1 = new QueryPurchaseOrderLineVo();
  193 + vo1.setPurchaseOrderId(revoke.getPurchaseOrderId());
  194 + List<PurchaseOrderLine> query1 = purchaseOrderLineService.query(vo1);
  195 + //更新订货单物料行数量
  196 + if (CollectionUtils.isNotEmpty(query)) {
  197 + //是否为全部撤销
  198 + Boolean b = true;
  199 + if (query.size() < query1.size()) {
  200 + b = false;
  201 + }
  202 + for (PurchaseOrderRevokeLine purchaseOrderRevokeLine : query) {
  203 + //原数量
  204 + BigDecimal quantity = purchaseOrderRevokeLine.getQuantity();
  205 + //撤销数量kg
  206 + BigDecimal revokeQuantity = purchaseOrderRevokeLine.getRevokeQuantity();
  207 + if (revokeQuantity == null) {
  208 + revokeQuantity = BigDecimal.ZERO;
  209 + }
  210 + if (b && !(quantity != null && quantity.compareTo(revokeQuantity) == 0)) {
  211 + b = false;
  212 + }
  213 + if (quantity != null) {
  214 + BigDecimal result = quantity.subtract(revokeQuantity);
  215 + purchaseOrderLineService.updateQuantity(purchaseOrderRevokeLine.getPurchaseOrderLineId(), result);
  216 + }
  217 + }
  218 + //更新订货单撤销状态(部分撤销、全部撤销)
  219 + if (b) {
  220 + //全部撤销
  221 + purchaseOrderInfoService.updateRevokeStatus(revoke.getPurchaseOrderId(), "ALL");
  222 + } else {
  223 + //部分撤销
  224 + purchaseOrderInfoService.updateRevokeStatus(revoke.getPurchaseOrderId(), "PARTIAL");
  225 + }
  226 + }
  227 + } else if (FlowInstanceStatus.REVOKE.getCode().equals(flowStatus)
  228 + || FlowInstanceStatus.REFUSE.getCode().equals(flowStatus)
  229 + || FlowInstanceStatus.TERMINATION.getCode().equals(flowStatus)) {
  230 + purchaseOrderRevokeService.updateStatus(businessId, "REFUSE");
  231 + }
  232 + }
  233 +
  234 + /**
161 * 客户资信业务数据处理 235 * 客户资信业务数据处理
162 * 236 *
163 * @param businessId 业务ID 237 * @param businessId 业务ID
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils; @@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
28 import org.springframework.transaction.annotation.Transactional; 28 import org.springframework.transaction.annotation.Transactional;
29 import org.springframework.stereotype.Service; 29 import org.springframework.stereotype.Service;
30 30
  31 +import java.math.BigDecimal;
31 import java.util.Collections; 32 import java.util.Collections;
32 import java.util.List; 33 import java.util.List;
33 34
@@ -167,6 +168,26 @@ public class PurchaseOrderLineServiceImpl extends BaseMpServiceImpl<PurchaseOrde @@ -167,6 +168,26 @@ public class PurchaseOrderLineServiceImpl extends BaseMpServiceImpl<PurchaseOrde
167 OpLogUtil.setExtra(vo); 168 OpLogUtil.setExtra(vo);
168 } 169 }
169 170
  171 + @OpLog(type = OtherOpLogType.class, name = "修改订货单表物料行数量,ID:{}", params = {"#id"})
  172 + @Transactional(rollbackFor = Exception.class)
  173 + @Override
  174 + public void updateQuantity(String id, BigDecimal quantity) {
  175 +
  176 + PurchaseOrderLine data = getBaseMapper().selectById(id);
  177 + if (ObjectUtil.isNull(data)) {
  178 + throw new DefaultClientException("订货单表物料行不存在!");
  179 + }
  180 +
  181 + LambdaUpdateWrapper<PurchaseOrderLine> updateWrapper = Wrappers.lambdaUpdate(PurchaseOrderLine.class)
  182 + .set(PurchaseOrderLine::getQuantity, quantity)
  183 + .eq(PurchaseOrderLine::getId, id);
  184 +
  185 + getBaseMapper().update(updateWrapper);
  186 +
  187 + OpLogUtil.setVariable("id", data.getId());
  188 + OpLogUtil.setExtra(id);
  189 + }
  190 +
170 @OpLog(type = OtherOpLogType.class, name = "删除订货单表物料行,ID:{}", params = {"#id"}) 191 @OpLog(type = OtherOpLogType.class, name = "删除订货单表物料行,ID:{}", params = {"#id"})
171 @Transactional(rollbackFor = Exception.class) 192 @Transactional(rollbackFor = Exception.class)
172 @Override 193 @Override
@@ -3,6 +3,7 @@ package com.lframework.xingyun.sc.impl.order; @@ -3,6 +3,7 @@ package com.lframework.xingyun.sc.impl.order;
3 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 3 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
4 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 4 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5 import com.github.pagehelper.PageInfo; 5 import com.github.pagehelper.PageInfo;
  6 +import com.lframework.starter.bpm.service.FlowInstanceWrapperService;
6 import com.lframework.starter.common.utils.CollectionUtil; 7 import com.lframework.starter.common.utils.CollectionUtil;
7 import com.lframework.starter.web.core.impl.BaseMpServiceImpl; 8 import com.lframework.starter.web.core.impl.BaseMpServiceImpl;
8 import com.lframework.starter.web.core.utils.PageResultUtil; 9 import com.lframework.starter.web.core.utils.PageResultUtil;
@@ -29,16 +30,21 @@ import org.springframework.transaction.annotation.Transactional; @@ -29,16 +30,21 @@ import org.springframework.transaction.annotation.Transactional;
29 import org.springframework.stereotype.Service; 30 import org.springframework.stereotype.Service;
30 31
31 import javax.annotation.Resource; 32 import javax.annotation.Resource;
  33 +import java.math.BigDecimal;
  34 +import java.math.RoundingMode;
32 import java.time.LocalDate; 35 import java.time.LocalDate;
33 import java.util.List; 36 import java.util.List;
34 37
35 @Service 38 @Service
36 public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOrderRevokeMapper, PurchaseOrderRevoke> implements PurchaseOrderRevokeService { 39 public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOrderRevokeMapper, PurchaseOrderRevoke> implements PurchaseOrderRevokeService {
  40 + private static final String BPM_FLAG = "ORDER_CANCELLATION";
37 41
38 @Resource 42 @Resource
39 private PurchaseOrderRevokeLineService purchaseOrderRevokeLineService; 43 private PurchaseOrderRevokeLineService purchaseOrderRevokeLineService;
40 @Resource 44 @Resource
41 private PurchaseOrderInfoService purchaseOrderInfoService; 45 private PurchaseOrderInfoService purchaseOrderInfoService;
  46 + @Resource
  47 + private FlowInstanceWrapperService flowInstanceWrapperService;
42 48
43 49
44 @Override 50 @Override
@@ -108,6 +114,7 @@ public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOr @@ -108,6 +114,7 @@ public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOr
108 OpLogUtil.setExtra(vo); 114 OpLogUtil.setExtra(vo);
109 115
110 //新增订货单撤销表物料行 116 //新增订货单撤销表物料行
  117 + BigDecimal sumRevokeQuantity = BigDecimal.ZERO;
111 if (CollectionUtil.isNotEmpty(vo.getPurchaseOrderRevokeLineList())) { 118 if (CollectionUtil.isNotEmpty(vo.getPurchaseOrderRevokeLineList())) {
112 List<PurchaseOrderRevokeLine> purchaseOrderRevokeLineList = vo.getPurchaseOrderRevokeLineList(); 119 List<PurchaseOrderRevokeLine> purchaseOrderRevokeLineList = vo.getPurchaseOrderRevokeLineList();
113 for (PurchaseOrderRevokeLine purchaseOrderRevokeLine : purchaseOrderRevokeLineList) { 120 for (PurchaseOrderRevokeLine purchaseOrderRevokeLine : purchaseOrderRevokeLineList) {
@@ -129,14 +136,25 @@ public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOr @@ -129,14 +136,25 @@ public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOr
129 vo1.setQuantity(purchaseOrderRevokeLine.getQuantity()); 136 vo1.setQuantity(purchaseOrderRevokeLine.getQuantity());
130 vo1.setSalesPrice(purchaseOrderRevokeLine.getSalesPrice()); 137 vo1.setSalesPrice(purchaseOrderRevokeLine.getSalesPrice());
131 vo1.setDeliveryDate(purchaseOrderRevokeLine.getDeliveryDate()); 138 vo1.setDeliveryDate(purchaseOrderRevokeLine.getDeliveryDate());
  139 + if (purchaseOrderRevokeLine.getRevokeQuantity() != null) {
  140 + BigDecimal value = new BigDecimal(String.valueOf(purchaseOrderRevokeLine.getRevokeQuantity()));
  141 + // 累加,注意要重新赋值
  142 + sumRevokeQuantity = sumRevokeQuantity.add(value);
  143 + }
132 vo1.setRevokeQuantity(purchaseOrderRevokeLine.getRevokeQuantity()); 144 vo1.setRevokeQuantity(purchaseOrderRevokeLine.getRevokeQuantity());
133 vo1.setShowOrder(purchaseOrderRevokeLine.getShowOrder()); 145 vo1.setShowOrder(purchaseOrderRevokeLine.getShowOrder());
134 purchaseOrderRevokeLineService.create(vo1); 146 purchaseOrderRevokeLineService.create(vo1);
135 } 147 }
136 } 148 }
  149 + // 转换为吨:除以 1000
  150 + BigDecimal bigDecimal = sumRevokeQuantity.divide(new BigDecimal("1000"), 6, RoundingMode.HALF_UP);
  151 + data.setSumRevokeQuantity(bigDecimal);
137 //更新订货单撤销状态为:撤销中 152 //更新订货单撤销状态为:撤销中
138 purchaseOrderInfoService.updateRevokeStatus(vo.getPurchaseOrderId(), "UNDOING"); 153 purchaseOrderInfoService.updateRevokeStatus(vo.getPurchaseOrderId(), "UNDOING");
139 154
  155 + //开启审核
  156 + flowInstanceWrapperService.startInstance(BPM_FLAG, data.getId(), BPM_FLAG, data);
  157 +
140 return data.getId(); 158 return data.getId();
141 } 159 }
142 160
@@ -161,12 +179,23 @@ public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOr @@ -161,12 +179,23 @@ public class PurchaseOrderRevokeServiceImpl extends BaseMpServiceImpl<PurchaseOr
161 getBaseMapper().update(updateWrapper); 179 getBaseMapper().update(updateWrapper);
162 180
163 //撤销单物料行修改 181 //撤销单物料行修改
  182 + BigDecimal sumRevokeQuantity = BigDecimal.ZERO;
164 List<UpdatePurchaseOrderRevokeLineVo> voList = vo.getUpdatePurchaseOrderRevokeLineVoList(); 183 List<UpdatePurchaseOrderRevokeLineVo> voList = vo.getUpdatePurchaseOrderRevokeLineVoList();
165 if (CollectionUtil.isNotEmpty(voList)) { 184 if (CollectionUtil.isNotEmpty(voList)) {
166 for (UpdatePurchaseOrderRevokeLineVo vo1 : voList) { 185 for (UpdatePurchaseOrderRevokeLineVo vo1 : voList) {
  186 + if (vo1.getRevokeQuantity() != null) {
  187 + BigDecimal value = new BigDecimal(String.valueOf(vo1.getRevokeQuantity()));
  188 + // 累加,注意要重新赋值
  189 + sumRevokeQuantity = sumRevokeQuantity.add(value);
  190 + }
167 purchaseOrderRevokeLineService.update(vo1); 191 purchaseOrderRevokeLineService.update(vo1);
168 } 192 }
169 } 193 }
  194 + // 转换为吨:除以 1000
  195 + BigDecimal bigDecimal = sumRevokeQuantity.divide(new BigDecimal("1000"), 6, RoundingMode.HALF_UP);
  196 + data.setSumRevokeQuantity(bigDecimal);
  197 + //开启审核
  198 + flowInstanceWrapperService.startInstance(BPM_FLAG, data.getId(), BPM_FLAG, data);
170 199
171 OpLogUtil.setVariable("id", data.getId()); 200 OpLogUtil.setVariable("id", data.getId());
172 OpLogUtil.setExtra(vo); 201 OpLogUtil.setExtra(vo);
@@ -6,6 +6,8 @@ import com.lframework.xingyun.sc.entity.PurchaseOrderLine; @@ -6,6 +6,8 @@ import com.lframework.xingyun.sc.entity.PurchaseOrderLine;
6 import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderLineVo; 6 import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderLineVo;
7 import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderLineVo; 7 import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderLineVo;
8 import com.lframework.xingyun.sc.vo.order.UpdatePurchaseOrderLineVo; 8 import com.lframework.xingyun.sc.vo.order.UpdatePurchaseOrderLineVo;
  9 +
  10 +import java.math.BigDecimal;
9 import java.util.List; 11 import java.util.List;
10 12
11 /** 13 /**
@@ -47,6 +49,14 @@ public interface PurchaseOrderLineService extends BaseMpService<PurchaseOrderLin @@ -47,6 +49,14 @@ public interface PurchaseOrderLineService extends BaseMpService<PurchaseOrderLin
47 void update(UpdatePurchaseOrderLineVo vo); 49 void update(UpdatePurchaseOrderLineVo vo);
48 50
49 /** 51 /**
  52 + * 修改数量
  53 + *
  54 + * @param id 主建
  55 + * @param quantity 数量
  56 + */
  57 + void updateQuantity(String id, BigDecimal quantity);
  58 +
  59 + /**
50 * 根据ID删除 60 * 根据ID删除
51 * @param id 61 * @param id
52 * @return 62 * @return