Commit 892b9b53348cd90db58695b2f71de77fed59207d

Authored by 房远帅
1 parent 54912e16

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

@@ -23,6 +23,7 @@ import com.lframework.xingyun.sc.service.customer.CustomerCreditService; @@ -23,6 +23,7 @@ import com.lframework.xingyun.sc.service.customer.CustomerCreditService;
23 import com.lframework.xingyun.sc.service.customer.CustomerDevelopPlanService; 23 import com.lframework.xingyun.sc.service.customer.CustomerDevelopPlanService;
24 import com.lframework.xingyun.sc.service.order.*; 24 import com.lframework.xingyun.sc.service.order.*;
25 import com.lframework.xingyun.sc.service.purchase.ReplenishmentOrderService; 25 import com.lframework.xingyun.sc.service.purchase.ReplenishmentOrderService;
  26 +import com.lframework.xingyun.sc.service.shipments.ShipmentsPlanDetailService;
26 import com.lframework.xingyun.sc.service.shipments.car.CarRequestPlanService; 27 import com.lframework.xingyun.sc.service.shipments.car.CarRequestPlanService;
27 import com.lframework.xingyun.sc.service.shipments.car.RequestCarTicketService; 28 import com.lframework.xingyun.sc.service.shipments.car.RequestCarTicketService;
28 import com.lframework.xingyun.sc.service.shipments.car.DraftRequestCarTicketService; 29 import com.lframework.xingyun.sc.service.shipments.car.DraftRequestCarTicketService;
@@ -36,6 +37,7 @@ import com.lframework.xingyun.sc.vo.shipments.car.CreateCarRequestPlanVo; @@ -36,6 +37,7 @@ import com.lframework.xingyun.sc.vo.shipments.car.CreateCarRequestPlanVo;
36 import com.lframework.xingyun.sc.vo.shipments.car.CreateRequestCarTicketVo; 37 import com.lframework.xingyun.sc.vo.shipments.car.CreateRequestCarTicketVo;
37 import com.lframework.xingyun.sc.vo.shipments.car.QueryRequestCarTicketVo; 38 import com.lframework.xingyun.sc.vo.shipments.car.QueryRequestCarTicketVo;
38 import com.lframework.xingyun.sc.vo.shipments.delay.QueryDelayedShipmentDetailVo; 39 import com.lframework.xingyun.sc.vo.shipments.delay.QueryDelayedShipmentDetailVo;
  40 +import com.lframework.xingyun.sc.vo.shipments.plan.QueryShipmentsPlanDetailVo;
39 import lombok.extern.slf4j.Slf4j; 41 import lombok.extern.slf4j.Slf4j;
40 import org.apache.commons.collections.CollectionUtils; 42 import org.apache.commons.collections.CollectionUtils;
41 import org.apache.commons.collections4.MapUtils; 43 import org.apache.commons.collections4.MapUtils;
@@ -48,6 +50,8 @@ import org.springframework.stereotype.Component; @@ -48,6 +50,8 @@ import org.springframework.stereotype.Component;
48 import javax.annotation.Resource; 50 import javax.annotation.Resource;
49 import java.math.BigDecimal; 51 import java.math.BigDecimal;
50 import java.time.LocalDate; 52 import java.time.LocalDate;
  53 +import java.time.LocalTime;
  54 +import java.time.format.DateTimeFormatter;
