zss
2023-09-05 b9e2c1619cf61bcd5f24b858fff738244d20566e
过程检验修改9-5
已添加1个文件
已修改31个文件
570 ■■■■ 文件已修改
inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/FinishedInspectVo1.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
production-server/src/main/java/com/yuanchu/mom/pojo/ManualTechnology.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/SpecificationsController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/StandardController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/TechniqueMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/MaterialMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/ProductMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/TechniqueMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/TechnologyMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/UserService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.yuanchu.mom.pojo.vo.FinishedInspectVo1;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
@@ -49,6 +50,34 @@
    @Autowired
    Jwt jwt;
    @ApiOperation(value = "新增过程检验单-->根据订单号选择产品信息和工艺")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "orderNumber", value = "订单编号", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/chooseMater")
    public Result<?> chooseMater(String orderNumber) {
        return Result.success(finishedInspectService.chooseMater(orderNumber));
    }
    @ApiOperation(value = "新增过程检验单-->选择设备")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "technologyId", value = "关联的工艺路线id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "father", value = "项目父名称", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "name", value = "项目名称", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/chooseDev")
    public Result<?> chooseDev(Integer technologyId, String father, String name) {
        return Result.success(finishedInspectService.chooseDev(technologyId,father,name));
    }
    @ApiOperation(value = "新增过程检验单")
    @PostMapping("/addProcess")
    public Result<?> addProcess(@RequestHeader("token") String token, @RequestBody FinishedInspectVo1 finishedInspectVo1) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        return Result.success(finishedInspectService.addProcess(data.get("id").replaceAll("\"", ""), finishedInspectVo1));
    }
    @ApiOperation(value = "新增按钮-->1、新增成品检验单")
    @PostMapping("/add_process_inspection_sheet")
    public Result<?> addProcessInspectionSheet(@Validated @RequestBody FinishedInspect finishedInspect){
@@ -59,22 +88,6 @@
        return Result.fail("新增失败!");
    }
    @ApiOperation(value = "新增按钮-->1、新增过程检验单-->主机工下拉框")
    @GetMapping("/list_user")
    public Result<?> selectUserIdAndName(){
        List<Map<String, Object>> maps = userService.listUserIdAndName();
        return Result.success(maps);
    }
    @ApiOperation(value = "新增按钮-->1、新增过程检验单-->2、规格型号下拉框:根据项目ID查询")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "materialId",value = "项目名称ID",dataTypeClass  = Integer.class,required = true)
    })
    @GetMapping("/list_specification")
    public Result<?> selectSpecificationIdAndName(Integer materialId){
        List<Map<String, Object>> maps = specificationsService.selectSpecificationIdAndName(materialId);
        return Result.success(maps);
    }
    @ApiOperation(value = "新增按钮-->1、新增过程检验单-->1、项目名称下拉框")
    @GetMapping("/list_material")
