|
@@ -1,25 +1,37 @@
|
|
package org.dromara.bulk.service.impl;
|
|
package org.dromara.bulk.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.dromara.bulk.domain.DevelopmentOrder;
|
|
import org.dromara.bulk.domain.DevelopmentOrder;
|
|
|
|
+import org.dromara.bulk.domain.DevelopmentOrderRemark;
|
|
import org.dromara.bulk.domain.bo.DevelopmentOrderBo;
|
|
import org.dromara.bulk.domain.bo.DevelopmentOrderBo;
|
|
|
|
+import org.dromara.bulk.domain.bo.DevelopmentOrderRemarkBo;
|
|
|
|
+import org.dromara.bulk.domain.vo.DevelopmentOrderRemarkVo;
|
|
import org.dromara.bulk.domain.vo.DevelopmentOrderTableDataInfo;
|
|
import org.dromara.bulk.domain.vo.DevelopmentOrderTableDataInfo;
|
|
import org.dromara.bulk.domain.vo.DevelopmentOrderVo;
|
|
import org.dromara.bulk.domain.vo.DevelopmentOrderVo;
|
|
import org.dromara.bulk.mapper.DevelopmentOrderMapper;
|
|
import org.dromara.bulk.mapper.DevelopmentOrderMapper;
|
|
|
|
+import org.dromara.bulk.mapper.DevelopmentOrderRemarkMapper;
|
|
import org.dromara.bulk.service.DevelopmentOrderService;
|
|
import org.dromara.bulk.service.DevelopmentOrderService;
|
|
import org.dromara.common.core.constant.DevelopmentOrderConstants;
|
|
import org.dromara.common.core.constant.DevelopmentOrderConstants;
|
|
import org.dromara.common.core.exception.ServiceException;
|
|
import org.dromara.common.core.exception.ServiceException;
|
|
|
|
+import org.dromara.common.core.service.OssService;
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
|
+import org.dromara.common.core.utils.OrderNumberGenerator;
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
+import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
|
+import org.dromara.common.tenant.helper.TenantHelper;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
+import java.time.ZoneId;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeParseException;
|
|
import java.time.format.DateTimeParseException;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 开发订单Service业务层处理
|
|
* 开发订单Service业务层处理
|
|
@@ -29,7 +41,8 @@ import java.util.*;
|
|
public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
|
|
|
|
private final DevelopmentOrderMapper developmentOrderMapper;
|
|
private final DevelopmentOrderMapper developmentOrderMapper;
|
|
-
|
|
|
|
|
|
+ private final DevelopmentOrderRemarkMapper developmentOrderRemarkMapper;
|
|
|
|
+ private final OssService ossService;
|
|
/**
|
|
/**
|
|
* 创建所有状态的常量Set集合
|
|
* 创建所有状态的常量Set集合
|
|
*/
|
|
*/
|
|
@@ -45,6 +58,14 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
DevelopmentOrderConstants.CANCELLED
|
|
DevelopmentOrderConstants.CANCELLED
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+ private static final Map<Long, String> SPECIAL_STATUS_FIELDS = new HashMap<>();
|
|
|
|
+ static {
|
|
|
|
+ SPECIAL_STATUS_FIELDS.put(DevelopmentOrderConstants.CONFIRMING_IN_PROGRESS, "confirm_user_id");
|
|
|
|
+ SPECIAL_STATUS_FIELDS.put(DevelopmentOrderConstants.IN_COLOR_ADJUSTMENT, "color_user_id");
|
|
|
|
+ SPECIAL_STATUS_FIELDS.put(DevelopmentOrderConstants.IN_TYPESETTING, "layout_user_id");
|
|
|
|
+ SPECIAL_STATUS_FIELDS.put(DevelopmentOrderConstants.PRINTING_IN_PROGRESS, "pattern_user_id");
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public DevelopmentOrderTableDataInfo<DevelopmentOrderVo> getList(DevelopmentOrderBo bo, PageQuery pageQuery) {
|
|
public DevelopmentOrderTableDataInfo<DevelopmentOrderVo> getList(DevelopmentOrderBo bo, PageQuery pageQuery) {
|
|
// 构建动态查询条件
|
|
// 构建动态查询条件
|
|
@@ -52,20 +73,60 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
addDynamicConditions(queryWrapper, bo);
|
|
addDynamicConditions(queryWrapper, bo);
|
|
|
|
|
|
Page<DevelopmentOrderVo> page = developmentOrderMapper.selectVoPage(pageQuery.build(), queryWrapper);
|
|
Page<DevelopmentOrderVo> page = developmentOrderMapper.selectVoPage(pageQuery.build(), queryWrapper);
|
|
|
|
+ page.getRecords().forEach(item -> {
|
|
|
|
+// 查询备注
|
|
|
|
+ QueryWrapper<DevelopmentOrderRemark> remarkQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ remarkQueryWrapper.eq("template_dev_order_id", item.getId());
|
|
|
|
+ List<DevelopmentOrderRemarkVo> developmentOrderRemarkVoList = developmentOrderRemarkMapper.selectVoList(remarkQueryWrapper);
|
|
|
|
+ item.setDevelopmentOrderRemarkVoList(developmentOrderRemarkVoList);
|
|
|
|
+// 查询各个文件URL
|
|
|
|
+ item.setColorFileList(ossService.selectByIds(item.getColorFile()));
|
|
|
|
+ item.setDesignFileList(ossService.selectByIds(item.getDesignFile()));
|
|
|
|
+ item.setDesignMaterialList(ossService.selectByIds(item.getDesignMaterial()));
|
|
|
|
+ item.setDesignImageList(ossService.selectByIds(item.getDesignImage()));
|
|
|
|
+ item.setPaperDesignFileList(ossService.selectByIds(item.getPaperDesignFile()));
|
|
|
|
+ item.setPatternFileList(ossService.selectByIds(item.getPatternFile()));
|
|
|
|
+ item.setRefernceImageList(ossService.selectByIds(item.getReferenceImage()));
|
|
|
|
+ });
|
|
|
|
+ Map<Long, String> statusCount = getStatusCount();
|
|
|
|
+ // 组装数据返回
|
|
|
|
+ return DevelopmentOrderTableDataInfo.build(page, statusCount);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查询每个状态的数量
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Map<Long, String> getStatusCount() {
|
|
|
|
+ // 定义所有的状态代码
|
|
|
|
+ Set<Long> allStatusCodes = Set.of(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L);
|
|
|
|
+ // 调用 Mapper 方法获取 List<Map<String, Object>>
|
|
|
|
+ List<Map<String, Object>> resultList = developmentOrderMapper.countStatusBatch(STATUS_CODES);
|
|
|
|
+ // 将 List<Map<String, Object>> 转换为 Map<Long, Integer>
|
|
|
|
+ Map<Long, Integer> result = new HashMap<>();
|
|
|
|
+ for (Long statusCode : allStatusCodes) {
|
|
|
|
+ result.put(statusCode, 0); // 初始化所有状态代码,默认值为0
|
|
|
|
+ }
|
|
|
|
+ for (Map<String, Object> row : resultList) {
|
|
|
|
+ Long key = ((Number) row.get("key")).longValue();
|
|
|
|
+ Integer value = ((Number) row.get("value")).intValue();
|
|
|
|
+ result.put(key, value);
|
|
|
|
+ }
|
|
|
|
+ Map<Long, String> statusCountMap = new HashMap<>();
|
|
|
|
+ for (Map.Entry<Long, Integer> entry : result.entrySet()) {
|
|
|
|
+ Long status = entry.getKey();
|
|
|
|
+ Integer baseCount = entry.getValue();
|
|
|
|
|
|
- Map<Long, Integer> statusCount = developmentOrderMapper.countStatusBatch(STATUS_CODES);
|
|
|
|
|
|
+ statusCountMap.put(status, String.valueOf(baseCount));
|
|
|
|
|
|
- // 组装数据返回
|
|
|
|
- return DevelopmentOrderTableDataInfo.build(page,
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.PENDING_PROCESSING),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.IN_THE_DRAWING),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.CONFIRMING_IN_PROGRESS),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.UNDER_MODIFICATION),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.IN_COLOR_ADJUSTMENT),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.IN_TYPESETTING),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.PRINTING_IN_PROGRESS),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.COMPLETED),
|
|
|
|
- statusCount.get(DevelopmentOrderConstants.CANCELLED));
|
|
|
|
|
|
+ if (SPECIAL_STATUS_FIELDS.containsKey(status)) {
|
|
|
|
+ String fieldName = SPECIAL_STATUS_FIELDS.get(status);
|
|
|
|
+ int specialCount = developmentOrderMapper.getCountWithCondition(status, fieldName);
|
|
|
|
+ String combined = Objects.requireNonNullElse(specialCount, "0") + "/" + baseCount;
|
|
|
|
+ statusCountMap.put(status, combined);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return statusCountMap;
|
|
}
|
|
}
|
|
|
|
|
|
private void addDynamicConditions(LambdaQueryWrapper<DevelopmentOrder> queryWrapper, DevelopmentOrderBo bo) {
|
|
private void addDynamicConditions(LambdaQueryWrapper<DevelopmentOrder> queryWrapper, DevelopmentOrderBo bo) {
|
|
@@ -77,6 +138,9 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
if (StringUtils.isNotBlank(bo.getFabric())) {
|
|
if (StringUtils.isNotBlank(bo.getFabric())) {
|
|
queryWrapper.like(DevelopmentOrder::getFabric, bo.getFabric());
|
|
queryWrapper.like(DevelopmentOrder::getFabric, bo.getFabric());
|
|
}
|
|
}
|
|
|
|
+ if (StringUtils.isNotBlank(bo.getItemNumber())) {
|
|
|
|
+ queryWrapper.like(DevelopmentOrder::getItemNumber, bo.getItemNumber());
|
|
|
|
+ }
|
|
|
|
|
|
// 时间范围处理
|
|
// 时间范围处理
|
|
LocalDate startDate = parseDate((String) params.get("beginTime"));
|
|
LocalDate startDate = parseDate((String) params.get("beginTime"));
|
|
@@ -97,6 +161,7 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public int insert(DevelopmentOrderBo developmentOrder) {
|
|
public int insert(DevelopmentOrderBo developmentOrder) {
|
|
|
|
+ developmentOrder.setOrderNum(OrderNumberGenerator.getInstance().generateOrderNumber());
|
|
return developmentOrderMapper.insert(MapstructUtils.convert(developmentOrder, DevelopmentOrder.class));
|
|
return developmentOrderMapper.insert(MapstructUtils.convert(developmentOrder, DevelopmentOrder.class));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -106,10 +171,17 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
return developmentOrderMapper.updateById(MapstructUtils.convert(developmentOrderBo, DevelopmentOrder.class));
|
|
return developmentOrderMapper.updateById(MapstructUtils.convert(developmentOrderBo, DevelopmentOrder.class));
|
|
}
|
|
}
|
|
|
|
|
|
- public void editRemark(DevelopmentOrderBo developmentOrderBo) {
|
|
|
|
- if (!developmentOrderBo.getRemark().isEmpty()) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 添加备注
|
|
|
|
+ *
|
|
|
|
+ * @param developmentOrderBo
|
|
|
|
+ */
|
|
|
|
+ public int addRemark(DevelopmentOrderRemarkBo developmentOrderBo) {
|
|
|
|
+ DevelopmentOrderRemark developmentOrderRemark = new DevelopmentOrderRemark();
|
|
|
|
+ developmentOrderRemark.setRemark(developmentOrderBo.getRemark());
|
|
|
|
+ developmentOrderRemark.setCreateTextName(LoginHelper.getUsername());
|
|
|
|
+ developmentOrderRemark.setCreateTextTime(new Date());
|
|
|
|
+ return developmentOrderRemarkMapper.insert(developmentOrderRemark);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -131,43 +203,43 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
assertNotBlank(developmentOrderBo.getDesignImage(), "设计图片不能为空");
|
|
assertNotBlank(developmentOrderBo.getDesignImage(), "设计图片不能为空");
|
|
assertNotBlank(developmentOrderBo.getDesignMaterial(), "素材图片不能为空");
|
|
assertNotBlank(developmentOrderBo.getDesignMaterial(), "素材图片不能为空");
|
|
// 设置画图开始时间
|
|
// 设置画图开始时间
|
|
- developmentOrderBo.setStartingTimeForDrawing(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus1StartTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
// 状态为确认中
|
|
// 状态为确认中
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.CONFIRMING_IN_PROGRESS)) {
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.CONFIRMING_IN_PROGRESS)) {
|
|
assertNotLongBlank(developmentOrderBo.getConfirmUserId(), "确认人不能为空");
|
|
assertNotLongBlank(developmentOrderBo.getConfirmUserId(), "确认人不能为空");
|
|
assertNotBlank(developmentOrderBo.getPaperDesignFile(), "纸样文件不能为空");
|
|
assertNotBlank(developmentOrderBo.getPaperDesignFile(), "纸样文件不能为空");
|
|
// 设置画图结束时间
|
|
// 设置画图结束时间
|
|
- developmentOrderBo.setEndTimeOfDrawing(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus1EndTime(LocalDateTime.now());
|
|
// 设置确认开始时间
|
|
// 设置确认开始时间
|
|
- developmentOrderBo.setConfirmStartTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus2StartTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
// 状态为调色中
|
|
// 状态为调色中
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.IN_COLOR_ADJUSTMENT)) {
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.IN_COLOR_ADJUSTMENT)) {
|
|
assertNotLongBlank(developmentOrderBo.getColorUserId(), "调色人不能为空");
|
|
assertNotLongBlank(developmentOrderBo.getColorUserId(), "调色人不能为空");
|
|
assertNotBlank(developmentOrderBo.getColorFile(), "调色文件不能为空");
|
|
assertNotBlank(developmentOrderBo.getColorFile(), "调色文件不能为空");
|
|
// 设置确认结束时间
|
|
// 设置确认结束时间
|
|
- developmentOrderBo.setConfirmEndTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus2EndTime(LocalDateTime.now());
|
|
// 设置调色开始时间
|
|
// 设置调色开始时间
|
|
- developmentOrderBo.setColorMixingStartTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus3StartTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
// 状态为排版中
|
|
// 状态为排版中
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.IN_TYPESETTING)) {
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.IN_TYPESETTING)) {
|
|
assertNotLongBlank(developmentOrderBo.getLayoutUserId(), "排版人不能为空");
|
|
assertNotLongBlank(developmentOrderBo.getLayoutUserId(), "排版人不能为空");
|
|
assertNotBlank(developmentOrderBo.getLayoutFile(), "排版文件不能为空");
|
|
assertNotBlank(developmentOrderBo.getLayoutFile(), "排版文件不能为空");
|
|
// 设置调色结束时间
|
|
// 设置调色结束时间
|
|
- developmentOrderBo.setEndTimeOfColorAdjustment(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus3EndTime(LocalDateTime.now());
|
|
// 设置排版开始时间
|
|
// 设置排版开始时间
|
|
- developmentOrderBo.setLayoutStartTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus4StartTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
// 状态为打版中
|
|
// 状态为打版中
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.PRINTING_IN_PROGRESS)) {
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.PRINTING_IN_PROGRESS)) {
|
|
assertNotLongBlank(developmentOrderBo.getPatternUserid(), "打版人不能为空");
|
|
assertNotLongBlank(developmentOrderBo.getPatternUserid(), "打版人不能为空");
|
|
assertNotBlank(developmentOrderBo.getPatternFile(), "打版文件不能为空");
|
|
assertNotBlank(developmentOrderBo.getPatternFile(), "打版文件不能为空");
|
|
// 设置排版结束时间
|
|
// 设置排版结束时间
|
|
- developmentOrderBo.setLayoutEndTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus4EndTime(LocalDateTime.now());
|
|
// 设置打版开始时间
|
|
// 设置打版开始时间
|
|
- developmentOrderBo.setPrintingStartTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setStatus5StartTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
// 状态为已完成
|
|
// 状态为已完成
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.COMPLETED)) {
|
|
if (developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.COMPLETED)) {
|
|
@@ -178,7 +250,7 @@ public class DevelopmentOrderServiceImpl implements DevelopmentOrderService {
|
|
if (!developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.CONFIRMING_IN_PROGRESS)) {
|
|
if (!developmentOrderBo.getStatus().equals(DevelopmentOrderConstants.CONFIRMING_IN_PROGRESS)) {
|
|
throw new ServiceException("状态为确认中才可以取消");
|
|
throw new ServiceException("状态为确认中才可以取消");
|
|
}
|
|
}
|
|
- developmentOrderBo.setCancelTime(new Date());
|
|
|
|
|
|
+ developmentOrderBo.setCancelTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|