生产单新增

This commit is contained in:
lym
2024-03-13 11:51:57 +08:00
parent 090a241e42
commit d520b18901
25 changed files with 931 additions and 108 deletions
@@ -174,6 +174,7 @@ public interface ErrorCodeConstants {
//=========== 工序信息 1-002-028-000 ============
ErrorCode PROCESS_NOT_EXISTS = new ErrorCode(1_002_028_000, "工序不存在");
ErrorCode PROCESS_ID_IS_NULL = new ErrorCode(1_002_028_000, "工序ID不存在");
//=========== 工序组信息 1-002-029-000 ============
ErrorCode PROCESS_GROUP_NOT_EXISTS = new ErrorCode(1_002_029_000, "工序组不存在");
@@ -203,5 +204,6 @@ public interface ErrorCodeConstants {
//=========== 板材信息 1-002-034-000 ============
ErrorCode PROCESS_USER_NOT_EXISTS = new ErrorCode(1_002_032_002, "工序用户不存在");
ErrorCode PROCESS_USER_EXISTS = new ErrorCode(1_002_032_002, "工序用户存在");
}
@@ -53,25 +53,14 @@ public class ProcessGroupController {
@PostMapping("/create")
@Operation(summary = "创建工序组")
@Transactional(rollbackFor = Exception.class)
public CommonResult<Long> createProcessGroup(@Valid @RequestBody ProcessListSaveReqVO createReqVOLists) {
StringBuilder itemsBuilder = new StringBuilder();
for (ProcessRespVO createReqVO : createReqVOLists.getLists()) {
Optional.ofNullable(createReqVO.getId()).ifPresent(id -> {
itemsBuilder.append(id).append(",");
});
}
String items = itemsBuilder.length() > 0 ? itemsBuilder.substring(0, itemsBuilder.length() - 1) : null;
ProcessGroupSaveReqVO createReqVO = BeanUtils.toBean(createReqVOLists, ProcessGroupSaveReqVO.class);
createReqVO.setItems(items);
return success(processGroupService.createProcessGroup(createReqVO));
public CommonResult<Long> createProcessGroup(@Valid @RequestBody ProcessGroupSaveReqVO createReqVOLists) {
return success(processGroupService.createProcessGroup(createReqVOLists));
}
@PutMapping("/update")
@Operation(summary = "更新工序组")
@PreAuthorize("@ss.hasPermission('system:process-group:update')")
public CommonResult<Boolean> updateProcessGroup(@Valid @RequestBody ProcessListSaveReqVO updateReqVO) {
public CommonResult<Boolean> updateProcessGroup(@Valid @RequestBody ProcessGroupSaveReqVO updateReqVO) {
processGroupService.updateProcessGroup(updateReqVO);
return success(true);
}
@@ -26,6 +26,10 @@ public class ProcessListSaveReqVO {
@NotNull(message = "排序优先级")
private Short sort;
@Schema(description = "明细,工序 ID 逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "明细,工序 ID 逗号分隔不能为空")
private String items;
@Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
@NotEmpty(message = "描述不能为空")
private String description;
@@ -19,8 +19,4 @@ public class ProcessAndUserRespVO {
@ExcelProperty("用户 ID")
private Long userId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
@@ -13,12 +13,12 @@ import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
@TableName("process_user")
@KeySequence("process_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProcessUserDO extends BaseDO {
public class ProcessUserDO {
/**
* 工序 ID
@@ -1,8 +1,12 @@
package com.cf.imes.module.system.dal.mysql.process;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.system.dal.dataobject.process.ProcessUserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -22,7 +26,5 @@ public interface ProcessUserMapper extends BaseMapperX<ProcessUserDO> {
return selectOne(ProcessUserDO::getProcessId, processId);
}
default int deleteUserByProcessId(Long processId) {
return delete(ProcessUserDO::getProcessId, processId);
}
int deleteUserByProcessId(@Param("processId") Long processId);
}
@@ -29,7 +29,7 @@ public interface ProcessGroupService {
*
* @param updateReqVO 更新信息
*/
void updateProcessGroup(@Valid ProcessListSaveReqVO updateReqVO);
void updateProcessGroup(@Valid ProcessGroupSaveReqVO updateReqVO);
/**
* 删除工序组表 process_group
@@ -6,8 +6,11 @@ import com.cf.imes.module.system.controller.admin.process.vo.group.ProcessListSa
import com.cf.imes.module.system.controller.admin.process.vo.process.ProcessRespVO;
import com.cf.imes.module.system.dal.dataobject.process.ProcessDO;
import com.cf.imes.module.system.dal.mysql.process.ProcessMapper;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import com.cf.imes.module.system.dal.dataobject.process.ProcessGroupDO;
@@ -17,12 +20,15 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.system.dal.mysql.process.ProcessGroupMapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
/**
* 工序组表 process_group Service 实现类
*
@@ -42,28 +48,19 @@ public class ProcessGroupServiceImpl implements ProcessGroupService {
public Long createProcessGroup(ProcessGroupSaveReqVO createReqVO) {
// 插入
ProcessGroupDO processGroup = BeanUtils.toBean(createReqVO, ProcessGroupDO.class);
processGroup.setItems(checkProcessGroupExists(createReqVO.getItems()));
processGroupMapper.insert(processGroup);
// 返回
return processGroup.getId();
}
@Override
public void updateProcessGroup(ProcessListSaveReqVO updateReqVO) {
public void updateProcessGroup(ProcessGroupSaveReqVO updateReqVO) {
// 校验存在
validateProcessGroupExists(updateReqVO.getId());
// 获取items
List<ProcessRespVO> itemLists = updateReqVO.getLists();
StringBuilder itemsBuilder = new StringBuilder();
for (ProcessRespVO createReqVO : itemLists) {
Optional.ofNullable(createReqVO.getId()).ifPresent(id -> {
itemsBuilder.append(id).append(",");
});
}
String items = itemsBuilder.length() > 0 ? itemsBuilder.substring(0, itemsBuilder.length() - 1) : null;
// 更新
ProcessGroupDO updateObj = BeanUtils.toBean(updateReqVO, ProcessGroupDO.class);
updateObj.setItems(items);
updateObj.setItems(checkProcessGroupExists(updateReqVO.getItems()));
processGroupMapper.updateById(updateObj);
}
@@ -85,14 +82,14 @@ public class ProcessGroupServiceImpl implements ProcessGroupService {
public ProcessListSaveReqVO getProcessGroup(Long id) {
if (processGroupMapper.selectById(id) == null) {
throw exception(PROCESS_GROUP_NOT_EXISTS);
}else {
} else {
ProcessGroupDO processGroup = processGroupMapper.selectById(id);
ProcessListSaveReqVO processListSaveReqVO = BeanUtils.toBean(processGroup, ProcessListSaveReqVO.class);
String[] items = processGroup.getItems().split(",");
List<ProcessRespVO> lists = new ArrayList<>();
for (int i = 0; i < items.length; i++) {
lists.add(BeanUtils.toBean(processMapper.selectById(items[i]), ProcessRespVO.class));
System.out.println("each List " +BeanUtils.toBean(processMapper.selectById(items[i]), ProcessRespVO.class));
lists.add(BeanUtils.toBean(processMapper.selectById(items[i]), ProcessRespVO.class));
System.out.println("each List " + BeanUtils.toBean(processMapper.selectById(items[i]), ProcessRespVO.class));
}
System.out.println("processGroupSaveReqVO = " + processListSaveReqVO);
processListSaveReqVO.setLists(lists);
@@ -105,4 +102,59 @@ public class ProcessGroupServiceImpl implements ProcessGroupService {
public PageResult<ProcessGroupDO> getProcessGroupPage(ProcessGroupPageReqVO pageReqVO) {
return processGroupMapper.selectPage(pageReqVO);
}
private String checkProcessGroupExists(String userLists) {
// 检查输入是否为空或仅包含空白字符
if (userLists == null || userLists.trim().isEmpty()) {
return "[]"; // 统一返回空列表格式化字符串
}
List<String> itemsList = Arrays.stream(userLists.split(","))
.map(String::trim) // 去除每个项两端的空白字符
.filter(item -> item != null && !item.isEmpty()) // 过滤空字符串和null
.collect(Collectors.toList());
// 如果列表为空,直接返回空字符串,表示没有有效的进程ID
if (itemsList.isEmpty()) {
return "[]";
}
StringBuilder itemsBuilder = new StringBuilder();
StringBuilder missingItemsBuilder = new StringBuilder(); // 使用StringBuilder累积不存在的项的ID
itemsList.forEach(itemId -> {
try {
Object item = processMapper.selectById(itemId);
if (item != null) {
// 优化字符串拼接
itemsBuilder.append(itemId).append(",");
} else {
// 将不存在的项的ID累积到missingItemsBuilder中
if (missingItemsBuilder.length() > 0) {
missingItemsBuilder.append(",");
}
missingItemsBuilder.append(itemId);
}
} catch (Exception e) {
// 处理可能的异常,例如数据库查询异常
// 可以记录日志或者转换为业务异常等
// 此处为简化仅打印异常,实际应用中应更详细处理
System.err.println("Error processing item: " + e.getMessage());
}
});
// 判断是否存在不存在的项,并一次性抛出异常
if (missingItemsBuilder.length() > 0) {
throw exception(PROCESS_NOT_EXISTS, "Items with IDs " + missingItemsBuilder.toString() + " do not exist.");
}
// 移除itemsBuilder最后的逗号
if (itemsBuilder.length() > 0) {
itemsBuilder.setLength(itemsBuilder.length() - 1);
}
// 返回格式化的列表字符串
return itemsBuilder.length() > 0 ? itemsBuilder.toString() : "[]";
}
}
@@ -9,6 +9,7 @@ import com.cf.imes.module.system.dal.dataobject.process.ProcessUserDO;
import com.cf.imes.module.system.dal.mysql.process.ProcessUserMapper;
import com.cf.imes.module.system.service.user.AdminUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
@@ -58,9 +59,9 @@ public class ProcessServiceImpl implements ProcessService {
for (String user : usersId) {
ProcessAndUserSaveReqVO processAndUserSaveReqVO = new ProcessAndUserSaveReqVO();
// if (adminUserService.getUser(Long.parseLong(user)) != null){
processAndUserSaveReqVO.setProcessId(processID);
processAndUserSaveReqVO.setUserId(Long.parseLong(user));
processUserService.createProcessUser(processAndUserSaveReqVO);
processAndUserSaveReqVO.setProcessId(processID);
processAndUserSaveReqVO.setUserId(Long.parseLong(user));
processUserService.createProcessUser(processAndUserSaveReqVO);
// }
}
}
@@ -76,13 +77,23 @@ public class ProcessServiceImpl implements ProcessService {
ProcessDO updateProcess = BeanUtils.toBean(updateReqVO, ProcessDO.class);
processUserService.deleteProcessUserByProcess(updateReqVO.getId());
if(updateReqVO.getUsers() != null && updateReqVO.getUsers() != ""){
// 确保updateReqVO不是null,避免NullPointerException
if (updateReqVO != null && (updateReqVO.getUsers() != null || updateReqVO.getUsers() != "")) {
String[] usersId = updateReqVO.getUsers().split(",");
for (String user : usersId) {
ProcessAndUserSaveReqVO processAndUserSaveReqVO = new ProcessAndUserSaveReqVO();
processAndUserSaveReqVO.setProcessId(updateReqVO.getId());
processAndUserSaveReqVO.setUserId(Long.parseLong(user));
processUserService.createProcessUser(processAndUserSaveReqVO);
// 增加了对无法解析的用户ID的异常处理
try {
// 增加了对空字符串和仅包含空白字符的用户ID的验证
if (!user.trim().isEmpty()) {
ProcessAndUserSaveReqVO processAndUserSaveReqVO = new ProcessAndUserSaveReqVO();
processAndUserSaveReqVO.setProcessId(updateProcess.getId());
processAndUserSaveReqVO.setUserId(Long.parseLong(user));
processUserService.createProcessUser(processAndUserSaveReqVO);
}
} catch (NumberFormatException e) {
// 处理NumberFormatException异常,例如记录日志
System.err.println("用户ID " + user + " 无法解析为长整型。");
}
}
}
processMapper.updateById(updateProcess);
@@ -94,6 +105,7 @@ public class ProcessServiceImpl implements ProcessService {
validateProcessExists(id);
// 删除
processMapper.deleteById(id);
}
private void validateProcessExists(Long id) {
@@ -104,9 +116,11 @@ public class ProcessServiceImpl implements ProcessService {
@Override
public ProcessUserRespVO getProcess(Long id) {
// 校验存在
validateProcessExists(id);
ProcessDO process = processMapper.selectById(id);
List<ProcessUserDO> userIdListsByProcessId = processUserService.getProcessUser(id);
StringBuilder userIdBuilder = new StringBuilder();
List<ProcessUserDO> userIdListsByProcessId = processUserService.getProcessUser(id);
if (userIdListsByProcessId != null) {
for (ProcessUserDO processUser : userIdListsByProcessId) {
if (processUser != null && processUser.getUserId() != null) {
@@ -119,6 +133,7 @@ public class ProcessServiceImpl implements ProcessService {
ProcessUserRespVO processUserRespVO = BeanUtils.toBean(process, ProcessUserRespVO.class);
processUserRespVO.setUsers(userId);
return processUserRespVO;
}
@Override
@@ -1,12 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cf.imes.module.system.dal.mysql.processUser.ProcessUserMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见:https://www.cf.com/MyBatis/x-plugins/
-->
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cf.imes.module.system.dal.mysql.process.ProcessUserMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见:https://www.cf.com/MyBatis/x-plugins/
-->
<delete id="deleteUserByProcessId" parameterType="Long">
DELETE FROM process_user
WHERE process_id = #{processId};
</delete>
</mapper>
@@ -2,6 +2,7 @@ package com.cf.imes.module.system.service.process;
import com.cf.imes.module.system.controller.admin.process.vo.process.ProcessPageReqVO;
import com.cf.imes.module.system.controller.admin.process.vo.process.ProcessSaveReqVO;
import com.cf.imes.module.system.controller.admin.process.vo.process.ProcessUserSaveReqVO;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@@ -39,7 +40,7 @@ public class ProcessServiceImplTest extends BaseDbUnitTest {
@Test
public void testCreateProcess_success() {
// 准备参数
ProcessSaveReqVO createReqVO = randomPojo(ProcessSaveReqVO.class).setId(null);
ProcessUserSaveReqVO createReqVO = randomPojo(ProcessUserSaveReqVO.class).setId(null);
System.out.println(createReqVO);
// 调用
@@ -57,7 +58,7 @@ public class ProcessServiceImplTest extends BaseDbUnitTest {
ProcessDO dbProcess = randomPojo(ProcessDO.class);
processMapper.insert(dbProcess);// @Sql: 先插入出一条存在的数据
// 准备参数
ProcessSaveReqVO updateReqVO = randomPojo(ProcessSaveReqVO.class, o -> {
ProcessUserSaveReqVO updateReqVO = randomPojo(ProcessUserSaveReqVO.class, o -> {
o.setId(dbProcess.getId()); // 设置更新的 ID
});
@@ -71,7 +72,7 @@ public class ProcessServiceImplTest extends BaseDbUnitTest {
@Test
public void testUpdateProcess_notExists() {
// 准备参数
ProcessSaveReqVO updateReqVO = randomPojo(ProcessSaveReqVO.class);
ProcessUserSaveReqVO updateReqVO = randomPojo(ProcessUserSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> processService.updateProcess(updateReqVO), PROCESS_NOT_EXISTS);