@@ -115,10 +128,5 @@
        return Result.success(map);
    }
    @ApiOperation(value = "4、主页分页-->主机工条件查询下拉框")
    @GetMapping("/page_user")
    public Result<?> selectPageUserIdAndName(){
        List<Map<String, Object>> maps = userService.listUserIdAndName();
        return Result.success(maps);
    }
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
/**
@@ -25,4 +26,7 @@
    //计算月产量
    Long seAllCount(String begin, String end, int type);
    //新增过程检验单-->根据订单号选择产品信息
    List<Map<String, Object>> chooseMater(String orderNumber);
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java
@@ -34,58 +34,53 @@
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @NotBlank(message = "订单号不允许为空!")
    @ApiModelProperty(value = "订单号", required = true, example = "DDH202308010001")
    private String orderNumber;
    @NotBlank(message = "客户名称不允许为空!")
    @ApiModelProperty(value = "客户名称", required = true, example = "懒洋洋")
    private String customerName;
    @NotBlank(message = "工程名称不允许为空!")
    @ApiModelProperty(value = "工程名称", required = true, example = "液体硅橡胶")
    private String projectName;
    @NotBlank(message = "质量追溯号不允许为空!")
    @ApiModelProperty(value = "质量追溯号", required = true, example = "ZLZSH202308010001")
    private String qualityTraceability;
    @ApiModelProperty(value = "0:成品;1:过程;", hidden = true)
    private Integer type;
    @NotBlank(message = "单位不允许为空!")
    @ApiModelProperty(value = "单位", required = true, example = "吨")
    private String unit;
    @NotNull(message = "请输入数量!")
    @ApiModelProperty(value = "数量", required = true, example = "50")
    private Integer quantity;
    @NotNull(message = "请选择规格型号!")
    @ApiModelProperty(value = "规格型号拼接字符", required = true, example = "8.7/15kV JLS-3.2")
    private String specificationsModel;
    @NotNull(message = "请选择型号ID!")
    @TableField(exist = false)
    @ApiModelProperty(value = "型号ID", required = true, example = "1")
    private Integer specificationsId;
    @ApiModelProperty(value = "项目编码", required = true, example = "GX20230807")
    @ApiModelProperty(value = "产品编码", required = true, example = "GX20230807")
    private String materialCode;
    @NotNull(message = "请选择项目名称!")
    @ApiModelProperty(value = "项目名称", required = true, example = "光纤")
    @ApiModelProperty(value = "产品名称", required = true, example = "光纤")
    private String material;
    @NotNull(message = "请选择主机工!")
    @ApiModelProperty(value = "主机工:用户id", required = true, example = "1")
    @ApiModelProperty(value = "报检人:用户id", required = true, example = "1")
    private Integer userId;
    @ApiModelProperty(value = "检验结论", hidden = true, required = true, example = "DDH202308010001")
    private Integer result;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/FinishedInspectVo1.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.yuanchu.mom.pojo.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
//新增过程检验参数
public class FinishedInspectVo1 {
    @NotBlank(message = "订单号不能为空!")
    private String orderNumber;
    @NotBlank(message = "产品不能为空!")
    private String material;
    @NotBlank(message = "产品编码不能为空!")
    private String materialCode;
    @NotBlank(message = "规格型号不能为空!")
    private String specificationsModel;
    @NotBlank(message = "单位不能为空!")
    private String unit;
    @NotBlank(message = "工序不能为空!")
    private String techfather;
    @NotBlank(message = "工艺不能为空!")
    private String techname;
    @NotNull(message = "关联的工艺路线id不能为空!")
    private Integer technologyId;
    //检验值
    private String inspectionValue;
    //设备id
    private Integer deviceId;
}
inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
@@ -4,8 +4,10 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.vo.FinishedInspectVo1;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
@@ -24,4 +26,29 @@
    Integer inspectionConclusion(String username,Integer finishedInspectId, Integer result);
    IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername);
    /**
     * æ–°å¢žè¿‡ç¨‹æ£€éªŒå•-->根据订单号选择产品信息
     *
     * @param orderNumber
     * @return
     */
    List<Map<String, Object>> chooseMater(String orderNumber);
    /**
     * æ–°å¢žè¿‡ç¨‹æ£€éªŒå•
     *
     * @param finishedInspectVo1
     * @return
     */
    String addProcess(String userId, FinishedInspectVo1 finishedInspectVo1);
    /**
     * æ–°å¢žè¿‡ç¨‹æ£€éªŒå•-->选择设备
     * @param mtid
     * @param father
     * @param name
     * @return
     */
    List<Map<String,Object>> chooseDev(Integer technologyId, String father, String name);
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
@@ -3,26 +3,25 @@
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.yuanchu.mom.mapper.ImportRepertoryMapper;
import com.yuanchu.mom.mapper.InspectUnacceptedMapper;
import com.yuanchu.mom.mapper.RepertoryMapper;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.yuanchu.mom.mapper.FinishedInspectMapper;
import com.yuanchu.mom.pojo.ImportRepertory;
import com.yuanchu.mom.pojo.InspectUnaccepted;
import com.yuanchu.mom.pojo.Repertory;
import com.yuanchu.mom.service.FinishedInspectService;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.pojo.vo.FinishedInspectVo1;
import com.yuanchu.mom.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.service.InspectionItemService;
import com.yuanchu.mom.service.ProductService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * <p>
@@ -38,11 +37,23 @@
    @Resource
    private FinishedInspectMapper finishedInspectMapper;
    @Resource
    MaterialMapper materialMapper;
    @Resource
    StandardService standardService;
    @Resource
    SpecificationsService specificationsService;
    @Resource
    InspectionItemService inspectionItemService;
    @Autowired
    private ProductService productService;
    @Autowired
    private InspectionItemService inspectionItemService;
    @Resource
    UserMapper userMapper;
    @Resource
    InspectUnacceptedMapper inspectUnacceptedMapper;
