已添加10个文件
已修改21个文件
已删除3个文件
1222 ■■■■■ 文件已修改
inspect-server/src/main/java/com/yuanchu/mom/controller/MeteringPlanController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/MeteringPlan.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/MeteringPlanMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/controller/ManufactureOrderController.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/controller/ProductionPlanController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/mapper/ManualTechnologyMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/mapper/ManufactureOrderMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/mapper/ManufactureOrderProcessMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/mapper/ManufactureSchedulingMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/ManualTechnology.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/ManufactureOrder.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/ManufactureOrderProcess.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/ManufactureScheduling.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/dto/ManualTechnologyDto.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/dto/ManualTechnologyDto1.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/dto/ManufactureOrderDto.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/ManualTechnologyService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/ManufactureOrderProcessService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/ManufactureOrderService.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/ManufactureSchedulingService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/ProductionPlanService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/impl/ManufactureOrderProcessServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/impl/ManufactureOrderServiceImpl.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/impl/ManufactureSchedulingServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/service/impl/ProductionPlanServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/resources/mapper/ManualTechnologyMapper.xml 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/resources/mapper/ManufactureOrderMapper.xml 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/resources/mapper/ManufactureOrderProcessMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/resources/mapper/ManufactureSchedulingMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/MeteringPlanController.java
@@ -1,7 +1,5 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.MeteringPlan;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.service.MeteringPlanService;
@@ -17,10 +15,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
import java.util.Date;
import java.util.HashMap;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
@@ -50,7 +46,7 @@
    private Jwt jwt;
    @ApiOperation(value = "计量计划-->新增按钮")
    @PostMapping("/add_plan")
    public Result<?> addMeteringPlan(@RequestHeader("token") String token,@Validated @RequestBody MeteringPlan meteringPlan) throws Exception {
    public Result<?> addMeteringPlan(@RequestHeader("token") String token, @Validated @RequestBody MeteringPlan meteringPlan) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        String id = data.get("id").replaceAll("\"", "");
        meteringPlan.setFounder(Integer.valueOf(id));
inspect-server/src/main/java/com/yuanchu/mom/pojo/MeteringPlan.java
@@ -17,6 +17,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.FutureOrPresent;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -42,20 +43,21 @@
    @ApiModelProperty(value = "计划编号", hidden = true)
    private String planNumber;
    @NotNull(message = "请选择创建人!")
    @ApiModelProperty(value = "创建人", hidden = true)
    private Integer founder;
    @FutureOrPresent(message = "请选择计划日期")
    @ApiModelProperty(value = "计划日期开始", example = "2023-07-02", dataType = "date", required = true)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate planDateBegin;
    @FutureOrPresent(message = "请选择计划日期")
    @ApiModelProperty(value = "计划日期结束", example = "2023-07-02", dataType = "date", required = true)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate planDateEnd;
    @NotBlank(message = "请选择或请输入计量单位!")
    @ApiModelProperty(value = "计量单位", example = "上海质检所", required = true)
    @NotBlank(message = "请输入计划单位!")
    @ApiModelProperty(value = "计划单位", example = "上海质检所", required = true)
    private String planUnit;
    @NotNull(message = "请选择负责人!")
inspect-server/src/main/resources/mapper/MeteringPlanMapper.xml
@@ -30,10 +30,12 @@
                <if test="meteringUnit != null and meteringUnit != ''">
                    AND m.`plan_unit` LIKE CONCAT('%', #{meteringUnit}, '%')
                </if>
                  ORDER BY m.create_time DESC
                  LIMIT #{pageNo}, #{pageSize}) s
                 LEFT JOIN measure_ledger l
                           ON l.`measure_plan_id` = s.`id`
        WHERE (l.`state` = 1 OR l.`state` IS NULL)
        ORDER BY s.createTime DESC
    </select>
    <select id="selectIdPlan" resultType="map">
inventory-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java
@@ -85,7 +85,7 @@
                    .techfather(technology.getFather())
                    .deviceGroup(technology.getDeviceGroup())
                    .manufactureOrderId(manufactureOrder.getId())
                    .period((int) Math.ceil((double)manufactureOrder.getNumber()/technology.getProductionQuota()))
                    .productionQuota(technology.getProductionQuota())
                    .build();
            //新增编制工序表
            manualTechnologyMapper.insert(manualTechnology);
pom.xml
@@ -38,7 +38,7 @@
        <openfeign.version>3.1.3</openfeign.version>
        <feign-okhttp.version>11.0</feign-okhttp.version>
        <shiro.version>1.5.3</shiro.version>
        <freemwork.version>2.3.32</freemwork.version>
        <hutool.version>5.8.16</hutool.version>
        <!--提交前-->
        <!-- æ‰“包后导出的路径 -->
        <package.path>${project.build.directory}/BLOG</package.path>
@@ -88,6 +88,12 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
production-server/src/main/java/com/yuanchu/mom/controller/ManufactureOrderController.java
@@ -3,11 +3,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.mapper.ManualTechnologyMapper;
import com.yuanchu.mom.pojo.ManualTechnology;
import com.yuanchu.mom.pojo.dto.ManualTechnologyDto;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.service.ManualTechnologyService;
import com.yuanchu.mom.service.ManufactureSchedulingService;
import com.yuanchu.mom.utils.MyUtil;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -19,9 +19,9 @@
import com.yuanchu.mom.service.ManufactureOrderService;
import javax.annotation.Resource;
import javax.xml.crypto.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -41,11 +41,15 @@
    @Autowired
    private ManufactureOrderService manufactureOrderService;
    @Autowired
    private ManufactureSchedulingService manufactureSchedulingService;
    @Resource
    ManualTechnologyService manualTechnologyService;
    @Resource
    DeviceService deviceService;
    @ApiOperation(value = "查询生产订单列表")
    @ApiImplicitParams(value = {
@@ -65,7 +69,7 @@
        return Result.success(map);
    }
    @ApiOperation(value = "排产-->1.查看")
    @ApiOperation(value = "点击排产获取表格二级树")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "manOrdId", value = "生产订单id", dataTypeClass = Integer.class, required = true)
    })
