Commit c9baf587e6a1f4f4e3b2621298c63f1110eaed12

Authored by yeqianyong
1 parent 864c91b5

楚江erp:样品反馈单基础接口开发

1 1 package com.lframework.xingyun.sc.bo.sample.feedback;
2 2
3 3 import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.lframework.starter.web.core.utils.ApplicationUtil;
  5 +import com.lframework.xingyun.basedata.entity.Customer;
  6 +import com.lframework.xingyun.basedata.entity.Workshop;
  7 +import com.lframework.xingyun.basedata.service.customer.CustomerService;
  8 +import com.lframework.xingyun.basedata.service.workshop.WorkshopService;
  9 +import com.lframework.xingyun.sc.entity.PurchaseOrderInfo;
4 10 import com.lframework.xingyun.sc.entity.SampleFeedbackTrackingDetail;
5 11 import com.lframework.xingyun.sc.entity.SampleResultFeedback;
6 12 import com.lframework.starter.common.constants.StringPool;
... ... @@ -8,9 +14,11 @@ import com.lframework.starter.web.core.bo.BaseBo;
8 14 import java.time.LocalDateTime;
9 15 import java.util.List;
10 16
  17 +import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService;
11 18 import io.swagger.annotations.ApiModelProperty;
12 19
13 20 import lombok.Data;
  21 +import org.apache.commons.lang3.StringUtils;
14 22
15 23 /**
16 24 * <p>
... ... @@ -111,6 +119,20 @@ public class GetSampleResultFeedbackBo extends BaseBo<SampleResultFeedback> {
111 119
112 120 @Override
113 121 protected void afterInit(SampleResultFeedback dto) {
114   -
  122 + if (StringUtils.isNotBlank(dto.getCustomerId())) {
  123 + CustomerService customerService = ApplicationUtil.getBean(CustomerService.class);
  124 + Customer customer = customerService.findById(dto.getCustomerId());
  125 + this.customerName = customer == null ? null : customer.getName();
  126 + }
  127 + if (StringUtils.isNotBlank(dto.getWorkshopId())) {
  128 + WorkshopService workshopService = ApplicationUtil.getBean(WorkshopService.class);
  129 + Workshop workshop = workshopService.findById(dto.getWorkshopId());
  130 + this.workshopName = workshop == null ? null : workshop.getName();
  131 + }
  132 + if (StringUtils.isNotBlank(dto.getOrderId())) {
  133 + PurchaseOrderInfoService purchaseOrderInfoService = ApplicationUtil.getBean(PurchaseOrderInfoService.class);
  134 + PurchaseOrderInfo orderInfo = purchaseOrderInfoService.findById(dto.getOrderId());
  135 + this.orderNo = orderInfo == null ? null : orderInfo.getOrderNo();
  136 + }
115 137 }
116 138 }
... ...
... ... @@ -3,6 +3,8 @@ package com.lframework.xingyun.sc.entity;
3 3 import com.baomidou.mybatisplus.annotation.TableName;
4 4 import com.lframework.starter.web.core.dto.BaseDto;
5 5 import java.time.LocalDateTime;
  6 +import java.util.List;
  7 +
6 8 import com.baomidou.mybatisplus.annotation.FieldFill;
7 9 import com.lframework.starter.web.core.entity.BaseEntity;
8 10 import com.baomidou.mybatisplus.annotation.TableField;
... ... @@ -59,6 +61,12 @@ public class SampleResultFeedback extends BaseEntity implements BaseDto {
59 61 private String orderNo;
60 62
61 63 /**
  64 + * 反馈单明细数据
  65 + */
  66 + @TableField(exist = false)
  67 + private List<SampleFeedbackTrackingDetail> detailList;
  68 +
  69 + /**
62 70 * 创建人ID
63 71 */
64 72 @TableField(fill = FieldFill.INSERT)
... ...
1 1 package com.lframework.xingyun.sc.impl.sample;
2 2
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
3 5 import com.lframework.xingyun.sc.entity.SampleFeedbackTrackingDetail;
4 6 import com.lframework.starter.web.core.impl.BaseMpServiceImpl;
5 7 import com.lframework.starter.web.core.annotations.oplog.OpLog;
6 8 import com.lframework.starter.web.inner.components.oplog.OtherOpLogType;
7 9 import com.lframework.xingyun.sc.vo.sample.tracking.QuerySampleFeedbackTrackingDetailVo;
  10 +import org.apache.commons.collections4.CollectionUtils;
