Commit 892b9b53348cd90db58695b2f71de77fed59207d

Authored by 房远帅
1 parent 54912e16

楚江ERP:自动生成草稿要车单、要车单、要车计划优化

... ... @@ -23,6 +23,7 @@ import com.lframework.xingyun.sc.service.customer.CustomerCreditService;
23 23 import com.lframework.xingyun.sc.service.customer.CustomerDevelopPlanService;
24 24 import com.lframework.xingyun.sc.service.order.*;
25 25 import com.lframework.xingyun.sc.service.purchase.ReplenishmentOrderService;
  26 +import com.lframework.xingyun.sc.service.shipments.ShipmentsPlanDetailService;
26 27 import com.lframework.xingyun.sc.service.shipments.car.CarRequestPlanService;
27 28 import com.lframework.xingyun.sc.service.shipments.car.RequestCarTicketService;
28 29 import com.lframework.xingyun.sc.service.shipments.car.DraftRequestCarTicketService;
... ... @@ -36,6 +37,7 @@ import com.lframework.xingyun.sc.vo.shipments.car.CreateCarRequestPlanVo;
36 37 import com.lframework.xingyun.sc.vo.shipments.car.CreateRequestCarTicketVo;
37 38 import com.lframework.xingyun.sc.vo.shipments.car.QueryRequestCarTicketVo;
38 39 import com.lframework.xingyun.sc.vo.shipments.delay.QueryDelayedShipmentDetailVo;
  40 +import com.lframework.xingyun.sc.vo.shipments.plan.QueryShipmentsPlanDetailVo;
39 41 import lombok.extern.slf4j.Slf4j;
40 42 import org.apache.commons.collections.CollectionUtils;
41 43 import org.apache.commons.collections4.MapUtils;
... ... @@ -48,6 +50,8 @@ import org.springframework.stereotype.Component;
48 50 import javax.annotation.Resource;
49 51 import java.math.BigDecimal;
50 52 import java.time.LocalDate;
  53 +import java.time.LocalTime;
  54 +import java.time.format.DateTimeFormatter;
51 55 import java.util.ArrayList;
52 56 import java.util.List;
53 57 import java.util.Map;
... ... @@ -101,6 +105,8 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
101 105 private WorkshopService workshopService;
102 106 @Resource
103 107 private MessageHandler messageHandler;
  108 + @Resource
  109 + private ShipmentsPlanDetailService shipmentsPlanDetailService;