@@ -53,13 +64,19 @@
    @Resource
    ImportRepertoryMapper importRepertoryMapper;
    @Resource
    TechnologyMapper technologyMapper;
    @Resource
    TechniqueMapper techniqueMapper;
    @Override
    public Integer addProcessInspectionSheet(FinishedInspect finishedInspect) {
        finishedInspect.setType(0);
        int insert = finishedInspectMapper.insert(finishedInspect);
        if (insert == 1) {
            List<Map<String, Object>> maps = productService.selectProductList(finishedInspect.getSpecificationsId());
            inspectionItemService.insertList(finishedInspect.getId(), maps);
            /*List<Map<String, Object>> maps = productService.selectProductList(finishedInspect.getSpecificationsId());
            inspectionItemService.insertList(finishedInspect.getId(), maps);*/
            return insert;
        }
        return 0;
@@ -208,4 +225,136 @@
    public IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername) {
        return finishedInspectMapper.selectFinishedInspectPage(page, inspectResult, inspectDate, inspectUsername);
    }
    //新增过程检验单-->根据订单号选择产品信息
    @Override
    public List<Map<String, Object>> chooseMater(String orderNumber) {
        return finishedInspectMapper.chooseMater(orderNumber);
    }
    //新增过程检验单
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String addProcess(String userId, FinishedInspectVo1 finishedInspectVo1) {
        /*新增过程检验单*/
        FinishedInspect finishedInspect = new FinishedInspect();
        finishedInspect.setType(1);
        finishedInspect.setUserId(Integer.parseInt(userId));
        BeanUtils.copyProperties(finishedInspectVo1, finishedInspect);
        finishedInspectMapper.insert(finishedInspect);
        /*批量新增过程检验项目表*/
        //获取型号id
        Integer specificationId = getSpecificationId(finishedInspectVo1.getMaterial(), finishedInspectVo1.getMaterialCode(), finishedInspectVo1.getSpecificationsModel());
        //查询标准BOM技术指标中该型号工艺下最新版本的检验项目
        Integer ver = productService.selectVerByPro(specificationId).get(0);//该型号下技术指标最新版本
        List<Product> productList = productService.selProByVerSpe(finishedInspectVo1.getTechnologyId(), ver);
        List<InspectionItem> inspectionItemList = productList.stream().map(product -> {
            InspectionItem inspectionItem = new InspectionItem();
            BeanUtils.copyProperties(product, inspectionItem);
            inspectionItem.setFinishInspectId(finishedInspect.getId());
            //如果新增时还填写了检验值则要进行判断检验结果
            if (ObjectUtils.isNotEmpty(finishedInspectVo1.getInspectionValue())) {
                inspectionItem.setInspectionValue(finishedInspectVo1.getInspectionValue());
                //判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格0
                String required = product.getRequired();//标准值
                String internal = product.getInternal();//内控值
                String testValue = finishedInspectVo1.getInspectionValue();//检测值
                List<Integer> list = Arrays.stream(testValue.split(",")).map(s -> {
                    int values = checkValues(required, internal, s);
                    return values;
                }).collect(Collectors.toList());
                if (list.contains(0)) {
                    //如果其中一个检验值不合格则该项目检验不合格
                    inspectionItem.setResult(0);
                } else {
                    inspectionItem.setResult(1);
                }
                inspectionItem.setUsername(userMapper.selectById(userId).getName());
            }
            return inspectionItem;
        }).collect(Collectors.toList());
        inspectionItemService.saveBatch(inspectionItemList);
        return "新增过程检验单"+finishedInspect.getId()+"成功!";
    }
    //新增过程检验单-->选择设备
    @Override
    public List<Map<String, Object>> chooseDev(Integer technologyId, String father, String name) {
        //该工艺id下生产工艺最新版本
        Integer ver = techniqueMapper.selectVerByTeId(technologyId).get(0);
        return techniqueMapper.selDevByVerTecIdFaNam(technologyId,father,name,ver);
    }
    /*根据样品名称,样品编号,型号规格获取型号id*/
    private Integer getSpecificationId(String name, String mcode, String specification) {
        //获取物料id
        Material material = materialMapper.selectOne(Wrappers.<Material>query()
                .eq("name", name)
                .eq("code", mcode));
        if (Objects.isNull(material)) {
            return null;
        }
        //获取规格名称和型号名称
        String[] split = specification.split("-");
        String stName = split[0];
        String spName = split[1];
        //获取规格id
        Standard standard = standardService.getOne(Wrappers.<Standard>query()
                .eq("name", stName)
                .eq("material_id", material.getId()));
        //获取型号id
        Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query()
                .eq("name", spName)
                .eq("standard_id", standard.getId()));
        return specifications.getId();
    }
    /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/
    private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
        if (isStandardValueSatisfied && isControlValueSatisfied) {
            return 1;
        } else {
            return 0;
        }
    }
    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
        String substring = valueStr.substring(1, 2);
        if (substring.equals("=")) {
            String operator = valueStr.substring(0, 2);
            Double standardValue = Double.parseDouble(valueStr.substring(2));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator) {
                case ">=":
                    return detectionValue >= standardValue;
                case "<=":
                    return detectionValue <= standardValue;
                default:
                    return false;
            }
        } else {
            String operator = valueStr.substring(0, 1);
            Double standardValue = Double.parseDouble(valueStr.substring(1));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator) {
                case ">":
                    return detectionValue > standardValue;
                case "≥":
                    return detectionValue >= standardValue;
                case "≤":
                    return detectionValue <= standardValue;
                case "<":
                    return detectionValue < standardValue;
                case "=":
                    return detectionValue.equals(standardValue);
                default:
                    return false;
            }
        }
    }
}
inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml
@@ -43,4 +43,35 @@
            and finished_inspect.create_time &lt;= #{end}
        </if>
    </select>
    <!--新增过程检验单-根据订单号选择产品信息-->
    <resultMap id="oneMap" type="map">
        <id property="name" column="material"/>
        <result property="code" column="code"/>
        <result property="specifications" column="specifications"/>
        <result property="unit" column="unit"/>
        <collection property="children" resultMap="twoMap" javaType="List"/>
    </resultMap>
    <resultMap id="twoMap" type="map">
        <result property="name" column="techfather"/>
        <collection property="children" resultMap="threeMap" javaType="List"/>
    </resultMap>
    <resultMap id="threeMap" type="map">
        <id property="id" column="technologyId"/>
        <result property="name" column="techname"/>
    </resultMap>
    <select id="chooseMater" resultMap="oneMap">
        select mo.name material,
               code,
               specifications,
               unit,
               technology_id   technologyId,
               techfather,
               techname
        from mom_ocean.manual_technology mt
                 left join mom_ocean.manufacture_order mo on mt.manufacture_order_id = mo.id
                 left join mom_ocean.material m on m.name = mo.name
        where mo.state = 1
          and type = 1
          and order_code = #{orderNumber}
    </select>
