diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index a3ebf293b..a826bff96 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -55,7 +55,7 @@ public interface ErrorCodeConstants { ErrorCode RAW_GOODS_NOT_EXISTS = new ErrorCode(1_002_029_005, "生产单中未用到此板材"); ErrorCode ORDER_STATUS_ERROR = new ErrorCode(1_002_029_006, "生产单不允许删除"); ErrorCode APP_TOKEN_ERROR = new ErrorCode(1_002_029_007, "token获取失败"); - ErrorCode PLATE_PLAN_DATA_ERROR = new ErrorCode(1_002_029_008, "板材生产数据获取错误或此单为空单"); + ErrorCode PLATE_PLAN_DATA_ERROR = new ErrorCode(1_002_029_008, "板材生产数据获取错误或此单不存在"); ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误"); ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_010, "柜体数据获取错误"); ErrorCode GOODS_DATA_ERROR = new ErrorCode(1_002_029_011, "商品信息获取错误"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index 4b46dcae8..6806ceed4 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -237,7 +237,7 @@ public class OrderController { @Parameter(name = "type", description = "文件类型", required = true) }) @PreAuthorize("@ss.hasPermission('production:manager-list:create')") - @OperateLog(type = EXPORT) + @OperateLog(type = IMPORT) public void exportTest(@RequestPart("file") MultipartFile file, @RequestParam(value = "type", required = false, defaultValue = "true") Integer type, HttpServletResponse response) throws IOException { @@ -248,7 +248,7 @@ public class OrderController { // 读取文件 excelReadUtil.setErr(0); Map map = excelReadUtil.read(file); - System.out.println(" map " + map); +// System.out.println(" map " + map); System.err.println(excelReadUtil.isErr()); // 判断是否读取有误 if (excelReadUtil.isErr() == -1) { // 文件为空 @@ -256,7 +256,7 @@ public class OrderController { return; }else if (excelReadUtil.isErr() > 0) { // 返回文件 - System.out.println("(Map) " + (Map) map.get("order")+ " , (List)" +(List) map.get("plate")); +// System.out.println("(Map) " + (Map) map.get("order")+ " , (List)" +(List) map.get("plate")); ExcelWriterUtil.write(response, (Map) map.get("order"), (List) map.get("plate"), orderService.getSavePath() + File.separator + "生产单Excel导入错误导出模板.xlsx"); return; } else { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateGoodsIdVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateGoodsIdVO.java new file mode 100644 index 000000000..2a8253ac5 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/PlateGoodsIdVO.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.executor.controller.admin.plate.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 生产单表 order Response VO") +@Data +@ExcelIgnoreUnannotated +public class PlateGoodsIdVO { + + @Schema(description = "板件 ID", example = "32523") + private Long id; + + @Schema(description = "生产单号", example = "11087") + private Long orderId; + + @Schema(description = "商品 ID", example = "14195") + private Long goodsId; + + @Schema(description = "是否删除", example = "1") + private Integer deleted; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java index 8d3fbeb3c..45bfe4a9d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java @@ -60,4 +60,16 @@ public interface GoodsMapper extends BaseMapperX { wrapper.eq(GoodsDO::getDeleted, 1); return update(wrapper); } -} \ No newline at end of file + + // 通过orderId查找板材 + default List selectGoodsByOrderId(Long orderId, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(GoodsDO::getOrderId, orderId) + .eq(GoodsDO::getDeleted, 0) + .eq(GoodsDO::getOrganId, organId)); + } + + // 删板材,批量 + void updateDeletedById(@Param("ids") List ids, @Param("deleted") Integer deleted, @Param("organId") Long organId); + + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java index 5e53effbf..257cef790 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java @@ -29,10 +29,9 @@ public interface OrderMapper extends BaseMapperX { default PageResult selectPage(OrderPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(OrderDO::getParentNo, reqVO.getParentNo()) - .likeIfPresent(OrderDO::getId, String.valueOf(reqVO.getId()) != null ? "" : String.valueOf(reqVO.getId())) + .likeIfPresent(OrderDO::getId, reqVO.getId() == null ? null : String.valueOf(reqVO.getId())) .betweenIfPresent(OrderDO::getDeliveryDate, reqVO.getDeliveryDate()) .betweenIfPresent(OrderDO::getOrderDate, reqVO.getOrderDate()) - .eqIfPresent(OrderDO::getId, reqVO.getId()) .eqIfPresent(OrderDO::getOrderType, reqVO.getOrderType()) .eqIfPresent(OrderDO::getOrderSort, reqVO.getOrderSort()) .eqIfPresent(OrderDO::getDataType, reqVO.getDataType()) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java index e35d47934..53d0baa94 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java @@ -4,20 +4,15 @@ import java.util.*; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.PageResult; -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.mapper.BaseMapperX; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO; -import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsRespVO; -import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; -import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; import org.apache.ibatis.annotations.Mapper; import com.cf.imes.module.executor.controller.admin.orderParts.vo.*; import org.apache.ibatis.annotations.Param; -import org.apache.poi.ss.formula.functions.T; + import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; @@ -49,22 +44,6 @@ public interface OrderPartsMapper extends BaseMapperX { .orderByDesc(OrderPartsDO::getId)); } - default OrderPartsImportRespVO importOrderPartsList(List importOrderParts) { - OrderPartsImportRespVO respVO = OrderPartsImportRespVO.builder().createOrderParts(new ArrayList()) - .updateOrderParts(new ArrayList<>()).failureOrderParts(new LinkedHashMap<>()).build(); - importOrderParts.forEach(orderParts -> { - try{ - OrderPartsDO orderPartsDO = BeanUtils.toBean(orderParts, OrderPartsDO.class); - insert(orderPartsDO); - orderParts.setId(orderPartsDO.getId()); - respVO.getCreateOrderParts().add(orderParts); - }catch (ServiceException ex){ - respVO.getFailureOrderParts().put(orderParts.getName(), ex.getMessage()); - } - }); - System.err.println("OrderPartsImportRespVO " + respVO); - return respVO; - } IPage selectProductList(@Param("page") IPage page , @Param("orderId")Long orderId, @Param("roomId")Long roomId , @Param("bodyId")Long bodyId,@Param("organId")Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java index 9b9aa733e..6eeba3dac 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java @@ -117,4 +117,7 @@ public interface PlateMapper extends BaseMapperX { List selectPlateIdListByBodyId(@Param("bodyId") Long bodyId, @Param("organId") Long organId); List selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId); + + // 根据需要删除的小板id查找具体信息 + List selectPlateGoodsListByList(@Param("plates") List goodsIdList, @Param("orderId") Long orderId, @Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index 9cc48478a..a97900695 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -11,6 +11,7 @@ import com.cf.imes.framework.datapermission.core.util.DataPermissionUtils; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; +import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsIdVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; @@ -65,6 +66,7 @@ import java.time.format.DateTimeParseException; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; @@ -211,7 +213,7 @@ public class OrderServiceImpl implements OrderService { rawGoodsMapper.updateOrderDeleted(orderId, OrderDeletedEnum.NOT_DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); orderProcessMapper.updateOrderDeleted(orderId, OrderDeletedEnum.NOT_DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); processStepMapper.updateOrderDeleted(orderId, OrderDeletedEnum.NOT_DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); - ; + } private void validateOrderExists(Long id, Long organId) { @@ -227,6 +229,7 @@ public class OrderServiceImpl implements OrderService { @Override public PageResult getOrderPage(OrderPageReqVO pageReqVO) { + return orderMapper.selectPage(pageReqVO.setOrganId(SecurityFrameworkUtils.getLoginUser().getOrganId())); } @@ -247,7 +250,7 @@ public class OrderServiceImpl implements OrderService { index = OrderDeletedEnum.NOT_DELETED.getStatus(); else index = OrderDeletedEnum.DELETED.getStatus(); - System.out.println(" deleted " + deleted); + return index; } @Override @@ -319,16 +322,29 @@ public class OrderServiceImpl implements OrderService { // 校验存在 validateOrderBodyExists(orderId, bodyId, SecurityFrameworkUtils.getLoginUser().getOrganId()); // 删除 - // orderBodyMapper.deleteAllByOrderId(orderId, bodyId); + // orderBodyMapper.deleteAllByOrderId(orderId, bodyId); 物理删除 orderBodyMapper.updateDeletedById(bodyId, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); orderGroupMapper.updateDeletedById(bodyId, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); // 先查再改 List plateDOList = plateMapper.selectPlateIdListByBodyId(bodyId, SecurityFrameworkUtils.getLoginUser().getOrganId()); - System.out.println(" plateDOList " + plateDOList); + // 删除小板 plateMapper.updateDeletedById(plateDOList, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); + // 删除大板 + List goodsIdList = plateMapper.selectPlateGoodsListByList(plateDOList, orderId, SecurityFrameworkUtils.getLoginUser().getOrganId()); + Map> goodsIdMap = goodsIdList.stream().collect(Collectors.groupingBy(PlateGoodsIdVO::getGoodsId)); + List goodsIdDeleted = new ArrayList<>(); + goodsIdMap.forEach((k,v)->{ + for(int i=0;i partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyId, SecurityFrameworkUtils.getLoginUser().getOrganId()); - System.out.println(" partsList " + partsList); orderPartsMapper.updateDeletedById(partsList, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); }); } @@ -401,7 +417,6 @@ public class OrderServiceImpl implements OrderService { .setId(plateGoods) .setGoodsId(String.valueOf(goodsId)); // 判断是否存在raw_goods_id - System.out.println("goodsDO.getGoodsId() " + goodsDO.getGoodsId()); if (goodsDO.getGoodsId() != null) { plateGoodDO.setGoodsId(goodsDO.getGoodsId()); }else { @@ -413,7 +428,7 @@ public class OrderServiceImpl implements OrderService { } map.put("goodsDO", goodsLists); map.put("plateGoodDOLists", plateGoodLists); - System.err.println(" map " + map); +// System.err.println(" map " + map); return map; } @@ -437,7 +452,7 @@ public class OrderServiceImpl implements OrderService { return futureDate; } catch (DateTimeParseException e) { // 在实际应用中应该有更详细的错误处理逻辑 - System.err.println("Error parsing future date: " + e.getMessage()); +// System.err.println("Error parsing future date: " + e.getMessage()); } } return date; @@ -497,9 +512,7 @@ public class OrderServiceImpl implements OrderService { Matcher matcher = pattern.matcher(phoneNumber); // 判断手机号是否匹配正则表达式 - if (matcher.matches()) { - System.out.println("手机号合法"); - } else { + if (!matcher.matches()) { throw exception(PHONE_NOT_LAWFUL); } } @@ -517,7 +530,6 @@ public class OrderServiceImpl implements OrderService { @Override public void importExcelData(OrderDO orderDO, List list) { orderDO.setId((Long) snowFlakeGenerator.nextId(null)); - System.out.println(excelTypeRealize.changeDate(list, orderDO.getId())); Map> listMap = excelTypeRealize.changeDate(list, orderDO.getId()); List rawGoodsDO = (List) listMap.get("rawGoodsDOS"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java index e404b7dd8..c01f71e36 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java @@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO; import com.cf.imes.module.executor.dal.dataobject.processStepItem.OrderProcessStepItemDO; +import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; @@ -79,6 +81,9 @@ public class OrderProcessServiceImpl implements OrderProcessService { @Resource private PlateMapper plateMapper; + @Resource + private GoodsMapper goodsMapper; + private static Integer INDEX = 0; @Override @@ -116,15 +121,14 @@ public class OrderProcessServiceImpl implements OrderProcessService { ProcessStepDO processStepDO = BeanUtils.toBean(processRespDTO, ProcessStepDO.class).setId(processStepDOId).setOrderId(createReqVO.getOrderId()) .setStatus(false).setProcessinfoId(processRespDTO.getId()).setOrderProcessId(orderProcess.getId()).setFinishTime(null).setSort(INDEX++);// 计划日期没有填写 processStepDOS.add(processStepDO); + // 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表 - if (processRespDTO.getType() == ProcessTypeEnum.TYPE_SEVEN.getStatus()) { - List orderGroupDOS = orderGroupMapper.getOrderGroupByOrderId(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId()); if (orderGroupDOS.size() != 0) { // 有加工组 for (int i = 0; i < orderGroupDOS.size(); i++) { OrderProcessStepItemDO orderProcessStepItemDO = OrderProcessStepItemDO.builder() - .name(orderGroupDOS.get(i).getName()) + .name(orderGroupDOS.get(i).getName()) // 加工组的名称 .processStepId(processStepDOId) .orderProcessId(orderProcessId) .status(false) @@ -135,7 +139,23 @@ public class OrderProcessServiceImpl implements OrderProcessService { orderProcessStepItemDOS.add(orderProcessStepItemDO); } } - }else { + } else if (processRespDTO.getType() == ProcessTypeEnum.TYPE_EIGHT.getStatus()) { // 若工序类型为板材 + List goodsDOS = goodsMapper.selectGoodsByOrderId(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId()); + if (goodsDOS.size() != 0) { // 有板材 + for (int i = 0; i < goodsDOS.size(); i++) { + OrderProcessStepItemDO orderProcessStepItemDO = OrderProcessStepItemDO.builder() + .name(goodsDOS.get(i).getGoodsName()) // 板块的名称 + .processStepId(processStepDOId) + .orderProcessId(orderProcessId) + .status(false) + .groupName(processListReqDTO.getName()) + .bodyId(goodsDOS.get(i).getId()) + .groupId(0L) + .build(); + orderProcessStepItemDOS.add(orderProcessStepItemDO); + } + } + } else { List orderBodyDOS = orderBodyMapper.getOrderBodyByOrderId(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId()); for (int i = 0; i < orderBodyDOS.size(); i++) { OrderProcessStepItemDO orderProcessStepItemDO = OrderProcessStepItemDO.builder() @@ -194,7 +214,7 @@ public class OrderProcessServiceImpl implements OrderProcessService { @Override public OrderProcessDO getOrderProcess(Long orderId) { - return orderProcessMapper.selectOne("order_id", orderId ,"organ_id",getUserOrganId()); + return orderProcessMapper.selectOne("order_id", orderId, "organ_id", getUserOrganId()); } @Override diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java index 1c67d9cf7..2fed9a3f0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java @@ -53,7 +53,6 @@ public class ApiDataAchieve { jsonPlatesData.put("order_no", orderNo);//生产单号需要传入赋值 jsonPlatesData.put("format", "json"); JSONObject dataPlates = apiDataProduction.getApiOrderMessage(token, jsonPlatesData); - System.out.println(" dataPlates " + dataPlates); if (!dataPlates.getString("err_code").equals("0")) { throw exception(PLATE_PLAN_DATA_ERROR); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java index 75d36be0a..bca433831 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java @@ -46,6 +46,8 @@ public class ApiTypeRealize { private Integer num = 0; + private Integer specialShapedNum = 0; + private Integer groupNum = 0; private final static Integer X = 0; @@ -77,23 +79,21 @@ public class ApiTypeRealize { OrderDO orderDO = orderInfoChange(dataPlates, orderId, orderNo); List order = new ArrayList<>(); order.add(orderDO); + // 商品信息数据 信息以全 Map> goodsInfoChange = rawGoodsInfoChange(dataGoods, orderId, dataBlocks); -// System.out.println(" goodsInfoChange " + goodsInfoChange); - List goodsDO = (List) goodsInfoChange.get("goodsDOS").values().stream() - .collect(Collectors.toList()); + List goodsDO = (List) goodsInfoChange.get("goodsDOS").values().stream().collect(Collectors.toList()); map.put("goodsDO", goodsDO); - List rawGoodsDO = (List) goodsInfoChange.get("rawGoodsDOS").values().stream() - .collect(Collectors.toList()); + List rawGoodsDO = (List) goodsInfoChange.get("rawGoodsDOS").values().stream().collect(Collectors.toList()); map.put("rawGoodsDO", rawGoodsDO); + // 柜体信息 少异形数量、板材数量 Map bodyInfoChange = bodyInfoChange(dataBody, orderId); -// System.out.println(" bodyInfoChange " + bodyInfoChange); + // 加工组 少异形数量、板材数量 Map> group = groupInfoChange(dataModule, orderId, bodyInfoChange); Map orderGroupDO = (Map) group.get("orderGroup"); - map.put("groupDO", orderGroupDO.values().stream().collect(Collectors.toList())); Map> groupLists = (Map>) group.get("lists"); // 加工组中包含的板件、配件id // 配件 Map> partsDO = partsInfoChange(dataParts, orderId, @@ -120,6 +120,7 @@ public class ApiTypeRealize { Map bodyItemsPlates = (Map) platesDO.get("bodyInfos"); platesItems = orderPartsChange(orderGroupDO, groupLists, platesItems);// item补充 itemsList.addAll(platesItems.values()); + map.put("groupDO", groupAddUnregularNum(itemsList, orderPlatesDO, orderGroupDO).values().stream().collect(Collectors.toList())); // System.out.println("生产单数据 " + orderDO+ " 商品信息1 " + goodsDO + " 商品信息2 " // + rawGoodsDO + " 板材信息 " + new ArrayList<>(orderPlatesDO.values()) // + " 配件信息 " + new ArrayList<>(orderPartsDO.values()) @@ -128,7 +129,6 @@ public class ApiTypeRealize { // + " 配件Item " + partsItems + " 板材Item " + platesItems); map.put("orderDO", order); map.put("itemDO", itemsList); -// System.out.println(" bodyItemsPlates " + bodyItemsPlates); map.put("bodyDO", bodyItemsPlates.values().stream().collect(Collectors.toList())); return map; } @@ -136,21 +136,22 @@ public class ApiTypeRealize { /** * bodyInfoChange: BoxId body 暂时未用 - * @param orderGroupDO: ModuleID group - * @param groupLists: ModuleID 板材、配件id - * @param items: ItemID item + * + * @param orderGroupDO: ModuleID group + * @param groupLists: ModuleID 板材、配件id + * @param items: ItemID item * @return Map * @author Administrator * @date 2024/5/8 */ public Map orderPartsChange(Map orderGroupDO, - Map> groupLists, Map items) { + Map> groupLists, Map items) { groupLists.forEach((k, v) -> { v.forEach(v1 -> { if (items.get(v1) != null) { - if (items.containsKey(v1) && (items.get(v1).getGroupId() == null || items.get(v1).getGroupId() == 0)) { + if (items.get(v1).getGroupId() == null || items.get(v1).getGroupId() == 0) { items.get(v1).setGroupId(orderGroupDO.get(k).getId()); } else { // 如果groupId已存在值(即不为null),则创建一个新的OrderItemDO对象 OrderItemDO item = OrderItemDO.builder() @@ -166,7 +167,7 @@ public class ApiTypeRealize { .plateId(items.get(v1).getPlateId()) .num(items.get(v1).getNum()) .build(); - items.put(orderGroupDO.get(k).getId(), item); //再复查 + items.put(item.getId(), item); //再复查 } if (items.get(v1).getPlateId() != null) @@ -177,10 +178,39 @@ public class ApiTypeRealize { groupNum = 0; }); - System.err.println(" item " + items); return items; } + /** + * 加工组异形板赋值 + */ + public Map groupAddUnregularNum(List itemsList, Map orderPlatesDO, Map orderGroupDO) { + + Map> groupPlate = itemsList.stream().collect(Collectors.groupingBy(OrderItemDO::getGroupId)); + List orderItemDOList = orderPlatesDO.values().stream().collect(Collectors.toList()); + Map plateDOMap = orderItemDOList.stream().collect(Collectors.toMap(PlateDO::getId, plate -> plate)); + List orderGroupDOList = orderGroupDO.values().stream().collect(Collectors.toList()); + Map orderGroupDOMap = orderGroupDOList.stream().collect(Collectors.toMap(OrderGroupDO::getId, v -> v)); + + groupPlate.forEach((k, v) -> { // k 加工组id + + v.forEach(item -> { + if (plateDOMap.get(item.getPlateId()) != null) { + if (plateDOMap.get(item.getPlateId()).getIsSpecialShaped()) { // 异形相加 + specialShapedNum++; +// System.out.println(k + " 对应 " + specialShapedNum); + } + } + }); + if (orderGroupDOMap.get(k) != null) {// m 加工组 + orderGroupDOMap.get(k).setUnregularNum(specialShapedNum); + } + ; + specialShapedNum = 0; + }); + return orderGroupDO; + } + /** * 加工组 信息转换 */ @@ -293,7 +323,7 @@ public class ApiTypeRealize { * @author Administrator * @date 2024/4/30 */ - public Map> rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId , JSONObject dataBlocks) { + public Map> rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId, JSONObject dataBlocks) { Map> map = new HashMap<>(); Map rawGoodsDOS = new HashMap<>(); Map goodsDOS = new HashMap<>(); @@ -380,7 +410,6 @@ public class ApiTypeRealize { } } -// System.out.println(" bodyInfos " + bodyInfos); return bodyInfos; } @@ -410,7 +439,7 @@ public class ApiTypeRealize { Map> map = new HashMap<>(); Map partsInfos = new HashMap<>(); Map partsItem = new HashMap<>(); - Map remarks =new HashMap<>(); + Map remarks = new HashMap<>(); if (value != null && !value.isEmpty()) { JSONArray partsLists = value.getJSONArray("List"); @@ -435,7 +464,7 @@ public class ApiTypeRealize { .isComposite(parts.getBoolean("IsComposite")) .remark(parts.getString("Remark")) .build(); - remarks.put(parts.getLong("ItemID"),partsRemarkChange(parts, orderId, partsId)); + remarks.put(parts.getLong("ItemID"), partsRemarkChange(parts, orderId, partsId)); partsInfos.put(parts.getLong("ItemID"), partsInfo); // item 明细 @@ -480,8 +509,8 @@ public class ApiTypeRealize { * 板材信息转换 写表 Integer指板材的ItemID板id 加一个板材自定义编号 */ private Map> platesInfoChange(JSONObject value, JSONObject dataPlates, Long orderId, - Map goodsDOMap, Map bodyInfos, - JSONObject dataBlocks) { + Map goodsDOMap, Map bodyInfos, + JSONObject dataBlocks) { // 板材 写ES Map plateDetail = platesDetailChange(value); @@ -504,12 +533,16 @@ public class ApiTypeRealize { plate.getString("BoardType")) .getData().getValue()); Long plateId = (Long) identifierGenerator.nextId(null); + + String remarkJson = plate.getString("RemarkJson").replace("[", "").replace("]", ""); + String remark = remarkJson != null && !remarkJson.trim().isEmpty() ? remarkJson : ""; + PlateDO plateInfo = PlateDO.builder() .id(plateId) .orderId(orderId) .name(plate.getString("BoardName")) // .plateNo(plate.getString("CustBlockNo")) - .plateNo((obtainingTime)+ Long.toString(plateNo).substring(2)) + .plateNo((obtainingTime) + Long.toString(plateNo).substring(2)) .type(type) .goodsId(goodsDOMap.get(plate.getLong("GoodsID")) != null @@ -546,7 +579,7 @@ public class ApiTypeRealize { .isSculpt(plate.getBoolean("IsModel")) .isSpecialShaped(plate.getBoolean("UnRegular")) .isCancel(false) - .remark(plate.getString("RemarkJson")) + .remark(remark) .build(); // item 明细 @@ -591,23 +624,34 @@ public class ApiTypeRealize { } List platesList = platesItem.values().stream().collect(Collectors.toList()); + List plateDOList = platesInfos.values().stream().collect(Collectors.toList()); + Map> platesDetail = platesList.stream() - .collect(Collectors.groupingBy(OrderItemDO::getBodyId)); + .collect(Collectors.groupingBy(OrderItemDO::getBodyId)); // 根据柜体分组 + + Map plateDOMap = plateDOList.stream() + .collect(Collectors.toMap(PlateDO::getId, plate -> plate)); // 板件id为key + // 遍历platesDetail platesDetail.forEach((k, v) -> { - Integer specialShapedNum = 0; + v.forEach(item -> { num++; + + if (plateDOMap.get(item.getPlateId()).getIsSpecialShaped()) { // 异形相加 + specialShapedNum++; + } }); bodyInfos.forEach((n, m) -> { if (k == m.getId()) { m.setPlateNum(num); + m.setUnregularNum(specialShapedNum); } }); num = 0; + specialShapedNum = 0; }); -// System.err.println(bodyInfos); map.put("platesInfos", platesInfos); map.put("platesItems", platesItem); map.put("plateDetail", plateDetail); @@ -705,7 +749,7 @@ public class ApiTypeRealize { } } else { - System.out.println("JSON 数据中没有订单信息(Orders 数组为空)。"); +// System.out.println("JSON 数据中没有订单信息(Orders 数组为空)。"); } return plateDetails; @@ -780,7 +824,7 @@ public class ApiTypeRealize { .depth(Double.valueOf(hole.getString("Depth"))) .build()); } catch (Exception e) { - System.out.println("HoleDetail " + hole); +// System.out.println("HoleDetail " + hole); } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java index 37a5aa43b..0b4c134d4 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java @@ -166,7 +166,7 @@ public class ExcelTypeRealize { Long groupId = (Long) snowFlakeGenerator.nextId(null); // 板数量 final Double[] plateCountByCombination = {0.0}; - OrderGroupDO orderGroupDO = OrderGroupDO.builder().id(groupId).orderId(orderId).orderId(organId).bodyId(bodyId) + OrderGroupDO orderGroupDO = OrderGroupDO.builder().id(groupId).orderId(orderId).organId(organId).bodyId(bodyId) .groupTypeId(groupTypeId).groupTypeName(synthesis).name(combinationName).width(0.0).height(0.0) .depth(0.0).multiNum(0).plateNum(0).unregularNum(0).filename("无").remark("无").build(); @@ -232,11 +232,15 @@ public class ExcelTypeRealize { }); orderGroupDO.setPlateNum(plateCountByCombination[0].intValue()); - orderGroupDOS.add(orderGroupDO); + if (orderGroupDO.getName() != null && !orderGroupDO.getName().trim().isEmpty()) { + orderGroupDOS.add(orderGroupDO); + } }); }); orderBodyDO.setPlateNum(Integer.valueOf(plateCountByCabinetName[0].intValue())); - orderBodyDOS.add(orderBodyDO); + if (orderBodyDO.getName() != null && !orderBodyDO.getName().trim().isEmpty()) { + orderBodyDOS.add(orderBodyDO); + } }); }); @@ -251,6 +255,7 @@ public class ExcelTypeRealize { map.put("orderModuleExtraDOS", orderModuleExtraDOS); map.put("orderModelDOS", orderModelDOS); map.put("orderPartsRemarks", orderPartsRemarks); + System.out.println(" orderGroupDOS " + orderGroupDOS); return map; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml index da23f80cc..c9c8cdac7 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml @@ -41,4 +41,14 @@ + + + + UPDATE order_goods + SET deleted = #{deleted} + WHERE id IN + + #{id} + AND organ_id = #{organId} + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml index 0a468f346..3f7241f3a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml @@ -46,6 +46,7 @@ select distinct + op.id, op.name, op.open_door_type, op.height, @@ -311,4 +312,16 @@ SELECT plate_id FROM order_item WHERE body_id = #{bodyId} AND organ_id = #{organId} + + \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java index de2db15e1..1ae4987de 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java @@ -52,7 +52,7 @@ public class PlateServiceImpl implements PlateService { } // 判断板材是否存在 PlateDO existPlate = plateMapper.selectByGoodID(createReqVO.getGoodsId(), OrganContextHolder.getOrganId()); - System.out.println(" existPlate " + existPlate); +// System.out.println(" existPlate " + existPlate); if (existPlate != null){ throw exception(ErrorCodeConstants.PLATE_EXISTS); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/constants/permission/InternalRoleConstants.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/constants/permission/InternalRoleConstants.java new file mode 100644 index 000000000..2396cc8bc --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/constants/permission/InternalRoleConstants.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.system.constants.permission; + +/** + * 内部角色常量 + * + * @author Gqr + * @since 2024/6/22 11:44 + */ +public final class InternalRoleConstants { + + /** + * 组织管理员角色id + */ + public static final Long ORGAN_ADMIN_ROLE_ID = 165L; + + + /** + * 组织员工角色id + */ + public static final Long ORGAN_STAFF_ROLE_ID = 166L; + + /** + * 内置角色组织id + */ + public static final Long INTERNAL_ROLE_ORGAN_ID = 0L; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java index 84177ba6a..5f443f64f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/AuthController.java @@ -8,7 +8,6 @@ import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import com.cf.imes.framework.security.config.SecurityProperties; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; -import com.cf.imes.module.system.controller.admin.auth.vo.*; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSocialLoginReqVO; @@ -118,9 +117,7 @@ public class AuthController { roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 // 1.3 获得菜单列表 - //Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); Set menuIds = permissionService.getRoleMenuListByRoleId2(convertSet(roles, RoleDO::getId)); - //List menuList = menuService.getMenuList(menuIds); List menuList = menuService.getMenuList1(menuIds); menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java index 1cfe3e339..95655f945 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java @@ -6,6 +6,7 @@ import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleUserReqVO; @@ -25,8 +26,6 @@ import java.util.Objects; import java.util.Set; import static com.cf.imes.framework.common.pojo.CommonResult.success; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_ADMIN_ROLE_ID; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_STAFF_ROLE_ID; /** * 权限 Controller,提供赋予用户、角色的权限的 API 接口 @@ -56,7 +55,8 @@ public class PermissionController { @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - if(!loginUser.getIsSupAdmin() && ( Objects.equals(reqVO.getRoleId(), ORGAN_ADMIN_ROLE_ID) || Objects.equals(reqVO.getRoleId(), ORGAN_STAFF_ROLE_ID))) { + boolean isOrganRole = Objects.equals(reqVO.getRoleId(), InternalRoleConstants.ORGAN_ADMIN_ROLE_ID) || Objects.equals(reqVO.getRoleId(), InternalRoleConstants.ORGAN_STAFF_ROLE_ID); + if(!loginUser.getIsSupAdmin() && (isOrganRole)) { throw new ServiceException(11541, "内置角色无权修改菜单权限"); } if(Objects.equals(reqVO.getRoleId(), 1L)) { @@ -67,16 +67,14 @@ public class PermissionController { throw new ServiceException(11541, "无法修改自身的角色菜单权限"); } - if(Objects.equals(reqVO.getRoleId(), ORGAN_ADMIN_ROLE_ID) || Objects.equals(reqVO.getRoleId(), ORGAN_STAFF_ROLE_ID)) { - } else { + if (!isOrganRole) { // 开启多组织的情况下,需要过滤掉未开通的菜单 organService.handleOrganMenu(menuIds -> { reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId)); }); } - Long organId = reqVO.getOrganId() == null? OrganContextHolder.getOrganId(): reqVO.getOrganId(); // 执行菜单的分配 - permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds(), organId); + permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds(), reqVO.getOrganId()); return success(true); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/RoleController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/RoleController.java index 7ff7fc762..6c68daa6b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/RoleController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/RoleController.java @@ -10,7 +10,7 @@ import com.cf.imes.framework.excel.core.util.ExcelUtils; import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; -import com.cf.imes.module.system.controller.admin.permission.vo.role.*; +import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.controller.admin.permission.vo.role.RolePageReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleRespVO; import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; @@ -32,12 +32,9 @@ import java.io.IOException; import java.util.Comparator; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import static com.cf.imes.framework.common.pojo.CommonResult.success; import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_ADMIN_ROLE_ID; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_STAFF_ROLE_ID; import static java.util.Collections.singleton; @Tag(name = "管理后台 - 角色") @@ -64,7 +61,7 @@ public class RoleController { @Operation(summary = "修改角色") @PreAuthorize("@ss.hasPermission('system:role:update')") public CommonResult updateRole(@Valid @RequestBody RoleSaveReqVO updateReqVO) { - if(Objects.equals(updateReqVO.getId(), ORGAN_ADMIN_ROLE_ID) || Objects.equals(updateReqVO.getId(), ORGAN_STAFF_ROLE_ID)) { + if (Objects.equals(updateReqVO.getId(), InternalRoleConstants.ORGAN_ADMIN_ROLE_ID) || Objects.equals(updateReqVO.getId(), InternalRoleConstants.ORGAN_STAFF_ROLE_ID)) { throw new ServiceException(11541, "内置角色无法修改"); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/permission/RoleMenuMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/permission/RoleMenuMapper.java index 36d2976df..f0ea7f69f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/permission/RoleMenuMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/permission/RoleMenuMapper.java @@ -3,7 +3,7 @@ package com.cf.imes.module.system.dal.mysql.permission; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.organ.core.aop.OrganIgnore; -import com.cf.imes.framework.organ.core.context.OrganContextHolder; +import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.dal.dataobject.permission.RoleMenuDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -11,8 +11,6 @@ import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_ADMIN_ROLE_ID; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_STAFF_ROLE_ID; @Mapper public interface RoleMenuMapper extends BaseMapperX { @@ -25,6 +23,19 @@ public interface RoleMenuMapper extends BaseMapperX { return selectList(RoleMenuDO::getRoleId, roleIds); } + /** + * 基于角色id列表和组织id查询角色菜单列表 + * + * @param roleIds + * @param organId + * @return + */ + default List selectListByRoleIdsAndOrganId(Collection roleIds, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(RoleMenuDO::getOrganId, organId) + .in(RoleMenuDO::getRoleId, roleIds)); + } + default List selectListByMenuId(Long menuId) { return selectList(RoleMenuDO::getMenuId, menuId); } @@ -44,9 +55,7 @@ public interface RoleMenuMapper extends BaseMapperX { } @OrganIgnore - default List selectListByRoleIdWithOrganAdmin(Collection roleIds){ - return selectList(new LambdaQueryWrapperX() - .eq(RoleMenuDO::getOrganId, 0) - .in(RoleMenuDO::getRoleId, roleIds)); + default List selectListByRoleIdWithOrganAdmin(Collection roleIds) { + return selectListByRoleIdsAndOrganId(roleIds, InternalRoleConstants.INTERNAL_ROLE_ORGAN_ID); } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java index 40f3c0dd4..0857310fc 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java @@ -14,12 +14,12 @@ import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.organ.config.OrganProperties; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.organ.core.util.OrganUtils; +import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganSimpleRespVO; import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganPageReqVO; import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganSaveReqVO; import com.cf.imes.module.system.controller.admin.user.vo.user.UserSaveReqVO; -import com.cf.imes.module.system.controller.admin.user.vo.user.UserSimpleRespVO; import com.cf.imes.module.system.convert.organ.OrganConvert; import com.cf.imes.module.system.dal.dataobject.permission.MenuDO; import com.cf.imes.module.system.dal.dataobject.permission.RoleDO; @@ -79,10 +79,6 @@ public class OrganServiceImpl implements OrganService { private MenuService menuService; @Resource private PermissionService permissionService; - //组织管理员角色id - public static final Long ORGAN_ADMIN_ROLE_ID = 165L; - //组织员工角色id - public static final Long ORGAN_STAFF_ROLE_ID = 166L; @Value("${chenfeng.organ.use-data-code:imes_prod}") private String useDataCode; @@ -150,7 +146,7 @@ public class OrganServiceImpl implements OrganService { // 创建角色 /*Long roleId = createRole(tenantPackage, organId);*/ // 创建用户,并分配角色 - Long userId = createUser(ORGAN_ADMIN_ROLE_ID, createReqVO, organId); + Long userId = createUser(InternalRoleConstants.ORGAN_ADMIN_ROLE_ID, createReqVO, organId); // 修改组织的管理员 organMapper.updateById(new OrganizationDO().setId(tenant.getId()).setContactUserId(userId)); }); @@ -243,7 +239,7 @@ public class OrganServiceImpl implements OrganService { OrganUtils.execute(organId, () -> { // 获得所有角色 List roles = roleService.getMeAndDefaultRoleList(); - roles.forEach(role -> Assert.isTrue(organId.equals(role.getOrganId()) || role.getOrganId().equals(0L), "角色({}/{}) 组织不匹配", + roles.forEach(role -> Assert.isTrue(organId.equals(role.getOrganId()) || role.getOrganId().equals(InternalRoleConstants.INTERNAL_ROLE_ORGAN_ID), "角色({}/{}) 组织不匹配", role.getId(), role.getOrganId(), organId)); // 兜底校验 // 重新分配每个角色的权限 roles.forEach(role -> { diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java index 2b8a97ddf..b90ce0250 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java @@ -15,6 +15,7 @@ import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleUserReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; import com.cf.imes.module.system.dal.dataobject.permission.MenuDO; @@ -53,8 +54,6 @@ import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.e import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet; import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; import static com.cf.imes.module.system.enums.ErrorCodeConstants.ROLE_ME_ERROR; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_ADMIN_ROLE_ID; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_STAFF_ROLE_ID; /** * 权限 Service 实现类 @@ -161,11 +160,22 @@ public class PermissionServiceImpl implements PermissionService { public void assignRoleMenu(Long roleId, Set menuIds, Long organId) { // 获得角色拥有菜单编号 Set dbMenuIds = null; - if (Objects.equals(roleId, ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, ORGAN_STAFF_ROLE_ID)) { + boolean isOrganRole = Objects.equals(roleId, InternalRoleConstants.ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, InternalRoleConstants.ORGAN_STAFF_ROLE_ID); + if (isOrganRole) { dbMenuIds = convertSet(roleMenuMapper.selectListByRoleIdWithOrganAdmin(List.of(roleId)), RoleMenuDO::getMenuId); }else { dbMenuIds = convertSet(roleMenuMapper.selectListByRoleId(roleId), RoleMenuDO::getMenuId); } + // 查询角色获取角色的组织id,如果没有传入组织id就跟角色的组织统一 + RoleDO role = roleService.getRole(roleId); + if (Objects.isNull(role)) { + throw new ServiceException(ErrorCodeConstants.ROLE_NOT_EXISTS); + } + // 前端没传或者查一次后切换了组织导致跟角色组织不一致的统一为角色的组织 + if (Objects.isNull(organId) || ObjectUtil.notEqual(role.getOrganId(), organId)) { + organId = role.getOrganId(); + } + final Long finalOrganId = organId; // 计算新增和删除的菜单编号 Set menuIdList = CollUtil.emptyIfNull(menuIds); @@ -177,10 +187,10 @@ public class PermissionServiceImpl implements PermissionService { RoleMenuDO entity = new RoleMenuDO(); entity.setRoleId(roleId); entity.setMenuId(menuId); - if (Objects.equals(roleId, ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, ORGAN_STAFF_ROLE_ID)) { - entity.setOrganId(0L); + if (isOrganRole) { + entity.setOrganId(InternalRoleConstants.INTERNAL_ROLE_ORGAN_ID); }else { - entity.setOrganId(organId); + entity.setOrganId(finalOrganId); } return entity; }; @@ -195,11 +205,11 @@ public class PermissionServiceImpl implements PermissionService { if (CollectionUtil.isNotEmpty(createMenuIds) || CollectionUtil.isNotEmpty(deleteMenuIds)) { CompletableFuture.runAsync(() -> { // 当前操作人和所操作的目标菜单机构不同时,清空MENU_ROLE_ID_LIST:目标机构id:菜单id的缓存 - if (ObjectUtil.notEqual(organId, currentOrganId)) { + if (ObjectUtil.notEqual(finalOrganId, currentOrganId)) { // 获取新增和删除菜单id的并集 Collection delMenuIds = CollUtil.union(createMenuIds, deleteMenuIds); // 构建批量删除的key集合 - Set delKeys = delMenuIds.stream().map(menuId -> String.format(String.valueOf(new StringBuffer(RedisKeyConstants.MENU_ROLE_ID_LIST).append(":%s:%s")), organId, menuId)).collect(Collectors.toSet()); + Set delKeys = delMenuIds.stream().map(menuId -> String.format(String.valueOf(new StringBuffer(RedisKeyConstants.MENU_ROLE_ID_LIST).append(":%s:%s")), finalOrganId, menuId)).collect(Collectors.toSet()); Long batchDelNum = redisTemplate.delete(delKeys); log.info("[assignRoleMenu] 批量删除redis[MENU_ROLE_ID_LIST]数量:{}", batchDelNum); } @@ -244,7 +254,7 @@ public class PermissionServiceImpl implements PermissionService { } // 如果是非管理员的情况下,获得拥有的菜单编号 List from = null; - if(roleIds.contains(ORGAN_ADMIN_ROLE_ID) || roleIds.contains(ORGAN_STAFF_ROLE_ID)) { + if(roleIds.contains(InternalRoleConstants.ORGAN_ADMIN_ROLE_ID) || roleIds.contains(InternalRoleConstants.ORGAN_STAFF_ROLE_ID)) { from = roleMenuMapper.selectListByRoleIdWithOrganAdmin(roleIds); }else { from = roleMenuMapper.selectListByRoleId(roleIds); @@ -264,9 +274,13 @@ public class PermissionServiceImpl implements PermissionService { if (roleService.hasAnySuperAdmin(roleIds)) { return convertSet(menuService.getMenuList(), MenuDO::getId); } - // 如果是非管理员的情况下,获得拥有的菜单编号 - List from = roleMenuMapper.selectListByRoleId(roleIds); - return convertSet(from, RoleMenuDO::getMenuId); + if (roleIds.contains(InternalRoleConstants.ORGAN_ADMIN_ROLE_ID)) { + // 组织管理员不限制组织id + return convertSet(roleMenuMapper.selectListByRoleId(roleIds), RoleMenuDO::getMenuId); + } else { + // 普通成员只能看组织id下的菜单 + return convertSet(roleMenuMapper.selectListByRoleIdsAndOrganId(roleIds, OrganContextHolder.getOrganId()), RoleMenuDO::getMenuId); + } } @Override diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java index b0efa93ee..982e588ed 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java @@ -19,6 +19,7 @@ import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.infra.api.file.FileApi; import com.cf.imes.module.system.api.user.dto.OrganAdminUserRespDTO; +import com.cf.imes.module.system.constants.permission.InternalRoleConstants; import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import com.cf.imes.module.system.controller.admin.user.vo.user.UserImportExcelVO; @@ -48,13 +49,11 @@ import javax.annotation.Resource; import java.io.InputStream; import java.time.LocalDateTime; import java.util.*; -import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertList; import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet; import static com.cf.imes.module.system.enums.ErrorCodeConstants.USER_ME_ERROR; -import static com.cf.imes.module.system.service.organ.OrganServiceImpl.ORGAN_ADMIN_ROLE_ID; /** * 后台用户 Service 实现类 @@ -518,7 +517,7 @@ public class AdminUserServiceImpl implements AdminUserService { } MPJLambdaWrapperX wrapperX = new MPJLambdaWrapperX<>(); wrapperX.leftJoin(UserRoleDO.class, UserRoleDO::getUserId, AdminUserDO::getId) - .eq(UserRoleDO::getRoleId, ORGAN_ADMIN_ROLE_ID) + .eq(UserRoleDO::getRoleId, InternalRoleConstants.ORGAN_ADMIN_ROLE_ID) ; List organAdminUserRespDTOS = userMapper.selectJoinList(OrganAdminUserRespDTO.class, wrapperX); return organAdminUserRespDTOS;