51 import java.util.ArrayList; 55 import java.util.ArrayList;
52 import java.util.List; 56 import java.util.List;
53 import java.util.Map; 57 import java.util.Map;
@@ -101,6 +105,8 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -101,6 +105,8 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
101 private WorkshopService workshopService; 105 private WorkshopService workshopService;
102 @Resource 106 @Resource
103 private MessageHandler messageHandler; 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,7 +163,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
157 handleSpecLockDelayAuditData(flowStatus, businessId); 163 handleSpecLockDelayAuditData(flowStatus, businessId);
158 break; 164 break;
159 case "DRAFT_REQUEST_CAR": 165 case "DRAFT_REQUEST_CAR":
160 - handleDraftRequestCarTicketData(flowStatus, businessId); 166 + handleDraftRequestCarTicketData(flowStatus, businessId, variable);
161 break; 167 break;
162 case "RESTOCK_APPROVAL": 168 case "RESTOCK_APPROVAL":
163 handleReplenishmentOrderStatus(flowStatus, businessId); 169 handleReplenishmentOrderStatus(flowStatus, businessId);
@@ -455,7 +461,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -455,7 +461,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
455 * 461 *
456 * @param businessId 业务ID 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 if (FlowInstanceStatus.APPROVE_PASS.getCode().equals(flowStatus) 465 if (FlowInstanceStatus.APPROVE_PASS.getCode().equals(flowStatus)
460 || FlowInstanceStatus.FINISH.getCode().equals(flowStatus)) { 466 || FlowInstanceStatus.FINISH.getCode().equals(flowStatus)) {
461 draftRequestCarTicketService.updateStatus(businessId, "PASS"); 467 draftRequestCarTicketService.updateStatus(businessId, "PASS");
@@ -470,7 +476,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -470,7 +476,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
470 planCreateVo.setWorkshopId(draftRequestCarTicket.getWorkshopId()); 476 planCreateVo.setWorkshopId(draftRequestCarTicket.getWorkshopId());
471 String requestCarPlanId = carRequestPlanService.create(planCreateVo); 477 String requestCarPlanId = carRequestPlanService.create(planCreateVo);
472 // 生成要车单 478 // 生成要车单
473 - CreateRequestCarTicketVo ticketCreateVo = packRequestCarTicket(draftRequestCarTicket,requestCarPlanId); 479 + CreateRequestCarTicketVo ticketCreateVo = packRequestCarTicket(draftRequestCarTicket, requestCarPlanId, variable);
474 requestCarTicketService.create(ticketCreateVo); 480 requestCarTicketService.create(ticketCreateVo);
475 } 481 }
476 } else if (FlowInstanceStatus.REVOKE.getCode().equals(flowStatus) 482 } else if (FlowInstanceStatus.REVOKE.getCode().equals(flowStatus)
@@ -488,7 +494,8 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -488,7 +494,8 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
488 * @param draftRequestCarTicket 草稿要车单 494 * @param draftRequestCarTicket 草稿要车单
489 * @return CreateRequestCarTicketVo 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 CreateRequestCarTicketVo ticketVo = new CreateRequestCarTicketVo(); 499 CreateRequestCarTicketVo ticketVo = new CreateRequestCarTicketVo();
493 PurchaseOrderInfo orderInfo = purchaseOrderInfoService.findById(draftRequestCarTicket.getId()); 500 PurchaseOrderInfo orderInfo = purchaseOrderInfoService.findById(draftRequestCarTicket.getId());
494 ticketVo.setDraftId(draftRequestCarTicket.getId()); 501 ticketVo.setDraftId(draftRequestCarTicket.getId());
@@ -501,13 +508,30 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -501,13 +508,30 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
501 ticketVo.setOrderNo(draftRequestCarTicket.getOrderNo()); 508 ticketVo.setOrderNo(draftRequestCarTicket.getOrderNo());
502 ticketVo.setOrderingUnit(draftRequestCarTicket.getOrderingUnit()); 509 ticketVo.setOrderingUnit(draftRequestCarTicket.getOrderingUnit());
503 ticketVo.setQuantity(draftRequestCarTicket.getQuantity()); 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 ticketVo.setExternalAuditor(SecurityUtil.getCurrentUser().getId()); 518 ticketVo.setExternalAuditor(SecurityUtil.getCurrentUser().getId());
506 //经营办审核人(发货计划提交人) 519 //经营办审核人(发货计划提交人)
507 ticketVo.setBusinessOfficeAuditor(draftRequestCarTicket.getBusinessOfficeAuditor()); 520 ticketVo.setBusinessOfficeAuditor(draftRequestCarTicket.getBusinessOfficeAuditor());
508 Object o = redisHandler.get("GET_SHIPMENTS_ORDER_ID_" + draftRequestCarTicket.getId()); 521 Object o = redisHandler.get("GET_SHIPMENTS_ORDER_ID_" + draftRequestCarTicket.getId());
509 if (o != null) { 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 redisHandler.del("GET_SHIPMENTS_ORDER_ID_" + draftRequestCarTicket.getId()); 535 redisHandler.del("GET_SHIPMENTS_ORDER_ID_" + draftRequestCarTicket.getId());
512 } 536 }
513 return ticketVo; 537 return ticketVo;
@@ -48,6 +48,8 @@ import org.springframework.stereotype.Service; @@ -48,6 +48,8 @@ import org.springframework.stereotype.Service;
48 import javax.annotation.Resource; 48 import javax.annotation.Resource;
49 import java.math.BigDecimal; 49 import java.math.BigDecimal;
50 import java.time.LocalDate; 50 import java.time.LocalDate;
  51 +import java.time.LocalTime;
  52 +import java.time.format.DateTimeFormatter;