</mapper>
inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.dto.SaleMaterialDto;
import com.yuanchu.mom.pojo.vo.SaleVo;
import com.yuanchu.mom.service.RepertoryService;
import com.yuanchu.mom.utils.JackSonUtil;
@@ -40,8 +41,6 @@
    @Resource
    Jwt jwt;
    @Resource
    RepertoryService repertoryService;
    @ApiOperation(value = "查询销售单列表")
    @ApiImplicitParams(value = {
@@ -64,6 +63,18 @@
    @ApiOperation(value = "新增销售单")
    @PostMapping("/addSale")
    public Result addSale(@RequestHeader("token") String token,@Validated @RequestBody SaleDto saleDto) throws Exception {
        //校验,同一个产品的规格型号不能相同
        List<SaleMaterialDto> saleMaterialList = saleDto.getSaleMaterialList();
        // ä½¿ç”¨å“ˆå¸Œé›†åˆæ¥åˆ¤æ–­æ˜¯å¦å­˜åœ¨ç›¸åŒå­—段值组合
        Set<String> seen = new HashSet<>();
        for (SaleMaterialDto saleMaterial: saleMaterialList) {
            String key = saleMaterial.getName() + "," + saleMaterial.getSpecifications();
            if (seen.contains(key)) {
                return Result.fail("同一个产品的规格型号不能相同");
            } else {
                seen.add(key);
            }
        }
            Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
            saleService.addSale(data.get("name").replaceAll("\"", ""), saleDto);
        return Result.success("新增成功!");
inventory-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java
@@ -6,12 +6,16 @@
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.service.OrdersService;
import com.yuanchu.mom.service.SpecificationsService;
import com.yuanchu.mom.service.StandardService;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * è®¢å•(Order)表服务实现类
@@ -24,6 +28,15 @@
    @Resource
    SaleMapper saleMapper;
    @Resource
    MaterialMapper materialMapper;
    @Resource
    StandardService standardService;
    @Resource
    SpecificationsService specificationsService;
    @Resource
    SaleMaterialMapper saleMaterialMapper;
@@ -39,7 +52,6 @@
    @Resource
    TechnologyMapper technologyMapper;
    //查询所有订单列表
@@ -75,10 +87,16 @@
                .build();
        //新增生产订单
        manufactureOrderMapper.insert(manufactureOrder);
        //查询产品的工序
        String[] split = manufactureOrder.getSpecifications().split("-");
        Specifications specifications = specificationsMapper.selectOne(Wrappers.<Specifications>query().eq("name", split[1]));
        List<Technology> technologyList = technologyMapper.selectList(Wrappers.<Technology>query().eq("specifications_id", specifications.getId()));
        //查询产品的最新工序
        //产品编码
        String code = materialMapper.selMcode(manufactureOrder.getName());
        //型号id
        Integer specificationId = getSpecificationId(manufactureOrder.getName(), code, manufactureOrder.getSpecifications());
        //默认最新版本
        Integer version = technologyMapper.selectVerByTec(specificationId).get(0);
        List<Technology> technologyList = technologyMapper.selectList(Wrappers.<Technology>query()
                .eq("specifications_id", specificationId)
                .eq("version", version));
        for (Technology technology : technologyList) {
            ManualTechnology manualTechnology = ManualTechnology.builder()
                    .techname(technology.getName())
@@ -86,11 +104,36 @@
                    .deviceGroup(technology.getDeviceGroup())
                    .manufactureOrderId(manufactureOrder.getId())
                    .productionQuota(technology.getProductionQuota())
                    .technologyId(technology.getId())
                    .build();
            //新增编制工序表
            manualTechnologyMapper.insert(manualTechnology);
        }
    }
    /*根据样品名称,样品编号,型号规格获取型号id*/
    private Integer getSpecificationId(String name, String mcode, String specification) {
        //获取物料id
        Material material = materialMapper.selectOne(Wrappers.<Material>query()
                .eq("name", name)
                .eq("code", mcode));
        if (Objects.isNull(material)) {
            return null;
        }
        //获取规格名称和型号名称
        String[] split = specification.split("-");
        String stName = split[0];
        String spName = split[1];
        //获取规格id
        Standard standard = standardService.getOne(Wrappers.<Standard>query()
                .eq("name", stName)
                .eq("material_id", material.getId()));
        //获取型号id
        Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query()
                .eq("name", spName)
                .eq("standard_id", standard.getId()));
        return specifications.getId();
    }
}
production-server/src/main/java/com/yuanchu/mom/pojo/ManualTechnology.java
@@ -55,6 +55,11 @@
     **/
    private Integer manufactureOrderId;
    /**
     * å…³è” æ ‡å‡†BOM工艺路线id
     **/
    private Integer technologyId;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java