8 11 import org.springframework.transaction.annotation.Transactional;
9 12 import com.lframework.xingyun.sc.mappers.SampleFeedbackTrackingDetailMapper;
10 13 import com.lframework.xingyun.sc.service.sample.SampleFeedbackTrackingDetailService;
... ... @@ -38,7 +41,13 @@ public class SampleFeedbackTrackingDetailServiceImpl extends BaseMpServiceImpl<S
38 41
39 42 @Override
40 43 public List<SampleFeedbackTrackingDetail> listByFeedbackIds(List<String> feedbackIds) {
41   - return Collections.emptyList();
  44 + if (CollectionUtils.isEmpty(feedbackIds)) {
  45 + return Collections.emptyList();
  46 + }
  47 + LambdaQueryWrapper<SampleFeedbackTrackingDetail> queryWrapper = Wrappers.lambdaQuery(SampleFeedbackTrackingDetail.class);
  48 + queryWrapper.in(SampleFeedbackTrackingDetail::getFeedbackId, feedbackIds);
  49 +
  50 + return getBaseMapper().selectList(queryWrapper);
42 51 }
43 52
44 53 @Override
... ...
1 1 package com.lframework.xingyun.sc.impl.sample;
2 2
3 3 import com.github.pagehelper.PageInfo;
4   -import com.lframework.xingyun.sc.entity.SampleFeedbackTrackingDetail;
5   -import com.lframework.xingyun.sc.entity.SampleResultFeedback;
  4 +import com.lframework.starter.web.core.utils.IdUtil;
  5 +import com.lframework.xingyun.sc.entity.*;
6 6 import com.lframework.starter.web.core.impl.BaseMpServiceImpl;
7 7 import com.lframework.starter.web.core.utils.PageResultUtil;
8 8 import com.lframework.starter.web.core.components.resp.PageResult;
... ... @@ -10,8 +10,11 @@ import com.lframework.starter.web.core.annotations.oplog.OpLog;
10 10 import com.lframework.starter.web.core.utils.PageHelperUtil;
11 11 import com.lframework.starter.common.utils.Assert;
12 12 import com.lframework.starter.web.inner.components.oplog.OtherOpLogType;
  13 +import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService;
13 14 import com.lframework.xingyun.sc.service.sample.SampleFeedbackTrackingDetailService;
  15 +import com.lframework.xingyun.sc.service.shipments.ShipmentsPlanDetailService;
14 16 import org.apache.commons.collections4.CollectionUtils;
  17 +import org.apache.commons.lang3.BooleanUtils;
15 18 import org.springframework.transaction.annotation.Transactional;
16 19 import com.lframework.xingyun.sc.mappers.SampleResultFeedbackMapper;
17 20 import com.lframework.xingyun.sc.service.sample.SampleResultFeedbackService;
... ... @@ -19,9 +22,7 @@ import com.lframework.xingyun.sc.vo.sample.feedback.QuerySampleResultFeedbackVo;
19 22 import org.springframework.stereotype.Service;
20 23
21 24 import javax.annotation.Resource;
22   -import java.util.Collections;
23   -import java.util.List;
24   -import java.util.stream.Collectors;
  25 +import java.util.*;