@@ -74,7 +78,16 @@
        return Result.success(manualTechnologyService.seleDatil(manOrdId));
    }
    @ApiOperation(value = "排产-->2.选择设备")
    @ApiOperation(value = "点击查看排产")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "manOrdId", value = "生产订单id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/select_Scheduling")
    public Result<?> selectScheduling(Integer manOrdId) {
        return Result.success(manufactureSchedulingService.selectScheduling(manOrdId));
    }
    @ApiOperation(value = "点击排产-->二级树选择设备")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "deviceGroup", value = "设备组", dataTypeClass = String.class, required = true)
    })
@@ -83,34 +96,40 @@
        return Result.success(deviceService.getDeviceNameByGroup(deviceGroup));
    }
    @ApiOperation(value = "排产-->3.更新")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "date", value = "排产开始日期", dataTypeClass = String.class, required = true)
    })
    @ApiOperation(value = "点击排产-->确定按钮")
    @PostMapping("/output")
    public Result output(String date ,@Validated @RequestBody List<ManualTechnologyDto> manualTechnologyDtoList) throws ParseException {
        manualTechnologyService.output(date,manualTechnologyDtoList);
        return Result.success();
    }
    @ApiOperation(value = "查看排产详情")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "manOrdId", value = "生产订单id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/sePros")
    public Result sePros(Integer manOrdId) {
        return Result.success(manufactureOrderService.sePros(manOrdId));
    public Result<?> output(@Validated @RequestBody ManualTechnologyDto manualTechnologyDto) throws ParseException {
        // åˆ¤æ–­è¾“入数量是否超出
        Integer isExceed = manufactureOrderService.checkScheduled(manualTechnologyDto.getManOrdId(), manualTechnologyDto.getSchedulingNumber());
        if (isExceed >= 0){
            manualTechnologyService.output(manualTechnologyDto);
            return Result.success("排产成功!");
        } else {
            MyUtil.PrintLog(isExceed.toString());
            int i = manualTechnologyDto.getSchedulingNumber() + isExceed;
            return Result.fail("排产错误,当前剩余排产为:" + i);
        }
    }
    @ApiOperation(value = "下达")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "manOrdId", value = "生产订单id", dataTypeClass = Integer.class, required = true)
            @ApiImplicitParam(name = "manufactureOrderId", value = "订单id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "schedulingId", value = "排产Id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/down")
    public Result down(Integer manOrdId) {
        manufactureOrderService.down(manOrdId);
    public Result<?> down(Integer manufactureOrderId, Integer schedulingId) {
        manufactureOrderService.down(manufactureOrderId, schedulingId);
        return Result.success("下达成功!");
    }
    @ApiOperation(value = "多选删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "manOrdId", value = "生产订单id", dataTypeClass = String.class, dataType = "list", required = true)
    })
    @DeleteMapping("/delete")
    public Result<?> deleteManufacture(List<String> manOrdId) {
        manufactureOrderService.deleteManufacture(manOrdId);
        return Result.success("删除成功!");
    }
}
production-server/src/main/java/com/yuanchu/mom/controller/ProductionPlanController.java
@@ -1,47 +1,77 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.service.ProductionPlanService;
import com.yuanchu.mom.service.ManualTechnologyService;
import com.yuanchu.mom.service.ManufactureOrderProcessService;
import com.yuanchu.mom.service.ManufactureOrderService;
import com.yuanchu.mom.service.ManufactureSchedulingService;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "生产管理-->生产计划")
@RestController
@RequestMapping("/productionPlan")
public class ProductionPlanController {
    @Resource
    ProductionPlanService productionPlanService;
    @Autowired
    private ManualTechnologyService manualTechnologyService;
    @Autowired
    private ManufactureOrderService manufactureOrderService;
    @ApiOperation(value = "查询设备列表")
    @GetMapping("/selectAllDev")
    public Result selectAllDev() {
        return Result.success(productionPlanService.selectAllDev());
    @Autowired
    private ManufactureSchedulingService manufactureSchedulingService;
    @Autowired
    private ManufactureOrderProcessService manufactureOrderProcessService;
    @ApiOperation(value = "二级树")
    @GetMapping("/tow_tree")
    public Result<?> towTree() {
        return Result.success(manufactureOrderService.towTree());
    }
    @ApiOperation(value = "查询生产计划列表")
    @ApiOperation(value = "查看排产详情")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "deviceId", value = "设备id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "orderCode", value = "订单号", dataTypeClass = String.class),
            @ApiImplicitParam(name = "name", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "startTime", value = "计划开始日期", dataTypeClass = String.class),
            @ApiImplicitParam(name = "endTime", value = "计划结束日期", dataTypeClass = String.class)
            @ApiImplicitParam(name = "schedulingId", value = "排产id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/selectAllPlan")
    public Result selectAllPlan(Integer deviceId, String orderCode, String name, String startTime, String endTime) {
        return Result.success(productionPlanService.selectAllPlan(deviceId,orderCode,name,startTime,endTime));
    @GetMapping("/sePros")
    public Result<?> sePros(Integer schedulingId) {
        return Result.success(manufactureOrderService.sePros(schedulingId));
    }
    @ApiOperation(value = "根据生产订单查看生产计划")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "manOrdId", value = "生产订单id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "productName", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "startTime", value = "开始日期", dataTypeClass = String.class),
            @ApiImplicitParam(name = "endTime", value = "结束日期", dataTypeClass = String.class)
    })
    @GetMapping("/produceTable")
    public Result<?> selectProduceTable(Integer manOrdId, String productName, String startTime, String endTime) {
        return Result.success(manufactureSchedulingService.selectProduceTable(manOrdId, productName, startTime, endTime));
    }
    @ApiOperation(value = "查看排产详情-->失焦修改时间")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "technologyId", value = "工序Id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "schedulingId", value = "排产Id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "startTime", value = "开始时间", dataTypeClass = String.class, required = true, dataType = "date")
    })
    @GetMapping("/update_time")
    public Result<?> updateTime(Integer technologyId, Integer schedulingId, String startTime) {
        Integer isUpdateSuccess = manufactureOrderProcessService.updateTime(technologyId, schedulingId, startTime);
        if (isUpdateSuccess >= 1) {
            return Result.success("更新成功!");
        }
        return Result.fail("更新失败!");
    }
}
production-server/src/main/java/com/yuanchu/mom/mapper/ManualTechnologyMapper.java
@@ -17,11 +17,6 @@
    //排产-->查看
    List<Map<String, Object>> seleDatil(Integer manOrdId);
    //批量更新
    void updateBatchManualTechnology(List<ManualTechnology> manualTechnologies);
    //查询所有设备列表
    List<Map<String, Object>> selectAllDev();
    List<Map<String, Object>> selectListTowTree(Integer schedulingId);
}
production-server/src/main/java/com/yuanchu/mom/mapper/ManufactureOrderMapper.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.ManufactureOrder;
import com.yuanchu.mom.pojo.dto.ManufactureOrderDto;
import java.util.List;
import java.util.Map;
@@ -20,8 +19,10 @@
    //查询生产订单列表
    IPage<Map<String, Object>> selectAllManord(Page<Object> page, String downTime, String delTime, String customerCode, Integer type);
    void deleteManufacture(List<String> manOrdId);
    //查看生产计划
    List<Map<String, Object>> selectAllPlan(Integer deviceId, String orderCode, String name, String startTime, String endTime);
    List<Map<String, Object>> towTree();
    void updateManufacture(Integer manufactureOrderId, Integer schedulingNumber);
}
production-server/src/main/java/com/yuanchu/mom/mapper/ManufactureOrderProcessMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.mybatis_config.MyBaseMapper;
import com.yuanchu.mom.pojo.ManufactureOrderProcess;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * æŽ’产对应工序 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 02:46:48
 */