@@ -42,8 +42,7 @@
    @ApiOperation("(1,2级)新增-->物料,标准,型号")
    @PostMapping("/add")
    public Result<?> addMaterial(@Validated @RequestBody MaterialDto materialDto) {
        materialService.addMaterial(materialDto);
        return Result.success("添加物料【" + materialDto.getName() + "】成功");
        return Result.success(materialService.addMaterial(materialDto));
    }
    @ApiOperation(value = "右侧数据展示-->选择版本")
standard-server/src/main/java/com/yuanchu/mom/controller/SpecificationsController.java
@@ -29,8 +29,7 @@
    @ApiOperation("(4级)新增-->型号")
    @PostMapping("/add")
    public Result<?> addSpecifications(@Validated @RequestBody SpecificationsDto specificationsDto) {
        specificationsService.addSpecifications(specificationsDto);
        return Result.fail("添加型号【"+ specificationsDto.getSpecifications() +"】成功!");
        return Result.success(specificationsService.addSpecifications(specificationsDto));
    }
}
standard-server/src/main/java/com/yuanchu/mom/controller/StandardController.java
@@ -29,8 +29,7 @@
    @ApiOperation("(3级)新增-->标准,型号")
    @PostMapping("/add")
    public Result<?> addStandard(@Validated @RequestBody StandardDto standardDto) {
        standardService.addStandard(standardDto);
        return Result.fail("添加标准【"+ standardDto.getStandard() +"】成功!");
        return Result.success(standardService.addStandard(standardDto));
    }
}
standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java
@@ -21,6 +21,9 @@
    //根据标准id查询物料
    Material selFath(Integer id);
    //根据物料名称查询成品产品编号
    String selMcode(String name);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java