25 26
26 27 @Service
27 28 public class SampleResultFeedbackServiceImpl extends BaseMpServiceImpl<SampleResultFeedbackMapper, SampleResultFeedback> implements SampleResultFeedbackService {
... ... @@ -29,6 +30,10 @@ public class SampleResultFeedbackServiceImpl extends BaseMpServiceImpl<SampleRes
29 30
30 31 @Resource
31 32 private SampleFeedbackTrackingDetailService sampleFeedbackTrackingDetailService;
  33 + @Resource
  34 + private PurchaseOrderLineService purchaseOrderLineService;
  35 + @Resource
  36 + private ShipmentsPlanDetailService shipmentsPlanDetailService;
32 37
33 38
34 39 @Override
... ... @@ -44,20 +49,18 @@ public class SampleResultFeedbackServiceImpl extends BaseMpServiceImpl<SampleRes
44 49
45 50 @Override
46 51 public List<SampleResultFeedback> query(QuerySampleResultFeedbackVo vo) {
47   - List<SampleResultFeedback> feedbackList = getBaseMapper().query(vo);
48   - if (CollectionUtils.isEmpty(feedbackList)) {
49   - return Collections.emptyList();
50   - }
51   - List<String> feedbackIds = feedbackList.stream().map(SampleResultFeedback::getId).collect(Collectors.toList());
52   - List<SampleFeedbackTrackingDetail> detailList = sampleFeedbackTrackingDetailService.listByFeedbackIds(feedbackIds);
53 52
54 53 return getBaseMapper().query(vo);
55 54 }
56 55
57 56 @Override
58 57 public SampleResultFeedback findById(String id) {
59   -
60   - return getBaseMapper().selectById(id);
  58 + SampleResultFeedback sampleResultFeedback = getBaseMapper().selectById(id);
  59 + if (sampleResultFeedback != null) {
  60 + List<SampleFeedbackTrackingDetail> detailList = sampleFeedbackTrackingDetailService.listByFeedbackIds(Collections.singletonList(id));
  61 + sampleResultFeedback.setDetailList(detailList);
  62 + }
  63 + return sampleResultFeedback;
61 64 }
62 65
63 66 @OpLog(type = OtherOpLogType.class, name = "删除产品试样结果反馈单,ID:{}", params = {"#id"})
... ... @@ -67,4 +70,87 @@ public class SampleResultFeedbackServiceImpl extends BaseMpServiceImpl<SampleRes
67 70
68 71 getBaseMapper().deleteById(id);
69 72 }
  73 +
  74 + @Override
  75 + @Transactional(rollbackFor = Exception.class)
  76 + public void generateFeedbackData(List<PurchaseOrderInfo> orderInfoList, List<String> shipmentsDetailIds) {
  77 + if (CollectionUtils.isEmpty(orderInfoList) || CollectionUtils.isEmpty(shipmentsDetailIds)) {
  78 + return;
  79 + }
  80 + // 获取发货明细数据
  81 + List<ShipmentsPlanDetail> shipmentsDetailList = shipmentsPlanDetailService.listByIds(shipmentsDetailIds);
  82 + if (CollectionUtils.isEmpty(shipmentsDetailList)) {
  83 + return;
  84 + }
  85 + List<String> orderSpecIds = new ArrayList<>();
  86 + Map<String, ShipmentsPlanDetail> shipmentsDetailMap = new HashMap<>();
  87 + for (ShipmentsPlanDetail shipmentsDetail : shipmentsDetailList) {
  88 + String orderSpecId = shipmentsDetail.getOrderSpecId();
  89 + orderSpecIds.add(orderSpecId);
  90 + shipmentsDetailMap.put(orderSpecId, shipmentsDetail);
  91 + }
  92 + // 获取订货单规格数据
  93 + List<PurchaseOrderLine> orderLineList = purchaseOrderLineService.listByIds(orderSpecIds);
  94 + if (CollectionUtils.isEmpty(orderLineList)) {
  95 + return;
  96 + }
  97 + Map<String, List<PurchaseOrderLine>> orderSpecMap = new HashMap<>();
  98 + for (PurchaseOrderLine purchaseOrderLine : orderLineList) {
  99 + String orderId = purchaseOrderLine.getPurchaseOrderId();
  100 + List<PurchaseOrderLine> list = orderSpecMap.computeIfAbsent(orderId, k -> new ArrayList<>());
  101 + list.add(purchaseOrderLine);
  102 + }
  103 + // 此处数据不会特别多,直接循环新增
  104 + for (PurchaseOrderInfo orderInfo : orderInfoList) {
  105 + if (!BooleanUtils.isTrue(orderInfo.getSampleOrder())) {
  106 + // 非试样订单
  107 + continue;
  108 + }
  109 + String orderId = orderInfo.getId();
  110 + List<PurchaseOrderLine> lineList = orderSpecMap.get(orderId);
  111 + if (CollectionUtils.isEmpty(lineList)) {
  112 + continue;
  113 + }
  114 + SampleResultFeedback feedback = new SampleResultFeedback();
  115 + feedback.setId(IdUtil.getUUID());
  116 + feedback.setCustomerId(orderInfo.getOrderingUnit());
  117 + feedback.setWorkshopId(orderInfo.getWorkshopId());
  118 + feedback.setOrderId(orderId);
  119 +
  120 + getBaseMapper().insert(feedback);
  121 + // 生成明细数据
  122 + for (PurchaseOrderLine line : lineList) {
  123 + if (!orderId.equals(line.getPurchaseOrderId())) {
  124 + continue;
  125 + }
  126 + ShipmentsPlanDetail shipmentsDetail = shipmentsDetailMap.get(line.getId());
  127 + if (shipmentsDetail == null) {
  128 + continue;
  129 + }
  130 + SampleFeedbackTrackingDetail detail = new SampleFeedbackTrackingDetail();
  131 + detail.setId(IdUtil.getUUID());
  132 + detail.setFeedbackId(feedback.getId());
  133 + detail.setOrderId(orderId);
  134 + detail.setOrderSpecId(line.getId());
  135 + detail.setShipmentOrderId(shipmentsDetail.getShipmentOrderId());
  136 + detail.setShipmentDetailId(shipmentsDetail.getId());
  137 + detail.setBrand(line.getBrand());
  138 + detail.setThickness(line.getThickness());
  139 + detail.setThicknessTolPos(line.getThicknessTolPos());
  140 + detail.setThicknessTolNeg(line.getThicknessTolNeg());
  141 + detail.setWidth(line.getWidth());
  142 + detail.setWidthTolPos(line.getWidthTolPos());
  143 + detail.setWidthTolNeg(line.getWidthTolPos());
  144 + detail.setLength(line.getLength());
  145 + detail.setLengthTolPos(line.getLengthTolPos());
  146 + detail.setLengthTolNeg(line.getLengthTolNeg());
  147 + detail.setStatus(line.getStatus());
  148 + detail.setShipmentDate(shipmentsDetail.getShipmentsDate());
  149 + detail.setQuantity(shipmentsDetail.getActualShipmentQuantity());
  150 + detail.setYieldBatchNo(shipmentsDetail.getYieldBatchNo());
  151 +
  152 + sampleFeedbackTrackingDetailService.getBaseMapper().insert(detail);
  153 + }
  154 + }
  155 + }