public interface ManufactureOrderProcessMapper extends MyBaseMapper<ManufactureOrderProcess> {
}
production-server/src/main/java/com/yuanchu/mom/mapper/ManufactureSchedulingMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.ManufactureScheduling;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æŽ’产表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 11:54:28
 */
public interface ManufactureSchedulingMapper extends BaseMapper<ManufactureScheduling> {
    List<Map<String, Object>> selectScheduling(Integer manOrdId);
    List<Map<String, Object>> selectProduceTable(Integer manOrdId, String productName, String startTime, String endTime);
    Map<String, Object> sePros(Integer schedulingId);
}
production-server/src/main/java/com/yuanchu/mom/pojo/ManualTechnology.java
@@ -47,10 +47,8 @@
     **/
    private String deviceGroup;
    /**
     * å…³è” è®¾å¤‡id
     **/
    private Integer deviceId;
    @ApiModelProperty(value = "生产定额(个/天)")
    private Integer productionQuota;
    /**
     * å…³è” ç”Ÿäº§è®¢å•id
@@ -58,6 +56,7 @@
    private Integer manufactureOrderId;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
@@ -69,24 +68,5 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å¼€å§‹æ—¥æœŸ(计划)
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startTime;
    /**
     * ç»“束日期(计划)
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endTime;
    /**
     * å‘¨æœŸ
     **/
    private Integer period;
}
production-server/src/main/java/com/yuanchu/mom/pojo/ManufactureOrder.java
@@ -72,6 +72,8 @@
     **/
    private Integer number;
    @ApiModelProperty(value = "已排产数量")
    private Integer scheduledProduction;
    /**
     * ä¸‹å•日期
     **/
@@ -87,16 +89,12 @@
    private Date deltime;
    /**
     * çŠ¶æ€0:待排产;1:已排产
     **/
    private Integer type;
    /**
     * è´¨é‡è¿½æº¯å·
     **/
    private String qualityTraceability;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
production-server/src/main/java/com/yuanchu/mom/pojo/ManufactureOrderProcess.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
/**
 * <p>
 * æŽ’产对应工序
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 02:46:48
 */
@Data
@Accessors(chain = true)
@TableName("manufacture_order_process")
@ApiModel(value = "ManufactureOrderProcess对象", description = "排产对应工序")
public class ManufactureOrderProcess implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键Id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("关联 è®¾å¤‡Id")
    private Integer deviceId;
    @ApiModelProperty("开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty("结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endTime;
    @ApiModelProperty("周期")
    private Integer period;
    @ApiModelProperty("关联 ç¼–制工序表Id")
    private Integer manualTechnologyId;
    @ApiModelProperty("关联 æŽ’产表 Id")
    private Integer manufactureSchedulingId;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
}
production-server/src/main/java/com/yuanchu/mom/pojo/ManufactureScheduling.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
/**
 * <p>
 * æŽ’产表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 11:54:28
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "ManufactureScheduling对象", description = "排产表")
public class ManufactureScheduling implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键Id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty("结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endTime;
    @ApiModelProperty("下达状态")
    private Integer goState;
    @ApiModelProperty("已排产数量")
    private Integer scheduled;
    @ApiModelProperty("关联生产订单Id")
    private Integer manufactureOrderId;
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    @ApiModelProperty("逻辑删除")
    @TableLogic(value = "1", delval = "0")
    private Integer state;
}
production-server/src/main/java/com/yuanchu/mom/pojo/dto/ManualTechnologyDto.java
@@ -1,46 +1,27 @@
package com.yuanchu.mom.pojo.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
//更新排产(选择设备)
public class ManualTechnologyDto {
    //工序id
    @NotNull(message = "id不能为空")
    @JsonSerialize
    private Integer id;
    @NotBlank(message = "排产开始日期不能为空")
    @ApiModelProperty(value = "排产开始日期", example = "2023-08-31", required = true, dataType = "date")
    private String date;
    /**
     * å·¥åºåç§°
     **/
    @NotBlank(message = "工序名称不能为空")
    @JsonSerialize
    private String techname;
    @NotNull(message = "生产订单Id不能为空")
    @ApiModelProperty(value = "生产订单Id", example = "3", required = true)
    private Integer manOrdId;
    /**
     * å·¥åºçˆ¶ç±»
     **/
    @NotBlank(message = "工序父类不能为空")
    @JsonSerialize
    private String techfather;
    @NotNull(message = "排产数量不能为空")
    @ApiModelProperty(value = "排产数量", example = "20", required = true)
    private Integer schedulingNumber;
    /**
     * è®¾å¤‡ç»„
     **/
    @NotBlank(message = "设备组不能为空")
    @JsonSerialize
    private String deviceGroup;
    /**
     * å…³è” è®¾å¤‡id
     **/
    @NotNull(message = "设备id不能为空")
    @JsonSerialize
    private Integer  deviceId;
    private List<ManualTechnologyDto1> orderProcess;
}
production-server/src/main/java/com/yuanchu/mom/pojo/dto/ManualTechnologyDto1.java
@@ -2,52 +2,22 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.util.Date;
//查看排产详情中的计划编制
@Data
public class ManualTechnologyDto1 {
    /**
     * å·¥åºid
     **/
    private Integer mtechId;
    @NotNull(message = "工序Id不能为空")
    @ApiModelProperty(value = "工序Id", example = "1", required = true)
    private Integer manualTechnologyId;
    /**
     * å·¥åºåç§°
     **/
    private String techname;
    /**
     * å·¥åºçˆ¶ç±»
     **/
    private String techfather;
    /**
     * è®¾å¤‡å(机台)
     **/
    private String deviceName;
    /**
     * å¼€å§‹æ—¥æœŸ(计划)
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startTime;
    /**
     * ç»“束日期(计划)
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endTime;
    /**
     * å‘¨æœŸ
     **/
    private Integer period;
    @NotNull(message = "设备id不能为空")
    @ApiModelProperty(value = "设备Id", example = "1", required = true)
    private Integer  deviceId;
}
production-server/src/main/java/com/yuanchu/mom/pojo/dto/ManufactureOrderDto.java
ÎļþÒÑɾ³ý
production-server/src/main/java/com/yuanchu/mom/service/ManualTechnologyService.java
@@ -26,9 +26,7 @@
    /**
     * æŽ’产==>更新
     * @param manualTechnologyDtoList
     */
    void output(String date, List<ManualTechnologyDto> manualTechnologyDtoList) throws ParseException;
    void output(ManualTechnologyDto manualTechnologyDto) throws ParseException;
}
production-server/src/main/java/com/yuanchu/mom/service/ManufactureOrderProcessService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.ManufactureOrderProcess;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * <p>
 * æŽ’产对应工序 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 02:46:48
 */