@@ -38,6 +38,9 @@
    //根据技术指标id批量删除
    void delAllPro(String ids);
    //查询标准BOM技术指标中该型号工艺下最新版本的检验项目
    List<Product> selProByVerSpe(Integer technologyId, Integer ver);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/TechniqueMapper.java
@@ -37,5 +37,11 @@
    //根据生产工艺id批量删除
    void delAllTeq(String ids);
    //根据工艺路线id查询所有版本
    List<Integer> selectVerByTeId(Integer technologyId);
    //查询该工艺下最新版本在一个检验项目下可以使用哪些设备
    List<Map<String, Object>> selDevByVerTecIdFaNam(Integer technologyId, String father, String name, Integer ver);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java
@@ -30,4 +30,7 @@
    //批量删除
    void delAllTech(String ids);
    //查询该型号工艺下最新版本的工艺id
    Integer selTech(String techfather, String techname, Integer version, Integer specificationId);
}
standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java
@@ -26,7 +26,7 @@
     * @param materialDto
     * @return
     */
    void addMaterial(MaterialDto materialDto);
    String addMaterial(MaterialDto materialDto);
    /**
standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java
@@ -84,4 +84,12 @@
     * @param ids
     */
    void delAllPro(String ids);
    /**
     * æŸ¥è¯¢æ ‡å‡†BOM技术指标中该型号工艺下最新版本的检验项目
     * @param technologyId
     * @param ver
     * @return
     */
    List<Product> selProByVerSpe(Integer technologyId, Integer ver);
}
standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java
@@ -28,6 +28,6 @@
     *   (4级)新增-->型号
     * @param specificationsDto
     */
    void addSpecifications(SpecificationsDto specificationsDto);
    String addSpecifications(SpecificationsDto specificationsDto);
}
standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java
@@ -15,5 +15,5 @@
     * (3级)新增-->标准,型号
     * @param standardDto
     */
    void addStandard(StandardDto standardDto);
    String addStandard(StandardDto standardDto);
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java
@@ -70,7 +70,13 @@
    //(1,2级)新增-->物料,标准,型号
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addMaterial(MaterialDto materialDto) {
    public String addMaterial(MaterialDto materialDto) {
        //校验添加物料是否重复
        if (materialMapper.selectOne(Wrappers.<Material>query()
                .eq("type", materialDto.getType())
                .eq("father", materialDto.getFather())).getName().equals(materialDto.getName())) {
            return "该类型产品大类下有该产品名称";
        }
        /*新增物料表*/
        Material material = new Material();
        material.setCode(MyUtil.getTimeSixNumberCode("ML", "ML"));
@@ -153,6 +159,7 @@
            }
        }
        techniqueService.saveBatch(techniqueList);
        return "添加物料【" + materialDto.getName() + "】成功";
    }
    //检验模块-->QMS管理-->成品检验-->新增(项目名称下拉框:Id与名称,编码)
standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java
@@ -105,6 +105,12 @@
    public void delAllPro(String ids) {
        productMapper.delAllPro(ids);
    }
    //查询标准BOM技术指标中该型号工艺下最新版本的检验项目
    @Override
    public List<Product> selProByVerSpe(Integer technologyId, Integer ver) {
        return productMapper.selProByVerSpe(technologyId,ver);
    }
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java
@@ -62,7 +62,15 @@
    //(4级)新增-->型号
    @Override
    public void addSpecifications(SpecificationsDto specificationsDto) {
    public String addSpecifications(SpecificationsDto specificationsDto) {
        //校验添加该标准下的型号是否重复
        List<String> specificationsNameList = specificationsMapper.selectList(Wrappers.<Specifications>query().eq("standard_id", specificationsDto.getId())).stream().map(specifications -> {
            String specificationsName = specifications.getName();
            return specificationsName;
        }).collect(Collectors.toList());
        if (specificationsNameList.contains(specificationsDto.getSpecifications())){
            return "该标准下有该型号";
        }
        /*新增型号表*/
        Specifications specifications = new Specifications();
        specifications.setStandardId(specificationsDto.getId());
@@ -135,6 +143,7 @@
            }
        }
        techniqueService.saveBatch(techniqueList);
        return "添加型号【"+ specificationsDto.getSpecifications() +"】成功!";
    }
    /**
standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java
@@ -61,7 +61,15 @@
    //(3级)新增-->标准,型号
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addStandard(StandardDto standardDto) {
    public String addStandard(StandardDto standardDto) {
        //校验添加该物料下的标准是否重复
        List<String> standNameList = standardMapper.selectList(Wrappers.<Standard>query().eq("material_id", standardDto.getId())).stream().map(standard -> {
            String standardName = standard.getName();
            return standardName;
        }).collect(Collectors.toList());
        if (standNameList.contains(standardDto.getStandard())){
            return "该产品下有该标准";
        }
        /*新增标准表*/
        Standard standard = new Standard();
        standard.setMaterial_id(standardDto.getId());