104 110
105 111
106 112 /**
... ... @@ -157,7 +163,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
157 163 handleSpecLockDelayAuditData(flowStatus, businessId);
158 164 break;
159 165 case "DRAFT_REQUEST_CAR":
160   - handleDraftRequestCarTicketData(flowStatus, businessId);
  166 + handleDraftRequestCarTicketData(flowStatus, businessId, variable);
161 167 break;
162 168 case "RESTOCK_APPROVAL":
163 169 handleReplenishmentOrderStatus(flowStatus, businessId);
... ... @@ -455,7 +461,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
455 461 *
456 462 * @param businessId 业务ID
457 463 */
458   - private void handleDraftRequestCarTicketData(String flowStatus, String businessId) {
  464 + private void handleDraftRequestCarTicketData(String flowStatus, String businessId, Map<String, Object> variable) {
459 465 if (FlowInstanceStatus.APPROVE_PASS.getCode().equals(flowStatus)
460 466 || FlowInstanceStatus.FINISH.getCode().equals(flowStatus)) {
461 467 draftRequestCarTicketService.updateStatus(businessId, "PASS");
... ... @@ -470,7 +476,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
470 476 planCreateVo.setWorkshopId(draftRequestCarTicket.getWorkshopId());
471 477 String requestCarPlanId = carRequestPlanService.create(planCreateVo);
472 478 // 生成要车单
473   - CreateRequestCarTicketVo ticketCreateVo = packRequestCarTicket(draftRequestCarTicket,requestCarPlanId);
  479 + CreateRequestCarTicketVo ticketCreateVo = packRequestCarTicket(draftRequestCarTicket, requestCarPlanId, variable);
474 480 requestCarTicketService.create(ticketCreateVo);
475 481 }
476 482 } else if (FlowInstanceStatus.REVOKE.getCode().equals(flowStatus)
... ... @@ -488,7 +494,8 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
488 494 * @param draftRequestCarTicket 草稿要车单
489 495 * @return CreateRequestCarTicketVo
490 496 */
491   - private CreateRequestCarTicketVo packRequestCarTicket(DraftRequestCarTicket draftRequestCarTicket, String requestCarPlanId) {
  497 + private CreateRequestCarTicketVo packRequestCarTicket(DraftRequestCarTicket draftRequestCarTicket,
  498 + String requestCarPlanId, Map<String, Object> variable) {
492 499 CreateRequestCarTicketVo ticketVo = new CreateRequestCarTicketVo();
493 500 PurchaseOrderInfo orderInfo = purchaseOrderInfoService.findById(draftRequestCarTicket.getId());
494 501 ticketVo.setDraftId(draftRequestCarTicket.getId());
... ... @@ -501,13 +508,30 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
501 508 ticketVo.setOrderNo(draftRequestCarTicket.getOrderNo());
502 509 ticketVo.setOrderingUnit(draftRequestCarTicket.getOrderingUnit());
503 510 ticketVo.setQuantity(draftRequestCarTicket.getQuantity());
  511 + ticketVo.setDestination(String.valueOf(variable.get("destination")));
  512 + ticketVo.setConsignee(String.valueOf(variable.get("consignee")));
  513 + ticketVo.setPhone(String.valueOf(variable.get("phone")));
  514 + ticketVo.setReturnPlanArrangement(String.valueOf(variable.get("returnPlanArrangement")));
  515 + ticketVo.setOther(String.valueOf(variable.get("other")));
  516 + ticketVo.setSpecialLoadingRequirement(String.valueOf(variable.get("specialLoadingRequirement")));
504 517 //外办审核人(草稿要车单审核人)
505 518 ticketVo.setExternalAuditor(SecurityUtil.getCurrentUser().getId());
506 519 //经营办审核人(发货计划提交人)
507 520 ticketVo.setBusinessOfficeAuditor(draftRequestCarTicket.getBusinessOfficeAuditor());
508 521 Object o = redisHandler.get("GET_SHIPMENTS_ORDER_ID_" + draftRequestCarTicket.getId());
509 522 if (o != null) {
510   - ticketVo.setPurchaseOrderId(String.valueOf(o));
  523 + ticketVo.setShipmentsOrderId(String.valueOf(o));
  524 + QueryShipmentsPlanDetailVo vo = new QueryShipmentsPlanDetailVo();
  525 + vo.setShipmentsOrderId(String.valueOf(o));
  526 + vo.setOrderId(orderInfo.getId());
  527 + List<ShipmentsPlanDetail> details = shipmentsPlanDetailService.query(vo);
  528 + LocalTime minTime = details.stream()
  529 + .map(ShipmentsPlanDetail::getShipmentsTime)
  530 + .min(LocalTime::compareTo)
  531 + .orElse(null);
  532 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
  533 + String loadingTime = minTime.format(formatter);
  534 + ticketVo.setLoadingTime(loadingTime);
511 535 redisHandler.del("GET_SHIPMENTS_ORDER_ID_" + draftRequestCarTicket.getId());
512 536 }
513 537 return ticketVo;
... ...
... ... @@ -48,6 +48,8 @@ import org.springframework.stereotype.Service;
48 48 import javax.annotation.Resource;
49 49 import java.math.BigDecimal;
50 50 import java.time.LocalDate;
  51 +import java.time.LocalTime;
  52 +import java.time.format.DateTimeFormatter;
51 53 import java.util.*;
52 54 import java.util.function.Function;
53 55 import java.util.stream.Collectors;
... ... @@ -563,7 +565,7 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
563 565 Map<String, DraftRequestCarTicket> draftTicketMap = new HashMap<>();
564 566 List<DraftRequestCarTicket> draftTickets = draftRequestCarTicketService.listByOrderId(orderIds);
565 567 if (CollectionUtils.isNotEmpty(draftTickets)) {
566   - draftTicketMap = draftTickets.stream().collect(Collectors.toMap(DraftRequestCarTicket::getOrderingUnit, Function.identity()
  568 + draftTicketMap = draftTickets.stream().collect(Collectors.toMap(DraftRequestCarTicket::getPurchaseOrderId, Function.identity()
567 569 , (v1, v2) -> v2));
568 570 }
569 571 for (PurchaseOrderInfo orderInfo : orderInfoList) {
... ... @@ -586,8 +588,8 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
586 588 planCreateVo.setWorkshopId(orderInfo.getWorkshopId());
587 589 String requestCarPlanId = carRequestPlanService.create(planCreateVo);
588 590 // 生成要车单
589   - CreateRequestCarTicketVo ticketCreateVo = packRequestCarTicket(orderInfo, requestCarPlanId,
590   - draftTicket.getId(), plan.getTomoPreShipDate(), draftTicket.getExternalAuditor(), quantity, shipmentsOrderId);
  591 + CreateRequestCarTicketVo ticketCreateVo = packRequestCarTicket(orderInfo, requestCarPlanId, draftTicket,
  592 + plan.getTomoPreShipDate(), quantity, shipmentsOrderId);
591 593 requestCarTicketService.create(ticketCreateVo);
592 594 } else {
593 595 throw new DefaultClientException("请先补充草稿要车单数据!");
... ... @@ -625,10 +627,21 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
625 627 * @param orderInfo 订货单数据
626 628 * @return CreateRequestCarTicketVo
627 629 */
628   - private CreateRequestCarTicketVo packRequestCarTicket(PurchaseOrderInfo orderInfo, String planId, String draftId,
629   - LocalDate shipmentsDate, String externalAuditor, BigDecimal quantity, String shipmentsOrderId) {
  630 + private CreateRequestCarTicketVo packRequestCarTicket(PurchaseOrderInfo orderInfo, String planId, DraftRequestCarTicket draftTicket,
  631 + LocalDate shipmentsDate, BigDecimal quantity, String shipmentsOrderId) {
  632 + QueryShipmentsPlanDetailVo vo = new QueryShipmentsPlanDetailVo();
  633 + vo.setShipmentsOrderId(shipmentsOrderId);
  634 + vo.setOrderId(orderInfo.getId());
  635 + List<ShipmentsPlanDetail> details = shipmentsPlanDetailService.query(vo);
  636 + LocalTime minTime = details.stream()
  637 + .map(ShipmentsPlanDetail::getShipmentsTime)
  638 + .min(LocalTime::compareTo)
  639 + .orElse(null);
  640 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
  641 + String loadingTime = minTime.format(formatter);
  642 +
630 643 CreateRequestCarTicketVo ticketVo = new CreateRequestCarTicketVo();
631   - ticketVo.setDraftId(draftId);
  644 + ticketVo.setDraftId(draftTicket.getId());
632 645 ticketVo.setPlanId(planId);
633 646 ticketVo.setPurchaseOrderId(orderInfo.getId());
634 647 ticketVo.setRequestCarDate(LocalDate.now());
... ... @@ -640,9 +653,16 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
640 653 ticketVo.setQuantity(quantity);
641 654 ticketVo.setShipmentsOrderId(shipmentsOrderId);
642 655 //外办审核人(草稿要车单审核人)
643   - ticketVo.setExternalAuditor(externalAuditor);
  656 + ticketVo.setExternalAuditor(draftTicket.getExternalAuditor());
644 657 //经营办审核人(发货计划提交人)
645 658 ticketVo.setBusinessOfficeAuditor(SecurityUtil.getCurrentUser().getId());
  659 + ticketVo.setDestination(draftTicket.getDestination());
  660 + ticketVo.setConsignee(draftTicket.getConsignee());
  661 + ticketVo.setPhone(draftTicket.getPhone());
  662 + ticketVo.setReturnPlanArrangement(draftTicket.getReturnPlanArrangement());
  663 + ticketVo.setOther(draftTicket.getOther());
  664 + ticketVo.setSpecialLoadingRequirement(draftTicket.getSpecialLoadingRequirement());
  665 + ticketVo.setLoadingTime(loadingTime);
646 666 return ticketVo;
647 667 }
648 668 }
... ...
... ... @@ -201,8 +201,6 @@ public class DraftRequestCarTicketServiceImpl extends BaseMpServiceImpl<DraftReq
201 201 .set(DraftRequestCarTicket::getOther, StringUtil.isBlank(vo.getOther()) ? null : vo.getOther())
202 202 .set(DraftRequestCarTicket::getExternalAuditor, StringUtil.isBlank(vo.getExternalAuditor()) ? null : vo.getExternalAuditor())
203 203 .set(DraftRequestCarTicket::getSpecialLoadingRequirement, StringUtil.isBlank(vo.getSpecialLoadingRequirement()) ? null : vo.getSpecialLoadingRequirement())
204   - .set(DraftRequestCarTicket::getBusinessOfficeAuditor, StringUtil.isBlank(vo.getBusinessOfficeAuditor()) ? null : vo.getBusinessOfficeAuditor())
205   - .set(DraftRequestCarTicket::getOperationsDepartmentAuditor, StringUtil.isBlank(vo.getOperationsDepartmentAuditor()) ? null : vo.getOperationsDepartmentAuditor())
206 204 .set(DraftRequestCarTicket::getStatus, StringUtil.isBlank(vo.getStatus()) ? "AUDIT" : vo.getStatus())
207 205 .eq(DraftRequestCarTicket::getId, vo.getId());
208 206
... ...
... ... @@ -59,6 +59,12 @@ public class QueryShipmentsPlanDetailVo extends PageVo implements BaseVo, Serial
59 59 private String orderNo;
60 60
61 61 /**
  62 + * 订货单ID
  63 + */
  64 + @ApiModelProperty("订货单ID")
  65 + private String orderId;
  66 +
  67 + /**
62 68 * 客户名称
63 69 */
64 70 @ApiModelProperty("客户名称")
... ...
... ... @@ -97,6 +97,9 @@
97 97 <if test="vo.shipmentsOrderId != null and vo.shipmentsOrderId != ''">
98 98 AND tb.shipment_order_id = #{vo.shipmentsOrderId}
99 99 </if>
  100 + <if test="vo.orderId != null and vo.orderId != ''">
  101 + AND tb.order_id = #{vo.orderId}
  102 + </if>
100 103 <if test="vo.shipmentsDate != null">
101 104 AND tb.shipments_date = #{vo.shipmentsDate}
102 105 </if>
... ...