|
|
@@ -0,0 +1,234 @@
|
|
|
+package com.sckw.mine.service;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.github.pagehelper.PageHelper;
|
|
|
+import com.github.pagehelper.PageInfo;
|
|
|
+import com.sckw.core.model.page.PageRes;
|
|
|
+import com.sckw.core.utils.IdWorker;
|
|
|
+import com.sckw.core.utils.TenantUtil;
|
|
|
+import com.sckw.core.web.response.HttpResult;
|
|
|
+import com.sckw.mine.entity.KwBusinessActionTrack;
|
|
|
+import com.sckw.mine.entity.KwBusinessMine;
|
|
|
+import com.sckw.mine.entity.KwBusinessMineOrder;
|
|
|
+import com.sckw.mine.entity.KwBusinessTransportOrderNo;
|
|
|
+import com.sckw.mine.entity.req.MineOrderPageListParam;
|
|
|
+import com.sckw.mine.entity.req.MineAddParam;
|
|
|
+import com.sckw.mine.entity.res.MineOrderDetailRes;
|
|
|
+import com.sckw.mine.entity.res.MineOrderPageListRes;
|
|
|
+import com.sckw.mine.entity.res.OrderFlowStepRes;
|
|
|
+import com.sckw.mine.enums.MineStatusEnum;
|
|
|
+import com.sckw.mine.mapper.KwBusinessActionTrackMapper;
|
|
|
+import com.sckw.mine.mapper.MineMapper;
|
|
|
+import com.sckw.mine.mapper.MineOrderMapper;
|
|
|
+import com.sckw.mine.mapper.TransportOrderNoMapper;
|
|
|
+import com.sckw.redis.utils.GenOrderCode;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.ThreadLocalRandom;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @desc:
|
|
|
+ * @author: Lt
|
|
|
+ * @date: 2024-05-27
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class MineService {
|
|
|
+
|
|
|
+ private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ MineOrderMapper mineOrderMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ TransportOrderNoMapper transportOrderNoMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ MineMapper mineMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ KwBusinessActionTrackMapper kwBusinessActionTrackMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private GenOrderCode genOrderCode;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description: 矿山域订单添加
|
|
|
+ * @Author: Lt
|
|
|
+ * @Date: 2024/5/27 9:43
|
|
|
+ */
|
|
|
+ public String mineOrderAdd(MineAddParam mineAddParam) throws Exception {
|
|
|
+ try {
|
|
|
+ Long orderId = new IdWorker(1L).nextId();
|
|
|
+ KwBusinessMineOrder kwBusinessMineOrder = BeanUtil.copyProperties(mineAddParam, KwBusinessMineOrder.class);
|
|
|
+ //生成订单编号
|
|
|
+ String mineOrderNo = "M" + LocalDateTime.now().format(FORMATTER) + ThreadLocalRandom.current().nextInt(1000, 9999);
|
|
|
+
|
|
|
+ //生成物流订单编号- 空了再来封装了
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
|
|
|
+ String orderPrefix = currentDate.format(formatter);
|
|
|
+ String key = "O" + orderPrefix;
|
|
|
+ String usualTransportOrderNo = genOrderCode.genOrderCode(12, key, key);
|
|
|
+ kwBusinessMineOrder.setId(orderId);
|
|
|
+ kwBusinessMineOrder.setMineOrderNo(mineOrderNo);
|
|
|
+ kwBusinessMineOrder.setTenantId(TenantUtil.getTenant()); //租户id
|
|
|
+ int insert = mineOrderMapper.insert(kwBusinessMineOrder);
|
|
|
+ if (insert > 0) {
|
|
|
+ //生成kw_business_transport_order_no
|
|
|
+ KwBusinessTransportOrderNo kwBusinessTransportOrderNo = new KwBusinessTransportOrderNo();
|
|
|
+ kwBusinessTransportOrderNo.setId(new IdWorker(1L).nextId());
|
|
|
+ kwBusinessTransportOrderNo.setMainOrderId(orderId);
|
|
|
+ kwBusinessTransportOrderNo.setTransportOrderNo(usualTransportOrderNo);
|
|
|
+ transportOrderNoMapper.insert(kwBusinessTransportOrderNo);
|
|
|
+
|
|
|
+ KwBusinessMine kwBusinessMine = new KwBusinessMine();
|
|
|
+ kwBusinessMine.setId(new IdWorker(1L).nextId());
|
|
|
+ kwBusinessMine.setMainOrderId(orderId);
|
|
|
+ kwBusinessMine.setMineVol(mineAddParam.getMineVol());
|
|
|
+ kwBusinessMine.setMineWeight(mineAddParam.getMineWeight());
|
|
|
+ kwBusinessMine.setPurchaseNum(mineAddParam.getPurchaseNum());
|
|
|
+ mineMapper.insert(kwBusinessMine);
|
|
|
+ }
|
|
|
+ //添加操作记录
|
|
|
+ saveActionTrack(orderId, mineAddParam.getStatus(), null);
|
|
|
+
|
|
|
+ return "添加成功";
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new Exception(e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description: 列表分页查询
|
|
|
+ * @Author: Lt
|
|
|
+ * @Date: 2024/5/27 14:49
|
|
|
+ */
|
|
|
+ public HttpResult pageList(MineOrderPageListParam param) {
|
|
|
+ PageHelper.startPage(param.getPage(), param.getPageSize());
|
|
|
+ List<MineOrderPageListRes> businessTruckPageListRes = mineOrderMapper.mineOrderPageList(param);
|
|
|
+ businessTruckPageListRes.forEach(e -> {
|
|
|
+ if (ObjectUtils.isNotNull(e.getOrderSource())) {
|
|
|
+ e.setOrderSourceStr(e.getOrderSource() == 1 ? "生产自建" : "销售流转");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return HttpResult.ok(new PageRes<>(new PageInfo<>(businessTruckPageListRes)));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description: 订单详情
|
|
|
+ * @Author: Lt
|
|
|
+ * @Date: 2024/5/27 0027 15:54
|
|
|
+ */
|
|
|
+ public MineOrderDetailRes detail(String orderId) {
|
|
|
+ MineOrderDetailRes kwBusinessMineOrder = mineOrderMapper.selectOrderById(orderId);
|
|
|
+ if (ObjectUtils.isNull(kwBusinessMineOrder)) {
|
|
|
+ throw new RuntimeException("当前数据不存在");
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(kwBusinessMineOrder.getStatus())) {
|
|
|
+ kwBusinessMineOrder.setStatusStr(MineStatusEnum.getNameByCode(kwBusinessMineOrder.getStatus()));
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(kwBusinessMineOrder.getOrderSource())) {
|
|
|
+ kwBusinessMineOrder.setOrderSourceStr(kwBusinessMineOrder.getOrderSource() == 1 ? "生产自建" : "销售流转");
|
|
|
+ }
|
|
|
+
|
|
|
+ return kwBusinessMineOrder;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description: 操作记录
|
|
|
+ * @Author: Lt
|
|
|
+ * @Date: 2024/5/27 15:37
|
|
|
+ */
|
|
|
+ public void saveActionTrack(Long mainId, Integer status, String remark) {
|
|
|
+ KwBusinessActionTrack kwBusinessActionTrack = new KwBusinessActionTrack();
|
|
|
+ kwBusinessActionTrack.setId(new IdWorker(1L).nextId());
|
|
|
+ kwBusinessActionTrack.setMineOrderId(mainId);
|
|
|
+ kwBusinessActionTrack.setContent("订单" + MineStatusEnum.getNameByCode(status));
|
|
|
+ kwBusinessActionTrack.setStatus(status);
|
|
|
+ kwBusinessActionTrack.setRemark(remark);
|
|
|
+ kwBusinessActionTrackMapper.insert(kwBusinessActionTrack);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public List<Map<String, Object>> getStatusCountListInSingleQuery() {
|
|
|
+ // 查询每个状态的计数
|
|
|
+ List<Map<String, Object>> statusCounts = mineOrderMapper.countByStatus();
|
|
|
+
|
|
|
+ // 将查询结果转换为所需的格式
|
|
|
+ List<MineStatusEnum> sortedEnums = MineStatusEnum.getSortList();
|
|
|
+ List<Map<String, Object>> result = new ArrayList<>();
|
|
|
+ for (MineStatusEnum enumItem : sortedEnums) {
|
|
|
+ Map<String, Object> statusCount = statusCounts.stream()
|
|
|
+ .filter(c -> enumItem.getCode().equals(c.get("status")))
|
|
|
+ .findFirst()
|
|
|
+ .orElseGet(() -> Map.of("status", enumItem.getCode(), "count", 0));
|
|
|
+ result.add(
|
|
|
+ Map.of(
|
|
|
+ "key", enumItem.getMsg(),
|
|
|
+ "value", enumItem.getCode(),
|
|
|
+ "data", statusCount.get("count")
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<OrderFlowStepRes> getActionTrackByMineOrderId(String orderId) {
|
|
|
+ // 定义订单的标准流程
|
|
|
+ List<MineStatusEnum> orderFlowEnums = MineStatusEnum.getSortList();
|
|
|
+ List<OrderFlowStepRes> orderFlowSteps = orderFlowEnums.stream()
|
|
|
+ .map(e -> new OrderFlowStepRes(e.getMsg(), "gray"))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 获取订单的操作记录
|
|
|
+ List<KwBusinessActionTrack> actionTracks = kwBusinessActionTrackMapper.findByMainOrderIdOrderByCreateTime(orderId);
|
|
|
+
|
|
|
+ boolean orderCompleted = false;
|
|
|
+ int completedStepIndex = -1;
|
|
|
+
|
|
|
+ for (KwBusinessActionTrack actionTrack : actionTracks) {
|
|
|
+ if (actionTrack.getStatus().equals(MineStatusEnum.EIGHT.getCode())) {
|
|
|
+ orderCompleted = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < orderFlowSteps.size(); i++) {
|
|
|
+ OrderFlowStepRes step = orderFlowSteps.get(i);
|
|
|
+ if (step.getName().equals(MineStatusEnum.getNameByCode(actionTrack.getStatus()))) {
|
|
|
+ step.setColor("green");
|
|
|
+ completedStepIndex = i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置提前完结步骤
|
|
|
+ if (orderCompleted && completedStepIndex != -1) {
|
|
|
+ OrderFlowStepRes completedStep = orderFlowSteps.get(completedStepIndex);
|
|
|
+ completedStep.setName(completedStep.getName() + "(完结订单)");
|
|
|
+ completedStep.setColor("orange");
|
|
|
+
|
|
|
+ for (int i = 0; i < completedStepIndex; i++) {
|
|
|
+ orderFlowSteps.get(i).setColor("green");
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = completedStepIndex + 1; i < orderFlowSteps.size(); i++) {
|
|
|
+ orderFlowSteps.get(i).setColor("gray");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return orderFlowSteps;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|