@@ -139,6 +147,7 @@
            }
        }
        techniqueService.saveBatch(techniqueList);
        return "添加标准【"+ standardDto.getStandard() +"】成功!";
    }
}
standard-server/src/main/resources/mapper/MaterialMapper.xml
@@ -52,4 +52,12 @@
                    where standard.state = 1
                      and standard.id = #{id})
    </select>
    <!--根据物料名称查询成品产品编号-->
    <select id="selMcode" resultType="java.lang.String">
        select code
        from mom_ocean.material
        where state = 1
          and type = 1
          and name = #{name}
    </select>
</mapper>
standard-server/src/main/resources/mapper/ProductMapper.xml
@@ -88,6 +88,14 @@
                                where technology.state = 1
                                  and specifications_id = #{specificationsId})
    </select>
    <!--查询标准BOM技术指标中该型号工艺下最新版本的检验项目-->
    <select id="selProByVerSpe" resultType="com.yuanchu.mom.pojo.Product">
        select *
        from mom_ocean.product
        where state = 1
          and version = #{ver}
          and technology_id = #{technologyId}
    </select>
    <!--根据工艺路线id删除-->
    <update id="delProByTecId">
standard-server/src/main/resources/mapper/TechniqueMapper.xml
@@ -88,6 +88,25 @@
                                where technology.state = 1
                                  and specifications_id = #{specificationsId})
    </select>
    <!--根据工艺路线id查询所有版本-->
    <select id="selectVerByTeId" resultType="java.lang.Integer">
        select distinct version
        from mom_ocean.technique
        where state = 1
          and technology_id = #{technologyId}
    </select>
    <!--查询该工艺下最新版本在一个检验项目下可以使用哪些设备-->
    <select id="selDevByVerTecIdFaNam" resultType="java.util.Map">
        select device.id, device
        from mom_ocean.technique
                 left join mom_ocean.device on name = device
        where technique.state = 1
          and technology_id = #{technologyId}
          and product_father = #{father}
          and product = #{name}
          and version = #{ver}
    </select>
    <!--根据工艺路线id删除生产工艺-->
    <update id="delTeqByTecId">
standard-server/src/main/resources/mapper/TechnologyMapper.xml
@@ -61,6 +61,16 @@
        where state = 1
          and specifications_id = #{specificationsId}
    </select>
    <!--查询该型号工艺下最新版本的工艺id-->
    <select id="selTech" resultType="java.lang.Integer">
        select id
        from mom_ocean.technology
        where state = 1
          and father = #{techfather}
          and name = #{techname}
          and specifications_id = #{specificationId}
          and version = #{version}
    </select>
    <!--批量删除-->
    <update id="delAllTech">
system-run/src/main/resources/application-dev.yml
@@ -34,7 +34,7 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.73.113:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    url: jdbc:mysql://192.168.65.113:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: user
    password: 123456
    druid:
@@ -59,7 +59,7 @@
    # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
    database: 0
    # redis服务器地址(默认为localhost)
    host: 192.168.73.113
    host: 192.168.65.113
    # redis端口(默认为6379)
    port: 6379
    # redis访问密码(默认为空)
user-server/src/main/java/com/yuanchu/mom/service/UserService.java
@@ -10,8 +10,7 @@
    /*判断是否登录成功*/
    User selectUserByPwd(String account, String password);
    //根据用户id查询用户名
    String selectNameById(Integer id);
    /**
     * æ£€éªŒæ¨¡å—-->QMS管理-->成品检验-->新增(需要用户Id与名称)
user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
@@ -26,13 +26,6 @@
        return list.size()>0?list.get(0):null;
    }
    //根据用户id查询用户名
    @Override
    public String selectNameById(Integer id) {
        User user = userMapper.selectById(id);
        return user.getName();
    }
    @Override
    public List<Map<String, Object>> listUserIdAndName() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();