public interface ManufactureOrderProcessService extends IService<ManufactureOrderProcess> {
    void batchInsert(List<ManufactureOrderProcess> manufactureOrderProcessesDate);
    /**
     * æŸ¥çœ‹æŽ’产详情-->失焦修改时间
     * @param startTime å¼€å§‹æ—¶é—´
     * @return
     */
    Integer updateTime(Integer technologyId, Integer schedulingId, String startTime);
}
production-server/src/main/java/com/yuanchu/mom/service/ManufactureOrderService.java
@@ -4,7 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.ManufactureOrder;
import com.yuanchu.mom.pojo.dto.ManufactureOrderDto;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@@ -30,15 +30,36 @@
    /**
     * æŸ¥çœ‹æŽ’产详情
     * @param manOrdId
     * @param schedulingId
     * @return
     */
    ManufactureOrderDto sePros(Integer manOrdId);
    Map<String, Object> sePros(Integer schedulingId);
    /**
     * ä¸‹è¾¾
     * @param manufactureOrderId è®¢å•Id
     * @param schedulingId æŽ’产Id
     */
    void down(Integer manufactureOrderId, Integer schedulingId);
    /**
     * æ‰¹é‡åˆ é™¤
     * @param manOrdId
     */
    void down(Integer manOrdId);
    @Transactional(rollbackFor = Exception.class)
    void deleteManufacture(List<String> manOrdId);
    /**
     * ç”Ÿäº§è®¡åˆ’二级树
     * @return
     */
    List<Map<String, Object>> towTree();
    /**
     * åˆ¤æ–­è¾“入数量是否超出
     * @param manOrdId è®¢å•Id
     * @param schedulingNumber ç”¨æˆ·è¾“入数量
     */
    Integer checkScheduled(Integer manOrdId, Integer schedulingNumber);
}
production-server/src/main/java/com/yuanchu/mom/service/ManufactureSchedulingService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.ManufactureOrder;
import com.yuanchu.mom.pojo.ManufactureScheduling;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æŽ’产表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 11:54:28
 */
public interface ManufactureSchedulingService extends IService<ManufactureScheduling> {
    List<Map<String, Object>> selectScheduling(Integer manOrdId);
    List<Map<String, Object>> selectProduceTable(Integer manOrdId, String productName, String startTime, String endTime);
    Map<String, Object> sePros(Integer schedulingId);
}
production-server/src/main/java/com/yuanchu/mom/service/ProductionPlanService.java
ÎļþÒÑɾ³ý
production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java
@@ -1,15 +1,22 @@
package com.yuanchu.mom.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.DeviceMapper;
import com.yuanchu.mom.mapper.ManualTechnologyMapper;
import com.yuanchu.mom.mapper.ManufactureOrderMapper;
import com.yuanchu.mom.pojo.ManualTechnology;
import com.yuanchu.mom.pojo.ManufactureOrder;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.pojo.dto.ManualTechnologyDto;
import com.yuanchu.mom.pojo.dto.ManualTechnologyDto1;
import com.yuanchu.mom.service.ManualTechnologyService;
import com.yuanchu.mom.service.ManufactureOrderProcessService;
import com.yuanchu.mom.service.ManufactureSchedulingService;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -17,10 +24,7 @@
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -38,6 +42,11 @@
    @Resource
    ManufactureOrderMapper manufactureOrderMapper;
    @Autowired
    private ManufactureSchedulingService manufactureSchedulingService;
    @Autowired
    private ManufactureOrderProcessService manufactureOrderProcessService;
    //排产-->查看
    @Override
