mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
Merge branch 'main' of http://192.168.1.205:9980/cf_devdept2/cf_imes_server
This commit is contained in:
+7
@@ -59,4 +59,11 @@ public class ErrorCodeConstants {
|
|||||||
public static final ErrorCode SOURCE_NOT_EXITS_ERROR = new ErrorCode(1_002_029_013, "源数据查询失败");
|
public static final ErrorCode SOURCE_NOT_EXITS_ERROR = new ErrorCode(1_002_029_013, "源数据查询失败");
|
||||||
public static final ErrorCode ORDER_DELETED_ERR = new ErrorCode(1_002_029_006, "生产单删除失败");
|
public static final ErrorCode ORDER_DELETED_ERR = new ErrorCode(1_002_029_006, "生产单删除失败");
|
||||||
public static final ErrorCode ORDER_RESTORE_ERR = new ErrorCode(1_002_029_006, "生产单还原失败");
|
public static final ErrorCode ORDER_RESTORE_ERR = new ErrorCode(1_002_029_006, "生产单还原失败");
|
||||||
|
|
||||||
|
// ========== 自定义板编号生成 ==========
|
||||||
|
public static final ErrorCode CUSTOM_PLATENO_GENERATE_ORDERNO_RULE_NOT_SUPPORT_RESETMODE = new ErrorCode(1_002_030_001, "自定义版编号生产单序号规则中存在不支持的复位类型:{}");
|
||||||
|
public static final ErrorCode CUSTOM_PLATENO_GENERATE_BODY_RULE_NOT_SUPPORT_RESETMODE = new ErrorCode(1_002_030_002, "自定义版编号柜体序号规则中存在不支持的复位类型:{}");
|
||||||
|
public static final ErrorCode CUSTOM_PLATENO_GENERATE_PROCESSGROUP_RULE_NOT_SUPPORT_RESETMODE = new ErrorCode(1_002_030_003, "自定义版编号加工组序号规则中存在不支持的复位类型:{}");
|
||||||
|
public static final ErrorCode CUSTOM_PLATENO_GENERATE_PLATE_RULE_NOT_SUPPORT_RESETMODE = new ErrorCode(1_002_030_004, "自定义版编号板件序号规则中存在不支持的复位类型:{}");
|
||||||
|
public static final ErrorCode CUSTOM_PLATENO_GENERATE_ORG_CUSTOM_PLATENO_SEQ_MODIFY_ERROR = new ErrorCode(1_002_030_005, "保存组织下自定义板编号序号配置失败,请联系客服处理");
|
||||||
}
|
}
|
||||||
|
|||||||
-2
@@ -512,7 +512,6 @@ public class OrderController {
|
|||||||
// 生产单超期(工作台)
|
// 生产单超期(工作台)
|
||||||
@GetMapping("/getOrderOverdue")
|
@GetMapping("/getOrderOverdue")
|
||||||
@Operation(summary = "生产单超期 (工作台)")
|
@Operation(summary = "生产单超期 (工作台)")
|
||||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
|
||||||
public CommonResult<PageResult<OrderOverdueRespVO>> getOrderOverdue(@Valid PageParam pageParam) {
|
public CommonResult<PageResult<OrderOverdueRespVO>> getOrderOverdue(@Valid PageParam pageParam) {
|
||||||
return success(orderService.getOrderOverdue(pageParam));
|
return success(orderService.getOrderOverdue(pageParam));
|
||||||
}
|
}
|
||||||
@@ -520,7 +519,6 @@ public class OrderController {
|
|||||||
// 生产单到期告警 (工作台)
|
// 生产单到期告警 (工作台)
|
||||||
@GetMapping("/getOrderWarn")
|
@GetMapping("/getOrderWarn")
|
||||||
@Operation(summary = "生产单到期告警 (工作台)")
|
@Operation(summary = "生产单到期告警 (工作台)")
|
||||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
|
||||||
public CommonResult<PageResult<OrderOverdueRespVO>> getOrderNear(@Valid PageParam pageParam) {
|
public CommonResult<PageResult<OrderOverdueRespVO>> getOrderNear(@Valid PageParam pageParam) {
|
||||||
return success(orderService.getOrderNear(pageParam));
|
return success(orderService.getOrderNear(pageParam));
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -7,7 +7,6 @@ import lombok.Data;
|
|||||||
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|
||||||
public class OrderIds {
|
public class OrderIds {
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -189,15 +189,15 @@ public class PlateDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 房间名
|
* 房间名
|
||||||
*/
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
private String roomName;
|
private String roomName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 柜体名
|
* 柜体名
|
||||||
*/
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
private String bodyName;
|
private String bodyName;
|
||||||
|
|
||||||
/**
|
@TableField(exist = false)
|
||||||
* 加工组名
|
private StringBuilder customPlateNo;
|
||||||
*/
|
|
||||||
private String processGroupName;
|
|
||||||
}
|
}
|
||||||
+3
-1
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.module.executor.service.customplateno;
|
package com.cf.imes.module.executor.service.customplateno;
|
||||||
|
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -14,7 +15,8 @@ public interface CustomPlateNoGenerateService {
|
|||||||
/**
|
/**
|
||||||
* 生成自定义板编号
|
* 生成自定义板编号
|
||||||
*
|
*
|
||||||
|
* @param orderDO 生产单号
|
||||||
* @param plateDOList 板件列表
|
* @param plateDOList 板件列表
|
||||||
*/
|
*/
|
||||||
void generateCustomPlateNo(List<PlateDO> plateDOList);
|
void generateCustomPlateNo(OrderDO orderDO, List<PlateDO> plateDOList);
|
||||||
}
|
}
|
||||||
|
|||||||
+141
-2
@@ -1,10 +1,32 @@
|
|||||||
package com.cf.imes.module.executor.service.customplateno;
|
package com.cf.imes.module.executor.service.customplateno;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
import com.cf.imes.module.executor.enums.ErrorCodeConstants;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplatenorule.CustomPlateNoGenerateRuleService;
|
||||||
|
import com.cf.imes.module.executor.service.order.OrderService;
|
||||||
|
import com.cf.imes.module.system.api.customplateno.CustomPlateNoSeqApi;
|
||||||
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
|
import com.cf.imes.module.system.api.systemconfig.SystemConfigApi;
|
||||||
|
import com.cf.imes.module.system.api.systemconfig.dto.SystemConfigRespDTO;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Gqr
|
* @author Gqr
|
||||||
@@ -14,8 +36,125 @@ import java.util.List;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class CustomPlateNoGenerateServiceImpl implements CustomPlateNoGenerateService {
|
public class CustomPlateNoGenerateServiceImpl implements CustomPlateNoGenerateService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
@Lazy
|
||||||
|
private OrderService orderService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SystemConfigApi systemConfigApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CustomPlateNoSeqApi customPlateNoSeqApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private List<CustomPlateNoGenerateRuleService> ruleServices;
|
||||||
|
|
||||||
|
private static final DateTimeFormatter YEAR_FORMATTER = DateTimeFormatter.ofPattern("yyyy");
|
||||||
|
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
|
||||||
|
private static final DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateCustomPlateNo(List<PlateDO> plateDOList) {
|
public void generateCustomPlateNo(OrderDO orderDO, List<PlateDO> plateDOList) {
|
||||||
// todo generateCustomPlateNo
|
Long orderId = orderDO.getId();
|
||||||
|
// 1、获取生产配置
|
||||||
|
CustomPlateNoGenerateConfigVO generateConfig = getGenerateConfig(orderId);
|
||||||
|
// 如果没有查到配置规则就不做后续生成操作了
|
||||||
|
List<CustomPlateNoRuleVO> orgCustomPlateNoRuleVOList = generateConfig.getOrgCustomPlateNoRuleVOList();
|
||||||
|
if (CollUtil.isEmpty(orgCustomPlateNoRuleVOList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始生成时记录时间,用于后续年月日复位、上次年月日记录等
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
orgCustomPlateNoRuleVOList.forEach(rule -> rule.setNow(now));
|
||||||
|
|
||||||
|
// 2、遍历小板列表,生成板编号
|
||||||
|
for (PlateDO plateDO : plateDOList) {
|
||||||
|
loopGenerateNo(orderId, plateDO, orgCustomPlateNoRuleVOList, generateConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3、保存生产单序号json
|
||||||
|
orderDO.setCustomPlatenoSeq(JSON.toJSONString(generateConfig.getOrderCustomPlateNoSeqVO()));
|
||||||
|
CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
orgCustomPlateNoSeqRespDTO.setLastOrderNo(orderId);
|
||||||
|
orgCustomPlateNoSeqRespDTO.setLastYear(Integer.parseInt(YEAR_FORMATTER.format(now)));
|
||||||
|
orgCustomPlateNoSeqRespDTO.setLastMonth(Integer.parseInt(MONTH_FORMATTER.format(now)));
|
||||||
|
orgCustomPlateNoSeqRespDTO.setLastDay(Integer.parseInt(DAY_FORMATTER.format(now)));
|
||||||
|
// 保存组织下全局序号配置
|
||||||
|
CommonResult<Boolean> orgCustomPlateNoSeqModifyResult = customPlateNoSeqApi.modifyOrgCustomPlateNoSeq(orgCustomPlateNoSeqRespDTO);
|
||||||
|
if (orgCustomPlateNoSeqModifyResult.isError() || !orgCustomPlateNoSeqModifyResult.getData().booleanValue()) {
|
||||||
|
throw new ServiceException(ErrorCodeConstants.CUSTOM_PLATENO_GENERATE_ORG_CUSTOM_PLATENO_SEQ_MODIFY_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 循环规则和板件列表生成编号
|
||||||
|
*
|
||||||
|
* @param orderId
|
||||||
|
* @param plateDO
|
||||||
|
* @param orgCustomPlateNoRuleVOList
|
||||||
|
* @param generateConfig
|
||||||
|
*/
|
||||||
|
private void loopGenerateNo(Long orderId, PlateDO plateDO, List<CustomPlateNoRuleVO> orgCustomPlateNoRuleVOList, CustomPlateNoGenerateConfigVO generateConfig) {
|
||||||
|
// 遍历规则列表
|
||||||
|
for (CustomPlateNoRuleVO plateNoRule : orgCustomPlateNoRuleVOList) {
|
||||||
|
if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.CUSTOM.getRuleCode(), plateNoRule.getRuleCode())) {
|
||||||
|
plateDO.getCustomPlateNo().append(plateNoRule.getValue());
|
||||||
|
}
|
||||||
|
if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.DATE.getRuleCode(), plateNoRule.getRuleCode())) {
|
||||||
|
plateDO.getCustomPlateNo().append(plateNoRule.getNow().format(DateTimeFormatter.ofPattern(plateNoRule.getValue())));
|
||||||
|
}
|
||||||
|
// 遍历规则生成服务列表,获取对应的规则服务
|
||||||
|
for (CustomPlateNoGenerateRuleService ruleService : ruleServices) {
|
||||||
|
if (ruleService.match(plateNoRule.getRuleCode())) {
|
||||||
|
generateConfig = ruleService.generateNo(orderId, plateNoRule, generateConfig, plateDO);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plateDO.setPlateNo(plateDO.getCustomPlateNo().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private CustomPlateNoGenerateConfigVO getGenerateConfig(Long orderId) {
|
||||||
|
// 生成自定义版编号所需配置
|
||||||
|
CustomPlateNoGenerateConfigVO customPlateNoGenerateConfigVO = new CustomPlateNoGenerateConfigVO();
|
||||||
|
|
||||||
|
// 机构下自定义板编号配置
|
||||||
|
SystemConfigRespDTO orgCustomPlateNoConfig = null;
|
||||||
|
// 生产单下序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = new OrderCustomPlateNoSeqVO();
|
||||||
|
// 自定义板编号配置规则明细列表
|
||||||
|
List<CustomPlateNoRuleVO> customPlateNoRuleVOS = List.of();
|
||||||
|
// 查询机构的自定义版编号配置
|
||||||
|
CommonResult<SystemConfigRespDTO> orgCustomPlateNoConfigResult = systemConfigApi.getOrgCustomPlateNoConfig();
|
||||||
|
if (orgCustomPlateNoConfigResult.isSuccess()) {
|
||||||
|
orgCustomPlateNoConfig = orgCustomPlateNoConfigResult.getData();
|
||||||
|
customPlateNoRuleVOS = Optional.ofNullable(orgCustomPlateNoConfig)
|
||||||
|
.map(config -> JSON.parseArray(config.getSetting(), CustomPlateNoRuleVO.class))
|
||||||
|
.orElse(List.of());
|
||||||
|
}
|
||||||
|
|
||||||
|
OrderDO order = orderService.getOrder(orderId);
|
||||||
|
if (ObjectUtil.isNotNull(order) && ObjectUtil.isNotNull(orgCustomPlateNoConfig)) {
|
||||||
|
// 老单
|
||||||
|
// 生产单上的自定义板编号配置id和当前最新的对比,不同用生产单号上的
|
||||||
|
Long orderCustomPlatenoConfigId = order.getCustomPlatenoConfigId();
|
||||||
|
if (ObjectUtil.isNotNull(orderCustomPlatenoConfigId) && ObjectUtil.notEqual(orgCustomPlateNoConfig.getId(), orderCustomPlatenoConfigId)) {
|
||||||
|
CommonResult<SystemConfigRespDTO> previousCustomPlateNoConfig = systemConfigApi.getById(orderCustomPlatenoConfigId);
|
||||||
|
if (previousCustomPlateNoConfig.isSuccess()) {
|
||||||
|
customPlateNoRuleVOS = JSON.parseArray(previousCustomPlateNoConfig.getData().getSetting(), CustomPlateNoRuleVO.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上一次的生产单内 自定义版编号序号
|
||||||
|
orderCustomPlateNoSeqVO = JSON.parseObject(order.getCustomPlatenoSeq(), OrderCustomPlateNoSeqVO.class);
|
||||||
|
}
|
||||||
|
customPlateNoGenerateConfigVO.setOrderCustomPlateNoSeqVO(orderCustomPlateNoSeqVO);
|
||||||
|
customPlateNoGenerateConfigVO.setOrgCustomPlateNoRuleVOList(customPlateNoRuleVOS);
|
||||||
|
CommonResult<CustomPlateNoSeqDTO> orgCustomPlateNoSeq = customPlateNoSeqApi.getOrgCustomPlateNoSeq();
|
||||||
|
if (orgCustomPlateNoSeq.isSuccess()) {
|
||||||
|
customPlateNoGenerateConfigVO.setOrgCustomPlateNoSeqRespDTO(orgCustomPlateNoSeq.getData());
|
||||||
|
}
|
||||||
|
return customPlateNoGenerateConfigVO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
package com.cf.imes.module.executor.service.customplateno.vo;
|
package com.cf.imes.module.executor.service.customplateno.vo;
|
||||||
|
|
||||||
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqRespDTO;
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -27,5 +27,5 @@ public class CustomPlateNoGenerateConfigVO implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 机构下的自定义板编号序号
|
* 机构下的自定义板编号序号
|
||||||
*/
|
*/
|
||||||
private CustomPlateNoSeqRespDTO orgCustomPlateNoSeqRespDTO;
|
private CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -3,6 +3,7 @@ package com.cf.imes.module.executor.service.customplateno.vo;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统配置-自定义板编号setting项 vo
|
* 系统配置-自定义板编号setting项 vo
|
||||||
@@ -48,4 +49,9 @@ public class CustomPlateNoRuleVO implements Serializable {
|
|||||||
* 复位/清零模式
|
* 复位/清零模式
|
||||||
*/
|
*/
|
||||||
private Integer resetMode;
|
private Integer resetMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始生成板编号的时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime now;
|
||||||
}
|
}
|
||||||
|
|||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplateno.vo;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class OrderCustomPlateNoSeqBodyVO implements Serializable {
|
||||||
|
private static final long serialVersionUID = 2686882895438975156L;
|
||||||
|
/**
|
||||||
|
* 柜体名
|
||||||
|
*/
|
||||||
|
private String bodyName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 柜体下板件序号
|
||||||
|
*/
|
||||||
|
private Integer plateNoSeq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 柜体序号
|
||||||
|
*/
|
||||||
|
private Integer bodyNoSeq;
|
||||||
|
}
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplateno.vo;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class OrderCustomPlateNoSeqProcessGroupVO implements Serializable {
|
||||||
|
private static final long serialVersionUID = -6834098282222544638L;
|
||||||
|
/**
|
||||||
|
* 加工组名
|
||||||
|
*/
|
||||||
|
private String processGroupName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加工组下板件序号
|
||||||
|
*/
|
||||||
|
private Integer plateNoSeq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加工组序号
|
||||||
|
*/
|
||||||
|
private Integer processGroupNoSeq;
|
||||||
|
}
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplateno.vo;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class OrderCustomPlateNoSeqRoomVO implements Serializable {
|
||||||
|
private static final long serialVersionUID = -127388898531267048L;
|
||||||
|
/**
|
||||||
|
* 房间名
|
||||||
|
*/
|
||||||
|
private String roomName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间序号
|
||||||
|
*/
|
||||||
|
private Integer roomNoSeq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间下板件序号
|
||||||
|
*/
|
||||||
|
private Integer plateNoSeq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间下柜体序号
|
||||||
|
*/
|
||||||
|
private Integer bodyNoSeq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间下柜体列表
|
||||||
|
*/
|
||||||
|
private List<OrderCustomPlateNoSeqBodyVO> bodys;
|
||||||
|
}
|
||||||
+19
-70
@@ -1,6 +1,8 @@
|
|||||||
package com.cf.imes.module.executor.service.customplateno.vo;
|
package com.cf.imes.module.executor.service.customplateno.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -12,92 +14,39 @@ import java.util.List;
|
|||||||
* @since 2024/11/15 10:41
|
* @since 2024/11/15 10:41
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public class OrderCustomPlateNoSeqVO implements Serializable {
|
public class OrderCustomPlateNoSeqVO implements Serializable {
|
||||||
private static final long serialVersionUID = 5841977329049878792L;
|
private static final long serialVersionUID = 5841977329049878792L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生产单序号
|
||||||
|
*/
|
||||||
|
private Integer orderNoSeq;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生产单下房间序号
|
* 生产单下房间序号
|
||||||
*/
|
*/
|
||||||
private int roomSeq;
|
private Integer roomNoSeq;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生产单下柜体序号
|
* 生产单下柜体序号
|
||||||
*/
|
*/
|
||||||
private int bodySeq;
|
private Integer bodyNoSeq;
|
||||||
|
|
||||||
/**
|
|
||||||
* 生产单下加工组序号
|
|
||||||
*/
|
|
||||||
private int processGroupSeq;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生产单下板件序号
|
* 生产单下板件序号
|
||||||
*/
|
*/
|
||||||
private int plateNoSeq;
|
private Integer plateNoSeq;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生产单下房间列表
|
* 生产单下房间列表
|
||||||
*/
|
*/
|
||||||
private List<Room> rooms;
|
private List<OrderCustomPlateNoSeqRoomVO> rooms;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生产单下柜体列表
|
||||||
|
*/
|
||||||
|
private List<OrderCustomPlateNoSeqBodyVO> bodys;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
|
||||||
class Room implements Serializable {
|
|
||||||
private static final long serialVersionUID = -127388898531267048L;
|
|
||||||
/**
|
|
||||||
* 房间名
|
|
||||||
*/
|
|
||||||
private String roomNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 房间下板件序号
|
|
||||||
*/
|
|
||||||
private int plateNoSeq;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 房间下柜体序号
|
|
||||||
*/
|
|
||||||
private int bodySeq;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 房间下柜体列表
|
|
||||||
*/
|
|
||||||
private List<Body> bodys;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 房间下加工组序号
|
|
||||||
*/
|
|
||||||
private int processGroupSeq;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 房间下加工组列表
|
|
||||||
*/
|
|
||||||
private List<ProcessGroup> processGroups;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
|
||||||
class Body implements Serializable {
|
|
||||||
private static final long serialVersionUID = 2686882895438975156L;
|
|
||||||
/**
|
|
||||||
* 柜体名
|
|
||||||
*/
|
|
||||||
private String bodyNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 柜体下板件序号
|
|
||||||
*/
|
|
||||||
private int plateNoSeq;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
|
||||||
class ProcessGroup implements Serializable {
|
|
||||||
private static final long serialVersionUID = -6834098282222544638L;
|
|
||||||
/**
|
|
||||||
* 加工组名
|
|
||||||
*/
|
|
||||||
private String processGroupNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加工组下板件序号
|
|
||||||
*/
|
|
||||||
private int plateNoSeq;
|
|
||||||
}
|
|
||||||
+223
@@ -0,0 +1,223 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqBodyVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqRoomVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqVO;
|
||||||
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.ResetModeEnum;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.CUSTOM_PLATENO_GENERATE_BODY_RULE_NOT_SUPPORT_RESETMODE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 柜体序号生成规则服务实现类
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/19 16:35
|
||||||
|
*/
|
||||||
|
@Service("bodyNoGenerateRuleService")
|
||||||
|
public class BodyNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
@Override
|
||||||
|
public boolean match(String ruleCode) {
|
||||||
|
return ObjectUtil.equal(CustomPlateNoRuleCodeEnum.BODYNO.getRuleCode(), ruleCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
// 初始化配置
|
||||||
|
initConfig(generateConfig);
|
||||||
|
// 按复位模式走不同的生成方式
|
||||||
|
ResetModeEnum resetModeEnum = ResetModeEnum.getByMode(plateNoRule.getResetMode());
|
||||||
|
if (ObjectUtil.equal(ResetModeEnum.ORDER, resetModeEnum)) {
|
||||||
|
generateConfig = generateNoByOrderResetMode(orderId, plateNoRule, generateConfig, plateDO);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.ROOM, resetModeEnum)) {
|
||||||
|
generateConfig = generateNoByRoomResetMode(plateNoRule, generateConfig, plateDO);
|
||||||
|
} else {
|
||||||
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATENO_GENERATE_BODY_RULE_NOT_SUPPORT_RESETMODE, plateNoRule.getResetMode());
|
||||||
|
}
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化生成所需配置
|
||||||
|
*
|
||||||
|
* @param generateConfigVO
|
||||||
|
*/
|
||||||
|
private static void initConfig(CustomPlateNoGenerateConfigVO generateConfigVO) {
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfigVO.getOrderCustomPlateNoSeqVO();
|
||||||
|
if (ObjectUtil.isNull(orderCustomPlateNoSeqVO)) {
|
||||||
|
orderCustomPlateNoSeqVO = new OrderCustomPlateNoSeqVO();
|
||||||
|
generateConfigVO.setOrderCustomPlateNoSeqVO(orderCustomPlateNoSeqVO);
|
||||||
|
}
|
||||||
|
List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
if (CollUtil.isEmpty(rooms)) {
|
||||||
|
rooms = new ArrayList<>();
|
||||||
|
orderCustomPlateNoSeqVO.setRooms(rooms);
|
||||||
|
}
|
||||||
|
List<OrderCustomPlateNoSeqBodyVO> boyds = orderCustomPlateNoSeqVO.getBodys();
|
||||||
|
if (CollUtil.isEmpty(boyds)) {
|
||||||
|
boyds = new ArrayList<>();
|
||||||
|
orderCustomPlateNoSeqVO.setBodys(boyds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按生产单复位模式下的板编号生成
|
||||||
|
*
|
||||||
|
* @param orderId 生产单号
|
||||||
|
* @param plateNoRule 当前规则配置
|
||||||
|
* @param generateConfig 生成规则配置
|
||||||
|
* @param plateDO 板件列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CustomPlateNoGenerateConfigVO generateNoByOrderResetMode(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
Integer incrementStep = plateNoRule.getIncrementStep();
|
||||||
|
Integer initValue = plateNoRule.getInitValue() - incrementStep;
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
// 机构下的自定义板编号序号
|
||||||
|
CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
// 生产单下柜体序号
|
||||||
|
Integer orderBodyNoSeq = Optional.ofNullable(orderCustomPlateNoSeqVO.getBodyNoSeq()).orElse(initValue);
|
||||||
|
// 生产单序号下的房间序号列表
|
||||||
|
List<OrderCustomPlateNoSeqBodyVO> bodys = orderCustomPlateNoSeqVO.getBodys();
|
||||||
|
// 上次导入的生产单号
|
||||||
|
Long lastOrderNo = orgCustomPlateNoSeqRespDTO.getLastOrderNo();
|
||||||
|
if (ObjectUtil.isNotNull(lastOrderNo) && ObjectUtil.notEqual(orderId, lastOrderNo)) {
|
||||||
|
// 跨单复位到初始值
|
||||||
|
orderBodyNoSeq = initValue;
|
||||||
|
}
|
||||||
|
String bodyName = plateDO.getBodyName();
|
||||||
|
// 根据柜体名获取生产单下序号json中第一层柜体列表的柜体序号
|
||||||
|
OrderCustomPlateNoSeqBodyVO bodySeqVo = getBodySeqVOByBodyName(bodyName, bodys);
|
||||||
|
// 获取当前柜体序号值
|
||||||
|
Integer bodyNoSeq = Optional.ofNullable(bodySeqVo).map(OrderCustomPlateNoSeqBodyVO::getBodyNoSeq).orElse(null);
|
||||||
|
if (bodySeqVo == null) {
|
||||||
|
// 生产单序号下柜体为空,新建柜体,取生产单下柜体序号
|
||||||
|
bodySeqVo = OrderCustomPlateNoSeqBodyVO.builder()
|
||||||
|
.bodyName(bodyName)
|
||||||
|
.build();
|
||||||
|
bodys.add(bodySeqVo);
|
||||||
|
// 累加步长
|
||||||
|
bodyNoSeq = orderBodyNoSeq + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中,生产单下柜体序号累加到多少了
|
||||||
|
orderCustomPlateNoSeqVO.setBodyNoSeq(bodyNoSeq);
|
||||||
|
} else if (bodyNoSeq == null) {
|
||||||
|
// 柜体下序号为空,取生产单下房间序号
|
||||||
|
// 累加步长
|
||||||
|
bodyNoSeq = orderBodyNoSeq + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中,生产单下柜体序号累加到多少了
|
||||||
|
orderCustomPlateNoSeqVO.setBodyNoSeq(bodyNoSeq);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 补零
|
||||||
|
String noPartAfterFillZero = fillZero(bodyNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFillZero);
|
||||||
|
// 累加后同步到json:柜体下累加到多少了
|
||||||
|
bodySeqVo.setBodyNoSeq(bodyNoSeq);
|
||||||
|
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按房间号复位模式下的板编号生成
|
||||||
|
*
|
||||||
|
* @param plateNoRule
|
||||||
|
* @param generateConfig
|
||||||
|
* @param plateDO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CustomPlateNoGenerateConfigVO generateNoByRoomResetMode(CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
Integer incrementStep = plateNoRule.getIncrementStep();
|
||||||
|
Integer initValue = plateNoRule.getInitValue() - incrementStep;
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
|
||||||
|
String roomName = plateDO.getRoomName();
|
||||||
|
// 根据房间名获取生产单下序号json中的房间下的柜体序号
|
||||||
|
OrderCustomPlateNoSeqRoomVO roomSeqVo = getRoomSeqVOByRoomName(roomName, rooms);
|
||||||
|
Integer roomBodyNoRoomSeq = Optional.ofNullable(roomSeqVo)
|
||||||
|
.map(OrderCustomPlateNoSeqRoomVO::getBodyNoSeq)
|
||||||
|
.orElse(initValue);
|
||||||
|
|
||||||
|
if (roomSeqVo == null) {
|
||||||
|
// 房间为空,新建对象,设置初始值
|
||||||
|
roomSeqVo = OrderCustomPlateNoSeqRoomVO.builder()
|
||||||
|
.roomName(roomName)
|
||||||
|
.bodyNoSeq(roomBodyNoRoomSeq)
|
||||||
|
.bodys(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
rooms.add(roomSeqVo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是新的柜体vo,要把累加的值记录到生产单rooms下的柜体
|
||||||
|
String bodyName = plateDO.getBodyName();
|
||||||
|
// 根据柜体名获取生产单下序号中rooms下柜体列表的柜体序号
|
||||||
|
List<OrderCustomPlateNoSeqBodyVO> roomBodys = roomSeqVo.getBodys();
|
||||||
|
OrderCustomPlateNoSeqBodyVO roomBodySeqVo = getBodySeqVOByBodyName(bodyName, roomBodys);
|
||||||
|
// 获取当前房间下柜体的序号值
|
||||||
|
Integer roomBodyNoSeq = Optional.ofNullable(roomBodySeqVo).map(OrderCustomPlateNoSeqBodyVO::getBodyNoSeq).orElse(null);
|
||||||
|
if (roomBodySeqVo == null) {
|
||||||
|
// 房间下柜体为空,新建对象,设置房间下全局柜体序号值
|
||||||
|
roomBodySeqVo = OrderCustomPlateNoSeqBodyVO.builder()
|
||||||
|
.bodyName(bodyName)
|
||||||
|
.build();
|
||||||
|
roomBodys.add(roomBodySeqVo);
|
||||||
|
// 累加步长
|
||||||
|
roomBodyNoSeq = roomBodyNoRoomSeq + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中,生产单下房间中柜体累加到多少了
|
||||||
|
roomSeqVo.setBodyNoSeq(roomBodyNoSeq);
|
||||||
|
} else if (roomBodyNoSeq == null) {
|
||||||
|
// 房间下柜体序号为空,设置房间下全局柜体序号值
|
||||||
|
// 累加步长
|
||||||
|
roomBodyNoSeq = roomBodyNoRoomSeq + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中,生产单下房间中柜体累加到多少了
|
||||||
|
roomSeqVo.setBodyNoSeq(roomBodyNoSeq);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 补零
|
||||||
|
String noPartAfterFillZero = fillZero(roomBodyNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFillZero);
|
||||||
|
// 累加后同步到json中,room下柜体累加到多少了
|
||||||
|
roomBodySeqVo.setBodyNoSeq(roomBodyNoSeq);
|
||||||
|
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据房间名从生产单序号json中获取房间序号
|
||||||
|
*
|
||||||
|
* @param roomName
|
||||||
|
* @param roomVOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private OrderCustomPlateNoSeqRoomVO getRoomSeqVOByRoomName(String roomName, List<OrderCustomPlateNoSeqRoomVO> roomVOList) {
|
||||||
|
return roomVOList.stream().filter(roomVO -> ObjectUtil.equal(roomName, roomVO.getRoomName())).findAny().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据柜体名从生产单序号json中获取柜体序号
|
||||||
|
*
|
||||||
|
* @param bodyName
|
||||||
|
* @param bodyVOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private OrderCustomPlateNoSeqBodyVO getBodySeqVOByBodyName(String bodyName, List<OrderCustomPlateNoSeqBodyVO> bodyVOList) {
|
||||||
|
if (CollUtil.isEmpty(bodyVOList)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return bodyVOList.stream().filter(bodyVO -> ObjectUtil.equal(bodyName, bodyVO.getBodyName())).findAny().orElse(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
//package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
//
|
||||||
|
//import cn.hutool.core.util.ObjectUtil;
|
||||||
|
//import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
//import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//
|
||||||
|
//import java.util.List;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 自定义规则生成实现类
|
||||||
|
// *
|
||||||
|
// * @author Gqr
|
||||||
|
// * @since 2024/11/18 16:37
|
||||||
|
// */
|
||||||
|
////@Service("customGenerateRuleService")
|
||||||
|
//public class CustomGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
// @Override
|
||||||
|
// public boolean match(String ruleCode) {
|
||||||
|
// return ObjectUtil.equal(CustomPlateNoRuleCodeEnum.CUSTOM.getRuleCode(), ruleCode);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, List<PlateDO> plateDOList) {
|
||||||
|
// for (PlateDO plateDO : plateDOList) {
|
||||||
|
// plateDO.getCustomPlateNo().append(plateNoRule.getValue());
|
||||||
|
// }
|
||||||
|
// return generateConfig;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义板编号生成规则服务
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/18 16:30
|
||||||
|
*/
|
||||||
|
public interface CustomPlateNoGenerateRuleService {
|
||||||
|
/**
|
||||||
|
* 是否匹配的规则编码
|
||||||
|
*
|
||||||
|
* @param ruleCode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean match(String ruleCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成编号
|
||||||
|
*
|
||||||
|
* @param orderId 生产单号
|
||||||
|
* @param plateDO 板材列表
|
||||||
|
* @param generateConfig 生成所需要的配置
|
||||||
|
* @return 生成后改变的配置
|
||||||
|
*/
|
||||||
|
CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 左补零
|
||||||
|
*
|
||||||
|
* @param curr 当前值
|
||||||
|
* @param plateNoRule 生成规则
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
default String fillZero(int curr, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
boolean leftFillZero = plateNoRule.isLeftFillZero();
|
||||||
|
Integer length = plateNoRule.getLength();
|
||||||
|
if (leftFillZero) {
|
||||||
|
return String.format("%0" + length + "d", curr);
|
||||||
|
}
|
||||||
|
return String.valueOf(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
//package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
//
|
||||||
|
//import cn.hutool.core.util.ObjectUtil;
|
||||||
|
//import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
//import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//
|
||||||
|
//import java.time.format.DateTimeFormatter;
|
||||||
|
//import java.util.List;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 日期规则生成服务实现类
|
||||||
|
// *
|
||||||
|
// * @author Gqr
|
||||||
|
// * @since 2024/11/18 16:46
|
||||||
|
// */
|
||||||
|
//@Service("dateGenerateRuleService")
|
||||||
|
//public class DateGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
// @Override
|
||||||
|
// public boolean match(String ruleCode) {
|
||||||
|
// return ObjectUtil.equal(CustomPlateNoRuleCodeEnum.DATE.getRuleCode(), ruleCode);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, List<PlateDO> plateDOList) {
|
||||||
|
// for (PlateDO plateDO : plateDOList) {
|
||||||
|
// plateDO.getCustomPlateNo().append(plateNoRule.getNow().format(DateTimeFormatter.ofPattern(plateNoRule.getValue())));
|
||||||
|
// }
|
||||||
|
// return generateConfig;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
+185
@@ -0,0 +1,185 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqVO;
|
||||||
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.ResetModeEnum;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.CUSTOM_PLATENO_GENERATE_ORDERNO_RULE_NOT_SUPPORT_RESETMODE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生产单序号生成规则服务实现类
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/18 17:18
|
||||||
|
*/
|
||||||
|
@Service("orderNoGenerateRuleService")
|
||||||
|
public class OrderNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
|
||||||
|
private static final DateTimeFormatter YEAR_FORMATTER = DateTimeFormatter.ofPattern("yyyy");
|
||||||
|
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
|
||||||
|
private static final DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean match(String ruleCode) {
|
||||||
|
return ObjectUtil.equal(CustomPlateNoRuleCodeEnum.ORDERNO.getRuleCode(), ruleCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化生成所需配置
|
||||||
|
*
|
||||||
|
* @param generateConfigVO
|
||||||
|
*/
|
||||||
|
private static void initConfig(CustomPlateNoGenerateConfigVO generateConfigVO) {
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfigVO.getOrderCustomPlateNoSeqVO();
|
||||||
|
if (ObjectUtil.isNull(orderCustomPlateNoSeqVO)) {
|
||||||
|
orderCustomPlateNoSeqVO = new OrderCustomPlateNoSeqVO();
|
||||||
|
generateConfigVO.setOrderCustomPlateNoSeqVO(orderCustomPlateNoSeqVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
// 初始化配置
|
||||||
|
initConfig(generateConfig);
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
Integer orderNoSeq = orderCustomPlateNoSeqVO.getOrderNoSeq();
|
||||||
|
// 当前导入已有序号的,生产单内生产单序号不会再变直接用
|
||||||
|
if (ObjectUtil.isNotNull(orderNoSeq)) {
|
||||||
|
// 补零
|
||||||
|
String noPartAfterFill = this.fillZero(orderNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFill);
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
// 机构下的自定义板编号序号
|
||||||
|
CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
// 获取当前序号值
|
||||||
|
int currOrderNoSeq = Optional.ofNullable(orgCustomPlateNoSeqRespDTO.getOrderNoSeq()).orElse(plateNoRule.getInitValue() - plateNoRule.getIncrementStep());
|
||||||
|
// 上次导入的生产单号
|
||||||
|
Long lastOrderNo = orgCustomPlateNoSeqRespDTO.getLastOrderNo();
|
||||||
|
if (ObjectUtil.isNull(lastOrderNo) || ObjectUtil.notEqual(orderId, lastOrderNo)) {
|
||||||
|
// 跨单
|
||||||
|
// 根据复位模式计算序号
|
||||||
|
currOrderNoSeq = generateNoByResetMode(currOrderNoSeq, ResetModeEnum.getByMode(plateNoRule.getResetMode()), plateNoRule, orgCustomPlateNoSeqRespDTO);
|
||||||
|
}
|
||||||
|
// 补零
|
||||||
|
String noPartAfterFill = this.fillZero(currOrderNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFill);
|
||||||
|
|
||||||
|
// 累加后的值同步到当前生产单序号和机构序号中
|
||||||
|
orderCustomPlateNoSeqVO.setOrderNoSeq(currOrderNoSeq);
|
||||||
|
orgCustomPlateNoSeqRespDTO.setOrderNoSeq(currOrderNoSeq);
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基于复位模式的板编号生成
|
||||||
|
*
|
||||||
|
* @param orderNoSeq
|
||||||
|
* @param resetModeEnum
|
||||||
|
* @param plateNoRule
|
||||||
|
* @param orgCustomPlateNoSeqRespDTO
|
||||||
|
* @return 循环累加后的序号
|
||||||
|
*/
|
||||||
|
private int generateNoByResetMode(int orderNoSeq, ResetModeEnum resetModeEnum, CustomPlateNoRuleVO plateNoRule, CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO) {
|
||||||
|
// 机构全局序号下的上一次年月日记录
|
||||||
|
int year = orgCustomPlateNoSeqRespDTO.getLastYear();
|
||||||
|
int month = orgCustomPlateNoSeqRespDTO.getLastMonth();
|
||||||
|
int day = orgCustomPlateNoSeqRespDTO.getLastDay();
|
||||||
|
|
||||||
|
// 根据不同复位模式生成序号
|
||||||
|
if (ObjectUtil.equal(ResetModeEnum.DIGIT, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByLength(orderNoSeq, plateNoRule);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.YEAR, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByYear(orderNoSeq, year, plateNoRule);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.MONTH, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByMonth(orderNoSeq, month, plateNoRule);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.DAY, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByDay(orderNoSeq, day, plateNoRule);
|
||||||
|
} else {
|
||||||
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATENO_GENERATE_ORDERNO_RULE_NOT_SUPPORT_RESETMODE, plateNoRule.getResetMode());
|
||||||
|
}
|
||||||
|
return orderNoSeq;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按位数复位
|
||||||
|
*
|
||||||
|
* @param curr 当前值
|
||||||
|
* @param plateNoRule 规则配置
|
||||||
|
*/
|
||||||
|
private int resetByLength(int curr, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
// 位数下的最大值 10的length次方-1
|
||||||
|
int maxNum = (int) (Math.pow(10, plateNoRule.getLength()) - 1);
|
||||||
|
// 加上步长后的下一个序号
|
||||||
|
int nextValue = curr + plateNoRule.getIncrementStep();
|
||||||
|
// 超过最大值复位到初始值,没超过就继续下一个
|
||||||
|
if (nextValue > maxNum) {
|
||||||
|
return plateNoRule.getInitValue();
|
||||||
|
} else {
|
||||||
|
return nextValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按年复位
|
||||||
|
*
|
||||||
|
* @param curr
|
||||||
|
* @param year
|
||||||
|
* @param plateNoRule
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int resetByYear(int curr, int year, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
LocalDateTime now = plateNoRule.getNow();
|
||||||
|
Integer initValue = plateNoRule.getInitValue();
|
||||||
|
if (ObjectUtil.notEqual(String.valueOf(year), now.format(YEAR_FORMATTER))) {
|
||||||
|
return initValue;
|
||||||
|
}
|
||||||
|
return curr + plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按月复位
|
||||||
|
*
|
||||||
|
* @param curr
|
||||||
|
* @param month
|
||||||
|
* @param plateNoRule
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int resetByMonth(int curr, int month, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
LocalDateTime now = plateNoRule.getNow();
|
||||||
|
Integer initValue = plateNoRule.getInitValue();
|
||||||
|
if (ObjectUtil.notEqual(String.valueOf(month), now.format(MONTH_FORMATTER))) {
|
||||||
|
return initValue;
|
||||||
|
}
|
||||||
|
return curr + plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按天复位
|
||||||
|
*
|
||||||
|
* @param curr
|
||||||
|
* @param day
|
||||||
|
* @param plateNoRule
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int resetByDay(int curr, int day, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
LocalDateTime now = plateNoRule.getNow();
|
||||||
|
Integer initValue = plateNoRule.getInitValue();
|
||||||
|
if (ObjectUtil.notEqual(String.valueOf(day), now.format(DAY_FORMATTER))) {
|
||||||
|
return initValue;
|
||||||
|
}
|
||||||
|
return curr + plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
}
|
||||||
+311
@@ -0,0 +1,311 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqBodyVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqRoomVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqVO;
|
||||||
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.ResetModeEnum;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.CUSTOM_PLATENO_GENERATE_PLATE_RULE_NOT_SUPPORT_RESETMODE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/20 15:28
|
||||||
|
*/
|
||||||
|
@Service("plateNoGenerateRuleService")
|
||||||
|
public class PlateNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
|
||||||
|
private static final DateTimeFormatter YEAR_FORMATTER = DateTimeFormatter.ofPattern("yyyy");
|
||||||
|
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
|
||||||
|
private static final DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean match(String ruleCode) {
|
||||||
|
return ObjectUtil.equal(CustomPlateNoRuleCodeEnum.PLATENO.getRuleCode(), ruleCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
// 初始化配置
|
||||||
|
initConfig(generateConfig);
|
||||||
|
// 按复位模式走不同的生成方式
|
||||||
|
ResetModeEnum resetModeEnum = ResetModeEnum.getByMode(plateNoRule.getResetMode());
|
||||||
|
if (ObjectUtil.equal(ResetModeEnum.ORDER, resetModeEnum)) {
|
||||||
|
return generateNoByOrderResetMode(orderId, plateNoRule, generateConfig, plateDO);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.ROOM, resetModeEnum)) {
|
||||||
|
return generateNoByRoomResetMode(plateNoRule, generateConfig, plateDO);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.BODY, resetModeEnum)) {
|
||||||
|
return generateNoByBodyResetMode(plateNoRule, generateConfig, plateDO);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.YEAR, resetModeEnum) || ObjectUtil.equal(ResetModeEnum.MONTH, resetModeEnum) || ObjectUtil.equal(ResetModeEnum.DAY, resetModeEnum)) {
|
||||||
|
return generateNoByDateResetMode(resetModeEnum, plateNoRule, generateConfig, plateDO);
|
||||||
|
} else {
|
||||||
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATENO_GENERATE_PLATE_RULE_NOT_SUPPORT_RESETMODE, plateNoRule.getResetMode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按年/月/日复位模式下的板编号生成
|
||||||
|
*/
|
||||||
|
private CustomPlateNoGenerateConfigVO generateNoByDateResetMode(ResetModeEnum resetModeEnum, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
// 机构下的自定义板编号序号
|
||||||
|
CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
// 上一次自定义编号生成的年月日
|
||||||
|
int year = orgCustomPlateNoSeqRespDTO.getLastYear();
|
||||||
|
int month = orgCustomPlateNoSeqRespDTO.getLastMonth();
|
||||||
|
int day = orgCustomPlateNoSeqRespDTO.getLastDay();
|
||||||
|
// 从全局配置获取当前序号,取不到用初始值
|
||||||
|
Integer orderNoSeq = orgCustomPlateNoSeqRespDTO.getPlateNoSeq();
|
||||||
|
if (ObjectUtil.isNull(orderNoSeq)) {
|
||||||
|
orderNoSeq = plateNoRule.getInitValue() - plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ObjectUtil.equal(ResetModeEnum.YEAR, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByYear(orderNoSeq, year, plateNoRule);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.MONTH, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByMonth(orderNoSeq, month, plateNoRule);
|
||||||
|
} else if (ObjectUtil.equal(ResetModeEnum.DAY, resetModeEnum)) {
|
||||||
|
orderNoSeq = resetByDay(orderNoSeq, day, plateNoRule);
|
||||||
|
}
|
||||||
|
// 跨板件累加步长,补零
|
||||||
|
orderNoSeq += plateNoRule.getIncrementStep();
|
||||||
|
String noPartAfterFillZero = fillZero(orderNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFillZero);
|
||||||
|
|
||||||
|
orgCustomPlateNoSeqRespDTO.setPlateNoSeq(orderNoSeq);
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按生产单复位模式下的板编号生成
|
||||||
|
*
|
||||||
|
* @param orderId
|
||||||
|
* @param plateNoRule
|
||||||
|
* @param generateConfig
|
||||||
|
* @param plateDO
|
||||||
|
*/
|
||||||
|
private CustomPlateNoGenerateConfigVO generateNoByOrderResetMode(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
Integer incrementStep = plateNoRule.getIncrementStep();
|
||||||
|
Integer initValue = plateNoRule.getInitValue() - incrementStep;
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
// 机构下的自定义板编号序号
|
||||||
|
CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
// 获取当前生产单下板件序号
|
||||||
|
Integer orderPlateNoSeq = Optional.ofNullable(orderCustomPlateNoSeqVO.getPlateNoSeq()).orElse(initValue);
|
||||||
|
// 上次导入的生产单号
|
||||||
|
Long lastOrderNo = orgCustomPlateNoSeqRespDTO.getLastOrderNo();
|
||||||
|
if (ObjectUtil.isNotNull(lastOrderNo) && ObjectUtil.notEqual(orderId, lastOrderNo)) {
|
||||||
|
// 跨单复位到初始值
|
||||||
|
orderPlateNoSeq = initValue;
|
||||||
|
}
|
||||||
|
// 跨板件累加步长,补零
|
||||||
|
orderPlateNoSeq += incrementStep;
|
||||||
|
plateDO.getCustomPlateNo().append(fillZero(orderPlateNoSeq, plateNoRule));
|
||||||
|
// 累加后的值同步到当前生产单序号中
|
||||||
|
orderCustomPlateNoSeqVO.setPlateNoSeq(orderPlateNoSeq);
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按房间复位模式下的板编号生成
|
||||||
|
*
|
||||||
|
* @param plateNoRule
|
||||||
|
* @param generateConfig
|
||||||
|
* @param plateDO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CustomPlateNoGenerateConfigVO generateNoByRoomResetMode(CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
Integer incrementStep = plateNoRule.getIncrementStep();
|
||||||
|
Integer initValue = plateNoRule.getInitValue() - incrementStep;
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
String roomName = plateDO.getRoomName();
|
||||||
|
// 根据房间名获取生产单下序号json中的房间下的加工组序号
|
||||||
|
OrderCustomPlateNoSeqRoomVO roomSeqVo = getSeqRoomByRoomName(roomName, rooms);
|
||||||
|
// 为空初始化,加入列表
|
||||||
|
if (roomSeqVo == null) {
|
||||||
|
roomSeqVo = OrderCustomPlateNoSeqRoomVO.builder()
|
||||||
|
.roomName(roomName)
|
||||||
|
.bodys(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
rooms.add(roomSeqVo);
|
||||||
|
}
|
||||||
|
// 获取当前房间下板件序号
|
||||||
|
// 累加步长
|
||||||
|
Integer roomPlateNoSeq = Optional.ofNullable(roomSeqVo.getPlateNoSeq())
|
||||||
|
.orElse(initValue) + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中
|
||||||
|
roomSeqVo.setPlateNoSeq(roomPlateNoSeq);
|
||||||
|
// 补零
|
||||||
|
plateDO.getCustomPlateNo().append(fillZero(roomPlateNoSeq, plateNoRule));
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据房间名从生产单序号json中获取房间序号列表
|
||||||
|
*
|
||||||
|
* @param roomName
|
||||||
|
* @param roomVOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private OrderCustomPlateNoSeqRoomVO getSeqRoomByRoomName(String roomName, List<OrderCustomPlateNoSeqRoomVO> roomVOList) {
|
||||||
|
return roomVOList.stream().filter(roomVO -> ObjectUtil.equal(roomName, roomVO.getRoomName())).findAny().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按柜体复位模式下的板编号生成
|
||||||
|
*
|
||||||
|
* @param plateNoRule
|
||||||
|
* @param generateConfig
|
||||||
|
* @param plateDO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CustomPlateNoGenerateConfigVO generateNoByBodyResetMode(CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
Integer incrementStep = plateNoRule.getIncrementStep();
|
||||||
|
Integer initValue = plateNoRule.getInitValue() - incrementStep;
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
|
||||||
|
String roomName = plateDO.getRoomName();
|
||||||
|
// 根据房间名获取生产单下序号json中的房间下的加工组序号
|
||||||
|
OrderCustomPlateNoSeqRoomVO roomSeqVo = getSeqRoomByRoomName(roomName, rooms);
|
||||||
|
if (ObjectUtil.isNull(roomSeqVo)) {
|
||||||
|
// 房间为空,new房间
|
||||||
|
roomSeqVo = OrderCustomPlateNoSeqRoomVO.
|
||||||
|
builder()
|
||||||
|
.roomName(roomName)
|
||||||
|
.bodys(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
rooms.add(roomSeqVo);
|
||||||
|
}
|
||||||
|
|
||||||
|
String bodyName = plateDO.getBodyName();
|
||||||
|
// 根据柜体名获取生产单下序号json中的房间下的加工组序号
|
||||||
|
OrderCustomPlateNoSeqBodyVO bodySeqVO = getBodySeqByBodyName(bodyName, roomSeqVo);
|
||||||
|
|
||||||
|
if (bodySeqVO == null) {
|
||||||
|
// 柜体为空,new柜体
|
||||||
|
bodySeqVO = OrderCustomPlateNoSeqBodyVO.builder()
|
||||||
|
.bodyName(bodyName)
|
||||||
|
.build();
|
||||||
|
roomSeqVo.getBodys().add(bodySeqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 累加步长
|
||||||
|
// 获取柜体下的板件序号
|
||||||
|
Integer bodyPlateNoSeq = Optional.ofNullable(bodySeqVO.getPlateNoSeq()).orElse(initValue) + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中
|
||||||
|
bodySeqVO.setPlateNoSeq(bodyPlateNoSeq);
|
||||||
|
// 补零
|
||||||
|
String noPartAfterFillZero = fillZero(bodyPlateNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFillZero);
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据房间名从生产单序号json中获取房间序号列表
|
||||||
|
*
|
||||||
|
* @param bodyName
|
||||||
|
* @param roomVO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private OrderCustomPlateNoSeqBodyVO getBodySeqByBodyName(String bodyName, OrderCustomPlateNoSeqRoomVO roomVO) {
|
||||||
|
List<OrderCustomPlateNoSeqBodyVO> bodys = roomVO.getBodys();
|
||||||
|
if (ObjectUtil.isNotNull(bodys)) {
|
||||||
|
for (OrderCustomPlateNoSeqBodyVO bodyVO : bodys) {
|
||||||
|
if (ObjectUtil.equal(bodyVO.getBodyName(), bodyName)) {
|
||||||
|
return bodyVO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bodys = new ArrayList<>();
|
||||||
|
roomVO.setBodys(bodys);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化生成所需配置
|
||||||
|
*
|
||||||
|
* @param generateConfigVO
|
||||||
|
*/
|
||||||
|
private void initConfig(CustomPlateNoGenerateConfigVO generateConfigVO) {
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfigVO.getOrderCustomPlateNoSeqVO();
|
||||||
|
if (ObjectUtil.isNull(orderCustomPlateNoSeqVO)) {
|
||||||
|
orderCustomPlateNoSeqVO = new OrderCustomPlateNoSeqVO();
|
||||||
|
generateConfigVO.setOrderCustomPlateNoSeqVO(orderCustomPlateNoSeqVO);
|
||||||
|
}
|
||||||
|
List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
if (CollUtil.isEmpty(rooms)) {
|
||||||
|
rooms = new ArrayList<>();
|
||||||
|
orderCustomPlateNoSeqVO.setRooms(rooms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按年复位
|
||||||
|
*
|
||||||
|
* @param curr
|
||||||
|
* @param year
|
||||||
|
* @param plateNoRule
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int resetByYear(int curr, int year, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
LocalDateTime now = plateNoRule.getNow();
|
||||||
|
Integer initValue = plateNoRule.getInitValue();
|
||||||
|
if (ObjectUtil.notEqual(String.valueOf(year), now.format(YEAR_FORMATTER))) {
|
||||||
|
return initValue;
|
||||||
|
}
|
||||||
|
return curr + plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按月复位
|
||||||
|
*
|
||||||
|
* @param curr
|
||||||
|
* @param month
|
||||||
|
* @param plateNoRule
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int resetByMonth(int curr, int month, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
LocalDateTime now = plateNoRule.getNow();
|
||||||
|
Integer initValue = plateNoRule.getInitValue();
|
||||||
|
if (ObjectUtil.notEqual(String.valueOf(month), now.format(MONTH_FORMATTER))) {
|
||||||
|
return initValue;
|
||||||
|
}
|
||||||
|
return curr + plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按天复位
|
||||||
|
*
|
||||||
|
* @param curr
|
||||||
|
* @param day
|
||||||
|
* @param plateNoRule
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int resetByDay(int curr, int day, CustomPlateNoRuleVO plateNoRule) {
|
||||||
|
LocalDateTime now = plateNoRule.getNow();
|
||||||
|
Integer initValue = plateNoRule.getInitValue();
|
||||||
|
if (ObjectUtil.notEqual(String.valueOf(day), now.format(DAY_FORMATTER))) {
|
||||||
|
return initValue;
|
||||||
|
}
|
||||||
|
return curr + plateNoRule.getIncrementStep();
|
||||||
|
}
|
||||||
|
}
|
||||||
+240
@@ -0,0 +1,240 @@
|
|||||||
|
//package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
//
|
||||||
|
//import cn.hutool.core.collection.CollUtil;
|
||||||
|
//import cn.hutool.core.util.ObjectUtil;
|
||||||
|
//import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
|
//import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqProcessGroupVO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqRoomVO;
|
||||||
|
//import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqVO;
|
||||||
|
//import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqRespDTO;
|
||||||
|
//import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
//import com.cf.imes.module.system.enums.customplateno.ResetModeEnum;
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//
|
||||||
|
//import java.util.ArrayList;
|
||||||
|
//import java.util.List;
|
||||||
|
//import java.util.Map;
|
||||||
|
//import java.util.Optional;
|
||||||
|
//import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
//import java.util.stream.Collectors;
|
||||||
|
//
|
||||||
|
//import static com.cf.imes.module.executor.enums.ErrorCodeConstants.CUSTOM_PLATENO_GENERATE_PROCESSGROUP_RULE_NOT_SUPPORT_RESETMODE;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 加工组序号生成规则服务实现类
|
||||||
|
// *
|
||||||
|
// * @author Gqr
|
||||||
|
// * @since 2024/11/20 13:42
|
||||||
|
// */
|
||||||
|
//@Service("processGroupNoGenerateRuleService")
|
||||||
|
//public class ProcessGroupNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
// @Override
|
||||||
|
// public boolean match(String ruleCode) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, List<PlateDO> plateDOList) {
|
||||||
|
// // 初始化配置
|
||||||
|
// initConfig(generateConfig);
|
||||||
|
// // 按复位模式走不同的生成方式
|
||||||
|
// ResetModeEnum resetModeEnum = ResetModeEnum.getByMode(plateNoRule.getResetMode());
|
||||||
|
// if (ObjectUtil.equal(ResetModeEnum.ORDER, resetModeEnum)) {
|
||||||
|
// generateConfig = generateNoByOrderResetMode(orderId, plateNoRule, generateConfig, plateDOList);
|
||||||
|
// } else if (ObjectUtil.equal(ResetModeEnum.ROOM, resetModeEnum)) {
|
||||||
|
// generateConfig = generateNoByRoomResetMode(plateNoRule, generateConfig, plateDOList);
|
||||||
|
// } else {
|
||||||
|
// throw ServiceExceptionUtil.exception(CUSTOM_PLATENO_GENERATE_PROCESSGROUP_RULE_NOT_SUPPORT_RESETMODE, plateNoRule.getResetMode());
|
||||||
|
// }
|
||||||
|
// return generateConfig;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 初始化生成所需配置
|
||||||
|
// *
|
||||||
|
// * @param generateConfigVO
|
||||||
|
// */
|
||||||
|
// private static void initConfig(CustomPlateNoGenerateConfigVO generateConfigVO) {
|
||||||
|
// OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfigVO.getOrderCustomPlateNoSeqVO();
|
||||||
|
// if (ObjectUtil.isNull(orderCustomPlateNoSeqVO)) {
|
||||||
|
// orderCustomPlateNoSeqVO = new OrderCustomPlateNoSeqVO();
|
||||||
|
// generateConfigVO.setOrderCustomPlateNoSeqVO(orderCustomPlateNoSeqVO);
|
||||||
|
// }
|
||||||
|
// List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
// if (CollUtil.isEmpty(rooms)) {
|
||||||
|
// rooms = new ArrayList<>();
|
||||||
|
// orderCustomPlateNoSeqVO.setRooms(rooms);
|
||||||
|
// }
|
||||||
|
// List<OrderCustomPlateNoSeqProcessGroupVO> processGroups = orderCustomPlateNoSeqVO.getProcessGroups();
|
||||||
|
// if (CollUtil.isEmpty(processGroups)) {
|
||||||
|
// processGroups = new ArrayList<>();
|
||||||
|
// orderCustomPlateNoSeqVO.setProcessGroups(processGroups);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 按生产单复位模式下的板编号生成
|
||||||
|
// *
|
||||||
|
// * @param orderId 生产单号
|
||||||
|
// * @param plateNoRule 当前规则配置
|
||||||
|
// * @param generateConfig 生成规则配置
|
||||||
|
// * @param plateDOList 板件列表
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private CustomPlateNoGenerateConfigVO generateNoByOrderResetMode(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, List<PlateDO> plateDOList) {
|
||||||
|
// Integer initValue = plateNoRule.getInitValue() - plateNoRule.getIncrementStep();
|
||||||
|
// // 生产单下的序号
|
||||||
|
// OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
// // 机构下的自定义板编号序号
|
||||||
|
// CustomPlateNoSeqRespDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
// // 生产单下加工组序号
|
||||||
|
// Integer orderProcessGroupNoSeq = null;
|
||||||
|
// List<OrderCustomPlateNoSeqProcessGroupVO> processGroups = orderCustomPlateNoSeqVO.getProcessGroups();
|
||||||
|
// if (ObjectUtil.equal(orderId, orgCustomPlateNoSeqRespDTO.getLastOrderNo())) {
|
||||||
|
// // 当次导入和上次导入是同一个生产单
|
||||||
|
// // 取之前的生产单下加工组序号,没有就用初始值
|
||||||
|
// orderProcessGroupNoSeq = Optional.ofNullable(orderCustomPlateNoSeqVO.getProcessGroupNoSeq()).orElse(initValue);
|
||||||
|
// }
|
||||||
|
// // 基于加工组名分组
|
||||||
|
// Map<String, List<PlateDO>> processGroupMap = plateDOList.stream().collect(Collectors.groupingBy(PlateDO::getProcessGroupName, Collectors.toList()));
|
||||||
|
// for (Map.Entry<String, List<PlateDO>> processGroupEntry : processGroupMap.entrySet()) {
|
||||||
|
// // 如果是新的加工组vo,要把累加的值记录到生产单
|
||||||
|
// boolean needRecordToOrder = false;
|
||||||
|
// String processGroupName = processGroupEntry.getKey();
|
||||||
|
// // 根据加工组名获取生产单下序号json中第一层加工组列表的加工组序号
|
||||||
|
// OrderCustomPlateNoSeqProcessGroupVO processSeqVO = getProcessGroupSeqVOByProcessGroupName(processGroupName, processGroups);
|
||||||
|
// // 获取当前加工组序号值
|
||||||
|
// Integer processGroupNoSeq = Optional.ofNullable(processSeqVO).map(OrderCustomPlateNoSeqProcessGroupVO::getProcessGroupNoSeq).orElse(initValue);
|
||||||
|
// if (processSeqVO == null) {
|
||||||
|
// // 房间为空,新建对象,设置初始值
|
||||||
|
// processSeqVO = OrderCustomPlateNoSeqProcessGroupVO.builder()
|
||||||
|
// .processGroupName(processGroupName)
|
||||||
|
// .build();
|
||||||
|
// processGroups.add(processSeqVO);
|
||||||
|
// needRecordToOrder = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// List<PlateDO> processGroupPlateList = processGroupEntry.getValue();
|
||||||
|
// processGroupNoSeq += plateNoRule.getIncrementStep();
|
||||||
|
// // 跨柜体累加步长,补零
|
||||||
|
// String noPartAfterFillZero = fillZero(processGroupNoSeq, plateNoRule);
|
||||||
|
// processGroupPlateList.forEach(processGroupPlate -> processGroupPlate.getCustomPlateNo().append(noPartAfterFillZero));
|
||||||
|
// // 累加后同步到json:加工组下累加到多少了
|
||||||
|
// processSeqVO.setProcessGroupNoSeq(processGroupNoSeq);
|
||||||
|
// if (needRecordToOrder) {
|
||||||
|
// // 新的房间下加工组vo,累加值同步到房间中
|
||||||
|
// orderProcessGroupNoSeq = processGroupNoSeq;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // 累加后的值同步到当前生产单序号中,生产单下加工组序号累加到多少了
|
||||||
|
// orderCustomPlateNoSeqVO.setProcessGroupNoSeq(orderProcessGroupNoSeq);
|
||||||
|
// return generateConfig;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 按房间号复位模式下的板编号生成
|
||||||
|
// *
|
||||||
|
// * @param plateNoRule
|
||||||
|
// * @param generateConfig
|
||||||
|
// * @param plateDOList
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private CustomPlateNoGenerateConfigVO generateNoByRoomResetMode(CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, List<PlateDO> plateDOList) {
|
||||||
|
// Integer initValue = plateNoRule.getInitValue() - plateNoRule.getIncrementStep();
|
||||||
|
// // 生产单下的序号
|
||||||
|
// OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
// List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
// // 基于房间名分组
|
||||||
|
// Map<String, List<PlateDO>> roomGroupMap = plateDOList.stream().collect(Collectors.groupingBy(PlateDO::getRoomName, Collectors.toList()));
|
||||||
|
//
|
||||||
|
// for (Map.Entry<String, List<PlateDO>> roomEntry : roomGroupMap.entrySet()) {
|
||||||
|
// List<PlateDO> roomPlateList = roomEntry.getValue();
|
||||||
|
// String roomName = roomEntry.getKey();
|
||||||
|
// // 根据房间名获取生产单下序号json中的房间下的柜体序号
|
||||||
|
// OrderCustomPlateNoSeqRoomVO roomSeqVo = getRoomSeqVOByRoomName(roomName, rooms);
|
||||||
|
// Integer roomProcessGroupNoRoomSeq = Optional.ofNullable(roomSeqVo)
|
||||||
|
// .map(OrderCustomPlateNoSeqRoomVO::getProcessGroupNoSeq)
|
||||||
|
// .orElse(initValue);
|
||||||
|
//
|
||||||
|
// if (roomSeqVo == null) {
|
||||||
|
// // 房间为空,新建对象,设置初始值
|
||||||
|
// roomSeqVo = OrderCustomPlateNoSeqRoomVO.builder()
|
||||||
|
// .roomName(roomName)
|
||||||
|
// .processGroupNoSeq(roomProcessGroupNoRoomSeq)
|
||||||
|
// .processGroups(new ArrayList<>())
|
||||||
|
// .build();
|
||||||
|
// rooms.add(roomSeqVo);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 基于加工组分组
|
||||||
|
// Map<String, List<PlateDO>> roomProcessGroupMap = roomPlateList.stream()
|
||||||
|
// .collect(Collectors.groupingBy(PlateDO::getProcessGroupName, Collectors.toList()));
|
||||||
|
// for (Map.Entry<String, List<PlateDO>> roomPrcesssGroupEntry : roomProcessGroupMap.entrySet()) {
|
||||||
|
// // 如果是新的柜体vo,要把累加的值记录到生产单rooms下的柜体
|
||||||
|
// boolean needRecordToOrder = false;
|
||||||
|
// String processGroupName = roomPrcesssGroupEntry.getKey();
|
||||||
|
// // 根据加工组名获取生产单下序号中rooms下加工组列表的加工组序号
|
||||||
|
// List<OrderCustomPlateNoSeqProcessGroupVO> roomProcessGroups = roomSeqVo.getProcessGroups();
|
||||||
|
// OrderCustomPlateNoSeqProcessGroupVO roomProcessGroupSeqVo = getProcessGroupSeqVOByProcessGroupName(processGroupName, roomProcessGroups);
|
||||||
|
// // 获取当前房间下加工组的序号值
|
||||||
|
// Integer roomProcessGroupNoSeq = Optional.ofNullable(roomProcessGroupSeqVo).map(OrderCustomPlateNoSeqProcessGroupVO::getProcessGroupNoSeq).orElse(null);
|
||||||
|
// if (roomProcessGroupSeqVo == null) {
|
||||||
|
// // 房间下柜体为空,新建对象,设置初始值
|
||||||
|
// roomProcessGroupSeqVo = OrderCustomPlateNoSeqProcessGroupVO.builder()
|
||||||
|
// .processGroupName(processGroupName)
|
||||||
|
// .build();
|
||||||
|
// roomProcessGroups.add(roomProcessGroupSeqVo);
|
||||||
|
// roomProcessGroupNoSeq= roomProcessGroupNoRoomSeq;
|
||||||
|
// needRecordToOrder = true;
|
||||||
|
// } else if(roomProcessGroupNoSeq == null){
|
||||||
|
// roomProcessGroupNoSeq= roomProcessGroupNoRoomSeq;
|
||||||
|
// needRecordToOrder = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 跨加工组累加步长
|
||||||
|
// roomProcessGroupNoSeq += plateNoRule.getIncrementStep();
|
||||||
|
// // 补零
|
||||||
|
// String noPartAfterFillZero = fillZero(roomProcessGroupNoSeq, plateNoRule);
|
||||||
|
// roomPrcesssGroupEntry.getValue().forEach(roomPrcesssGroupPlate -> roomPrcesssGroupPlate.getCustomPlateNo().append(noPartAfterFillZero));
|
||||||
|
// // 累加后同步到json中,room下柜体累加到多少了
|
||||||
|
// roomProcessGroupSeqVo.setProcessGroupNoSeq(roomProcessGroupNoSeq);
|
||||||
|
// if (needRecordToOrder) {
|
||||||
|
// // 新的房间下柜体vo,累加值同步到房间中
|
||||||
|
// roomProcessGroupNoRoomSeq = roomProcessGroupNoSeq;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // 累加后的值同步到当前生产单序号中,生产单下房间中加工组累加到多少了
|
||||||
|
// roomSeqVo.setProcessGroupNoSeq(roomProcessGroupNoRoomSeq);
|
||||||
|
// }
|
||||||
|
// return generateConfig;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 根据房间名从生产单序号json中获取房间序号列表
|
||||||
|
// *
|
||||||
|
// * @param roomName
|
||||||
|
// * @param roomVOList
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private OrderCustomPlateNoSeqRoomVO getRoomSeqVOByRoomName(String roomName, List<OrderCustomPlateNoSeqRoomVO> roomVOList) {
|
||||||
|
// return roomVOList.stream().filter(roomVO -> ObjectUtil.equal(roomName, roomVO.getRoomName())).findAny().orElse(null);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 根据柜体名从生产单序号json中获取柜体序号列表
|
||||||
|
// *
|
||||||
|
// * @param processGroupName
|
||||||
|
// * @param processGroupVOList
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private OrderCustomPlateNoSeqProcessGroupVO getProcessGroupSeqVOByProcessGroupName(String processGroupName, List<OrderCustomPlateNoSeqProcessGroupVO> processGroupVOList) {
|
||||||
|
// if (CollUtil.isEmpty(processGroupVOList)) {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// return processGroupVOList.stream().filter(processGroupVO -> ObjectUtil.equal(processGroupName, processGroupVO.getProcessGroupName())).findAny().orElse(null);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
package com.cf.imes.module.executor.service.customplatenorule;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoGenerateConfigVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.CustomPlateNoRuleVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqRoomVO;
|
||||||
|
import com.cf.imes.module.executor.service.customplateno.vo.OrderCustomPlateNoSeqVO;
|
||||||
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间序号生成规则服务实现类
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/19 13:41
|
||||||
|
*/
|
||||||
|
@Service("roomNoGenerateRuleService")
|
||||||
|
public class RoomNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRuleService {
|
||||||
|
@Override
|
||||||
|
public boolean match(String ruleCode) {
|
||||||
|
return ObjectUtil.equal(CustomPlateNoRuleCodeEnum.ROOMNO.getRuleCode(), ruleCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomPlateNoGenerateConfigVO generateNo(Long orderId, CustomPlateNoRuleVO plateNoRule, CustomPlateNoGenerateConfigVO generateConfig, PlateDO plateDO) {
|
||||||
|
Integer incrementStep = plateNoRule.getIncrementStep();
|
||||||
|
Integer initValue = plateNoRule.getInitValue() - incrementStep;
|
||||||
|
// 初始化配置
|
||||||
|
initConfig(generateConfig);
|
||||||
|
// 生产单下的序号
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfig.getOrderCustomPlateNoSeqVO();
|
||||||
|
// 机构下的自定义板编号序号
|
||||||
|
CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO = generateConfig.getOrgCustomPlateNoSeqRespDTO();
|
||||||
|
// 生产单下房间序号
|
||||||
|
Integer orderRoomNoSeq = Optional.ofNullable(orderCustomPlateNoSeqVO.getRoomNoSeq()).orElse(initValue);
|
||||||
|
// 生产单序号下的的房间序号列表
|
||||||
|
List<OrderCustomPlateNoSeqRoomVO> rooms = orderCustomPlateNoSeqVO.getRooms();
|
||||||
|
// 上次导入的生产单号
|
||||||
|
Long lastOrderNo = orgCustomPlateNoSeqRespDTO.getLastOrderNo();
|
||||||
|
if (ObjectUtil.isNotNull(lastOrderNo) && ObjectUtil.notEqual(orderId, lastOrderNo)) {
|
||||||
|
// 跨单复位到初始值
|
||||||
|
orderRoomNoSeq = initValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String roomName = plateDO.getRoomName();
|
||||||
|
// 根据房间名获取生产单下序号json中的房间下的柜体序号
|
||||||
|
OrderCustomPlateNoSeqRoomVO roomSeqVo = getRoomSeqVOByRoomName(roomName, rooms);
|
||||||
|
// 获取当前房间序号值
|
||||||
|
Integer roomNoSeq = Optional.ofNullable(roomSeqVo).map(OrderCustomPlateNoSeqRoomVO::getRoomNoSeq).orElse(null);
|
||||||
|
if (roomSeqVo == null) {
|
||||||
|
// 房间为空,新建房间,取生产单下房间序号
|
||||||
|
roomSeqVo = OrderCustomPlateNoSeqRoomVO.builder()
|
||||||
|
.roomName(roomName)
|
||||||
|
.bodys(new ArrayList<>())
|
||||||
|
.build();
|
||||||
|
rooms.add(roomSeqVo);
|
||||||
|
// 累加步长
|
||||||
|
roomNoSeq = orderRoomNoSeq + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中,生产单下房间序号累加到多少了
|
||||||
|
orderCustomPlateNoSeqVO.setRoomNoSeq(roomNoSeq);
|
||||||
|
} else if (roomNoSeq == null) {
|
||||||
|
// 房间下序号为空,取生产单下房间序号
|
||||||
|
// 累加步长
|
||||||
|
roomNoSeq = orderRoomNoSeq + incrementStep;
|
||||||
|
// 累加后的值同步到当前生产单序号中,生产单下房间序号累加到多少了
|
||||||
|
orderCustomPlateNoSeqVO.setRoomNoSeq(roomNoSeq);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 补零
|
||||||
|
String noPartAfterFillZero = fillZero(roomNoSeq, plateNoRule);
|
||||||
|
plateDO.getCustomPlateNo().append(noPartAfterFillZero);
|
||||||
|
// 累加后同步到json:房间下累加到多少了
|
||||||
|
roomSeqVo.setRoomNoSeq(roomNoSeq);
|
||||||
|
|
||||||
|
return generateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化生成所需配置
|
||||||
|
*
|
||||||
|
* @param generateConfigVO
|
||||||
|
*/
|
||||||
|
private static void initConfig(CustomPlateNoGenerateConfigVO generateConfigVO) {
|
||||||
|
OrderCustomPlateNoSeqVO orderCustomPlateNoSeqVO = generateConfigVO.getOrderCustomPlateNoSeqVO();
|
||||||
|
if (ObjectUtil.isNull(orderCustomPlateNoSeqVO)) {
|
||||||
|
orderCustomPlateNoSeqVO = new OrderCustomPlateNoSeqVO();
|
||||||
|
generateConfigVO.setOrderCustomPlateNoSeqVO(orderCustomPlateNoSeqVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据房间名从生产单序号json中获取房间序号列表
|
||||||
|
*
|
||||||
|
* @param roomName
|
||||||
|
* @param roomVOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private OrderCustomPlateNoSeqRoomVO getRoomSeqVOByRoomName(String roomName, List<OrderCustomPlateNoSeqRoomVO> roomVOList) {
|
||||||
|
return roomVOList.stream().filter(roomVO -> ObjectUtil.equal(roomName, roomVO.getRoomName())).findAny().orElse(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
-9
@@ -266,8 +266,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
|||||||
List<OrderDO> orderDOS = orderMapper.selectOrderPackList(orderIds, getUserOrganId());
|
List<OrderDO> orderDOS = orderMapper.selectOrderPackList(orderIds, getUserOrganId());
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(orderDOS)) {
|
if (ObjectUtil.isNotEmpty(orderDOS)) {
|
||||||
List<OrderDO> orderDOList = orderDOS.stream().map(m -> m.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus())).toList();
|
orderDOS.forEach(f -> {
|
||||||
orderMapper.updateBatch(orderDOList);
|
f.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||||
|
f.setFinishTime(LocalDateTime.now());
|
||||||
|
});
|
||||||
|
orderMapper.updateBatch(orderDOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -304,9 +307,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
|||||||
Boolean isOptimized = optimizeBoardModelDO.getIsOptimized();
|
Boolean isOptimized = optimizeBoardModelDO.getIsOptimized();
|
||||||
|
|
||||||
if(Boolean.FALSE.equals(isOptimized)){
|
if(Boolean.FALSE.equals(isOptimized)){
|
||||||
|
|
||||||
throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR);
|
throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -355,9 +356,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
|||||||
|
|
||||||
if(!orderIdList.isEmpty()) {
|
if(!orderIdList.isEmpty()) {
|
||||||
List<OrderDO> orderDOList = orderMapper.selectBatchIds(orderIdList);
|
List<OrderDO> orderDOList = orderMapper.selectBatchIds(orderIdList);
|
||||||
orderMapper.updateBatch(orderDOList.stream()
|
orderDOList.forEach(f -> {
|
||||||
.map(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus()))
|
f.setStatus(OrderStatusEnum.SORTED.getStatus());
|
||||||
.toList());
|
f.setFinishTime(null);
|
||||||
|
});
|
||||||
|
orderMapper.updateBatch(orderDOList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -382,8 +386,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
|||||||
List<OrderDO> orderDOS = orderMapper.selectOrderList(orderIds, getUserOrganId());
|
List<OrderDO> orderDOS = orderMapper.selectOrderList(orderIds, getUserOrganId());
|
||||||
|
|
||||||
if(!orderDOS.isEmpty()){
|
if(!orderDOS.isEmpty()){
|
||||||
List<OrderDO> orderDOList = orderDOS.stream().map(m -> m.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus())).toList();
|
orderDOS.forEach(f -> {
|
||||||
orderMapper.updateBatch(orderDOList);
|
f.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus());
|
||||||
|
f.setFinishTime(null);
|
||||||
|
});
|
||||||
|
orderMapper.updateBatch(orderDOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -916,6 +923,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ES 文档数据刷新
|
||||||
public void refresh( String index) {
|
public void refresh( String index) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
+21
@@ -45,4 +45,25 @@ public class OrderPartsRespVO {
|
|||||||
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "配件颜色", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String partsColor;
|
||||||
|
|
||||||
|
@Schema(description = "配件宽度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Double partsWidth;
|
||||||
|
|
||||||
|
@Schema(description = "配件长度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Double partsLength;
|
||||||
|
|
||||||
|
@Schema(description = "配件厚度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Double partsThickness;
|
||||||
|
|
||||||
|
@Schema(description = "配件主类:1封边2五金3组件", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String category;
|
||||||
|
|
||||||
|
@Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String subparts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -23,7 +23,7 @@ public class OtherPackReqVO {
|
|||||||
|
|
||||||
@Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@NotBlank(message = "配件名称不能为空")
|
@NotBlank(message = "配件名称不能为空")
|
||||||
@Size(max = 30, message = "配件名称长度不能超过 64 个字符")
|
@Size(max = 64, message = "配件名称长度不能超过 64 个字符")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
|
||||||
@@ -31,6 +31,12 @@ public class OtherPackReqVO {
|
|||||||
@NumberValid(name = "配件数量")
|
@NumberValid(name = "配件数量")
|
||||||
private Double num;
|
private Double num;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "配件单位", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotBlank(message = "配件单位不能为空")
|
||||||
|
@Size(max = 32, message = "配件单位长度不能超过 32 个字符")
|
||||||
|
private String unit;
|
||||||
|
|
||||||
@Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
private String packNo;
|
private String packNo;
|
||||||
|
|
||||||
|
|||||||
+19
@@ -105,4 +105,23 @@ public class PackageDetailsRespVO {
|
|||||||
private String factory;
|
private String factory;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "配件颜色", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String partsColor;
|
||||||
|
|
||||||
|
@Schema(description = "配件宽度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Double partsWidth;
|
||||||
|
|
||||||
|
@Schema(description = "配件长度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Double partsLength;
|
||||||
|
|
||||||
|
@Schema(description = "配件厚度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Double partsThickness;
|
||||||
|
|
||||||
|
@Schema(description = "配件主类:1封边2五金3组件", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String category;
|
||||||
|
|
||||||
|
@Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String subparts;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -10,7 +10,6 @@ import com.cf.imes.framework.common.enums.OrderPackageTypeEnum;
|
|||||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
|
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
|
||||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList;
|
|
||||||
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
|
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
|
||||||
import com.cf.imes.module.manage.dal.dataobject.query.OrderPackageDO;
|
import com.cf.imes.module.manage.dal.dataobject.query.OrderPackageDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@@ -73,8 +72,6 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
|
|||||||
|
|
||||||
List<PackRespVO> selectPackPieceCount(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
List<PackRespVO> selectPackPieceCount(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||||
|
|
||||||
List<PlateAndPartIdList> selectOrderPack(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
|
||||||
|
|
||||||
|
|
||||||
// 删除当前生产单下所有的包裹
|
// 删除当前生产单下所有的包裹
|
||||||
default void updateDelete(Long orderId,Long organId) {
|
default void updateDelete(Long orderId,Long organId) {
|
||||||
|
|||||||
+8
-11
@@ -3,6 +3,7 @@ package com.cf.imes.module.manage.dal.mysql.query;
|
|||||||
|
|
||||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList;
|
||||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
|
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
|
||||||
import com.cf.imes.module.manage.controller.admin.process.vo.PlateDetails;
|
import com.cf.imes.module.manage.controller.admin.process.vo.PlateDetails;
|
||||||
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessPlateReqVO;
|
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessPlateReqVO;
|
||||||
@@ -80,17 +81,6 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default List<OrderItemDO> selectPartsList(Long orderId, Long organId) {
|
|
||||||
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
|
||||||
.eq(OrderItemDO::getOrganId, organId)
|
|
||||||
.eqIfPresent(OrderItemDO::getOrderId, orderId)
|
|
||||||
.eq(OrderItemDO::getPackageId,0)
|
|
||||||
.select(OrderItemDO::getPartsId));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
default List<OrderItemDO> selectPackByPlateId(List<Long> plateId,Long orderId ,Long organId) {
|
default List<OrderItemDO> selectPackByPlateId(List<Long> plateId,Long orderId ,Long organId) {
|
||||||
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
||||||
.eq(OrderItemDO::getOrganId, organId)
|
.eq(OrderItemDO::getOrganId, organId)
|
||||||
@@ -98,4 +88,11 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
|||||||
.inIfPresent(OrderItemDO::getPlateId, plateId)
|
.inIfPresent(OrderItemDO::getPlateId, plateId)
|
||||||
.select(OrderItemDO::getPackageId));
|
.select(OrderItemDO::getPackageId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<PlateAndPartIdList> selectOrderPackPartsIds(@Param("orderId") Long orderId, @Param("organId") Long organId);
|
||||||
|
|
||||||
|
List<PlateAndPartIdList> selectOrderPackPlateIds(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-5
@@ -44,6 +44,7 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -268,7 +269,6 @@ public class PackServiceImpl implements PackService {
|
|||||||
@Override
|
@Override
|
||||||
public List<OrderPartsRespVO> getPartsList(OrderPartsReqVO reqVO) {
|
public List<OrderPartsRespVO> getPartsList(OrderPartsReqVO reqVO) {
|
||||||
|
|
||||||
|
|
||||||
return orderPartsMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId());
|
return orderPartsMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId());
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -381,6 +381,7 @@ public class PackServiceImpl implements PackService {
|
|||||||
|
|
||||||
if(orderDO.getStatus().equals(OrderStatusEnum.FINISH_PRODUCTION.getStatus())){
|
if(orderDO.getStatus().equals(OrderStatusEnum.FINISH_PRODUCTION.getStatus())){
|
||||||
orderDO.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus());
|
orderDO.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus());
|
||||||
|
orderDO.setFinishTime(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
ordersMapper.updateById(orderDO);
|
ordersMapper.updateById(orderDO);
|
||||||
@@ -491,10 +492,11 @@ public class PackServiceImpl implements PackService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PlateAndPartIdList> plateAndPartIdLists = orderPackageMapper.selectOrderPack(orderId, getUserOrganId());
|
List<PlateAndPartIdList> partsIds = orderItemMapper.selectOrderPackPartsIds(orderId, getUserOrganId());
|
||||||
|
|
||||||
|
List<PlateAndPartIdList> plateIds = orderItemMapper.selectOrderPackPlateIds(orderId, getUserOrganId());
|
||||||
|
|
||||||
return plateAndPartIdLists.isEmpty();
|
return partsIds.isEmpty() && plateIds.isEmpty();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,6 +514,7 @@ public class PackServiceImpl implements PackService {
|
|||||||
|
|
||||||
if(orderPlanApi.getOrder(orderId).getData()){
|
if(orderPlanApi.getOrder(orderId).getData()){
|
||||||
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||||
|
orderDO.setFinishTime(LocalDateTime.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -618,6 +621,7 @@ public class PackServiceImpl implements PackService {
|
|||||||
OrderPartsNDO orderParts = BeanUtils.toBean(reqVO, OrderPartsNDO.class);
|
OrderPartsNDO orderParts = BeanUtils.toBean(reqVO, OrderPartsNDO.class);
|
||||||
// 因为是外部配件,所以配件类型的名称固定为 “ 外部配件”
|
// 因为是外部配件,所以配件类型的名称固定为 “ 外部配件”
|
||||||
orderParts.setType("外部配件");
|
orderParts.setType("外部配件");
|
||||||
|
orderParts.setUnit(reqVO.getUnit());
|
||||||
orderPartsMapper.insert(orderParts);
|
orderPartsMapper.insert(orderParts);
|
||||||
|
|
||||||
|
|
||||||
@@ -665,6 +669,7 @@ public class PackServiceImpl implements PackService {
|
|||||||
OrderPartsNDO orderParts = BeanUtils.toBean(reqVO, OrderPartsNDO.class);
|
OrderPartsNDO orderParts = BeanUtils.toBean(reqVO, OrderPartsNDO.class);
|
||||||
// 因为是外部配件,所以配件类型的名称固定为 “ 外部配件”
|
// 因为是外部配件,所以配件类型的名称固定为 “ 外部配件”
|
||||||
orderParts.setType("外部配件");
|
orderParts.setType("外部配件");
|
||||||
|
orderParts.setUnit(reqVO.getUnit());
|
||||||
orderPartsMapper.insert(orderParts);
|
orderPartsMapper.insert(orderParts);
|
||||||
|
|
||||||
// 在生产单明细表中添加数据(生产单号,配件ID,包裹ID,部件数量)
|
// 在生产单明细表中添加数据(生产单号,配件ID,包裹ID,部件数量)
|
||||||
@@ -825,13 +830,14 @@ public class PackServiceImpl implements PackService {
|
|||||||
orderItemMapper.updateBatch(orderItemDOS);
|
orderItemMapper.updateBatch(orderItemDOS);
|
||||||
|
|
||||||
// 查询配件是否为空,为空,修改生产单的状态为已打包
|
// 查询配件是否为空,为空,修改生产单的状态为已打包
|
||||||
List<OrderItemDO> orderItemDoPartsList = orderItemMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId());
|
List<PlateAndPartIdList> partsIds = orderItemMapper.selectOrderPackPartsIds(reqVO.getOrderId(), getUserOrganId());
|
||||||
|
|
||||||
if (orderItemDoPartsList.isEmpty()) {
|
if (partsIds.isEmpty()) {
|
||||||
OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId());
|
OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId());
|
||||||
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
|
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
|
||||||
if(Boolean.TRUE.equals(orderPlanApi.getOrder(reqVO.getOrderId()).getData())){
|
if(Boolean.TRUE.equals(orderPlanApi.getOrder(reqVO.getOrderId()).getData())){
|
||||||
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||||
|
orderDO.setFinishTime(LocalDateTime.now());
|
||||||
}
|
}
|
||||||
ordersMapper.updateById(orderDO);
|
ordersMapper.updateById(orderDO);
|
||||||
}
|
}
|
||||||
|
|||||||
-15
@@ -110,21 +110,6 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<select id="selectOrderPack"
|
|
||||||
resultType="com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList">
|
|
||||||
|
|
||||||
|
|
||||||
select distinct oi.plate_id,
|
|
||||||
oi.parts_id
|
|
||||||
|
|
||||||
from order_package op
|
|
||||||
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id
|
|
||||||
|
|
||||||
where op.organ_id = #{organId} and op.order_id = #{orderId} and op.deleted = false and oi.package_id = 0
|
|
||||||
|
|
||||||
</select>
|
|
||||||
|
|
||||||
|
|
||||||
<select id="selectPackListByOrderId"
|
<select id="selectPackListByOrderId"
|
||||||
resultType="com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO">
|
resultType="com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO">
|
||||||
|
|
||||||
|
|||||||
+28
@@ -316,5 +316,33 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="selectOrderPackPartsIds"
|
||||||
|
resultType="com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList">
|
||||||
|
|
||||||
|
|
||||||
|
select distinct oi.parts_id
|
||||||
|
|
||||||
|
from order_item oi
|
||||||
|
join order_parts op on oi.organ_id = op.organ_id and oi.order_id = op.order_id and oi.parts_id = op.id
|
||||||
|
|
||||||
|
where oi.organ_id = #{organId} and oi.order_id = #{orderId} and oi.package_id = 0 and op.type != '封边条'
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="selectOrderPackPlateIds"
|
||||||
|
resultType="com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList">
|
||||||
|
|
||||||
|
|
||||||
|
select distinct plate_id
|
||||||
|
|
||||||
|
from order_item
|
||||||
|
|
||||||
|
where organ_id = #{organId}
|
||||||
|
and order_id = #{orderId}
|
||||||
|
and package_id = 0
|
||||||
|
and plate_id !=0
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
+35
-2
@@ -17,6 +17,12 @@
|
|||||||
<result property="brand" column="brand"/>
|
<result property="brand" column="brand"/>
|
||||||
<result property="factory" column="factory"/>
|
<result property="factory" column="factory"/>
|
||||||
<result property="remark" column="remark"/>
|
<result property="remark" column="remark"/>
|
||||||
|
<result property="partsColor" column="partsColor"/>
|
||||||
|
<result property="partsWidth" column="partsWidth"/>
|
||||||
|
<result property="partsLength" column="partsLength"/>
|
||||||
|
<result property="partsThickness" column="partsThickness"/>
|
||||||
|
<result property="category" column="category"/>
|
||||||
|
<result property="subparts" column="subparts"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<select id="selectParts"
|
<select id="selectParts"
|
||||||
@@ -37,6 +43,12 @@
|
|||||||
op.type as type,
|
op.type as type,
|
||||||
op.remark as remark,
|
op.remark as remark,
|
||||||
op.is_composite as isComposite,
|
op.is_composite as isComposite,
|
||||||
|
op.color as partsColor,
|
||||||
|
op.width as partsWidth,
|
||||||
|
op.length as partsLength,
|
||||||
|
op.thickness as partsThickness,
|
||||||
|
op.category as category,
|
||||||
|
op.subparts as subparts,
|
||||||
oi.num as num
|
oi.num as num
|
||||||
|
|
||||||
from order_parts op
|
from order_parts op
|
||||||
@@ -65,6 +77,12 @@
|
|||||||
<result property="brand" column="brand"/>
|
<result property="brand" column="brand"/>
|
||||||
<result property="factory" column="factory"/>
|
<result property="factory" column="factory"/>
|
||||||
<result property="remark" column="remark"/>
|
<result property="remark" column="remark"/>
|
||||||
|
<result property="partsColor" column="partsColor"/>
|
||||||
|
<result property="partsWidth" column="partsWidth"/>
|
||||||
|
<result property="partsLength" column="partsLength"/>
|
||||||
|
<result property="partsThickness" column="partsThickness"/>
|
||||||
|
<result property="category" column="category"/>
|
||||||
|
<result property="subparts" column="subparts"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<select id="selectPartsList"
|
<select id="selectPartsList"
|
||||||
parameterType="java.lang.Long"
|
parameterType="java.lang.Long"
|
||||||
@@ -72,11 +90,26 @@
|
|||||||
|
|
||||||
|
|
||||||
select distinct
|
select distinct
|
||||||
op.id as partsId,op.name,op.model,op.spec,oi.num as num,op.unit,op.brand,op.factory,op.remark,op.type
|
op.id as partsId,
|
||||||
|
op.name,
|
||||||
|
op.model,
|
||||||
|
op.spec,
|
||||||
|
oi.num as num,
|
||||||
|
op.unit,
|
||||||
|
op.brand,
|
||||||
|
op.factory,
|
||||||
|
op.remark,
|
||||||
|
op.color as partsColor,
|
||||||
|
op.width as partsWidth,
|
||||||
|
op.length as partsLength,
|
||||||
|
op.thickness as partsThickness,
|
||||||
|
op.category as category,
|
||||||
|
op.subparts as subparts,
|
||||||
|
op.type
|
||||||
from order_parts op
|
from order_parts op
|
||||||
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.parts_id
|
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.parts_id
|
||||||
|
|
||||||
where op.organ_id = #{organId} and op.order_id = #{orderId} and op.deleted = false and oi.package_id = 0
|
where op.organ_id = #{organId} and op.order_id = #{orderId} and op.deleted = false and op.type != '封边条' and oi.package_id = 0
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
+1
@@ -14,6 +14,7 @@ public final class ErrorCodeConstants {
|
|||||||
public static final ErrorCode TEMPLATE_NOT_EXISTS = new ErrorCode(1_003_001_001, "报表模板信息不存在");
|
public static final ErrorCode TEMPLATE_NOT_EXISTS = new ErrorCode(1_003_001_001, "报表模板信息不存在");
|
||||||
public static final ErrorCode TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR = new ErrorCode(1_003_001_002, "内置模板操作权限不足");
|
public static final ErrorCode TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR = new ErrorCode(1_003_001_002, "内置模板操作权限不足");
|
||||||
public static final ErrorCode TEMPLATE_NAME_UNIQE_ERROR = new ErrorCode(1_003_001_003, "模板名【{}】已存在,请编辑模板名后重试");
|
public static final ErrorCode TEMPLATE_NAME_UNIQE_ERROR = new ErrorCode(1_003_001_003, "模板名【{}】已存在,请编辑模板名后重试");
|
||||||
|
public static final ErrorCode TEMPLATE_PREIVEW_QUERYPARAM_EMPTY = new ErrorCode(1_003_001_004, "查询参数不能为空:{}");
|
||||||
|
|
||||||
|
|
||||||
// ========== UREPORT datasource模块 1-003-002-000 ==========
|
// ========== UREPORT datasource模块 1-003-002-000 ==========
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ public class ReportDatasetSaveReqVO implements Serializable {
|
|||||||
private List<ReportDatasetParameterVO> parameters = new ArrayList<>();
|
private List<ReportDatasetParameterVO> parameters = new ArrayList<>();
|
||||||
|
|
||||||
@Schema(description = "字段列表")
|
@Schema(description = "字段列表")
|
||||||
@Size(max = 30, message = "字段列表数量不能超过30个")
|
@Size(max = 100, message = "字段列表数量不能超过100个")
|
||||||
@Valid
|
@Valid
|
||||||
private List<ReportDatasetFieldVO> fields = new ArrayList<>();
|
private List<ReportDatasetFieldVO> fields = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-5
@@ -2,7 +2,6 @@ package com.cf.imes.module.report.controller.admin.datasource;
|
|||||||
|
|
||||||
import com.bstek.common.utils.MultipleJdbcTemplate;
|
import com.bstek.common.utils.MultipleJdbcTemplate;
|
||||||
import com.bstek.datasource.bean.DataSourceInfo;
|
import com.bstek.datasource.bean.DataSourceInfo;
|
||||||
import com.bstek.datasource.bean.PreviewParams;
|
|
||||||
import com.bstek.datasource.service.DataSourceService;
|
import com.bstek.datasource.service.DataSourceService;
|
||||||
import com.bstek.ureport.definition.dataset.Field;
|
import com.bstek.ureport.definition.dataset.Field;
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
@@ -14,6 +13,7 @@ import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasource
|
|||||||
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
|
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
|
||||||
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||||
import com.cf.imes.module.report.service.datasource.ReportDatasourceService;
|
import com.cf.imes.module.report.service.datasource.ReportDatasourceService;
|
||||||
|
import com.cf.imes.module.report.utils.TenantParamsUtils;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
@@ -51,6 +51,9 @@ public class ReportDatasourceController {
|
|||||||
@Resource
|
@Resource
|
||||||
private DataSourceService ureportDataSourceService;
|
private DataSourceService ureportDataSourceService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TenantParamsUtils tenantParamsUtils;
|
||||||
|
|
||||||
@PutMapping("/datasource")
|
@PutMapping("/datasource")
|
||||||
@Operation(summary = "创建报表数据源")
|
@Operation(summary = "创建报表数据源")
|
||||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||||
@@ -87,8 +90,8 @@ public class ReportDatasourceController {
|
|||||||
@GetMapping("/datasources")
|
@GetMapping("/datasources")
|
||||||
@Operation(summary = "获取报表数据源列表")
|
@Operation(summary = "获取报表数据源列表")
|
||||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||||
public CommonResult<List<ReportDatasourceRespVO>> getDatasourcePage() {
|
public CommonResult<List<ReportDatasourceRespVO>> getDatasourcePage(@RequestParam(value = "organId", required = false) Long organId) {
|
||||||
return success(BeanUtils.toBean(datasourceService.getDatasourceList(), ReportDatasourceRespVO.class));
|
return success(BeanUtils.toBean(datasourceService.getDatasourceList(organId), ReportDatasourceRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/datasource/beans")
|
@GetMapping("/datasource/beans")
|
||||||
@@ -134,13 +137,13 @@ public class ReportDatasourceController {
|
|||||||
@Operation(summary = "获取数据源表字段")
|
@Operation(summary = "获取数据源表字段")
|
||||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||||
public CommonResult<List<Field>> getDatasourceTableFields(@RequestBody @Valid ReportDatasourcePreviewReqVO reqVO) {
|
public CommonResult<List<Field>> getDatasourceTableFields(@RequestBody @Valid ReportDatasourcePreviewReqVO reqVO) {
|
||||||
return success(datasourceService.getTableFields(BeanUtils.toBean(reqVO, PreviewParams.class)));
|
return success(datasourceService.getTableFields(tenantParamsUtils.prepareTenantParam(reqVO)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/datasource/preview")
|
@PostMapping("/datasource/preview")
|
||||||
@Operation(summary = "数据源预览")
|
@Operation(summary = "数据源预览")
|
||||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||||
public CommonResult<Map<String, Object>> previewData(@RequestBody @Valid ReportDatasourcePreviewReqVO reqVO) {
|
public CommonResult<Map<String, Object>> previewData(@RequestBody @Valid ReportDatasourcePreviewReqVO reqVO) {
|
||||||
return success(ureportDataSourceService.previewData(BeanUtils.toBean(reqVO, PreviewParams.class)));
|
return success(ureportDataSourceService.previewData(tenantParamsUtils.prepareTenantParam(reqVO)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -24,7 +24,7 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class ReportDatasourcePreviewReqVO {
|
public class ReportDatasourcePreviewReqVO {
|
||||||
@Schema(description = "数据源连接信息")
|
@Schema(description = "数据源连接信息")
|
||||||
@NotNull
|
@NotNull(message = "数据源连接信息不能为空")
|
||||||
@Valid
|
@Valid
|
||||||
private ReportDatasourceTestConnReqVO info;
|
private ReportDatasourceTestConnReqVO info;
|
||||||
|
|
||||||
@@ -37,4 +37,8 @@ public class ReportDatasourcePreviewReqVO {
|
|||||||
@Size(max = 30, message = "查询参数列表数量不能超过30个")
|
@Size(max = 30, message = "查询参数列表数量不能超过30个")
|
||||||
@Valid
|
@Valid
|
||||||
private List<ReportDatasourceParameterVO> parameters;
|
private List<ReportDatasourceParameterVO> parameters;
|
||||||
|
|
||||||
|
@Schema(description = "数据源编号")
|
||||||
|
@NotNull(message = "数据源编号不能为空")
|
||||||
|
private Long datasourceId;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -101,8 +101,10 @@ public class ReportTemplateController {
|
|||||||
@GetMapping("/templates")
|
@GetMapping("/templates")
|
||||||
@Operation(summary = "获取报表模板信息列表")
|
@Operation(summary = "获取报表模板信息列表")
|
||||||
@PreAuthorize("@ss.hasPermission('report:design')")
|
@PreAuthorize("@ss.hasPermission('report:design')")
|
||||||
public CommonResult<List<ReportTemplateRespVO>> getTemplatePage(@RequestParam(value = "name", required = false) @Size(max = 64, message = "模板名称长度不能超过64个字符") String name) {
|
public CommonResult<List<ReportTemplateRespVO>> getTemplatePage(
|
||||||
ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null);
|
@RequestParam(value = "name", required = false) @Size(max = 64, message = "模板名称长度不能超过64个字符") String name,
|
||||||
|
@RequestParam(value = "organId", required = false) Long organId) {
|
||||||
|
ReportTemplateReqVO reqVO = new ReportTemplateReqVO(name, null, organId);
|
||||||
return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class));
|
return success(BeanUtils.toBean(templateService.getReportTemplateList(reqVO), ReportTemplateRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
@@ -21,4 +21,7 @@ public class ReportTemplateReqVO {
|
|||||||
|
|
||||||
@Schema(description = "模板类型,0内置、1自定义", example = "1")
|
@Schema(description = "模板类型,0内置、1自定义", example = "1")
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
|
@Schema(description = "组织id")
|
||||||
|
private Long organId;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -49,10 +49,10 @@ public interface ReportDatasourceService {
|
|||||||
/**
|
/**
|
||||||
* 获取模板下的数据源列表
|
* 获取模板下的数据源列表
|
||||||
*
|
*
|
||||||
* @param reqVO 查询参数
|
* @param organId 组织id
|
||||||
* @return 报表数据源分页
|
* @return 报表数据源分页
|
||||||
*/
|
*/
|
||||||
List<ReportDatasourceDO> getDatasourceList();
|
List<ReportDatasourceDO> getDatasourceList(Long organId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取springbean数据源列表
|
* 获取springbean数据源列表
|
||||||
|
|||||||
+13
-10
@@ -13,7 +13,6 @@ import com.bstek.datasource.bean.PreviewParams;
|
|||||||
import com.bstek.ureport.definition.dataset.Field;
|
import com.bstek.ureport.definition.dataset.Field;
|
||||||
import com.bstek.ureport.definition.dataset.Parameter;
|
import com.bstek.ureport.definition.dataset.Parameter;
|
||||||
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
|
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
|
||||||
import com.bstek.ureport.definition.dataset.TenantParams;
|
|
||||||
import com.bstek.ureport.utils.ProcedureUtils;
|
import com.bstek.ureport.utils.ProcedureUtils;
|
||||||
import com.cf.imes.framework.common.exception.ServiceException;
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
@@ -133,16 +132,21 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@OrganIgnore
|
@OrganIgnore
|
||||||
public List<ReportDatasourceDO> getDatasourceList() {
|
public List<ReportDatasourceDO> getDatasourceList(Long organId) {
|
||||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||||
LambdaQueryWrapper<ReportDatasourceDO> queryWrapper = new LambdaQueryWrapperX<ReportDatasourceDO>().orderByDesc(ReportDatasourceDO::getCreateTime);
|
LambdaQueryWrapper<ReportDatasourceDO> queryWrapper = new LambdaQueryWrapperX<ReportDatasourceDO>().orderByDesc(ReportDatasourceDO::getCreateTime);
|
||||||
if (ObjectUtil.isNotNull(loginUser) && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) {
|
// 当前登录人机构id
|
||||||
// 普通用户查看机构下的和system数据源
|
Long currentOrganId = loginUser.getOrganId();
|
||||||
queryWrapper.or(wrapper -> wrapper
|
// 超管查看不同组织数据源
|
||||||
.eq(ReportDatasourceDO::getOrganId, loginUser.getOrganId())
|
if (ObjectUtil.isNotNull(loginUser) && Boolean.TRUE.equals(loginUser.getIsSupAdmin()) && ObjectUtil.isNotNull(organId)) {
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
currentOrganId = organId;
|
||||||
.or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM));
|
|
||||||
}
|
}
|
||||||
|
Long finalCurrentOrganId = currentOrganId;
|
||||||
|
queryWrapper.or(wrapper -> wrapper
|
||||||
|
.eq(ReportDatasourceDO::getOrganId, finalCurrentOrganId)
|
||||||
|
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
||||||
|
.or(wrapper -> wrapper.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM));
|
||||||
|
|
||||||
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(queryWrapper);
|
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(queryWrapper);
|
||||||
// 查询数据集
|
// 查询数据集
|
||||||
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
|
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
|
||||||
@@ -150,7 +154,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
|||||||
queryDatasetInSource(reportDatasourceDO);
|
queryDatasetInSource(reportDatasourceDO);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// 超管查看全部
|
|
||||||
return reportDatasourceDOS;
|
return reportDatasourceDOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,7 +236,7 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
|||||||
|
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
|
Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
|
||||||
String sqlForUse = sqlDatasetDefinition.parseSql(pmap, new TenantParams());
|
String sqlForUse = sqlDatasetDefinition.parseSql(pmap, previewParams.getTenantParams());
|
||||||
if (ProcedureUtils.isProcedure(sqlForUse)) {
|
if (ProcedureUtils.isProcedure(sqlForUse)) {
|
||||||
return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
|
return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-41
@@ -30,11 +30,11 @@ import com.bstek.ureport.parser.ReportParser;
|
|||||||
import com.bstek.ureport.utils.ToolUtils;
|
import com.bstek.ureport.utils.ToolUtils;
|
||||||
import com.cf.imes.framework.common.exception.ServiceException;
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
|
import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||||
|
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.cf.imes.framework.security.core.LoginUser;
|
import com.cf.imes.framework.security.core.LoginUser;
|
||||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import com.cf.imes.module.report.config.CfReportProperties;
|
|
||||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewReqVO;
|
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewReqVO;
|
||||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
|
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
|
||||||
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
|
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
|
||||||
@@ -46,9 +46,11 @@ import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper;
|
|||||||
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
|
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
|
||||||
import com.cf.imes.module.report.dal.mysql.template.ReportTemplateMapper;
|
import com.cf.imes.module.report.dal.mysql.template.ReportTemplateMapper;
|
||||||
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||||
|
import com.cf.imes.module.report.utils.TenantParamsUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@@ -64,12 +66,12 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR;
|
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_BUILDIN_OPERATION_PERMISSION_ERROR;
|
||||||
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NAME_UNIQE_ERROR;
|
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NAME_UNIQE_ERROR;
|
||||||
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NOT_EXISTS;
|
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_NOT_EXISTS;
|
||||||
|
import static com.cf.imes.module.report.enums.ErrorCodeConstants.TEMPLATE_PREIVEW_QUERYPARAM_EMPTY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 报表模板信息 Service 实现类
|
* 报表模板信息 Service 实现类
|
||||||
@@ -92,7 +94,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
private static final String UTF8_CHARSET = CharsetUtil.UTF_8;
|
private static final String UTF8_CHARSET = CharsetUtil.UTF_8;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private CfReportProperties cfReportProperties;
|
private TenantParamsUtils tenantParamsUtils;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@@ -340,54 +342,44 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
@Override
|
@Override
|
||||||
public List<ReportTemplateDO> getReportTemplateList(ReportTemplateReqVO reqVO) {
|
public List<ReportTemplateDO> getReportTemplateList(ReportTemplateReqVO reqVO) {
|
||||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||||
LambdaQueryWrapper<ReportTemplateDO> queryWrapper = new LambdaQueryWrapperX<ReportTemplateDO>().likeIfPresent(ReportTemplateDO::getName, reqVO.getName())
|
// 当前登录人机构id
|
||||||
.orderByDesc(ReportTemplateDO::getCreateTime)
|
Long organId = loginUser.getOrganId();
|
||||||
// 不返回content xml,点击具体的模板中返回xml
|
// 超管查看不同组织模板
|
||||||
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark, ReportTemplateDO::getType);
|
if (ObjectUtil.isNotNull(loginUser) && Boolean.TRUE.equals(loginUser.getIsSupAdmin()) && ObjectUtil.isNotNull(reqVO.getOrganId())) {
|
||||||
if (ObjectUtil.isNotNull(loginUser) && Boolean.FALSE.equals(loginUser.getIsSupAdmin())) {
|
organId = reqVO.getOrganId();
|
||||||
return templateMapper.selectNormalTemplateList(reqVO.getName(), loginUser.getOrganId());
|
}
|
||||||
} else {
|
return templateMapper.selectNormalTemplateList(reqVO.getName(), organId);
|
||||||
// 超管查看全部
|
}
|
||||||
return templateMapper.selectList(queryWrapper);
|
|
||||||
|
/**
|
||||||
|
* 检查查询参数不为空
|
||||||
|
*
|
||||||
|
* @param queryMap
|
||||||
|
*/
|
||||||
|
private void checkQueryNotEmpty(Map<String, Object> queryMap) {
|
||||||
|
if (ObjectUtil.isNotNull(queryMap)) {
|
||||||
|
for (Map.Entry<String, Object> entry : queryMap.entrySet()) {
|
||||||
|
String key = entry.getKey();
|
||||||
|
if (ObjectUtils.isEmpty(entry.getValue()) && ObjectUtil.notEqual(key, "datasetIds") && ObjectUtil.notEqual(key, "datasourceIds")) {
|
||||||
|
throw ServiceExceptionUtil.exception(TEMPLATE_PREIVEW_QUERYPARAM_EMPTY, key);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HtmlReport preview(ReportTemplatePreviewReqVO reqVO) {
|
public HtmlReport preview(ReportTemplatePreviewReqVO reqVO) {
|
||||||
|
// 检查查询参数中的空值
|
||||||
|
checkQueryNotEmpty(reqVO.getQuery());
|
||||||
// 自定义请求vo转ureport对象
|
// 自定义请求vo转ureport对象
|
||||||
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
PreviewParameters params = BeanUtils.toBean(reqVO, PreviewParameters.class);
|
||||||
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
|
|
||||||
|
|
||||||
HtmlProducer htmlProducer = new HtmlProducer();
|
HtmlProducer htmlProducer = new HtmlProducer();
|
||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
||||||
Map<String, Object> parameters = params.getQuery();
|
Map<String, Object> parameters = params.getQuery();
|
||||||
if (Boolean.FALSE.equals(SecurityFrameworkUtils.isSuperAdmin())) {
|
// 增加多租户参数
|
||||||
// 根据前端传递的数据集id,判断是不是内置数据源下的,是就把name传给ureport
|
tenantParamsUtils.prepareTenantParam(parameters);
|
||||||
List<Long> datasetIds = (List) parameters.get("datasetIds");
|
|
||||||
if (CollUtil.isNotEmpty(datasetIds)) {
|
|
||||||
// 内置数据集名称列表
|
|
||||||
List<String> buildinDsNames = new ArrayList<>();
|
|
||||||
// 遍历获取所有上级数据源
|
|
||||||
List<ReportDatasetDO> reportDatasetDOS = datasetMapper.selectNormalDatasetList(datasetIds.stream().collect(Collectors.toSet()));
|
|
||||||
for (ReportDatasetDO datasetDO : reportDatasetDOS) {
|
|
||||||
Long datasourceId = datasetDO.getDatasourceId();
|
|
||||||
// 查询数据源,如果是内置数据源则把数据集的name传给ureport
|
|
||||||
// 机构下 + 内置数据源查询
|
|
||||||
ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId);
|
|
||||||
if (ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
|
|
||||||
buildinDsNames.add(datasetDO.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (CollUtil.isNotEmpty(buildinDsNames)) {
|
|
||||||
parameters.put("buildinDsNames", buildinDsNames);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// imes多租户业务表表名列表
|
|
||||||
parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames());
|
|
||||||
// 用户组织id
|
|
||||||
parameters.put("organId", userOrganId);
|
|
||||||
}
|
|
||||||
Report report = reportRender.render(reportDefinition, parameters);
|
Report report = reportRender.render(reportDefinition, parameters);
|
||||||
return htmlProducer.produce(reportDefinition, report);
|
return htmlProducer.produce(reportDefinition, report);
|
||||||
}
|
}
|
||||||
@@ -400,7 +392,10 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
||||||
Report report = reportRender.render(reportDefinition, params.getQuery());
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 增加多租户参数
|
||||||
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
Map<String, String> chartImages = params.getChartImages();
|
Map<String, String> chartImages = params.getChartImages();
|
||||||
report.setChartImages(chartImages);
|
report.setChartImages(chartImages);
|
||||||
try {
|
try {
|
||||||
@@ -427,7 +422,10 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
|
|||||||
|
|
||||||
ReportRender reportRender = new ReportRender();
|
ReportRender reportRender = new ReportRender();
|
||||||
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
ReportDefinition reportDefinition = getReportDefinition(reportRender, params);
|
||||||
Report report = reportRender.render(reportDefinition, params.getQuery());
|
Map<String, Object> query = params.getQuery();
|
||||||
|
// 增加多租户参数
|
||||||
|
tenantParamsUtils.prepareTenantParam(query);
|
||||||
|
Report report = reportRender.render(reportDefinition, query);
|
||||||
Map<String, String> chartImages = params.getChartImages();
|
Map<String, String> chartImages = params.getChartImages();
|
||||||
report.setChartImages(chartImages);
|
report.setChartImages(chartImages);
|
||||||
try {
|
try {
|
||||||
|
|||||||
+102
@@ -0,0 +1,102 @@
|
|||||||
|
package com.cf.imes.module.report.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.bstek.datasource.bean.PreviewParams;
|
||||||
|
import com.bstek.ureport.definition.dataset.TenantParams;
|
||||||
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.cf.imes.module.report.config.CfReportProperties;
|
||||||
|
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourcePreviewReqVO;
|
||||||
|
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
|
||||||
|
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||||
|
import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper;
|
||||||
|
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
|
||||||
|
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户参数工具类
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/27 10:32
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class TenantParamsUtils {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ReportDatasourceMapper datasourceMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ReportDatasetMapper datasetMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CfReportProperties cfReportProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据数据源id构造租户对象
|
||||||
|
*
|
||||||
|
* @param reqVO
|
||||||
|
*/
|
||||||
|
public PreviewParams prepareTenantParam(ReportDatasourcePreviewReqVO reqVO) {
|
||||||
|
PreviewParams previewParams = BeanUtils.toBean(reqVO, PreviewParams.class);
|
||||||
|
Long datasourceId = reqVO.getDatasourceId();
|
||||||
|
TenantParams tenantParams = new TenantParams();
|
||||||
|
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
|
||||||
|
// 根据前端传递的数据源id,判断是不是内置数据源,是就把所有其下的datasetname传给ureport
|
||||||
|
ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId);
|
||||||
|
if (ObjectUtil.isNotNull(datasourceDO) && ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
|
||||||
|
List<ReportDatasetDO> datasetDOList = datasetMapper.selectList(new LambdaQueryWrapperX<ReportDatasetDO>().in(ReportDatasetDO::getDatasourceId, datasourceId));
|
||||||
|
if (CollUtil.isNotEmpty(datasetDOList)) {
|
||||||
|
tenantParams.setBuildinDsNames(datasetDOList.stream().map(ReportDatasetDO::getName).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 用户组织id
|
||||||
|
tenantParams.setOrganId(userOrganId);
|
||||||
|
// imes多租户业务表表名列表
|
||||||
|
tenantParams.setTenantTableNames(cfReportProperties.getTenantTableNames());
|
||||||
|
previewParams.setTenantParams(tenantParams);
|
||||||
|
return previewParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 往parameters中增加租户相关参数
|
||||||
|
*
|
||||||
|
* @param parameters
|
||||||
|
*/
|
||||||
|
public void prepareTenantParam(Map<String, Object> parameters) {
|
||||||
|
Long userOrganId = SecurityFrameworkUtils.getUserOrganId();
|
||||||
|
// 根据前端传递的数据集id,判断是不是内置数据源下的,是就把name传给ureport
|
||||||
|
List<Long> datasetIds = (List) parameters.get("datasetIds");
|
||||||
|
if (CollUtil.isNotEmpty(datasetIds)) {
|
||||||
|
// 内置数据集名称列表
|
||||||
|
List<String> buildinDsNames = new ArrayList<>();
|
||||||
|
// 遍历获取所有上级数据源
|
||||||
|
List<ReportDatasetDO> reportDatasetDOS = datasetMapper.selectNormalDatasetList(datasetIds.stream().collect(Collectors.toSet()));
|
||||||
|
for (ReportDatasetDO datasetDO : reportDatasetDOS) {
|
||||||
|
Long datasourceId = datasetDO.getDatasourceId();
|
||||||
|
// 查询数据源,如果是内置数据源则把数据集的name传给ureport
|
||||||
|
// 机构下 + 内置数据源查询
|
||||||
|
ReportDatasourceDO datasourceDO = datasourceMapper.selectNormalDatasourceById(datasourceId, userOrganId);
|
||||||
|
if (ObjectUtil.isNotNull(datasourceDO) && ObjectUtil.equal(datasourceDO.getBuildinType(), ReportTemplateTypeEnum.SYSTEM)) {
|
||||||
|
buildinDsNames.add(datasetDO.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(buildinDsNames)) {
|
||||||
|
parameters.put("buildinDsNames", buildinDsNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// imes多租户业务表表名列表
|
||||||
|
parameters.put("tenantTableNames", cfReportProperties.getTenantTableNames());
|
||||||
|
// 用户组织id
|
||||||
|
parameters.put("organId", userOrganId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
BIN
Binary file not shown.
+1
-1
@@ -72,7 +72,7 @@ public class ReportDatasourceServiceImplTest extends ReportCommonServiceImplTest
|
|||||||
reqVO.setTemplateId(templateId);
|
reqVO.setTemplateId(templateId);
|
||||||
reqVO.setType(ReportDatasourceTypeEnum.JDBC.getCode());
|
reqVO.setType(ReportDatasourceTypeEnum.JDBC.getCode());
|
||||||
reqVO.setName(updateReqVO.getName());
|
reqVO.setName(updateReqVO.getName());
|
||||||
List<ReportDatasourceDO> templateDatasourceList = reportDatasourceService.getDatasourceList();
|
List<ReportDatasourceDO> templateDatasourceList = reportDatasourceService.getDatasourceList(null);
|
||||||
|
|
||||||
assertNotNull(templateDatasourceList);
|
assertNotNull(templateDatasourceList);
|
||||||
assertNotEquals(0, templateDatasourceList.size());
|
assertNotEquals(0, templateDatasourceList.size());
|
||||||
|
|||||||
+8
-2
@@ -1,12 +1,14 @@
|
|||||||
package com.cf.imes.module.system.api.customplateno;
|
package com.cf.imes.module.system.api.customplateno;
|
||||||
|
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqRespDTO;
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
import com.cf.imes.module.system.enums.ApiConstants;
|
import com.cf.imes.module.system.enums.ApiConstants;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,5 +24,9 @@ public interface CustomPlateNoSeqApi {
|
|||||||
|
|
||||||
@GetMapping(PREFIX + "/organ")
|
@GetMapping(PREFIX + "/organ")
|
||||||
@Operation(summary = "获取组织下自定义版编号序号")
|
@Operation(summary = "获取组织下自定义版编号序号")
|
||||||
CommonResult<CustomPlateNoSeqRespDTO> getOrgCustomPlateNoSeq();
|
CommonResult<CustomPlateNoSeqDTO> getOrgCustomPlateNoSeq();
|
||||||
|
|
||||||
|
@PostMapping(PREFIX + "/organ")
|
||||||
|
@Operation(summary = "更新组织下自定义版编号序号")
|
||||||
|
CommonResult<Boolean> modifyOrgCustomPlateNoSeq(@RequestBody CustomPlateNoSeqDTO customPlateNoSeqDTO);
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -15,7 +15,7 @@ import java.io.Serializable;
|
|||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class CustomPlateNoSeqRespDTO implements Serializable {
|
public class CustomPlateNoSeqDTO implements Serializable {
|
||||||
private static final long serialVersionUID = -3415615478757941611L;
|
private static final long serialVersionUID = -3415615478757941611L;
|
||||||
|
|
||||||
private Long id;
|
private Long id;
|
||||||
@@ -48,15 +48,15 @@ public class CustomPlateNoSeqRespDTO implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 上次年
|
* 上次年
|
||||||
*/
|
*/
|
||||||
private int lastYear;
|
private Integer lastYear;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上次月
|
* 上次月
|
||||||
*/
|
*/
|
||||||
private int lastMonth;
|
private Integer lastMonth;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上次天
|
* 上次天
|
||||||
*/
|
*/
|
||||||
private int lastDay;
|
private Integer lastDay;
|
||||||
}
|
}
|
||||||
+1
@@ -9,6 +9,7 @@ public class DictTypeConstants {
|
|||||||
|
|
||||||
public static final String USER_TYPE = "user_type"; // 用户类型
|
public static final String USER_TYPE = "user_type"; // 用户类型
|
||||||
public static final String COMMON_STATUS = "common_status"; // 系统状态
|
public static final String COMMON_STATUS = "common_status"; // 系统状态
|
||||||
|
public static final String ROLE_TYPE = "system_role_type"; // 系统角色类型
|
||||||
|
|
||||||
// ========== SYSTEM 模块 ==========
|
// ========== SYSTEM 模块 ==========
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -50,7 +50,7 @@ public class ErrorCodeConstants {
|
|||||||
public static final ErrorCode USER_IS_DISABLE = new ErrorCode(1_002_003_006, "名字为【{}】的用户已被禁用");
|
public static final ErrorCode USER_IS_DISABLE = new ErrorCode(1_002_003_006, "名字为【{}】的用户已被禁用");
|
||||||
public static final ErrorCode USER_COUNT_MAX = new ErrorCode(1_002_003_008, "创建用户失败,原因:超过组织最大组织配额({})!");
|
public static final ErrorCode USER_COUNT_MAX = new ErrorCode(1_002_003_008, "创建用户失败,原因:超过组织最大组织配额({})!");
|
||||||
public static final ErrorCode USER_ME_ERROR = new ErrorCode(1_002_003_009, "不允许操作用户自身");
|
public static final ErrorCode USER_ME_ERROR = new ErrorCode(1_002_003_009, "不允许操作用户自身");
|
||||||
public static final ErrorCode THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS = new ErrorCode(1_002_003_010, "密码长度必须至少为8个字符");
|
public static final ErrorCode THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS = new ErrorCode(1_002_003_010, "密码长度不少于8位,且包含大小写字母、数字和特殊字符");
|
||||||
public static final ErrorCode THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_LOWER_LETTER = new ErrorCode(1_002_003_011, "密码必须包含至少一个小写字母");
|
public static final ErrorCode THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_LOWER_LETTER = new ErrorCode(1_002_003_011, "密码必须包含至少一个小写字母");
|
||||||
public static final ErrorCode THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_NUMBER = new ErrorCode(1_002_003_012, "密码必须包含至少一个数字");
|
public static final ErrorCode THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_NUMBER = new ErrorCode(1_002_003_012, "密码必须包含至少一个数字");
|
||||||
|
|
||||||
@@ -123,8 +123,8 @@ public class ErrorCodeConstants {
|
|||||||
|
|
||||||
// ========== 组织信息 1-002-015-000 ==========
|
// ========== 组织信息 1-002-015-000 ==========
|
||||||
public static final ErrorCode ORGAN_NOT_EXISTS = new ErrorCode(1_002_015_000, "组织不存在");
|
public static final ErrorCode ORGAN_NOT_EXISTS = new ErrorCode(1_002_015_000, "组织不存在");
|
||||||
public static final ErrorCode ORGAN_DISABLE = new ErrorCode(1_002_015_001, "名字为【{}】的组织已被禁用");
|
public static final ErrorCode ORGAN_DISABLE = new ErrorCode(1_002_015_001, "【{}】组织已被禁用");
|
||||||
public static final ErrorCode ORGAN_EXPIRE = new ErrorCode(1_002_015_002, "名字为【{}】的组织已过期");
|
public static final ErrorCode ORGAN_EXPIRE = new ErrorCode(1_002_015_002, "【{}】组织已过期");
|
||||||
public static final ErrorCode ORGAN_CAN_NOT_UPDATE_SYSTEM = new ErrorCode(1_002_015_003, "系统组织不能进行修改、删除等操作!");
|
public static final ErrorCode ORGAN_CAN_NOT_UPDATE_SYSTEM = new ErrorCode(1_002_015_003, "系统组织不能进行修改、删除等操作!");
|
||||||
public static final ErrorCode ORGAN_NAME_DUPLICATE = new ErrorCode(1_002_015_004, "名字为【{}】的组织已存在");
|
public static final ErrorCode ORGAN_NAME_DUPLICATE = new ErrorCode(1_002_015_004, "名字为【{}】的组织已存在");
|
||||||
public static final ErrorCode ORGAN_WEBSITE_DUPLICATE = new ErrorCode(1_002_015_005, "域名为【{}】的组织已存在");
|
public static final ErrorCode ORGAN_WEBSITE_DUPLICATE = new ErrorCode(1_002_015_005, "域名为【{}】的组织已存在");
|
||||||
@@ -135,7 +135,7 @@ public class ErrorCodeConstants {
|
|||||||
// ========== 组织套餐 1-002-016-000 ==========
|
// ========== 组织套餐 1-002-016-000 ==========
|
||||||
public static final ErrorCode TENANT_PACKAGE_NOT_EXISTS = new ErrorCode(1_002_016_000, "组织套餐不存在");
|
public static final ErrorCode TENANT_PACKAGE_NOT_EXISTS = new ErrorCode(1_002_016_000, "组织套餐不存在");
|
||||||
public static final ErrorCode TENANT_PACKAGE_USED = new ErrorCode(1_002_016_001, "组织正在使用该套餐,请给组织重新设置套餐后再尝试删除");
|
public static final ErrorCode TENANT_PACKAGE_USED = new ErrorCode(1_002_016_001, "组织正在使用该套餐,请给组织重新设置套餐后再尝试删除");
|
||||||
public static final ErrorCode TENANT_PACKAGE_DISABLE = new ErrorCode(1_002_016_002, "名字为【{}】的组织套餐已被禁用");
|
public static final ErrorCode TENANT_PACKAGE_DISABLE = new ErrorCode(1_002_016_002, "【{}】组织套餐已被禁用");
|
||||||
public static final ErrorCode TENANT_PACKAGE_DEPT_EXIT = new ErrorCode(1_002_016_003, "无法修改内置组织权限套餐");
|
public static final ErrorCode TENANT_PACKAGE_DEPT_EXIT = new ErrorCode(1_002_016_003, "无法修改内置组织权限套餐");
|
||||||
public static final ErrorCode TENANT_PACKAGE_DELETED_EXIT = new ErrorCode(1_002_016_004, "无法删除内置组织权限套餐");
|
public static final ErrorCode TENANT_PACKAGE_DELETED_EXIT = new ErrorCode(1_002_016_004, "无法删除内置组织权限套餐");
|
||||||
public static final ErrorCode TENANT_PACKAGE_NAME_UNIQE_ERROR = new ErrorCode(1_002_016_005, "套餐名已存在,请编辑套餐名后重试");
|
public static final ErrorCode TENANT_PACKAGE_NAME_UNIQE_ERROR = new ErrorCode(1_002_016_005, "套餐名已存在,请编辑套餐名后重试");
|
||||||
@@ -343,11 +343,11 @@ public class ErrorCodeConstants {
|
|||||||
public static final ErrorCode CURRENTLY_NO_CONFIGURATION_AVAILABLE = new ErrorCode(1_002_039_001, "当前没有{}配置信息,请前往设置配置");
|
public static final ErrorCode CURRENTLY_NO_CONFIGURATION_AVAILABLE = new ErrorCode(1_002_039_001, "当前没有{}配置信息,请前往设置配置");
|
||||||
public static final ErrorCode BRANCHING_SETTING_NAME_REPEAT = new ErrorCode(1_002_039_002, "分线配置名称重复,请重新设置");
|
public static final ErrorCode BRANCHING_SETTING_NAME_REPEAT = new ErrorCode(1_002_039_002, "分线配置名称重复,请重新设置");
|
||||||
public static final ErrorCode BRANCHING_SETTING_RULE_SAVE_CHECK_ERROR = new ErrorCode(1_002_039_003, "智能分线配置保存解析失败,数据有误,请检查配置规则或联系客服");
|
public static final ErrorCode BRANCHING_SETTING_RULE_SAVE_CHECK_ERROR = new ErrorCode(1_002_039_003, "智能分线配置保存解析失败,数据有误,请检查配置规则或联系客服");
|
||||||
public static final ErrorCode BRANCHING_SETTING_SAVE_ERROR = new ErrorCode(1_002_039_004, "智能分线配置为空,请添加配置");
|
public static final ErrorCode BRANCHING_SETTING_SAVE_ERROR = new ErrorCode(1_002_039_004, "机台:{} 的配置为空,请添加配置");
|
||||||
public static final ErrorCode BRANCHING_SETTING_COUNT_ERROR = new ErrorCode(1_002_039_005, "智能分线配置机台数量必须大于2才能保存");
|
public static final ErrorCode BRANCHING_SETTING_COUNT_ERROR = new ErrorCode(1_002_039_005, "智能分线配置机台数量必须大于2才能保存");
|
||||||
|
|
||||||
//=========== 系统配置 1-002-040-000 ============
|
//=========== 系统配置 1-002-040-000 ============
|
||||||
public static final ErrorCode SYSTEM_CONFIG_NOT_EXISTS = new ErrorCode(1_002_040_001, "系统配置不存在");
|
public static final ErrorCode SYSTEM_CONFIG_NOT_EXISTS = new ErrorCode(1_002_040_001, "系统配置不存在");
|
||||||
public static final ErrorCode SYSTEM_CONFIG_TYPE_NOT_SUPPORT = new ErrorCode(1_002_040_002, "不支持的系统配置类型");
|
public static final ErrorCode SYSTEM_CONFIG_TYPE_NOT_SUPPORT = new ErrorCode(1_002_040_002, "不支持的系统配置类型");
|
||||||
public static final ErrorCode SYSTEM_CONFIG_CUSTOM_BOARD_NO_RULE_SAVE_CHECK_ERROR = new ErrorCode(1_002_040_003, "系统配置:自定义板编号保存解析失败,请检查配置规则或联系客服");
|
public static final ErrorCode SYSTEM_CONFIG_CUSTOM_PLATE_NO_RULE_SAVE_CHECK_ERROR = new ErrorCode(1_002_040_003, "系统配置:自定义板编号保存解析失败,请检查配置规则或联系客服");
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-10
@@ -1,6 +1,7 @@
|
|||||||
package com.cf.imes.module.system.enums.config;
|
package com.cf.imes.module.system.enums.customplateno;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义板编号规则编码枚举
|
* 自定义板编号规则编码枚举
|
||||||
@@ -9,7 +10,7 @@ import lombok.AllArgsConstructor;
|
|||||||
* @since 2024/11/11 15:20
|
* @since 2024/11/11 15:20
|
||||||
*/
|
*/
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum CustBoardRuleCodeEnum {
|
public enum CustomPlateNoRuleCodeEnum {
|
||||||
/**
|
/**
|
||||||
* 自定义
|
* 自定义
|
||||||
*/
|
*/
|
||||||
@@ -38,22 +39,19 @@ public enum CustBoardRuleCodeEnum {
|
|||||||
/**
|
/**
|
||||||
* 柜体序号
|
* 柜体序号
|
||||||
*/
|
*/
|
||||||
BODYNO("bodyNo"),
|
BODYNO("bodyNo");
|
||||||
|
|
||||||
/**
|
|
||||||
* 加工组序号
|
|
||||||
*/
|
|
||||||
PROCESSGROUP("processGroupNo");
|
|
||||||
|
|
||||||
|
@Getter
|
||||||
private String ruleCode;
|
private String ruleCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否匹配
|
* 是否匹配
|
||||||
|
*
|
||||||
* @param ruleCode
|
* @param ruleCode
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static CustBoardRuleCodeEnum match(String ruleCode) {
|
public static CustomPlateNoRuleCodeEnum match(String ruleCode) {
|
||||||
for (CustBoardRuleCodeEnum codeEnum : CustBoardRuleCodeEnum.values()) {
|
for (CustomPlateNoRuleCodeEnum codeEnum : CustomPlateNoRuleCodeEnum.values()) {
|
||||||
if (codeEnum.ruleCode.equals(ruleCode)) {
|
if (codeEnum.ruleCode.equals(ruleCode)) {
|
||||||
return codeEnum;
|
return codeEnum;
|
||||||
}
|
}
|
||||||
+70
@@ -0,0 +1,70 @@
|
|||||||
|
package com.cf.imes.module.system.enums.customplateno;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2024/11/19 9:40
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum ResetModeEnum {
|
||||||
|
/**
|
||||||
|
* 不清零,累加
|
||||||
|
*/
|
||||||
|
ACCUMULATION(0),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按位数
|
||||||
|
*/
|
||||||
|
DIGIT(1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按年
|
||||||
|
*/
|
||||||
|
YEAR(2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按月
|
||||||
|
*/
|
||||||
|
MONTH(3),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按天
|
||||||
|
*/
|
||||||
|
DAY(4),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按生产单
|
||||||
|
*/
|
||||||
|
ORDER(5),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按房间
|
||||||
|
*/
|
||||||
|
ROOM(6),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按柜体
|
||||||
|
*/
|
||||||
|
BODY(7);
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private int mode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据mode获取对应枚举
|
||||||
|
*
|
||||||
|
* @param mode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static ResetModeEnum getByMode(int mode) {
|
||||||
|
for (ResetModeEnum modeEnum : ResetModeEnum.values()) {
|
||||||
|
if (ObjectUtil.equal(modeEnum.getMode(), mode)) {
|
||||||
|
return modeEnum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
-3
@@ -2,7 +2,8 @@ package com.cf.imes.module.system.api.customplateno;
|
|||||||
|
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqRespDTO;
|
import com.cf.imes.module.system.api.customplateno.dto.CustomPlateNoSeqDTO;
|
||||||
|
import com.cf.imes.module.system.dal.dataobject.customplateno.CustomPlateNoSeqDO;
|
||||||
import com.cf.imes.module.system.service.customplateno.CustomPlateNoSeqService;
|
import com.cf.imes.module.system.service.customplateno.CustomPlateNoSeqService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@@ -23,7 +24,12 @@ public class CustomPlateNoSeqApiImpl implements CustomPlateNoSeqApi {
|
|||||||
private CustomPlateNoSeqService customPlateNoSeqService;
|
private CustomPlateNoSeqService customPlateNoSeqService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonResult<CustomPlateNoSeqRespDTO> getOrgCustomPlateNoSeq() {
|
public CommonResult<CustomPlateNoSeqDTO> getOrgCustomPlateNoSeq() {
|
||||||
return CommonResult.success(BeanUtils.toBean(customPlateNoSeqService.getOrgCustomPlateNoSeq(), CustomPlateNoSeqRespDTO.class));
|
return CommonResult.success(BeanUtils.toBean(customPlateNoSeqService.getOrgCustomPlateNoSeq(), CustomPlateNoSeqDTO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> modifyOrgCustomPlateNoSeq(CustomPlateNoSeqDTO customPlateNoSeqDTO) {
|
||||||
|
return CommonResult.success(customPlateNoSeqService.modifyOrgCustomPlateNoSeq(BeanUtils.toBean(customPlateNoSeqDTO, CustomPlateNoSeqDO.class)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -22,14 +22,14 @@ import javax.validation.constraints.Pattern;
|
|||||||
public class AuthLoginReqVO {
|
public class AuthLoginReqVO {
|
||||||
|
|
||||||
@Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "chenfengyuanma")
|
@Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "chenfengyuanma")
|
||||||
@NotEmpty(message = "登录账号不能为空")
|
@NotEmpty(message = "登录失败,账号密码不正确")
|
||||||
@Length(min = 4, max = 16, message = "账号长度为 4-16 位")
|
@Length(max = 11, message = "登录失败,账号密码不正确")
|
||||||
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母")
|
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "登录失败,账号密码不正确")
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao")
|
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao")
|
||||||
@Length(min = 4, max = 16, message = "密码长度为 4-16 位")
|
@Length(min = 8, max = 16, message = "登录失败,账号密码不正确")
|
||||||
@NotEmpty(message = "密码不能为空")
|
@NotEmpty(message = "登录失败,账号密码不正确")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
// ========== 图片验证码相关 ==========
|
// ========== 图片验证码相关 ==========
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ public class AuthLoginSmsCheckReqVO {
|
|||||||
private String mobile;
|
private String mobile;
|
||||||
|
|
||||||
@Schema(description = "验证码", example = "123456")
|
@Schema(description = "验证码", example = "123456")
|
||||||
@Length(min = 6, max = 6, message = "验证码长度必须 6 位")
|
@Length(min = 6, max = 6, message = "短信验证码不正确")
|
||||||
@NotEmpty(message = "短信验证码不能为空")
|
@NotEmpty(message = "短信验证码不能为空")
|
||||||
private String smsCaptchaVerification;
|
private String smsCaptchaVerification;
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -48,9 +48,6 @@ public class AuthPermissionInfoRespVO {
|
|||||||
@Schema(description = "组织id")
|
@Schema(description = "组织id")
|
||||||
private Long organId;
|
private Long organId;
|
||||||
|
|
||||||
@Schema(description = "是否需要设置密码")
|
|
||||||
private boolean needSetPwd;
|
|
||||||
|
|
||||||
@Schema(description = "ip地址")
|
@Schema(description = "ip地址")
|
||||||
private String ip;
|
private String ip;
|
||||||
|
|
||||||
|
|||||||
+10
-1
@@ -1,6 +1,7 @@
|
|||||||
package com.cf.imes.module.system.controller.admin.notice;
|
package com.cf.imes.module.system.controller.admin.notice;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import com.cf.imes.framework.common.enums.CommonStatusEnum;
|
||||||
import com.cf.imes.framework.common.enums.UserTypeEnum;
|
import com.cf.imes.framework.common.enums.UserTypeEnum;
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
@@ -68,10 +69,18 @@ public class NoticeController {
|
|||||||
return success(BeanUtils.toBean(pageResult, NoticeRespVO.class));
|
return success(BeanUtils.toBean(pageResult, NoticeRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/homepage")
|
||||||
|
@Operation(summary = "获取首页通知公告列表")
|
||||||
|
public CommonResult<PageResult<NoticeRespVO>> getHomePageNoticePage(@Validated NoticePageReqVO pageReqVO) {
|
||||||
|
// 首页只看生效的公告
|
||||||
|
pageReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
PageResult<NoticeDO> pageResult = noticeService.getNoticePage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, NoticeRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得通知公告")
|
@Operation(summary = "获得通知公告")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
@PreAuthorize("@ss.hasPermission('system:notice:query')")
|
|
||||||
public CommonResult<NoticeRespVO> getNotice(@RequestParam("id") Long id) {
|
public CommonResult<NoticeRespVO> getNotice(@RequestParam("id") Long id) {
|
||||||
NoticeDO notice = noticeService.getNotice(id);
|
NoticeDO notice = noticeService.getNotice(id);
|
||||||
return success(BeanUtils.toBean(notice, NoticeRespVO.class));
|
return success(BeanUtils.toBean(notice, NoticeRespVO.class));
|
||||||
|
|||||||
+6
-1
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.module.system.controller.admin.permission.vo.role;
|
package com.cf.imes.module.system.controller.admin.permission.vo.role;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.cf.imes.framework.excel.core.annotations.DictFormat;
|
import com.cf.imes.framework.excel.core.annotations.DictFormat;
|
||||||
import com.cf.imes.framework.excel.core.convert.DictConvert;
|
import com.cf.imes.framework.excel.core.convert.DictConvert;
|
||||||
import com.cf.imes.module.system.enums.DictTypeConstants;
|
import com.cf.imes.module.system.enums.DictTypeConstants;
|
||||||
@@ -39,19 +40,23 @@ public class RoleRespVO {
|
|||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
@Schema(description = "角色类型,参见 RoleTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
@Schema(description = "角色类型,参见 RoleTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
@ExcelProperty(value = "角色类型", converter = DictConvert.class)
|
||||||
|
@DictFormat(DictTypeConstants.ROLE_TYPE)
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "备注", example = "我是一个角色")
|
@Schema(description = "备注", example = "我是一个角色")
|
||||||
|
@ExcelProperty("备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
@Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
@Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
@ExcelProperty("数据范围")
|
|
||||||
private Integer dataScope;
|
private Integer dataScope;
|
||||||
|
|
||||||
@Schema(description = "数据范围(指定部门数组)", example = "1")
|
@Schema(description = "数据范围(指定部门数组)", example = "1")
|
||||||
private Set<Long> dataScopeDeptIds;
|
private Set<Long> dataScopeDeptIds;
|
||||||
|
|
||||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
@ColumnWidth(20)
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
@Schema(description = "组织id", example = "1")
|
@Schema(description = "组织id", example = "1")
|
||||||
|
|||||||
+17
-79
@@ -1,8 +1,8 @@
|
|||||||
package com.cf.imes.module.system.controller.admin.sms.vo.log;
|
package com.cf.imes.module.system.controller.admin.sms.vo.log;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.cf.imes.framework.excel.core.annotations.DictFormat;
|
import com.cf.imes.framework.excel.core.annotations.DictFormat;
|
||||||
import com.cf.imes.framework.excel.core.convert.DictConvert;
|
import com.cf.imes.framework.excel.core.convert.DictConvert;
|
||||||
import com.cf.imes.framework.excel.core.convert.JsonConvert;
|
|
||||||
import com.cf.imes.module.system.enums.DictTypeConstants;
|
import com.cf.imes.module.system.enums.DictTypeConstants;
|
||||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
@@ -21,13 +21,23 @@ public class SmsLogRespVO {
|
|||||||
@ExcelProperty("编号")
|
@ExcelProperty("编号")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@Schema(description = "短信渠道编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@ExcelProperty("短信渠道编号")
|
@ExcelProperty("创建时间")
|
||||||
private Long channelId;
|
@ColumnWidth(20)
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
@Schema(description = "短信渠道编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "ALIYUN")
|
@Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
|
||||||
@ExcelProperty("短信渠道编码")
|
@ExcelProperty("手机号")
|
||||||
private String channelCode;
|
private String mobile;
|
||||||
|
|
||||||
|
@Schema(description = "短信内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你的验证码是 1024")
|
||||||
|
@ExcelProperty("短信内容")
|
||||||
|
private String templateContent;
|
||||||
|
|
||||||
|
@Schema(description = "发送状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
@ExcelProperty(value = "发送状态", converter = DictConvert.class)
|
||||||
|
@DictFormat(DictTypeConstants.SMS_SEND_STATUS)
|
||||||
|
private Integer sendStatus;
|
||||||
|
|
||||||
@Schema(description = "模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
|
@Schema(description = "模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
|
||||||
@ExcelProperty("模板编号")
|
@ExcelProperty("模板编号")
|
||||||
@@ -41,76 +51,4 @@ public class SmsLogRespVO {
|
|||||||
@ExcelProperty(value = "短信类型", converter = DictConvert.class)
|
@ExcelProperty(value = "短信类型", converter = DictConvert.class)
|
||||||
@DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE)
|
@DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE)
|
||||||
private Integer templateType;
|
private Integer templateType;
|
||||||
|
|
||||||
@Schema(description = "短信内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你的验证码是 1024")
|
|
||||||
@ExcelProperty("短信内容")
|
|
||||||
private String templateContent;
|
|
||||||
|
|
||||||
@Schema(description = "短信参数", requiredMode = Schema.RequiredMode.REQUIRED, example = "name,code")
|
|
||||||
@ExcelProperty(value = "短信参数", converter = JsonConvert.class)
|
|
||||||
private Map<String, Object> templateParams;
|
|
||||||
|
|
||||||
@Schema(description = "短信 API 的模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "SMS_207945135")
|
|
||||||
@ExcelProperty("短信 API 的模板编号")
|
|
||||||
private String apiTemplateId;
|
|
||||||
|
|
||||||
@Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
|
|
||||||
@ExcelProperty("手机号")
|
|
||||||
private String mobile;
|
|
||||||
|
|
||||||
@Schema(description = "用户编号", example = "10")
|
|
||||||
@ExcelProperty("用户编号")
|
|
||||||
private Long userId;
|
|
||||||
|
|
||||||
@Schema(description = "用户类型", example = "1")
|
|
||||||
@ExcelProperty(value = "用户类型", converter = DictConvert.class)
|
|
||||||
@DictFormat(DictTypeConstants.USER_TYPE)
|
|
||||||
private Integer userType;
|
|
||||||
|
|
||||||
@Schema(description = "发送状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
|
||||||
@ExcelProperty(value = "发送状态", converter = DictConvert.class)
|
|
||||||
@DictFormat(DictTypeConstants.SMS_SEND_STATUS)
|
|
||||||
private Integer sendStatus;
|
|
||||||
|
|
||||||
@Schema(description = "发送时间")
|
|
||||||
@ExcelProperty("发送时间")
|
|
||||||
private LocalDateTime sendTime;
|
|
||||||
|
|
||||||
@Schema(description = "短信 API 发送结果的编码", example = "SUCCESS")
|
|
||||||
@ExcelProperty("短信 API 发送结果的编码")
|
|
||||||
private String apiSendCode;
|
|
||||||
|
|
||||||
@Schema(description = "短信 API 发送失败的提示", example = "成功")
|
|
||||||
@ExcelProperty("短信 API 发送失败的提示")
|
|
||||||
private String apiSendMsg;
|
|
||||||
|
|
||||||
@Schema(description = "短信 API 发送返回的唯一请求 ID", example = "3837C6D3-B96F-428C-BBB2-86135D4B5B99")
|
|
||||||
@ExcelProperty("短信 API 发送返回的唯一请求 ID")
|
|
||||||
private String apiRequestId;
|
|
||||||
|
|
||||||
@Schema(description = "短信 API 发送返回的序号", example = "62923244790")
|
|
||||||
@ExcelProperty("短信 API 发送返回的序号")
|
|
||||||
private String apiSerialNo;
|
|
||||||
|
|
||||||
@Schema(description = "接收状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
|
|
||||||
@ExcelProperty(value = "接收状态", converter = DictConvert.class)
|
|
||||||
@DictFormat(DictTypeConstants.SMS_RECEIVE_STATUS)
|
|
||||||
private Integer receiveStatus;
|
|
||||||
|
|
||||||
@Schema(description = "接收时间")
|
|
||||||
@ExcelProperty("接收时间")
|
|
||||||
private LocalDateTime receiveTime;
|
|
||||||
|
|
||||||
@Schema(description = "API 接收结果的编码", example = "DELIVRD")
|
|
||||||
@ExcelProperty("API 接收结果的编码")
|
|
||||||
private String apiReceiveCode;
|
|
||||||
|
|
||||||
@Schema(description = "API 接收结果的说明", example = "用户接收成功")
|
|
||||||
@ExcelProperty("API 接收结果的说明")
|
|
||||||
private String apiReceiveMsg;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
|
||||||
@ExcelProperty("创建时间")
|
|
||||||
private LocalDateTime createTime;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ public class UserMobileUpdateReqVO {
|
|||||||
private String mobile;
|
private String mobile;
|
||||||
|
|
||||||
@Schema(description = "验证码", example = "123456")
|
@Schema(description = "验证码", example = "123456")
|
||||||
@Length(min = 6, max = 6, message = "验证码长度必须 6 位")
|
@Length(min = 6, max = 6, message = "短信验证码不正确")
|
||||||
@NotEmpty(message = "短信验证码不能为空")
|
@NotEmpty(message = "短信验证码不能为空")
|
||||||
private String smsCaptchaVerification;
|
private String smsCaptchaVerification;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -12,12 +12,12 @@ public class UserProfileUpdatePasswordReqVO {
|
|||||||
|
|
||||||
@Schema(description = "旧密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
@Schema(description = "旧密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
||||||
@NotEmpty(message = "旧密码不能为空")
|
@NotEmpty(message = "旧密码不能为空")
|
||||||
@Length(min = 8, max = 16, message = "密码长度为 4-16 位")
|
@Length(min = 8, max = 16, message = "密码长度不少于8位,且包含大小写字母、数字和特殊字符")
|
||||||
private String oldPassword;
|
private String oldPassword;
|
||||||
|
|
||||||
@Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "654321")
|
@Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "654321")
|
||||||
@NotEmpty(message = "新密码不能为空")
|
@NotEmpty(message = "新密码不能为空")
|
||||||
@Length(min = 8, max = 16, message = "密码长度为 4-16 位")
|
@Length(min = 8, max = 16, message = "密码长度不少于8位,且包含大小写字母、数字和特殊字符")
|
||||||
private String newPassword;
|
private String newPassword;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -13,11 +13,11 @@ public class UserResetPasswordReqVO {
|
|||||||
|
|
||||||
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
||||||
@NotEmpty(message = "密码不能为空")
|
@NotEmpty(message = "密码不能为空")
|
||||||
@Length(min = 4, max = 16, message = "密码长度为 4-16 位")
|
@Length(min = 4, max = 16, message = "密码长度不少于8位,且包含大小写字母、数字和特殊字符")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
@Schema(description = "短信验证码", example = "123456")
|
@Schema(description = "短信验证码", example = "123456")
|
||||||
@Length(min = 6, max = 6, message = "短信验证码长度为 6 位")
|
@Length(min = 6, max = 6, message = "短信验证码不正确")
|
||||||
@NotEmpty(message = "短信验证码不能为空")
|
@NotEmpty(message = "短信验证码不能为空")
|
||||||
private String smsCaptchaVerification;
|
private String smsCaptchaVerification;
|
||||||
|
|
||||||
|
|||||||
-5
@@ -36,7 +36,6 @@ public class UserSaveReqVO {
|
|||||||
@Schema(description = "用户邮箱", example = "chenfeng@cf.com")
|
@Schema(description = "用户邮箱", example = "chenfeng@cf.com")
|
||||||
@Email(message = "邮箱格式不正确")
|
@Email(message = "邮箱格式不正确")
|
||||||
@Size(max = 50, message = "邮箱长度不能超过 50 个字符")
|
@Size(max = 50, message = "邮箱长度不能超过 50 个字符")
|
||||||
@NotBlank(message = "邮箱不能为空")
|
|
||||||
private String email;
|
private String email;
|
||||||
|
|
||||||
@Schema(description = "手机号码", example = "15601691300")
|
@Schema(description = "手机号码", example = "15601691300")
|
||||||
@@ -54,10 +53,6 @@ public class UserSaveReqVO {
|
|||||||
|
|
||||||
// ========== 仅【创建】时,需要传递的字段 ==========
|
// ========== 仅【创建】时,需要传递的字段 ==========
|
||||||
|
|
||||||
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
|
||||||
@Size(min = 4, max = 16, message = "密码长度为 4-16 位")
|
|
||||||
private String password;
|
|
||||||
|
|
||||||
@Schema(description = "帐号状态(0正常 1停用)")
|
@Schema(description = "帐号状态(0正常 1停用)")
|
||||||
@NotNull(message = "账号状态不能空")
|
@NotNull(message = "账号状态不能空")
|
||||||
@CommonStatus
|
@CommonStatus
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ public class UserUpdatePasswordReqVO {
|
|||||||
|
|
||||||
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
|
||||||
@NotEmpty(message = "密码不能为空")
|
@NotEmpty(message = "密码不能为空")
|
||||||
@Length(min = 4, max = 16, message = "密码长度为 4-16 位")
|
@Length(min = 4, max = 16, message = "密码长度不少于8位,且包含大小写字母、数字和特殊字符")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ public interface AuthConvert {
|
|||||||
|
|
||||||
return AuthPermissionInfoRespVO.builder()
|
return AuthPermissionInfoRespVO.builder()
|
||||||
.user(AuthPermissionInfoRespVO.UserVO.builder()
|
.user(AuthPermissionInfoRespVO.UserVO.builder()
|
||||||
.id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).organId(user.getOrganId()).needSetPwd(StringUtils.isEmpty(user.getPassword()))
|
.id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).organId(user.getOrganId())
|
||||||
.expireTime(organizationDO.getExpireTime()).ip(ipQuerySuccess ? ipQueryDataRespDTO.getIp() : "")
|
.expireTime(organizationDO.getExpireTime()).ip(ipQuerySuccess ? ipQueryDataRespDTO.getIp() : "")
|
||||||
.region(region)
|
.region(region)
|
||||||
.build())
|
.build())
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
|
|||||||
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
|
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
|
||||||
.betweenIfPresent(RoleDO::getCreateTime, reqVO.getCreateTime())
|
.betweenIfPresent(RoleDO::getCreateTime, reqVO.getCreateTime())
|
||||||
.ne(RoleDO::getId, 1)
|
.ne(RoleDO::getId, 1)
|
||||||
.orderByAsc(RoleDO::getId);
|
.orderByAsc(RoleDO::getSort).orderByAsc(RoleDO::getId);
|
||||||
|
|
||||||
return selectPage(reqVO, lambdaQueryWrapperX);
|
return selectPage(reqVO, lambdaQueryWrapperX);
|
||||||
}
|
}
|
||||||
|
|||||||
+72
-49
@@ -17,11 +17,11 @@ import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigSaveReqV
|
|||||||
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigUpdateStatusReqVO;
|
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigUpdateStatusReqVO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
|
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.dict.DictDataDO;
|
import com.cf.imes.module.system.dal.dataobject.dict.DictDataDO;
|
||||||
import com.cf.imes.module.system.dal.mysql.customplateno.CustomPlateNoSeqMapper;
|
|
||||||
import com.cf.imes.module.system.dal.mysql.systemconfig.SystemConfigMapper;
|
import com.cf.imes.module.system.dal.mysql.systemconfig.SystemConfigMapper;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
||||||
import com.cf.imes.module.system.enums.config.CustBoardRuleCodeEnum;
|
import com.cf.imes.module.system.enums.customplateno.CustomPlateNoRuleCodeEnum;
|
||||||
import com.cf.imes.module.system.enums.config.SystemConfigTypeEnum;
|
import com.cf.imes.module.system.enums.config.SystemConfigTypeEnum;
|
||||||
|
import com.cf.imes.module.system.enums.customplateno.ResetModeEnum;
|
||||||
import com.cf.imes.module.system.service.config.factory.service.AbstractSystemConfigServiceHandler;
|
import com.cf.imes.module.system.service.config.factory.service.AbstractSystemConfigServiceHandler;
|
||||||
import com.cf.imes.module.system.service.dict.DictDataService;
|
import com.cf.imes.module.system.service.dict.DictDataService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -35,7 +35,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.SYSTEM_CONFIG_CUSTOM_BOARD_NO_RULE_SAVE_CHECK_ERROR;
|
import static com.cf.imes.module.system.enums.ErrorCodeConstants.SYSTEM_CONFIG_CUSTOM_PLATE_NO_RULE_SAVE_CHECK_ERROR;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义板编号服务处理器
|
* 自定义板编号服务处理器
|
||||||
@@ -48,21 +48,19 @@ import static com.cf.imes.module.system.enums.ErrorCodeConstants.SYSTEM_CONFIG_C
|
|||||||
public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHandler {
|
public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHandler {
|
||||||
|
|
||||||
// 自定义板编号校验错误全部统一编号:1_002_040_003
|
// 自定义板编号校验错误全部统一编号:1_002_040_003
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_EMPTY_ERROR = new ErrorCode(1_002_040_003, "规则编码不能为空");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_RULECODE_EMPTY_ERROR = new ErrorCode(1_002_040_003, "规则编码不能为空");
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_NOT_MATCH_ERROR = new ErrorCode(1_002_040_003, "规则编码【{}】不合法,请检查配置规则");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_RULECODE_NOT_MATCH_ERROR = new ErrorCode(1_002_040_003, "规则编码【{}】不合法,请检查配置规则");
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_DATE_TYPE_FORMAT_ERROR = new ErrorCode(1_002_040_003, "时间格式【{}】不合法,请检查配置规则");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_DATE_TYPE_FORMAT_ERROR = new ErrorCode(1_002_040_003, "时间格式【{}】不合法,请检查配置规则");
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_RESETMODE_ERROR = new ErrorCode(1_002_040_003, "复位/清零模式【{}】不合法,请检查配置规则");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_CUSTOM_VALUE_EMPTY_ERROR = new ErrorCode(1_002_040_003, "自定义字符值不能为空,请检查配置规则");
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_NO_EMPTY = new ErrorCode(1_002_040_003, "参数【{}】不能为空,请检查配置规则");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_RESETMODE_ERROR = new ErrorCode(1_002_040_003, "规则【{}】复位/清零模式【{}】不合法,请检查配置规则");
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_ERROR = new ErrorCode(1_002_040_003, "数值类型参数{}:【{}】转换异常,请检查配置规则");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_INT_TYPE_NO_EMPTY = new ErrorCode(1_002_040_003, "参数【{}】不能为空,请检查配置规则");
|
||||||
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_BOL_TYPE_ERROR = new ErrorCode(1_002_040_003, "布尔类型参数{}:【{}】转换异常,请检查配置规则");
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_INT_TYPE_ERROR = new ErrorCode(1_002_040_003, "数值类型参数{}:【{}】转换异常,请检查配置规则");
|
||||||
|
public static final ErrorCode CUSTOM_PLATE_NO_RULE_CHECK_BOL_TYPE_ERROR = new ErrorCode(1_002_040_003, "布尔类型参数{}:【{}】转换异常,请检查配置规则");
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private DictDataService dictDataService;
|
private DictDataService dictDataService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private CustomPlateNoSeqMapper customPlateNoSeqMapper;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private SystemConfigMapper systemConfigMapper;
|
private SystemConfigMapper systemConfigMapper;
|
||||||
|
|
||||||
@@ -78,30 +76,30 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
public void checkValid(String setting) {
|
public void checkValid(String setting) {
|
||||||
// 字典中的时间格式
|
// 字典中的时间格式
|
||||||
List<DictDataDO> dateTypeFormatDictList = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), "system_setting_date_type");
|
List<DictDataDO> dateTypeFormatDictList = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), "system_setting_date_type");
|
||||||
// 字典中的复位模式
|
|
||||||
List<DictDataDO> resetModeDictList = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), "system_setting_rest_type");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
JSONArray jsonArray = JSON.parseArray(setting);
|
JSONArray jsonArray = JSON.parseArray(setting);
|
||||||
for (int i = 0; i < jsonArray.size(); i++) {
|
for (int i = 0; i < jsonArray.size(); i++) {
|
||||||
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
||||||
String ruleCode = jsonObject.getString("ruleCode");
|
String ruleCode = jsonObject.getString("ruleCode");
|
||||||
// 1.校验code
|
// 1.校验code
|
||||||
CustBoardRuleCodeEnum custBoardRuleCodeEnum = checkRoleCode(ruleCode);
|
CustomPlateNoRuleCodeEnum custBoardRuleCodeEnum = checkRoleCode(ruleCode);
|
||||||
|
|
||||||
// 2.时间格式校验
|
// 2.自定义格式校验
|
||||||
|
checkCustom(custBoardRuleCodeEnum, jsonObject);
|
||||||
|
|
||||||
|
// 3.时间格式校验
|
||||||
checkDateFormat(custBoardRuleCodeEnum, jsonObject.getString("value"), dateTypeFormatDictList);
|
checkDateFormat(custBoardRuleCodeEnum, jsonObject.getString("value"), dateTypeFormatDictList);
|
||||||
|
|
||||||
// 3.序号类型校验数字和布尔类型
|
// 4.序号类型校验数字和布尔类型
|
||||||
checkNoType(custBoardRuleCodeEnum, jsonObject);
|
checkNoType(custBoardRuleCodeEnum, jsonObject);
|
||||||
|
|
||||||
// 4.复位类型校验
|
// 5.复位类型校验
|
||||||
checkResetMode(custBoardRuleCodeEnum, jsonObject.getInteger("resetMode"), resetModeDictList);
|
checkResetMode(custBoardRuleCodeEnum, jsonObject.getInteger("resetMode"), ruleCode);
|
||||||
}
|
}
|
||||||
} catch (ServiceException e) {
|
} catch (ServiceException e) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ErrorCode systemConfigCustomPlateNoRuleSaveCheckError = SYSTEM_CONFIG_CUSTOM_BOARD_NO_RULE_SAVE_CHECK_ERROR;
|
ErrorCode systemConfigCustomPlateNoRuleSaveCheckError = SYSTEM_CONFIG_CUSTOM_PLATE_NO_RULE_SAVE_CHECK_ERROR;
|
||||||
log.error(systemConfigCustomPlateNoRuleSaveCheckError.getMsg(), e);
|
log.error(systemConfigCustomPlateNoRuleSaveCheckError.getMsg(), e);
|
||||||
throw new ServiceException(systemConfigCustomPlateNoRuleSaveCheckError);
|
throw new ServiceException(systemConfigCustomPlateNoRuleSaveCheckError);
|
||||||
}
|
}
|
||||||
@@ -112,13 +110,13 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
*
|
*
|
||||||
* @param ruleCode 规则编码
|
* @param ruleCode 规则编码
|
||||||
*/
|
*/
|
||||||
private CustBoardRuleCodeEnum checkRoleCode(String ruleCode) {
|
private CustomPlateNoRuleCodeEnum checkRoleCode(String ruleCode) {
|
||||||
if (StringUtils.isEmpty(ruleCode)) {
|
if (StringUtils.isEmpty(ruleCode)) {
|
||||||
throw new ServiceException(CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_EMPTY_ERROR);
|
throw new ServiceException(CUSTOM_PLATE_NO_RULE_CHECK_RULECODE_EMPTY_ERROR);
|
||||||
}
|
}
|
||||||
CustBoardRuleCodeEnum custBoardRuleCodeEnum = CustBoardRuleCodeEnum.match(ruleCode);
|
CustomPlateNoRuleCodeEnum custBoardRuleCodeEnum = CustomPlateNoRuleCodeEnum.match(ruleCode);
|
||||||
if (ObjectUtil.isNull(custBoardRuleCodeEnum)) {
|
if (ObjectUtil.isNull(custBoardRuleCodeEnum)) {
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_NOT_MATCH_ERROR, ruleCode);
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_RULECODE_NOT_MATCH_ERROR, ruleCode);
|
||||||
}
|
}
|
||||||
return custBoardRuleCodeEnum;
|
return custBoardRuleCodeEnum;
|
||||||
}
|
}
|
||||||
@@ -129,11 +127,25 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
* @param custBoardRuleCodeEnum 规则编码枚举
|
* @param custBoardRuleCodeEnum 规则编码枚举
|
||||||
* @param format 格式
|
* @param format 格式
|
||||||
*/
|
*/
|
||||||
private void checkDateFormat(CustBoardRuleCodeEnum custBoardRuleCodeEnum, String format, List<DictDataDO> dateTypeFormatDictList) {
|
private void checkDateFormat(CustomPlateNoRuleCodeEnum custBoardRuleCodeEnum, String format, List<DictDataDO> dateTypeFormatDictList) {
|
||||||
if (ObjectUtil.equal(CustBoardRuleCodeEnum.DATE, custBoardRuleCodeEnum) && StringUtils.isNotEmpty(format)) {
|
if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.DATE, custBoardRuleCodeEnum) && StringUtils.isNotEmpty(format)) {
|
||||||
Optional<DictDataDO> dateFormatDictDataOptional = dateTypeFormatDictList.stream().filter(d -> format.equals(d.getValue())).findAny();
|
Optional<DictDataDO> dateFormatDictDataOptional = dateTypeFormatDictList.stream().filter(d -> format.equals(d.getValue())).findAny();
|
||||||
if (dateFormatDictDataOptional.isEmpty()) {
|
if (dateFormatDictDataOptional.isEmpty()) {
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_DATE_TYPE_FORMAT_ERROR, format);
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_DATE_TYPE_FORMAT_ERROR, format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验自定义格式
|
||||||
|
*
|
||||||
|
* @param custBoardRuleCodeEnum
|
||||||
|
* @param jsonObject
|
||||||
|
*/
|
||||||
|
private void checkCustom(CustomPlateNoRuleCodeEnum custBoardRuleCodeEnum, JSONObject jsonObject) {
|
||||||
|
if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.CUSTOM, custBoardRuleCodeEnum)) {
|
||||||
|
if (ObjectUtil.isEmpty(jsonObject.get("value"))) {
|
||||||
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_CUSTOM_VALUE_EMPTY_ERROR, jsonObject.get("ruleCode"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -144,13 +156,13 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
* @param custBoardRuleCodeEnum
|
* @param custBoardRuleCodeEnum
|
||||||
* @param object
|
* @param object
|
||||||
*/
|
*/
|
||||||
private void checkNoType(CustBoardRuleCodeEnum custBoardRuleCodeEnum, JSONObject object) {
|
private void checkNoType(CustomPlateNoRuleCodeEnum custBoardRuleCodeEnum, JSONObject object) {
|
||||||
// 序号类型才校验
|
// 序号类型才校验
|
||||||
if (ObjectUtil.equal(CustBoardRuleCodeEnum.ORDERNO, custBoardRuleCodeEnum)
|
if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.ORDERNO, custBoardRuleCodeEnum)
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PLATENO, custBoardRuleCodeEnum)
|
|| ObjectUtil.equal(CustomPlateNoRuleCodeEnum.PLATENO, custBoardRuleCodeEnum)
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.ROOMNO, custBoardRuleCodeEnum)
|
|| ObjectUtil.equal(CustomPlateNoRuleCodeEnum.ROOMNO, custBoardRuleCodeEnum)
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.BODYNO, custBoardRuleCodeEnum)
|
|| ObjectUtil.equal(CustomPlateNoRuleCodeEnum.BODYNO, custBoardRuleCodeEnum)
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PROCESSGROUP, custBoardRuleCodeEnum)) {
|
) {
|
||||||
Map<String, String> intTypeFieldMap = new HashMap<>() {{
|
Map<String, String> intTypeFieldMap = new HashMap<>() {{
|
||||||
put("initValue", "起始值");
|
put("initValue", "起始值");
|
||||||
put("length", "位数");
|
put("length", "位数");
|
||||||
@@ -173,10 +185,10 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
*/
|
*/
|
||||||
private void checkInt(Object intObj, String fieldName) {
|
private void checkInt(Object intObj, String fieldName) {
|
||||||
if (ObjectUtil.isNull(intObj)) {
|
if (ObjectUtil.isNull(intObj)) {
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_NO_EMPTY, fieldName);
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_INT_TYPE_NO_EMPTY, fieldName);
|
||||||
}
|
}
|
||||||
if (!NumberUtil.isInteger(intObj.toString())) {
|
if (!NumberUtil.isInteger(intObj.toString())) {
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_ERROR, fieldName, intObj);
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_INT_TYPE_ERROR, fieldName, intObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,10 +200,10 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
*/
|
*/
|
||||||
private void checkBol(Object bolObj, String fieldName) {
|
private void checkBol(Object bolObj, String fieldName) {
|
||||||
if (ObjectUtil.isNull(bolObj)) {
|
if (ObjectUtil.isNull(bolObj)) {
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_NO_EMPTY, fieldName);
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_INT_TYPE_NO_EMPTY, fieldName);
|
||||||
}
|
}
|
||||||
if (!(bolObj instanceof Boolean)) {
|
if (!(bolObj instanceof Boolean)) {
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_BOL_TYPE_ERROR, fieldName, bolObj);
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_BOL_TYPE_ERROR, fieldName, bolObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,16 +212,22 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
*
|
*
|
||||||
* @param resetMode
|
* @param resetMode
|
||||||
*/
|
*/
|
||||||
private void checkResetMode(CustBoardRuleCodeEnum custBoardRuleCodeEnum, Integer resetMode, List<DictDataDO> resetModeDictList) {
|
private void checkResetMode(CustomPlateNoRuleCodeEnum custBoardRuleCodeEnum, Integer resetMode, String ruleCode) {
|
||||||
if (ObjectUtil.equal(CustBoardRuleCodeEnum.ORDERNO, custBoardRuleCodeEnum)
|
boolean checkSuccess = true;
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PLATENO, custBoardRuleCodeEnum)
|
if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.ORDERNO, custBoardRuleCodeEnum)) {
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.ROOMNO, custBoardRuleCodeEnum)
|
checkSuccess = ObjectUtil.equal(resetMode, ResetModeEnum.DIGIT.getMode()) || ObjectUtil.equal(resetMode, ResetModeEnum.YEAR.getMode())
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.BODYNO, custBoardRuleCodeEnum)
|
|| ObjectUtil.equal(resetMode, ResetModeEnum.MONTH.getMode()) || ObjectUtil.equal(resetMode, ResetModeEnum.DAY.getMode());
|
||||||
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PROCESSGROUP, custBoardRuleCodeEnum)) {
|
} else if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.PLATENO, custBoardRuleCodeEnum)) {
|
||||||
Optional<DictDataDO> resetModeDictDataOptional = resetModeDictList.stream().filter(d -> resetMode.toString().equals(d.getValue())).findAny();
|
checkSuccess = ObjectUtil.equal(resetMode, ResetModeEnum.ORDER.getMode()) || ObjectUtil.equal(resetMode, ResetModeEnum.YEAR.getMode())
|
||||||
if (resetModeDictDataOptional.isEmpty()) {
|
|| ObjectUtil.equal(resetMode, ResetModeEnum.MONTH.getMode()) || ObjectUtil.equal(resetMode, ResetModeEnum.ROOM.getMode())
|
||||||
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_RESETMODE_ERROR, resetMode);
|
|| ObjectUtil.equal(resetMode, ResetModeEnum.BODY.getMode());
|
||||||
}
|
} else if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.ROOMNO, custBoardRuleCodeEnum)) {
|
||||||
|
checkSuccess = ObjectUtil.equal(resetMode, ResetModeEnum.ORDER.getMode());
|
||||||
|
} else if (ObjectUtil.equal(CustomPlateNoRuleCodeEnum.BODYNO, custBoardRuleCodeEnum)) {
|
||||||
|
checkSuccess = ObjectUtil.equal(resetMode, ResetModeEnum.ORDER.getMode()) || ObjectUtil.equal(resetMode, ResetModeEnum.ROOM.getMode());
|
||||||
|
}
|
||||||
|
if (!checkSuccess) {
|
||||||
|
throw ServiceExceptionUtil.exception(CUSTOM_PLATE_NO_RULE_CHECK_RESETMODE_ERROR, ruleCode, resetMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,6 +264,11 @@ public class CustomPlateNoServiceHandler extends AbstractSystemConfigServiceHand
|
|||||||
.eq(SystemConfigDO::getType, SystemConfigTypeEnum.CUSTOM_PLATE_NO.getType())
|
.eq(SystemConfigDO::getType, SystemConfigTypeEnum.CUSTOM_PLATE_NO.getType())
|
||||||
.le(SystemConfigDO::getVersion, minReserveVersion));
|
.le(SystemConfigDO::getVersion, minReserveVersion));
|
||||||
}
|
}
|
||||||
|
// 移除机构下的板编号配置缓存
|
||||||
|
// 禁用配置移除缓存
|
||||||
|
String redisKey = String.format("%s:%d:%s", RedisKeyConstants.SYSTEM_CONFIG, OrganContextHolder.getOrganId(), RedisKeyConstants.CUSTOM_PLATE_NO);
|
||||||
|
Boolean delete = stringRedisTemplate.delete(redisKey);
|
||||||
|
log.info("[CustomPlateNoGenerateService][afterUpdateStatus]key:{}缓存删除结果:{}", redisKey, delete);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+9
-9
@@ -1,6 +1,7 @@
|
|||||||
package com.cf.imes.module.system.service.config.factory.service.impl;
|
package com.cf.imes.module.system.service.config.factory.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.cf.imes.framework.common.enums.CommonStatusEnum;
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||||
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigDeleteReqVO;
|
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigDeleteReqVO;
|
||||||
@@ -11,7 +12,6 @@ import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
|
|||||||
import com.cf.imes.module.system.dal.mysql.systemconfig.SystemConfigMapper;
|
import com.cf.imes.module.system.dal.mysql.systemconfig.SystemConfigMapper;
|
||||||
import com.cf.imes.module.system.enums.config.SystemConfigTypeEnum;
|
import com.cf.imes.module.system.enums.config.SystemConfigTypeEnum;
|
||||||
import com.cf.imes.module.system.service.config.factory.service.AbstractSystemConfigServiceHandler;
|
import com.cf.imes.module.system.service.config.factory.service.AbstractSystemConfigServiceHandler;
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@@ -19,7 +19,6 @@ import javax.annotation.Resource;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -35,15 +34,16 @@ public class DefaultSystemConfigServiceHandler extends AbstractSystemConfigServi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SystemConfigDO> selectList(ConfigPageReqVO reqVO) {
|
public List<SystemConfigDO> selectList(ConfigPageReqVO reqVO) {
|
||||||
List<SystemConfigDO> systemConfigDOS = systemConfigMapper.selectList(new LambdaQueryWrapperX<SystemConfigDO>()
|
|
||||||
.likeIfPresent(SystemConfigDO::getName, reqVO.getName())
|
|
||||||
.eqIfPresent(SystemConfigDO::getStatus, reqVO.getStatus())
|
|
||||||
.eqIfPresent(SystemConfigDO::getOrganId, OrganContextHolder.getOrganId())
|
|
||||||
.orderByAsc(SystemConfigDO::getId));
|
|
||||||
// todo 后续所有configTypeEnum中的类型需要上到列表补全时通过遍历enum来补充
|
// todo 后续所有configTypeEnum中的类型需要上到列表补全时通过遍历enum来补充
|
||||||
SystemConfigTypeEnum customplateNoEnum = SystemConfigTypeEnum.CUSTOM_PLATE_NO;
|
SystemConfigTypeEnum customplateNoEnum = SystemConfigTypeEnum.CUSTOM_PLATE_NO;
|
||||||
CopyOnWriteArrayList<SystemConfigDO> configDOS = Lists.newCopyOnWriteArrayList(systemConfigDOS);
|
List<SystemConfigDO> systemConfigDOS = systemConfigMapper.selectList(new LambdaQueryWrapperX<SystemConfigDO>()
|
||||||
Optional<SystemConfigDO> configDOOptional = configDOS.stream().filter(c -> ObjectUtil.equal(customplateNoEnum.getType(), c.getType())).findAny();
|
.likeIfPresent(SystemConfigDO::getName, reqVO.getName())
|
||||||
|
.eq(SystemConfigDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
|
||||||
|
.eq(SystemConfigDO::getType, customplateNoEnum.getType())
|
||||||
|
.eqIfPresent(SystemConfigDO::getOrganId, OrganContextHolder.getOrganId())
|
||||||
|
.select(SystemConfigDO::getId, SystemConfigDO::getName, SystemConfigDO::getStatus, SystemConfigDO::getType)
|
||||||
|
.orderByAsc(SystemConfigDO::getId));
|
||||||
|
Optional<SystemConfigDO> configDOOptional = systemConfigDOS.stream().filter(c -> ObjectUtil.equal(customplateNoEnum.getType(), c.getType())).findAny();
|
||||||
if (configDOOptional.isEmpty()) {
|
if (configDOOptional.isEmpty()) {
|
||||||
SystemConfigDO initCustomPlateNoConfig = new SystemConfigDO().builder().id(null).name(customplateNoEnum.getName()).type(customplateNoEnum.getType()).build();
|
SystemConfigDO initCustomPlateNoConfig = new SystemConfigDO().builder().id(null).name(customplateNoEnum.getName()).type(customplateNoEnum.getType()).build();
|
||||||
return List.of(initCustomPlateNoConfig);
|
return List.of(initCustomPlateNoConfig);
|
||||||
|
|||||||
+7
-5
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
|
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
|
||||||
@@ -57,11 +58,12 @@ public class IntellectBranchingService extends AbstractSystemConfigServiceHandle
|
|||||||
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
||||||
|
|
||||||
checkMachineId(jsonObject.getString("machineId"));
|
checkMachineId(jsonObject.getString("machineId"));
|
||||||
checkMachineName(jsonObject.getString("machineName"));
|
String machineName = jsonObject.getString("machineName");
|
||||||
checkMachineConfig(jsonObject.get("machineConfig"));
|
checkMachineName(machineName);
|
||||||
|
checkMachineConfig(jsonObject.get("machineConfig"),machineName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(jsonArray.size() < 2){
|
if(jsonArray.size() <= 2){
|
||||||
throw new ServiceException(BRANCHING_SETTING_COUNT_ERROR);
|
throw new ServiceException(BRANCHING_SETTING_COUNT_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,9 +138,9 @@ public class IntellectBranchingService extends AbstractSystemConfigServiceHandle
|
|||||||
* 校验 机台分流条件
|
* 校验 机台分流条件
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private void checkMachineConfig(Object machineConfig) {
|
private void checkMachineConfig(Object machineConfig,String machineName) {
|
||||||
if (ObjectUtil.isEmpty(machineConfig)) {
|
if (ObjectUtil.isEmpty(machineConfig)) {
|
||||||
throw new ServiceException(BRANCHING_SETTING_SAVE_ERROR);
|
throw exception(BRANCHING_SETTING_SAVE_ERROR,machineName);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -15,4 +15,11 @@ public interface CustomPlateNoSeqService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
CustomPlateNoSeqDO getOrgCustomPlateNoSeq();
|
CustomPlateNoSeqDO getOrgCustomPlateNoSeq();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改机构的自定义版编号序号
|
||||||
|
*
|
||||||
|
* @param seqDO
|
||||||
|
*/
|
||||||
|
Boolean modifyOrgCustomPlateNoSeq(CustomPlateNoSeqDO seqDO);
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-1
@@ -24,4 +24,11 @@ public class CustomPlateNoSeqServiceImpl implements CustomPlateNoSeqService {
|
|||||||
return customPlateNoSeqMapper.selectOne(new LambdaQueryWrapperX<CustomPlateNoSeqDO>()
|
return customPlateNoSeqMapper.selectOne(new LambdaQueryWrapperX<CustomPlateNoSeqDO>()
|
||||||
.eq(CustomPlateNoSeqDO::getOrganId, OrganContextHolder.getOrganId()));
|
.eq(CustomPlateNoSeqDO::getOrganId, OrganContextHolder.getOrganId()));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
|
public Boolean modifyOrgCustomPlateNoSeq(CustomPlateNoSeqDO seqDO) {
|
||||||
|
return customPlateNoSeqMapper.insertOrUpdate(seqDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+2
@@ -1,5 +1,7 @@
|
|||||||
package com.cf.imes.module.system.service.notice;
|
package com.cf.imes.module.system.service.notice;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.cf.imes.framework.common.enums.CommonStatusEnum;
|
||||||
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
|
|||||||
+6
@@ -115,6 +115,12 @@ public class OrganServiceImpl implements OrganService {
|
|||||||
if (ObjectUtil.isNull(organizationDO.getPackageId())) {
|
if (ObjectUtil.isNull(organizationDO.getPackageId())) {
|
||||||
throw exception(TENANT_PACKAGE_NOT_EXISTS);
|
throw exception(TENANT_PACKAGE_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
// 组织套餐相关校验
|
||||||
|
Long packageId = organizationDO.getPackageId();
|
||||||
|
if (ObjectUtil.isNull(packageId)) {
|
||||||
|
throw exception(TENANT_PACKAGE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
tenantPackageService.validTenantPackage(packageId);
|
||||||
return organizationDO;
|
return organizationDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+44
-5
@@ -17,6 +17,7 @@ import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReq
|
|||||||
import com.cf.imes.module.system.dal.dataobject.permission.RoleDO;
|
import com.cf.imes.module.system.dal.dataobject.permission.RoleDO;
|
||||||
import com.cf.imes.module.system.dal.mysql.permission.RoleMapper;
|
import com.cf.imes.module.system.dal.mysql.permission.RoleMapper;
|
||||||
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
||||||
|
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
||||||
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
||||||
import com.cf.imes.module.system.enums.permission.RoleCodeEnum;
|
import com.cf.imes.module.system.enums.permission.RoleCodeEnum;
|
||||||
import com.cf.imes.module.system.enums.permission.RoleTypeEnum;
|
import com.cf.imes.module.system.enums.permission.RoleTypeEnum;
|
||||||
@@ -24,6 +25,9 @@ import com.google.common.annotations.VisibleForTesting;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.cache.annotation.CacheEvict;
|
import org.springframework.cache.annotation.CacheEvict;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
import org.springframework.data.redis.core.Cursor;
|
||||||
|
import org.springframework.data.redis.core.ScanOptions;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@@ -53,6 +57,12 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
@Resource
|
@Resource
|
||||||
private RoleService roleService;
|
private RoleService roleService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StringRedisTemplate stringRedisTemplate;
|
||||||
|
|
||||||
|
// 模糊匹配redisKey:role:{organId}:{roleId}
|
||||||
|
public static final String REDIS_ROLE_KEY_PATTERN = RedisKeyConstants.ROLE + ":*:%d";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createRole(RoleSaveReqVO createReqVO, Integer type) {
|
public Long createRole(RoleSaveReqVO createReqVO, Integer type) {
|
||||||
@@ -80,6 +90,8 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
RoleDO updateObj = BeanUtils.toBean(updateReqVO, RoleDO.class);
|
RoleDO updateObj = BeanUtils.toBean(updateReqVO, RoleDO.class);
|
||||||
roleMapper.updateById(updateObj);
|
roleMapper.updateById(updateObj);
|
||||||
|
// 移除角色缓存
|
||||||
|
scanAndDelKeys(String.format(REDIS_ROLE_KEY_PATTERN, updateObj.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -91,6 +103,8 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
// 更新状态
|
// 更新状态
|
||||||
RoleDO updateObj = new RoleDO().setId(id).setStatus(status);
|
RoleDO updateObj = new RoleDO().setId(id).setStatus(status);
|
||||||
roleMapper.updateById(updateObj);
|
roleMapper.updateById(updateObj);
|
||||||
|
// 移除角色缓存
|
||||||
|
scanAndDelKeys(String.format(REDIS_ROLE_KEY_PATTERN, updateObj.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -117,6 +131,31 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
roleMapper.deleteById(id);
|
roleMapper.deleteById(id);
|
||||||
// 删除相关数据
|
// 删除相关数据
|
||||||
permissionService.processRoleDeleted(id);
|
permissionService.processRoleDeleted(id);
|
||||||
|
// 删除角色移除角色缓存
|
||||||
|
scanAndDelKeys(String.format(REDIS_ROLE_KEY_PATTERN, id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* scan匹配keyPattern下缓存并删除缓存
|
||||||
|
*
|
||||||
|
* @param keyPattern
|
||||||
|
*/
|
||||||
|
private void scanAndDelKeys(String keyPattern) {
|
||||||
|
// 根据keyPattern scan匹配的redis key
|
||||||
|
List<String> matchKeys = new ArrayList<>();
|
||||||
|
Cursor<String> cursor = stringRedisTemplate.scan(ScanOptions.scanOptions().match(keyPattern).count(200).build());
|
||||||
|
while (cursor.hasNext()) {
|
||||||
|
matchKeys.add(cursor.next());
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
if (CollUtil.isNotEmpty(matchKeys)) {
|
||||||
|
for (String key : matchKeys) {
|
||||||
|
// 移除缓存
|
||||||
|
stringRedisTemplate.delete(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 通知刷新本地缓存
|
||||||
|
stringRedisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,7 +166,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
*
|
*
|
||||||
* @param name 角色名字
|
* @param name 角色名字
|
||||||
* @param code 角色额编码
|
* @param code 角色额编码
|
||||||
* @param id 角色编号
|
* @param id 角色编号
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void validateRoleDuplicate(String name, String code, Long id, Long organId) {
|
void validateRoleDuplicate(String name, String code, Long id, Long organId) {
|
||||||
@@ -156,7 +195,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
*
|
*
|
||||||
* @param id 角色编号
|
* @param id 角色编号
|
||||||
*/
|
*/
|
||||||
// @VisibleForTesting
|
// @VisibleForTesting
|
||||||
@OrganIgnore
|
@OrganIgnore
|
||||||
@Override
|
@Override
|
||||||
public void validateRoleForUpdate(Long id) {
|
public void validateRoleForUpdate(Long id) {
|
||||||
@@ -199,7 +238,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
public List<RoleDO> getRoleListByStatus(Collection<Integer> statuses, Long organId) {
|
public List<RoleDO> getRoleListByStatus(Collection<Integer> statuses, Long organId) {
|
||||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||||
assert loginUser != null;
|
assert loginUser != null;
|
||||||
if(!loginUser.getIsSupAdmin()) {
|
if (!loginUser.getIsSupAdmin()) {
|
||||||
return roleMapper.selectList(new LambdaQueryWrapperX<RoleDO>()
|
return roleMapper.selectList(new LambdaQueryWrapperX<RoleDO>()
|
||||||
.in(RoleDO::getStatus, statuses)
|
.in(RoleDO::getStatus, statuses)
|
||||||
.in(RoleDO::getOrganId, loginUser.getOrganId(), 0L)
|
.in(RoleDO::getOrganId, loginUser.getOrganId(), 0L)
|
||||||
@@ -226,7 +265,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return roleMapper.selectBatchIds(ids);
|
return roleMapper.selectBatchIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -293,7 +332,7 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
if (CollUtil.isEmpty(roleIds)) {
|
if (CollUtil.isEmpty(roleIds)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return roleMapper.selectBatchIds(roleIds);
|
return roleMapper.selectBatchIds(roleIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-8
@@ -119,7 +119,8 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
private static final String UPPER_LETTER_PATTERN = ".*[A-Z].*";
|
private static final String UPPER_LETTER_PATTERN = ".*[A-Z].*";
|
||||||
private static final String LOWER_LETTER_PATTERN = ".*[a-z].*";
|
private static final String LOWER_LETTER_PATTERN = ".*[a-z].*";
|
||||||
private static final String DIGIT_PATTERN = ".*\\d.*";
|
private static final String DIGIT_PATTERN = ".*\\d.*";
|
||||||
private static final String VALID_CHAR_PATTERN = "^[A-Za-z\\d]+$";
|
private static final String SPECIAL_CHARACTER_PATTERN = ".*[~!@#$%^&*()_+\\-=].*";
|
||||||
|
private static final String VALID_CHAR_PATTERN = "^[A-Za-z\\d~!@#$%^&*()_+\\-=]+$";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@@ -490,8 +491,6 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
validateUserExists(id);
|
validateUserExists(id);
|
||||||
// 校验用户名唯一
|
// 校验用户名唯一
|
||||||
validateUsernameUnique(id, username, organId);
|
validateUsernameUnique(id, username, organId);
|
||||||
// 校验邮箱唯一
|
|
||||||
validateEmailUnique(id, email, organId);
|
|
||||||
// 校验部门处于开启状态
|
// 校验部门处于开启状态
|
||||||
deptService.validateDeptList(CollectionUtils.singleton(deptId));
|
deptService.validateDeptList(CollectionUtils.singleton(deptId));
|
||||||
// 校验岗位处于开启状态
|
// 校验岗位处于开启状态
|
||||||
@@ -508,19 +507,23 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
}
|
}
|
||||||
// 检查是否包含大写字母
|
// 检查是否包含大写字母
|
||||||
if (!Pattern.matches(UPPER_LETTER_PATTERN, password)) {
|
if (!Pattern.matches(UPPER_LETTER_PATTERN, password)) {
|
||||||
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_UPPER_LETTER);
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS);
|
||||||
}
|
}
|
||||||
// 检查是否包含小写字母
|
// 检查是否包含小写字母
|
||||||
if (!Pattern.matches(LOWER_LETTER_PATTERN, password)) {
|
if (!Pattern.matches(LOWER_LETTER_PATTERN, password)) {
|
||||||
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_LOWER_LETTER);
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS);
|
||||||
}
|
}
|
||||||
// 检查是否包含数字
|
// 检查是否包含数字
|
||||||
if (!Pattern.matches(DIGIT_PATTERN, password)) {
|
if (!Pattern.matches(DIGIT_PATTERN, password)) {
|
||||||
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_MUST_CONTAIN_AT_LEAST_ONE_NUMBER);
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS);
|
||||||
}
|
}
|
||||||
// 检查是否只包含字母和数字
|
// 检查是否包含特殊字符
|
||||||
|
if (!Pattern.matches(SPECIAL_CHARACTER_PATTERN, password)) {
|
||||||
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS);
|
||||||
|
}
|
||||||
|
// 检查是否只包含字母、数字和特殊字符
|
||||||
if (!Pattern.matches(VALID_CHAR_PATTERN, password)) {
|
if (!Pattern.matches(VALID_CHAR_PATTERN, password)) {
|
||||||
throw ServiceExceptionUtil.exception(ErrorCodeConstants.PASSWORDS_CAN_ONLY_CONTAIN_LETTERS_AND_NUMBERS);
|
throw ServiceExceptionUtil.exception(ErrorCodeConstants.THE_PASSWORD_LENGTH_MUST_BE_AT_LEAST_8_CHARACTERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
-2
@@ -106,8 +106,6 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
|
|||||||
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
}));
|
}));
|
||||||
//when(postService.getPostList(eq(reqVO.getPostIds()), isNull())).thenReturn(posts);
|
//when(postService.getPostList(eq(reqVO.getPostIds()), isNull())).thenReturn(posts);
|
||||||
// mock passwordEncoder 的方法
|
|
||||||
when(passwordEncoder.encode(eq(reqVO.getPassword()))).thenReturn("chenfengyuanma");
|
|
||||||
|
|
||||||
// 调用
|
// 调用
|
||||||
Long userId = userService.createUser(reqVO);
|
Long userId = userService.createUser(reqVO);
|
||||||
|
|||||||
Reference in New Issue
Block a user