51 import java.util.*; 53 import java.util.*;
52 import java.util.function.Function; 54 import java.util.function.Function;
53 import java.util.stream.Collectors; 55 import java.util.stream.Collectors;
@@ -563,7 +565,7 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr @@ -563,7 +565,7 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
563 Map<String, DraftRequestCarTicket> draftTicketMap = new HashMap<>(); 565 Map<String, DraftRequestCarTicket> draftTicketMap = new HashMap<>();
564 List<DraftRequestCarTicket> draftTickets = draftRequestCarTicketService.listByOrderId(orderIds); 566 List<DraftRequestCarTicket> draftTickets = draftRequestCarTicketService.listByOrderId(orderIds);
565 if (CollectionUtils.isNotEmpty(draftTickets)) { 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 , (v1, v2) -> v2)); 569 , (v1, v2) -> v2));
568 } 570 }
569 for (PurchaseOrderInfo orderInfo : orderInfoList) { 571 for (PurchaseOrderInfo orderInfo : orderInfoList) {
@@ -586,8 +588,8 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr @@ -586,8 +588,8 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
586 planCreateVo.setWorkshopId(orderInfo.getWorkshopId()); 588 planCreateVo.setWorkshopId(orderInfo.getWorkshopId());
587 String requestCarPlanId = carRequestPlanService.create(planCreateVo); 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 requestCarTicketService.create(ticketCreateVo); 593 requestCarTicketService.create(ticketCreateVo);
592 } else { 594 } else {
593 throw new DefaultClientException("请先补充草稿要车单数据!"); 595 throw new DefaultClientException("请先补充草稿要车单数据!");
@@ -625,10 +627,21 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr @@ -625,10 +627,21 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
625 * @param orderInfo 订货单数据 627 * @param orderInfo 订货单数据
626 * @return CreateRequestCarTicketVo 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 CreateRequestCarTicketVo ticketVo = new CreateRequestCarTicketVo(); 643 CreateRequestCarTicketVo ticketVo = new CreateRequestCarTicketVo();
631 - ticketVo.setDraftId(draftId); 644 + ticketVo.setDraftId(draftTicket.getId());
632 ticketVo.setPlanId(planId); 645 ticketVo.setPlanId(planId);
633 ticketVo.setPurchaseOrderId(orderInfo.getId()); 646 ticketVo.setPurchaseOrderId(orderInfo.getId());
634 ticketVo.setRequestCarDate(LocalDate.now()); 647 ticketVo.setRequestCarDate(LocalDate.now());
@@ -640,9 +653,16 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr @@ -640,9 +653,16 @@ public class ShipmentsOrderInfoServiceImpl extends BaseMpServiceImpl<ShipmentsOr
640 ticketVo.setQuantity(quantity); 653 ticketVo.setQuantity(quantity);
641 ticketVo.setShipmentsOrderId(shipmentsOrderId); 654 ticketVo.setShipmentsOrderId(shipmentsOrderId);
642 //外办审核人(草稿要车单审核人) 655 //外办审核人(草稿要车单审核人)
643 - ticketVo.setExternalAuditor(externalAuditor); 656 + ticketVo.setExternalAuditor(draftTicket.getExternalAuditor());
644 //经营办审核人(发货计划提交人) 657 //经营办审核人(发货计划提交人)
645 ticketVo.setBusinessOfficeAuditor(SecurityUtil.getCurrentUser().getId()); 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 return ticketVo; 666 return ticketVo;
647 } 667 }
648 } 668 }
@@ -201,8 +201,6 @@ public class DraftRequestCarTicketServiceImpl extends BaseMpServiceImpl<DraftReq @@ -201,8 +201,6 @@ public class DraftRequestCarTicketServiceImpl extends BaseMpServiceImpl<DraftReq
201 .set(DraftRequestCarTicket::getOther, StringUtil.isBlank(vo.getOther()) ? null : vo.getOther()) 201 .set(DraftRequestCarTicket::getOther, StringUtil.isBlank(vo.getOther()) ? null : vo.getOther())
202 .set(DraftRequestCarTicket::getExternalAuditor, StringUtil.isBlank(vo.getExternalAuditor()) ? null : vo.getExternalAuditor()) 202 .set(DraftRequestCarTicket::getExternalAuditor, StringUtil.isBlank(vo.getExternalAuditor()) ? null : vo.getExternalAuditor())
203 .set(DraftRequestCarTicket::getSpecialLoadingRequirement, StringUtil.isBlank(vo.getSpecialLoadingRequirement()) ? null : vo.getSpecialLoadingRequirement()) 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 .set(DraftRequestCarTicket::getStatus, StringUtil.isBlank(vo.getStatus()) ? "AUDIT" : vo.getStatus()) 204 .set(DraftRequestCarTicket::getStatus, StringUtil.isBlank(vo.getStatus()) ? "AUDIT" : vo.getStatus())
207 .eq(DraftRequestCarTicket::getId, vo.getId()); 205 .eq(DraftRequestCarTicket::getId, vo.getId());
208 206
@@ -59,6 +59,12 @@ public class QueryShipmentsPlanDetailVo extends PageVo implements BaseVo, Serial @@ -59,6 +59,12 @@ public class QueryShipmentsPlanDetailVo extends PageVo implements BaseVo, Serial
59 private String orderNo; 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 @ApiModelProperty("客户名称") 70 @ApiModelProperty("客户名称")
@@ -97,6 +97,9 @@ @@ -97,6 +97,9 @@
97 <if test="vo.shipmentsOrderId != null and vo.shipmentsOrderId != ''"> 97 <if test="vo.shipmentsOrderId != null and vo.shipmentsOrderId != ''">
98 AND tb.shipment_order_id = #{vo.shipmentsOrderId} 98 AND tb.shipment_order_id = #{vo.shipmentsOrderId}
99 </if> 99 </if>
  100 + <if test="vo.orderId != null and vo.orderId != ''">
  101 + AND tb.order_id = #{vo.orderId}
  102 + </if>
100 <if test="vo.shipmentsDate != null"> 103 <if test="vo.shipmentsDate != null">
101 AND tb.shipments_date = #{vo.shipmentsDate} 104 AND tb.shipments_date = #{vo.shipmentsDate}
102 </if> 105 </if>