mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
生产单新增
This commit is contained in:
+2
@@ -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, "工序用户存在");
|
||||
|
||||
}
|
||||
|
||||
+3
-14
@@ -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);
|
||||
}
|
||||
|
||||
+4
@@ -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;
|
||||
|
||||
-4
@@ -19,8 +19,4 @@ public class ProcessAndUserRespVO {
|
||||
@ExcelProperty("用户 ID")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
+3
-3
@@ -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
|
||||
|
||||
+5
-3
@@ -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);
|
||||
}
|
||||
+1
-1
@@ -29,7 +29,7 @@ public interface ProcessGroupService {
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateProcessGroup(@Valid ProcessListSaveReqVO updateReqVO);
|
||||
void updateProcessGroup(@Valid ProcessGroupSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除工序组表 process_group
|
||||
|
||||
+67
-15
@@ -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() : "[]";
|
||||
}
|
||||
}
|
||||
+24
-9
@@ -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
|
||||
|
||||
+16
-12
@@ -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>
|
||||
+4
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user