@@ -48,57 +57,86 @@
    //排产-->更新
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void output(String date,  List<ManualTechnologyDto> manualTechnologyDtoList) throws ParseException {
        //更新每个工序的设备
        List<ManualTechnology> manualTechnologies = manualTechnologyDtoList.stream().map(manualTechnologyDto -> {
            ManualTechnology manualTechnology = new ManualTechnology();
            BeanUtils.copyProperties(manualTechnologyDto, manualTechnology);
            return manualTechnology;
        }).collect(Collectors.toList());
        //批量更新设备id
        manualTechnologyMapper.updateBatchManualTechnology(manualTechnologies);
    public void output(ManualTechnologyDto manualTechnologyDto) throws ParseException {
        Integer manufactureOrderId = manualTechnologyMapper.selectById(manualTechnologyDtoList.get(1).getId()).getManufactureOrderId();
        List<ManualTechnology> manualTechnologyList = manualTechnologyMapper.selectList(Wrappers.<ManualTechnology>query().eq("manufacture_order_id", manufactureOrderId));
        /*赋值(最开始第一个工序的开始日期)*/
        // æ ¹æ®æŽ’产数量计算工艺周期
        List<ManufactureOrderProcess> manufactureOrderProcessesPeriod = matchingCycle(
                manualTechnologyDto.getSchedulingNumber(),
                manualTechnologyDto.getManOrdId(),
                manualTechnologyDto.getOrderProcess());
        // æ ¹æ®å·¥åºç”Ÿäº§å®šé¢åŒ¹é…æ—¶é—´
        List<ManufactureOrderProcess> manufactureOrderProcessesDate = datePeriodCalculate(
                manualTechnologyDto.getDate(),
                manufactureOrderProcessesPeriod);
        // æ·»åŠ ä¸€æ¡æŽ’äº§è®°å½•åˆ°manufacture_scheduling表格,返回主键Id
        Date endTime = manufactureOrderProcessesDate.get(manufactureOrderProcessesDate.size() - 1).getEndTime();
        ManufactureScheduling manufactureScheduling = new ManufactureScheduling()
                .setScheduled(manualTechnologyDto.getSchedulingNumber())
                .setStartTime(DateUtil.parse(manualTechnologyDto.getDate()))
                .setEndTime(endTime)
                .setManufactureOrderId(manualTechnologyDto.getManOrdId())
                .setGoState(0); // 0 è¡¨ç¤ºå¾…下达
        manufactureSchedulingService.save(manufactureScheduling);
        // å°†æŽ’表Id插入到manufactureOrderProcessesDate中, å¼€å§‹æ‰¹é‡æ’å…¥manufactureOrderProcesses表格
        manufactureOrderProcessesDate.forEach(i -> i.setManufactureSchedulingId(manufactureScheduling.getId()));
        manufactureOrderProcessService.batchInsert(manufactureOrderProcessesDate);
        // æ›´æ–°è®¢å•的已排产数量
        manufactureOrderMapper.updateManufacture(manualTechnologyDto.getManOrdId(), manualTechnologyDto.getSchedulingNumber());
    }
    // æ ¹æ®æŽ’产数量计算工艺周期
    private List<ManufactureOrderProcess> matchingCycle(Integer schedulingNumber, Integer manOrdId, List<ManualTechnologyDto1> manualTechnologyDtoList){
        // æŸ¥è¯¢ç¼–制工艺,用于匹配每个订单的工序周期
        LambdaQueryWrapper<ManualTechnology> queryWrapper = Wrappers.<ManualTechnology>lambdaQuery()
                .eq(ManualTechnology::getManufactureOrderId, manOrdId);
        List<ManualTechnology> technologies = manualTechnologyMapper.selectList(queryWrapper);
        //匹配每个订单的工序周期
        List<ManufactureOrderProcess> manufactureOrderProcessList = manualTechnologyDtoList.stream().map(manualTechnologyDto1 -> {
            ManufactureOrderProcess manufactureOrderProcess = new ManufactureOrderProcess();
            BeanUtils.copyProperties(manualTechnologyDto1, manufactureOrderProcess);
            technologies.forEach(i -> {
                if (Objects.equals(manufactureOrderProcess.getManualTechnologyId(), i.getId())){
                    manufactureOrderProcess.setPeriod((int) Math.ceil((double)schedulingNumber/i.getProductionQuota()));
                }
            });
            return manufactureOrderProcess;
        }).collect(Collectors.toList());
        return manufactureOrderProcessList;
    }
    // æ ¹æ®å·¥åºç”Ÿäº§å®šé¢åŒ¹é…æ—¶é—´
    private List<ManufactureOrderProcess> datePeriodCalculate(String date, List<ManufactureOrderProcess> manualTechnologies) throws ParseException {
        // è®¡ç®—工序的开始日期以及结束日期
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = dateFormat.parse(date);
        //将起始日期赋值给Calendar对象
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(parse);
        //第一个工序
        ManualTechnology manualTechnology = manualTechnologyList.get(0);
        ManufactureOrderProcess manualTechnology = manualTechnologies.get(0);
        calendar.add(Calendar.DATE, manualTechnology.getPeriod());
        manualTechnology.setStartTime(parse).setEndTime(calendar.getTime());
        //循环赋值时间
        for (int i = 0; i < manualTechnologyList.size()-1 ; i++) {
        for (int i = 0; i < manualTechnologies.size()-1 ; i++) {
            Calendar calendar1 = Calendar.getInstance();
            calendar1.setTime(manualTechnologyList.get(i).getEndTime());
            ManualTechnology technology = manualTechnologyList.get(i + 1);
            calendar1.setTime(manualTechnologies.get(i).getEndTime());
            ManufactureOrderProcess technology = manualTechnologies.get(i + 1);
            calendar1.add(Calendar.DATE,1);
            technology.setStartTime(calendar1.getTime());
            calendar1.add(Calendar.DATE,technology.getPeriod());
            technology.setEndTime(calendar1.getTime());
        }
        //批量更新
        manualTechnologyMapper.updateBatchManualTechnology(manualTechnologyList);
        //如果该产品下的所有工序都安排了,则将状态改为已排产还有待下达
        if (checkFieldExistence(manualTechnologies)) {
            ManufactureOrder manufactureOrder = new ManufactureOrder();
            manufactureOrder.setId(manufactureOrderId).setType(1).setGoState(0);
            manufactureOrderMapper.updateById(manufactureOrder);
        }
    }
    /*判断是否所有工序全部都安排了设备*/
    public static boolean checkFieldExistence(List<ManualTechnology> dataList) {
        for (ManualTechnology data : dataList) {
            if (data.getDeviceId() == null) {
                return false;
            }
        }
        return true;
        return manualTechnologies;
    }
}
production-server/src/main/java/com/yuanchu/mom/service/impl/ManufactureOrderProcessServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.yuanchu.mom.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.pojo.ManufactureOrderProcess;
import com.yuanchu.mom.mapper.ManufactureOrderProcessMapper;
import com.yuanchu.mom.service.ManufactureOrderProcessService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * <p>
 * æŽ’产对应工序 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 02:46:48
 */
@Service
public class ManufactureOrderProcessServiceImpl extends ServiceImpl<ManufactureOrderProcessMapper, ManufactureOrderProcess> implements ManufactureOrderProcessService {
    @Resource
    private ManufactureOrderProcessMapper manufactureOrderProcessMapper;
    @Override
    public void batchInsert(List<ManufactureOrderProcess> manufactureOrderProcessesDate) {
        manufactureOrderProcessMapper.insertBatchSomeColumn(manufactureOrderProcessesDate);
    }
    @Override
    public Integer updateTime(Integer technologyId, Integer schedulingId, String startTime) {
//        // Hutool å·¥å…·ç±»è®¡ç®—间隔小时
        Date startTime1 = DateUtil.parse(startTime);
        // æ ¹æ®æŽ’产Id查询所有对应的工序数据
        LambdaQueryWrapper<ManufactureOrderProcess> queryWrapper = Wrappers.<ManufactureOrderProcess>lambdaQuery()
                .eq(ManufactureOrderProcess::getManufactureSchedulingId, schedulingId)
                .select(ManufactureOrderProcess::getId, ManufactureOrderProcess::getPeriod);
        List<ManufactureOrderProcess> list = manufactureOrderProcessMapper.selectList(queryWrapper);
        //
        for (int i = 0; i < list.size(); i++) {
            if (Objects.equals(list.get(i).getId(), technologyId)){
                list.get(i).setStartTime(startTime1);
                list.get(i).setEndTime(DateUtil.offsetDay(startTime1, list.get(i).getPeriod()));
                for (int j = i + 1; j < list.size(); j++) {
                    // èŽ·å–ä¸Šä¸€ä¸ªå·¥åºçš„ç»“æŸæ—¶é—´ï¼Œå¹¶ä¸”åœ¨æ­¤åŸºç¡€ä¸ŠåŠ ä¸€å¤©
                    list.get(j).setStartTime(DateUtil.offsetDay(list.get(j - 1).getEndTime(), 1));
                    // èŽ·å–ç¬¬j个位置的周期,周期与开始时间相加
                    list.get(j).setEndTime(DateUtil.offsetDay(list.get(j).getStartTime(), list.get(j).getPeriod()));
                }
                break;
            }
        }
        MyUtil.PrintLog(list.toString());
        return null;
//        return manufactureOrderProcessMapper.updateTime(list);
    }
}
production-server/src/main/java/com/yuanchu/mom/service/impl/ManufactureOrderServiceImpl.java
@@ -1,24 +1,25 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.DeviceMapper;
import com.yuanchu.mom.mapper.ManualTechnologyMapper;
import com.yuanchu.mom.mapper.ManufactureOrderMapper;
import com.yuanchu.mom.pojo.ManualTechnology;
import com.yuanchu.mom.pojo.ManufactureOrder;
import com.yuanchu.mom.pojo.dto.ManualTechnologyDto1;
import com.yuanchu.mom.pojo.dto.ManufactureOrderDto;
import com.yuanchu.mom.pojo.ManufactureScheduling;
import com.yuanchu.mom.service.ManufactureOrderService;
import com.yuanchu.mom.service.ManufactureSchedulingService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * ç”Ÿäº§è®¢å•表(ManufactureOrder)表服务实现类
@@ -35,8 +36,8 @@
    @Resource
    ManualTechnologyMapper manualTechnologyMapper;
    @Resource
    DeviceMapper deviceMapper;
    @Autowired
    private ManufactureSchedulingService manufactureSchedulingService;
    //查询生产订单的列表
    @Override
@@ -44,32 +45,73 @@
        return manufactureOrderMapper.selectAllManord(page,downTime,delTime,customerCode,type);
    }
    //查看排产详情
    @Override
    public ManufactureOrderDto sePros(Integer manOrdId) {
        ManufactureOrderDto manufactureOrderDto = new ManufactureOrderDto();
    public Map<String, Object> sePros(Integer schedulingId) {
        //基本信息
        ManufactureOrder manufactureOrder = manufactureOrderMapper.selectById(manOrdId);
        BeanUtils.copyProperties(manufactureOrder,manufactureOrderDto);
        Map<String, Object> manufactureOrder = manufactureSchedulingService.sePros(schedulingId);
        //计划编制
        List<ManualTechnology> manualTechnologies = manualTechnologyMapper.selectList(Wrappers.<ManualTechnology>query().eq("manufacture_order_id", manOrdId));
        List<ManualTechnologyDto1> manualTechnologyDto1s = manualTechnologies.stream().map(manualTechnology -> {
            ManualTechnologyDto1 manualTechnologyDto1 = new ManualTechnologyDto1();
            BeanUtils.copyProperties(manualTechnology, manualTechnologyDto1);
            manualTechnologyDto1.setMtechId(manualTechnology.getId());
            manualTechnologyDto1.setDeviceName(deviceMapper.selectById(manualTechnology.getDeviceId()).getName());
            return manualTechnologyDto1;
        }).collect(Collectors.toList());
        manufactureOrderDto.setMessage(manualTechnologyDto1s);
        return manufactureOrderDto;
        List<Map<String, Object>> mapList = manualTechnologyMapper.selectListTowTree(schedulingId);
        manufactureOrder.put("message",mapList);
        return manufactureOrder;
    }
    //下达
    @Override
    public void down(Integer manOrdId) {
        ManufactureOrder manufactureOrder = new ManufactureOrder().setId(manOrdId).setGoState(1);
        manufactureOrderMapper.updateById(manufactureOrder);
    public void down(Integer manufactureOrderId, Integer schedulingId) {
        // å…ˆæ›´æ–°æŽ’产
        LambdaUpdateWrapper<ManufactureScheduling> updateWrapperScheduling = Wrappers.<ManufactureScheduling>lambdaUpdate()
                .eq(ManufactureScheduling::getId, schedulingId)
                .set(ManufactureScheduling::getGoState, 1);
        manufactureSchedulingService.update(updateWrapperScheduling);
        // ç„¶åŽæ›´æ–°è®¢å•表的状态
        LambdaQueryWrapper<ManufactureScheduling> queryWrapper = Wrappers.<ManufactureScheduling>lambdaQuery()
                .eq(ManufactureScheduling::getManufactureOrderId, manufactureOrderId)
                .select(ManufactureScheduling::getGoState);
        List<ManufactureScheduling> list = manufactureSchedulingService.list(queryWrapper);
        boolean goStateAll = false;
        for (int i = 0; i <= list.size() - 1; i++){
            if (list.get(i).getGoState() == 0) {
                goStateAll = true;
                break;
            }
        }
        LambdaUpdateWrapper<ManufactureOrder> updateWrapperOrder = new LambdaUpdateWrapper<>();
        updateWrapperOrder.eq(ManufactureOrder::getId, manufactureOrderId);
        // å¦‚果排产表中有一个是待下达,那么订单表中就为待下达
        if (goStateAll){
            // å¾…下达
            updateWrapperOrder.set(ManufactureOrder::getGoState, 0);
        } else {
            // å·²ä¸‹è¾¾
            updateWrapperOrder.set(ManufactureOrder::getGoState, 1);
        }
        manufactureOrderMapper.update(new ManufactureOrder(), updateWrapperOrder);
    }
    @Override
    public void deleteManufacture(List<String> manOrdId) {
        manufactureOrderMapper.deleteManufacture(manOrdId);
    }
    @Override
    public List<Map<String, Object>> towTree() {
        return manufactureOrderMapper.towTree();
    }
    @Override
    public Integer checkScheduled(Integer manOrdId, Integer schedulingNumber) {
        LambdaQueryWrapper<ManufactureOrder> queryWrapper = Wrappers.<ManufactureOrder>lambdaQuery()
                .eq(ManufactureOrder::getId, manOrdId)
                .eq(ManufactureOrder::getState, 1)
                .select(ManufactureOrder::getNumber, ManufactureOrder::getScheduledProduction);
        ManufactureOrder manufactureOrder = manufactureOrderMapper.selectOne(queryWrapper);
        if (ObjectUtils.isEmpty(manufactureOrder.getScheduledProduction())){
            manufactureOrder.setScheduledProduction(0);
        }
        return manufactureOrder.getNumber() - (manufactureOrder.getScheduledProduction() + schedulingNumber);
    }
}
production-server/src/main/java/com/yuanchu/mom/service/impl/ManufactureSchedulingServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.pojo.ManufactureScheduling;
import com.yuanchu.mom.mapper.ManufactureSchedulingMapper;
import com.yuanchu.mom.service.ManufactureSchedulingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æŽ’产表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-31 11:54:28
 */
@Service
public class ManufactureSchedulingServiceImpl extends ServiceImpl<ManufactureSchedulingMapper, ManufactureScheduling> implements ManufactureSchedulingService {
    @Resource
    private ManufactureSchedulingMapper manufactureSchedulingMapper;
    @Override
    public List<Map<String, Object>> selectScheduling(Integer manOrdId) {
        return manufactureSchedulingMapper.selectScheduling(manOrdId);
    }
    @Override
    public List<Map<String, Object>> selectProduceTable(Integer manOrdId, String productName, String startTime, String endTime) {
        return manufactureSchedulingMapper.selectProduceTable(manOrdId, productName, startTime, endTime);
    }
    @Override
    public Map<String, Object> sePros(Integer schedulingId) {
        return manufactureSchedulingMapper.sePros(schedulingId);
    }
}
production-server/src/main/java/com/yuanchu/mom/service/impl/ProductionPlanServiceImpl.java
ÎļþÒÑɾ³ý
production-server/src/main/resources/mapper/ManualTechnologyMapper.xml
@@ -1,52 +1,48 @@
<?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.yuanchu.mom.mapper.ManualTechnologyMapper">
    <!--批量更新-->
    <update id="updateBatchManualTechnology">
        UPDATE mom_ocean.manual_technology
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="device_id=case" suffix="end,">
                <foreach collection="manualTechnologies" item="manualTechnologie">
                    WHEN id =#{manualTechnologie.id} THEN #{manualTechnologie.deviceId}
                </foreach>
            </trim>
            <trim prefix="start_time=case" suffix="end,">
                <foreach collection="manualTechnologies" item="manualTechnologie">
                    WHEN id =#{manualTechnologie.id} THEN #{manualTechnologie.startTime}
                </foreach>
            </trim>
            <trim prefix="end_time=case" suffix="end,">
                <foreach collection="manualTechnologies" item="manualTechnologie">
                    WHEN id =#{manualTechnologie.id} THEN #{manualTechnologie.endTime}
                </foreach>
            </trim>
        </trim>
        <where>
            <foreach collection="manualTechnologies" separator="or" item="manualTechnologie">
                id =#{manualTechnologie.id}
            </foreach>
        </where>
    </update>
    <select id="seleDatil" resultType="java.util.Map">
    <resultMap id="seleDatilMap" type="map">
        <id property="lable" column="techfather"/>
        <collection property="children" resultMap="seleDatilTowMap" javaType="List"/>
    </resultMap>
    <resultMap id="seleDatilTowMap" type="map">
        <id property="lable" column="techname"/>
        <result property="id" column="id"/>
        <result property="deviceGroup" column="device_group"/>
        <result property="technologyId" column="manufacture_order_id"/>
    </resultMap>
    <select id="seleDatil" resultMap="seleDatilMap">
        select manual_technology.id,
               techfather,
               techname,
               device_group,
               name
               device_group
        from mom_ocean.manual_technology
                 left join mom_ocean.device
                           on device.id = device_id
        where manufacture_order_id = #{manOrdId}
    </select>
    <!--查询所有设备列表-->
    <select id="selectAllDev" resultType="java.util.Map">
        select distinct manual_technology.id,
                        device_group,
                        name
        from mom_ocean.manual_technology
                 left join mom_ocean.device
                           on device.id = manual_technology.device_id
        order by device_group
    <resultMap id="selectListTowTreeFirstMap" type="map">
        <id property="techfather" column="techfather"/>
        <collection property="children" javaType="list" resultMap="selectListTowTreeSecondMap"/>
    </resultMap>
    <resultMap id="selectListTowTreeSecondMap" type="map">
        <id property="id" column="id"/>
        <result property="techname" column="techname"/>
        <result property="deviceName" column="name"/>
        <result property="startTime" column="start_time"/>
        <result property="endTime" column="end_time"/>
        <result property="period" column="period"/>
    </resultMap>
    <select id="selectListTowTree" resultMap="selectListTowTreeFirstMap">
        SELECT p.`id`, t.`techfather`, t.`techname`, d.`name`, DATE_FORMAT(p.`start_time`, '%Y-%m-%d') start_time,
               DATE_FORMAT(p.`end_time`, '%Y-%m-%d') end_time, p.`period`
        FROM manufacture_order_process p
                 LEFT JOIN device d ON d.`id` = p.`device_id`
                 LEFT JOIN manual_technology t ON t.`id` = p.`manual_technology_id`
        WHERE p.`state` = 1
          AND p.`manufacture_scheduling_id` = #{schedulingId}
    </select>
</mapper>
</mapper>
production-server/src/main/resources/mapper/ManufactureOrderMapper.xml
@@ -12,10 +12,10 @@
        specifications,
        unit,
        number,
        DATE_FORMAT(downTime, '%Y-%m-%d') '下单日期',
        DATE_FORMAT(delTime, '%Y-%m-%d') '交货日期',
        scheduled_production,
        DATE_FORMAT(downTime, '%Y-%m-%d') downTime,
        DATE_FORMAT(delTime, '%Y-%m-%d') delTime,
        go_state,
        type
        from mom_ocean.manufacture_order
        where state=1
        <if test="downTime!=null and downTime!=''">
@@ -31,34 +31,35 @@
            and type=#{type}
        </if>
    </select>
    <!--查看生产计划-->
    <select id="selectAllPlan" resultType="java.util.Map">
        select order_code,
               name,
               specifications,
               unit,
               number,
               proname,
               saleman,
               downman,
               techname,
               DATE_FORMAT(start_time, '%Y-%m-%d') '计划开始日期',
               DATE_FORMAT(end_time, '%Y-%m-%d') '计划结束日期'
        from mom_ocean.manual_technology mt
                 left join mom_ocean.manufacture_order mo
                           on mt.manufacture_order_id = mo.id
        where mo.state=1
        and go_state=1
        and device_id=#{deviceId}
        <if test="orderCode!=null and orderCode!=''">
            and order_code like concat('%',#{orderCode},'%')
        </if>
        <if test="startTime!=null and startTime!=''">
            and DATE_FORMAT(start_time, '%Y-%m-%d')=#{startTime}
        </if>
        <if test="endTime!=null and endTime!=''">
            and DATE_FORMAT(end_time, '%Y-%m-%d')=#{endTime}
        </if>
        order by start_time
    <update id="deleteManufacture">
        UPDATE manufacture_order m
        SET m.`state` = 0
        WHERE m.id IN
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </update>
    <resultMap id="towTreeFirstMap" type="map">
        <id property="orderCode" column="order_code"/>
        <collection property="children" javaType="list" resultMap="towTreeSecondMap"/>
    </resultMap>
    <resultMap id="towTreeSecondMap" type="map">
        <id property="manufactureId" column="id"/>
        <result property="manufactureName" column="name"/>
    </resultMap>
    <select id="towTree" resultMap="towTreeFirstMap">
        SELECT m.`order_code`, m.`name`, m.`id`
        FROM manufacture_order m
        WHERE m.`state` = 1
    </select>
</mapper>
    <update id="updateManufacture">
        UPDATE manufacture_order m
        SET m.`go_state` = 0, m.`scheduled_production` = IFNULL(m.`scheduled_production`, 0) + #{schedulingNumber}
        where m.id = #{manufactureOrderId}
    </update>
</mapper>
production-server/src/main/resources/mapper/ManufactureOrderProcessMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?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.yuanchu.mom.mapper.ManufactureOrderProcessMapper">
</mapper>
production-server/src/main/resources/mapper/ManufactureSchedulingMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
<?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.yuanchu.mom.mapper.ManufactureSchedulingMapper">
    <select id="selectScheduling" resultType="map">
        SELECT m.`id`, DATE_FORMAT(m.`create_time`, '%Y-%m-%d') createTime,
               DATE_FORMAT(m.`end_time`, '%Y-%m-%d') endTime, m.`scheduled`, m.`go_state`,
               DATE_FORMAT(m.`start_time`, '%Y-%m-%d') startTime
        FROM manufacture_scheduling m
        WHERE m.`manufacture_order_id` = 3
          AND m.`state` = 1
    </select>
    <select id="selectProduceTable" resultType="map">
        SELECT m.`id`, o.`name`, o.`specifications`, o.`unit`, m.`scheduled`, o.`proname`, o.`saleman`,
               o.`downman`, DATE_FORMAT(m.`start_time`, '%Y-%m-%d') startTime, DATE_FORMAT(m.`end_time`, '%Y-%m-%d') endTime
        FROM manufacture_scheduling m, manufacture_order o
        WHERE m.`manufacture_order_id` = #{manOrdId}
          AND m.`manufacture_order_id` = o.`id`
          AND m.`state` = 1
        <if test="productName != null and productName != ''">
            AND o.`name` LIKE CONCAT('%', #{productName}, '%')
        </if>
        <if test="startTime != null and startTime != ''">
            AND m.`start_time` >= #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            AND m.`end_time` <![CDATA[ <= ]]> #{endTime}
        </if>
    </select>
    <select id="sePros" resultType="map">
        SELECT o.`id`, s.`scheduled`, o.`order_code`, o.`customer_code`, o.`name`, o.`specifications`, o.`unit`,
               DATE_FORMAT(o.`downTime`, '%Y-%m-%d') downTime, DATE_FORMAT(o.`delTime`, '%Y-%m-%d') delTime
        FROM manufacture_scheduling s, manufacture_order o
        WHERE s.`manufacture_order_id` = o.`id`
          AND s.`id` = #{schedulingId}
    </select>
</mapper>
system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
@@ -19,7 +19,7 @@
    public static String database_username = "user";
    public static String database_password= "123456";
    public static String author = "江苏鵷雏网络科技有限公司";
    public static String model_name = "/inspect-server"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String model_name = "/production-server"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.yuanchu.mom"; // åŒ…路径
    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -1,6 +1,5 @@
package com.yuanchu.mom;
import com.yuanchu.mom.utils.MyUtil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;