70 156 }
... ...
... ... @@ -30,6 +30,7 @@ import com.lframework.xingyun.sc.handlers.MessageHandler;
30 30 import com.lframework.xingyun.sc.service.ledger.ReceiptLedgerInfoService;
31 31 import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService;
32 32 import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService;
  33 +import com.lframework.xingyun.sc.service.sample.SampleResultFeedbackService;
33 34 import com.lframework.xingyun.sc.service.sample.SampleResultTrackingService;
34 35 import com.lframework.xingyun.sc.service.shipments.ShipmentsPlanDetailService;
35 36 import com.lframework.xingyun.sc.service.shipments.ShipmentsPlanService;
... ... @@ -99,6 +100,8 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
99 100 private SysUserRoleService sysUserRoleService;
100 101 @Resource
101 102 private SampleResultTrackingService sampleResultTrackingService;
  103 + @Resource
  104 + private SampleResultFeedbackService sampleResultFeedbackService;
102 105
103 106
104 107 @Override
... ... @@ -434,6 +437,9 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
434 437 String type = vo.getType();
435 438 List<PurchaseOrderInfo> orderInfoList = purchaseOrderInfoService.listByIds(orderIds);
436 439 if (CollectionUtils.isNotEmpty(orderInfoList)) {
  440 + // 试样订单生成反馈单数据
  441 + sampleResultFeedbackService.generateFeedbackData(orderInfoList, detailIds);
  442 +
437 443 List<String> userIds = new ArrayList<>();
438 444 StringBuilder orderNoBuilder = new StringBuilder();
439 445 for (PurchaseOrderInfo info : orderInfoList) {
... ...
1 1 package com.lframework.xingyun.sc.service.sample;
2 2
  3 +import com.lframework.xingyun.sc.entity.PurchaseOrderInfo;
  4 +import com.lframework.xingyun.sc.entity.ShipmentsPlanDetail;
3 5 import com.lframework.xingyun.sc.vo.sample.feedback.QuerySampleResultFeedbackVo;
4 6 import com.lframework.xingyun.sc.entity.SampleResultFeedback;
5 7 import com.lframework.starter.web.core.service.BaseMpService;
... ... @@ -39,4 +41,12 @@ public interface SampleResultFeedbackService extends BaseMpService<SampleResultF
39 41 * @param id 主键ID
40 42 */
41 43 void deleteById(String id);
  44 +
  45 + /**
  46 + * 生成样品反馈单数据(包含明细)
  47 + *
  48 + * @param orderInfoList 订货单数据
  49 + * @param shipmentsDetailIds 发货明细ID
  50 + */
  51 + void generateFeedbackData(List<PurchaseOrderInfo> orderInfoList, List<String> shipmentsDetailIds);
42 52 }
... ...
... ... @@ -18,15 +18,33 @@ public class QuerySampleResultFeedbackVo extends PageVo implements BaseVo, Seria
18 18 private String customerId;
19 19
20 20 /**
  21 + * 客户名称
  22 + */
  23 + @ApiModelProperty("客户名称")
  24 + private String customerName;
  25 +
  26 + /**
21 27 * 所属分厂
22 28 */
23 29 @ApiModelProperty("所属分厂")
24 30 private String workshopId;
25 31
26 32 /**
  33 + * 所属分厂名称
  34 + */
  35 + @ApiModelProperty("所属分厂名称")
  36 + private String workshopName;
  37 +
  38 + /**
27 39 * 订单ID
28 40 */
29 41 @ApiModelProperty("订单ID")
30 42 private String orderId;
31 43
  44 + /**
  45 + * 订单编号
  46 + */
  47 + @ApiModelProperty("订单编号")
  48 + private String orderNo;
  49 +
32 50 }
... ...
... ... @@ -5,8 +5,11 @@
5 5 <resultMap id="SampleResultFeedback" type="com.lframework.xingyun.sc.entity.SampleResultFeedback">
6 6 <id column="id" property="id"/>
7 7 <result column="customer_id" property="customerId"/>
  8 + <result column="customer_name" property="customerName"/>
8 9 <result column="workshop_id" property="workshopId"/>
  10 + <result column="workshop_name" property="workshopName"/>
9 11 <result column="order_id" property="orderId"/>
  12 + <result column="order_no" property="orderNo"/>
10 13 <result column="create_by_id" property="createById"/>
11 14 <result column="update_by_id" property="updateById"/>
12 15 <result column="create_time" property="createTime"/>
... ... @@ -44,6 +47,15 @@
44 47 <if test="vo.orderId != null and vo.orderId != ''">
45 48 AND tb.order_id = #{vo.orderId}
46 49 </if>
  50 + <if test="vo.customerName != null and vo.customerName != ''">
  51 + AND c.name LIKE CONCAT('%', #{vo.customerName}, '%')
  52 + </if>
  53 + <if test="vo.workshopName != null and vo.workshopName != ''">
  54 + AND w.name LIKE CONCAT('%', #{vo.workshopName}, '%')
  55 + </if>
  56 + <if test="vo.orderNo != null and vo.orderNo != ''">
  57 + AND o.order_no LIKE CONCAT('%', #{vo.orderNo}, '%')
  58 + </if>
47 59 </where>
48 60 </select>
49 61 </mapper>
... ...