db/Ë«ÁÖлð¾æMESÊý¾Ý¿âÉè¼Æ.pdma.json
@@ -4,7 +4,7 @@ "avatar": "", "version": "4.9.4", "createdTime": "2025-3-10 16:38:19", "updatedTime": "2025-7-28 20:46:22", "updatedTime": "2025-8-7 10:18:16", "dbConns": [], "profile": { "default": { @@ -632,7 +632,7 @@ "#DDE5FF" ], "DDLToggleCase": "L", "menuWidth": "364px" "menuWidth": "293px" }, "entities": [ { @@ -11409,6 +11409,24 @@ "extProps": {}, "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC", "id": "3319292F-3CC9-4D3A-B20F-1736BFE8DE66" }, { "defKey": "republish_reason", "defName": "éåå¸åå ", "comment": "", "type": "", "len": "", "scale": "", "primaryKey": false, "notNull": false, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, "refDict": "", "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", "extProps": {}, "domain": "3E948CEC-3070-472C-AF92-F3CA11EC9D15", "id": "2AED1385-ED6E-470E-98C0-2F077E1A3187" } ], "correlations": [], src/main/java/org/jeecg/modules/base/controller/ShiftGroupController.java
@@ -9,8 +9,16 @@ import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.TranslateDictTextUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.base.entity.ShiftGroup; import org.jeecg.modules.base.entity.UserGroup; @@ -54,6 +62,11 @@ @Autowired private IUserGroupService userGroupService; @Autowired private ObjectMapper objectMapper; @Autowired private TranslateDictTextUtils translateDictTextUtils; /** * å页å表æ¥è¯¢ @@ -157,6 +170,28 @@ return Result.OK(shiftGroup); } @AutoLog(value = "çç»äººåä¿¡æ¯-éè¿äº§çº¿idæ¥è¯¢å ¶ä¸ææçç»") @ApiOperation(value="çç»äººåä¿¡æ¯-éè¿äº§çº¿idæ¥è¯¢å ¶ä¸ææçç»", notes = "çç»äººåä¿¡æ¯-éè¿äº§çº¿idæ¥è¯¢å ¶ä¸ææçç»") @GetMapping(value = "/queryShiftGroupByFactoryId") public Result<?> queryShiftGroupByFactoryId(@RequestParam(name="factoryId") String factoryId) { List<ShiftGroup> shiftGroupList = shiftGroupService.list(new LambdaQueryWrapper<ShiftGroup>() .eq(ShiftGroup::getFactoryId, factoryId) .eq(ShiftGroup::getDelFlag, CommonConstant.DEL_FLAG_0)); JSONArray array = new JSONArray(); for (ShiftGroup shiftGroup : shiftGroupList) { try { String json = objectMapper.writeValueAsString(shiftGroup); JSONObject item = JSONObject.parseObject(json); translateDictTextUtils.translateField("shiftId", shiftGroup.getShiftId(), item, "base_shift,shift_name,id"); translateDictTextUtils.translateField("shiftCode", shiftGroup.getShiftId(), item, "base_shift,shift_code,id"); array.add(item); } catch (JsonProcessingException e) { return Result.error("æ°æ®è½¬è¯å¤±è´¥ï¼"); } } return Result.OK(array); } /** * 导åºexcel * src/main/java/org/jeecg/modules/base/mapper/ShiftMapper.java
@@ -14,4 +14,5 @@ */ public interface ShiftMapper extends BaseMapper<Shift> { List<Shift> selectShiftListByFactoryId(String factoryId); } src/main/java/org/jeecg/modules/base/mapper/xml/ShiftMapper.xml
@@ -2,4 +2,12 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.base.mapper.ShiftMapper"> <select id="selectShiftListByFactoryId" resultType="org.jeecg.modules.base.entity.Shift"> select t1.*, t2.id as group_id from base_shift t1 inner join base_shift_group t2 on t1.id = t2.shift_id where t1.del_flag = 0 and t1.shift_status = '1' and t2.del_flag = 0 and t2.factory_id = #{factoryId} </select> </mapper> src/main/java/org/jeecg/modules/base/service/IShiftService.java
@@ -3,6 +3,8 @@ import org.jeecg.modules.base.entity.Shift; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * @Description: çæ¬¡ * @Author: jeecg-boot @@ -11,4 +13,5 @@ */ public interface IShiftService extends IService<Shift> { List<Shift> selectShiftListByFactoryId(String factoryId); } src/main/java/org/jeecg/modules/base/service/impl/ShiftServiceImpl.java
@@ -7,6 +7,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.Collections; import java.util.List; /** * @Description: çæ¬¡ * @Author: jeecg-boot @@ -16,4 +19,8 @@ @Service public class ShiftServiceImpl extends ServiceImpl<ShiftMapper, Shift> implements IShiftService { @Override public List<Shift> selectShiftListByFactoryId(String factoryId) { return this.baseMapper.selectShiftListByFactoryId(factoryId); } } src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
@@ -1,16 +1,26 @@ package org.jeecg.modules.mes.controller; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mes.dto.MesProductionWorkOrderRepublishRequest; import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest; import org.jeecg.modules.mes.entity.MesProductionWorkOrder; import org.jeecg.modules.mes.enums.ProductionWorkOrderStatus; import org.jeecg.modules.mes.service.IMesProductionWorkOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -18,144 +28,258 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.*; import java.util.stream.Collectors; /** * @Description: æäº§å·¥å * @Author: jeecg-boot * @Date: 2025-07-04 * @Version: V1.0 */ @Api(tags="æäº§å·¥å") * @Description: æäº§å·¥å * @Author: jeecg-boot * @Date: 2025-07-04 * @Version: V1.0 */ @Api(tags = "æäº§å·¥å") @RestController @RequestMapping("/mesproductionworkorder/mesProductionWorkOrder") @Slf4j public class MesProductionWorkOrderController extends JeecgController<MesProductionWorkOrder, IMesProductionWorkOrderService> { @Autowired private IMesProductionWorkOrderService mesProductionWorkOrderService; @Autowired private IMesProductionWorkOrderService mesProductionWorkOrderService; /** * å页å表æ¥è¯¢ * * @param mesProductionWorkOrder * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "æäº§å·¥å-å页å表æ¥è¯¢") @ApiOperation(value="æäº§å·¥å-å页å表æ¥è¯¢", notes="æäº§å·¥å-å页å表æ¥è¯¢") @GetMapping(value = "/list") public Result<IPage<MesProductionWorkOrder>> queryPageList(MesProductionWorkOrder mesProductionWorkOrder, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<MesProductionWorkOrder> queryWrapper = QueryGenerator.initQueryWrapper(mesProductionWorkOrder, req.getParameterMap()); Page<MesProductionWorkOrder> page = new Page<MesProductionWorkOrder>(pageNo, pageSize); IPage<MesProductionWorkOrder> pageList = mesProductionWorkOrderService.page(page, queryWrapper); return Result.OK(pageList); } /** * å页å表æ¥è¯¢ * * @param mesProductionWorkOrder * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "æäº§å·¥å-å页å表æ¥è¯¢") @ApiOperation(value = "æäº§å·¥å-å页å表æ¥è¯¢", notes = "æäº§å·¥å-å页å表æ¥è¯¢") @GetMapping(value = "/list") public Result<IPage<MesProductionWorkOrder>> queryPageList(MesProductionWorkOrder mesProductionWorkOrder, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { Map<String, String[]> parameterMap = req.getParameterMap(); QueryWrapper<MesProductionWorkOrder> queryWrapper = QueryGenerator.initQueryWrapper(mesProductionWorkOrder, parameterMap); String[] startDates = parameterMap.get("startDate"); String[] endDates = parameterMap.get("endDate"); if (startDates != null && startDates.length > 0) { queryWrapper.ge("work_order_date", startDates[0]); } if (endDates != null && endDates.length > 0) { queryWrapper.le("work_order_date", endDates[0]); } Page<MesProductionWorkOrder> page = new Page<MesProductionWorkOrder>(pageNo, pageSize); IPage<MesProductionWorkOrder> pageList = mesProductionWorkOrderService.page(page, queryWrapper); return Result.OK(pageList); } /** * æ·»å * * @param mesProductionWorkOrder * @return */ @AutoLog(value = "æäº§å·¥å-æ·»å ") @ApiOperation(value="æäº§å·¥å-æ·»å ", notes="æäº§å·¥å-æ·»å ") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) { mesProductionWorkOrderService.save(mesProductionWorkOrder); return Result.OK("æ·»å æåï¼"); } /** * æ·»å * * @param mesProductionWorkOrder * @return */ @AutoLog(value = "æäº§å·¥å-æ·»å ") @ApiOperation(value = "æäº§å·¥å-æ·»å ", notes = "æäº§å·¥å-æ·»å ") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) { mesProductionWorkOrderService.save(mesProductionWorkOrder); return Result.OK("æ·»å æåï¼"); } /** * ç¼è¾ * * @param mesProductionWorkOrder * @return */ @AutoLog(value = "æäº§å·¥å-ç¼è¾") @ApiOperation(value="æäº§å·¥å-ç¼è¾", notes="æäº§å·¥å-ç¼è¾") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> edit(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) { mesProductionWorkOrderService.updateById(mesProductionWorkOrder); return Result.OK("ç¼è¾æå!"); } @AutoLog(value = "æäº§å·¥å-ä¿åæäº§è®¡å") @ApiOperation(value = "æäº§å·¥å-ä¿åæäº§è®¡å", notes = "æäº§å·¥å-ä¿åæäº§è®¡å") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:saveSchedulePlan") @PostMapping("/addSchedulePlan") public Result<String> addSchedulePlan(@RequestBody List<MesProductionWorkOrder> mesProductionWorkOrderList) { if (!validatePlan(mesProductionWorkOrderList)) { return Result.error("æäº§è®¡åä¸åçï¼ä¿å失败ï¼"); } mesProductionWorkOrderList.forEach(item -> item.setWorkOrderStatus(ProductionWorkOrderStatus.NEW.name())); mesProductionWorkOrderService.saveBatch(mesProductionWorkOrderList); return Result.OK("æ·»å æåï¼"); } /** * éè¿idå é¤ * * @param id * @return */ @AutoLog(value = "æäº§å·¥å-éè¿idå é¤") @ApiOperation(value="æäº§å·¥å-éè¿idå é¤", notes="æäº§å·¥å-éè¿idå é¤") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name="id",required=true) String id) { mesProductionWorkOrderService.removeById(id); return Result.OK("å 餿å!"); } private boolean validatePlan(List<MesProductionWorkOrder> mesProductionWorkOrderList) { //åä¸ç©æãå䏿¥æä¸ãåªè½åå¨ä¸ä¸ªç次 Map<String, List<MesProductionWorkOrder>> orderMapByMaterial = mesProductionWorkOrderList.stream() .collect(Collectors.groupingBy(MesProductionWorkOrder::getMaterialNumber)); for (String materialNumber : orderMapByMaterial.keySet()) { List<MesProductionWorkOrder> workOrderList = orderMapByMaterial.get(materialNumber); Map<Date, List<MesProductionWorkOrder>> orderMapByDate = workOrderList.stream() .collect(Collectors.groupingBy(MesProductionWorkOrder::getWorkOrderDate)); for (Date date : orderMapByDate.keySet()) { List<MesProductionWorkOrder> orderList = orderMapByDate.get(date); Map<String, List<MesProductionWorkOrder>> orderMapByShift = orderList.stream() .collect(Collectors.groupingBy(MesProductionWorkOrder::getShiftId)); for (String shiftId : orderMapByShift.keySet()) { List<MesProductionWorkOrder> list = orderMapByShift.get(shiftId); if (list.size() > 1) { return false; } } } } return true; } /** * æ¹éå é¤ * * @param ids * @return */ @AutoLog(value = "æäº§å·¥å-æ¹éå é¤") @ApiOperation(value="æäº§å·¥å-æ¹éå é¤", notes="æäº§å·¥å-æ¹éå é¤") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.mesProductionWorkOrderService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("æ¹éå 餿å!"); } @AutoLog(value = "æäº§å·¥å-çææäº§è®¡å") @ApiOperation(value = "æäº§å·¥å-çææäº§è®¡å", notes = "æäº§å·¥å-çææäº§è®¡å") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:schedule") @GetMapping(value = "/schedule") public Result<?> schedule(MesProductionWorkScheduleRequest request) { if (StringUtils.isBlank(request.getFactoryId()) || Objects.isNull(request.getStartDate()) || Objects.isNull(request.getEndDate())) { return Result.error("è¯·ä¼ å ¥å¿ è¦åæ°ï¼"); } return Result.ok(mesProductionWorkOrderService.schedule(request)); } /** * éè¿idæ¥è¯¢ * * @param id * @return */ //@AutoLog(value = "æäº§å·¥å-éè¿idæ¥è¯¢") @ApiOperation(value="æäº§å·¥å-éè¿idæ¥è¯¢", notes="æäº§å·¥å-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<MesProductionWorkOrder> queryById(@RequestParam(name="id",required=true) String id) { MesProductionWorkOrder mesProductionWorkOrder = mesProductionWorkOrderService.getById(id); if(mesProductionWorkOrder==null) { return Result.error("æªæ¾å°å¯¹åºæ°æ®"); } return Result.OK(mesProductionWorkOrder); } @AutoLog(value = "æäº§å·¥å-åå¸æäº§è®¡å") @ApiOperation(value = "æäº§å·¥å-åå¸æäº§è®¡å", notes = "æäº§å·¥å-åå¸æäº§è®¡å") //@RequiresPermissions("mes:production:work:order:publish") @RequestMapping(value = "/publish", method = {RequestMethod.POST, RequestMethod.PUT}) public Result<String> publish(@RequestParam("ids") String ids) { List<String> idList = Arrays.asList(ids.split(",")); List<MesProductionWorkOrder> list = mesProductionWorkOrderService.list(new LambdaQueryWrapper<MesProductionWorkOrder>() .in(MesProductionWorkOrder::getId, idList) .eq(MesProductionWorkOrder::getDelFlag, CommonConstant.DEL_FLAG_0)).stream() .filter(i -> !ProductionWorkOrderStatus.NEW.name().equals(i.getWorkOrderStatus())) .collect(Collectors.toList()); if (!list.isEmpty()) { return Result.error("å·²åå¸çæäº§è®¡åä¸è½éå¤åå¸ï¼"); } List<MesProductionWorkOrder> publishList = CollectionUtil.newArrayList(); idList.forEach(id -> { MesProductionWorkOrder publish = new MesProductionWorkOrder() .setId(id) .setPublishTime(new Date()) .setPublisher(Objects.requireNonNull(getCurrentUser()).getUsername()) .setWorkOrderStatus(ProductionWorkOrderStatus.PUBLISHED.name()); publishList.add(publish); }); mesProductionWorkOrderService.updateBatchById(publishList); return Result.OK("å叿å"); } /** * 导åºexcel * * @param request * @param mesProductionWorkOrder */ //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, MesProductionWorkOrder mesProductionWorkOrder) { return super.exportXls(request, mesProductionWorkOrder, MesProductionWorkOrder.class, "æäº§å·¥å"); } @AutoLog(value = "æäº§å·¥å-éåå¸æäº§è®¡å") @ApiOperation(value="æäº§å·¥å-éåå¸æäº§è®¡å", notes="éåå¸æäº§è®¡å") //@RequiresPermissions("mes:production:work:order:republish") @PostMapping(value = "/republish") public Result<String> republish(@RequestBody MesProductionWorkOrderRepublishRequest request) { MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(request.getId()); //todo å¤æçæ¬¡æ¯å¦ç»æçé»è¾ if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) { return Result.error("å½åå·¥åç¶æä¸æ¯æéåå¸ï¼"); } MesProductionWorkOrder republish = new MesProductionWorkOrder() .setId(request.getId()) .setPlanQuantity(request.getPlanQuantity()) .setRepublisher(Objects.requireNonNull(getCurrentUser()).getUsername()) .setRepublishTime(new Date()) .setRepublishReason(request.getRepublishReason()) .setWorkOrderStatus(ProductionWorkOrderStatus.REPUBLISHED.name()); mesProductionWorkOrderService.updateById(republish); return Result.ok("éå叿åï¼"); } /** /** * ç¼è¾ * * @param mesProductionWorkOrder * @return */ @AutoLog(value = "æäº§å·¥å-ç¼è¾") @ApiOperation(value = "æäº§å·¥å-ç¼è¾", notes = "æäº§å·¥å-ç¼è¾") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) public Result<String> edit(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) { mesProductionWorkOrderService.updateById(mesProductionWorkOrder); return Result.OK("ç¼è¾æå!"); } /** * éè¿idå é¤ * * @param id * @return */ @AutoLog(value = "æäº§å·¥å-éè¿idå é¤") @ApiOperation(value = "æäº§å·¥å-éè¿idå é¤", notes = "æäº§å·¥å-éè¿idå é¤") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name = "id", required = true) String id) { mesProductionWorkOrderService.removeById(id); return Result.OK("å 餿å!"); } /** * æ¹éå é¤ * * @param ids * @return */ @AutoLog(value = "æäº§å·¥å-æ¹éå é¤") @ApiOperation(value = "æäº§å·¥å-æ¹éå é¤", notes = "æäº§å·¥å-æ¹éå é¤") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { this.mesProductionWorkOrderService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("æ¹éå 餿å!"); } /** * éè¿idæ¥è¯¢ * * @param id * @return */ //@AutoLog(value = "æäº§å·¥å-éè¿idæ¥è¯¢") @ApiOperation(value = "æäº§å·¥å-éè¿idæ¥è¯¢", notes = "æäº§å·¥å-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<MesProductionWorkOrder> queryById(@RequestParam(name = "id", required = true) String id) { MesProductionWorkOrder mesProductionWorkOrder = mesProductionWorkOrderService.getById(id); if (mesProductionWorkOrder == null) { return Result.error("æªæ¾å°å¯¹åºæ°æ®"); } return Result.OK(mesProductionWorkOrder); } /** * 导åºexcel * * @param request * @param mesProductionWorkOrder */ //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, MesProductionWorkOrder mesProductionWorkOrder) { return super.exportXls(request, mesProductionWorkOrder, MesProductionWorkOrder.class, "æäº§å·¥å"); } /** * éè¿excelå¯¼å ¥æ°æ® * * @param request * @param response * @return */ //@RequiresPermissions("mes_production_work_order:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, MesProductionWorkOrder.class); } * * @param request * @param response * @return */ //@RequiresPermissions("mes_production_work_order:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, MesProductionWorkOrder.class); } private LoginUser getCurrentUser() { try { return (LoginUser) SecurityUtils.getSubject().getPrincipal(); } catch (Exception e) { return null; } } } src/main/java/org/jeecg/modules/mes/dto/MesProductionWorkOrderRepublishRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package org.jeecg.modules.mes.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class MesProductionWorkOrderRepublishRequest { /**主é®*/ @ApiModelProperty(value = "主é®") private String id; /**计åç产æ°é*/ @ApiModelProperty(value = "计åç产æ°é") private Double planQuantity; /**éåå¸åå */ @ApiModelProperty(value = "éåå¸åå ") private String republishReason; } src/main/java/org/jeecg/modules/mes/dto/MesProductionWorkScheduleRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package org.jeecg.modules.mes.dto; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @Data public class MesProductionWorkScheduleRequest { /**产线ID(åä½)*/ @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name") @ApiModelProperty(value = "产线ID(åä½)") private String factoryId; /**æäº§èµ·å§æ¥æ*/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "æäº§èµ·å§æ¥æ") private Date startDate; /**æäº§æªè³æ¥æ*/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "æäº§æªè³æ¥æ") private Date endDate; } src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
@@ -1,9 +1,6 @@ package org.jeecg.modules.mes.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -11,6 +8,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.common.constant.CommonConstant; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; @@ -55,7 +53,7 @@ @Excel(name = "å 餿 è®°", width = 15) @ApiModelProperty(value = "å 餿 è®°") @TableLogic private Integer delFlag; private Integer delFlag = CommonConstant.DEL_FLAG_0; /**å·¥åå·(ä»»å¡å·)*/ @Excel(name = "å·¥åå·(ä»»å¡å·)", width = 15) @ApiModelProperty(value = "å·¥åå·(ä»»å¡å·)") @@ -88,14 +86,14 @@ @ApiModelProperty(value = "çæ¬¡ID(åä½)") private String shiftId; /**æäº§æ¥æ*/ @Excel(name = "æäº§æ¥æ", width = 20, format = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @Excel(name = "æäº§æ¥æ", width = 20, format = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "æäº§æ¥æ") private Date workOrderDate; /**å·¥åç¶æ*/ @Excel(name = "å·¥åç¶æ", width = 15, dicCode = "work_order_status") @Dict(dicCode = "work_order_status") @Excel(name = "å·¥åç¶æ", width = 15, dicCode = "mes_work_order_status") @Dict(dicCode = "mes_work_order_status") @ApiModelProperty(value = "å·¥åç¶æ") private String workOrderStatus; /**å®é æ¥å·¥æ°é*/ @@ -105,6 +103,7 @@ /**åå¸äºº*/ @Excel(name = "åå¸äºº", width = 15) @ApiModelProperty(value = "åå¸äºº") @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "username") private String publisher; /**å叿¶é´*/ @Excel(name = "å叿¶é´", width = 20, format = "yyyy-MM-dd HH:mm:ss") @@ -115,6 +114,7 @@ /**éåå¸äºº*/ @Excel(name = "éåå¸äºº", width = 15) @ApiModelProperty(value = "éåå¸äºº") @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "username") private String republisher; /**éå叿¶é´*/ @Excel(name = "éå叿¶é´", width = 20, format = "yyyy-MM-dd HH:mm:ss") @@ -122,4 +122,24 @@ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "éå叿¶é´") private Date republishTime; /**éåå¸åå */ @Excel(name = "éåå¸åå ", width = 30) @ApiModelProperty(value = "éåå¸åå ") private String republishReason; /**产线ç¼ç */ @TableField(exist = false) private String factoryCode; /**产线åç§°*/ @TableField(exist = false) private String factoryName; /**çç»åç§°*/ @TableField(exist = false) private String groupName; /**çæ¬¡ç¼ç */ @TableField(exist = false) private String shiftCode; /**çæ¬¡åç§°*/ @TableField(exist = false) private String shiftName; } src/main/java/org/jeecg/modules/mes/enums/ProductionWorkOrderStatus.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package org.jeecg.modules.mes.enums; public enum ProductionWorkOrderStatus { /** * æ°å»º */ NEW, /** * å·²åå¸ */ PUBLISHED, /** * éåå¸ */ REPUBLISHED } src/main/java/org/jeecg/modules/mes/service/IMesProductionWorkOrderService.java
@@ -1,7 +1,10 @@ package org.jeecg.modules.mes.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest; import org.jeecg.modules.mes.entity.MesProductionWorkOrder; import java.util.List; /** * @Description: æäº§å·¥å @@ -11,4 +14,5 @@ */ public interface IMesProductionWorkOrderService extends IService<MesProductionWorkOrder> { List<MesProductionWorkOrder> schedule(MesProductionWorkScheduleRequest request); } src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
@@ -1,10 +1,29 @@ package org.jeecg.modules.mes.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.constant.CommonConstant; import org.jeecg.modules.base.entity.Factory; import org.jeecg.modules.base.entity.Shift; import org.jeecg.modules.base.entity.ShiftGroup; import org.jeecg.modules.base.service.IFactoryService; import org.jeecg.modules.base.service.IShiftGroupService; import org.jeecg.modules.base.service.IShiftService; import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest; import org.jeecg.modules.mes.service.IMesProductionWorkOrderService; import org.jeecg.modules.mes.entity.MesProductionWorkOrder; import org.jeecg.modules.mes.mapper.MesProductionWorkOrderMapper; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; /** * @Description: æäº§å·¥å @@ -14,5 +33,70 @@ */ @Service public class MesProductionWorkOrderServiceImpl extends ServiceImpl<MesProductionWorkOrderMapper, MesProductionWorkOrder> implements IMesProductionWorkOrderService { @Autowired private IShiftService shiftService; @Autowired private IShiftGroupService shiftGroupService; @Autowired private IFactoryService factoryService; @Override public List<MesProductionWorkOrder> schedule(MesProductionWorkScheduleRequest request) { //æ¥è¯¢èµ·æ¢æ¥æèå´å çæäº§è®¡åï¼å æé¤ //æ¥è¯¢è¯¥äº§çº¿ä¸ææççæ¬¡ Map<String, ShiftGroup> shiftGroupMap = shiftGroupService.list(new LambdaQueryWrapper<ShiftGroup>() .eq(ShiftGroup::getFactoryId, request.getFactoryId()) .eq(ShiftGroup::getDelFlag, CommonConstant.DEL_FLAG_0)) .stream().collect(Collectors.toMap(ShiftGroup::getShiftId, v1 -> v1, (v1, v2) -> v1)); Factory factory = factoryService.getById(request.getFactoryId()); Map<String, Shift> shiftNameMap = new HashMap<>(); List<Shift> shifts = shiftService.list(new LambdaQueryWrapper<Shift>() .in(Shift::getId, shiftGroupMap.keySet())); shifts.forEach(shift -> shiftNameMap.put(shift.getId(), shift)); LocalDate startDate = request.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate endDate = request.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // ä½¿ç¨æ¥æèå´è¿è¡éåå¤ç List<LocalDate> dateRange = Stream.iterate(startDate, date -> date.plusDays(1)) .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1) .collect(Collectors.toList()); List<MesProductionWorkOrder> newProductionWorkOrderList = CollectionUtil.newArrayList(); for (LocalDate date : dateRange) { for (String shiftId : shiftGroupMap.keySet()) { Date workOrderDate = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); //æ¥è¯¢è¯¥äº§çº¿ãçæ¬¡å¨è¯¥æ¥æä¸æ¯å¦ææäº§è®¡å Optional<MesProductionWorkOrder> optional = list(new LambdaQueryWrapper<MesProductionWorkOrder>() .eq(MesProductionWorkOrder::getWorkOrderDate, workOrderDate) .eq(MesProductionWorkOrder::getFactoryId, request.getFactoryId()) .eq(MesProductionWorkOrder::getShiftId, shiftId)) .stream().findAny(); if (!optional.isPresent()) { ShiftGroup shiftGroup = shiftGroupMap.get(shiftId); //没æï¼çææ°æäº§è®¡å MesProductionWorkOrder mesProductionWorkOrder = new MesProductionWorkOrder() .setFactoryId(factory.getId()) .setFactoryCode(factory.getFactoryCode()) .setFactoryName(factory.getFactoryName()) .setShiftId(shiftId) .setShiftCode(shiftNameMap.get(shiftId).getShiftCode()) .setShiftName(shiftNameMap.get(shiftId).getShiftName()) .setGroupId(shiftGroup.getId()) .setGroupName(shiftGroup.getGroupName()) .setWorkOrderDate(workOrderDate); newProductionWorkOrderList.add(mesProductionWorkOrder); } } } //å¦æä¸ºç©ºï¼é»è®¤ç»ä¸æ¡ï¼ç¨äºæå¨æ°å¢æ¶è¡¨æ ¼çåå§å if (newProductionWorkOrderList.isEmpty()) { MesProductionWorkOrder mesProductionWorkOrder = new MesProductionWorkOrder() .setFactoryId(factory.getId()) .setFactoryCode(factory.getFactoryCode()) .setFactoryName(factory.getFactoryName()); newProductionWorkOrderList.add(mesProductionWorkOrder); } return newProductionWorkOrderList; } }