zhuo
2025-02-17 dda17e80a787c40c460a923cd50ac1a1f94ba157
移植检验下单模板
已删除3个文件
已修改17个文件
已添加17个文件
5144 ■■■■■ 文件已修改
basic-server/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/pom.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java 635 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/CopperInsOrderDto.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/CostStatisticsDto.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/InsOrderUpdateDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/InsulatingDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/RawMaterialStandardTreeDto.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/SampleOrderDto.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto2.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/mapper/RawMaterialOrderTemplateMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsOrder.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProduct.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProductResult.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java 246 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsUnqualifiedRetestProduct.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/pojo/RawMaterialOrderTemplate.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/service/InsOrderService.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java 289 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java 1711 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/pom.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Util.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/WxCpUtils.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/pom.xml
@@ -11,14 +11,19 @@
    <artifactId>basic-server</artifactId>
    <dependencies>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <!-- æ ¸å¿ƒæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>
        <!-- ç³»ç»Ÿæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
@@ -14,7 +14,7 @@
 * @Date 2024/8/28
 */
@Data
public class IfsInventoryQuantityCheckDto  implements Serializable {
public class IfsInventoryQuantityCheckDto implements Serializable {
    private Integer id;
basic-server/src/main/java/com/ruoyi/basic/dto/SampleDto.java
@@ -1,5 +1,6 @@
package com.ruoyi.basic.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@@ -13,11 +14,13 @@
    private String value;
    @ApiModelProperty("零件号")
    private String partNo;
    // æ ·å“è‹±æ–‡
    @ApiModelProperty("样品英文")
    private String sampleEn;
    @ApiModelProperty("产品")
    private List<ModelDto> children;
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -33,8 +33,6 @@
@AllArgsConstructor
public class CapacityScopeServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements CapacityScopeService {
    private LaboratoryMapper laboratoryMapper;
    private StructureItemParameterMapper structureItemParameterMapper;
    private StructureTestObjectMapper structureTestObjectMapper;
cnas-require/pom.xml
@@ -18,19 +18,23 @@
    </properties>
    <dependencies>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <!-- æ ¸å¿ƒæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>
        <!--业务模块-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>inspect-server</artifactId>
            <version>3.8.9</version>
        </dependency>
    </dependencies>
</project>
</project>
inspect-server/pom.xml
@@ -12,22 +12,34 @@
    <artifactId>inspect-server</artifactId>
    <dependencies>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <!-- æ ¸å¿ƒæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>
        <!--基础模块-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>basic-server</artifactId>
        </dependency>
        <!-- ç³»ç»Ÿæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
        </dependency>
        <!-- poi-tl包生成报告 -->
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.12.2</version>
        </dependency>
    </dependencies>
inspect-server/src/main/java/com/ruoyi/basic/controller/RawMaterialOrderController.java
@@ -1,318 +1,317 @@
//package com.ruoyi.basic.controller;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.ruoyi.basic.dto.IfsInventoryQuantityCheckDto;
//import com.ruoyi.basic.dto.IfsInventoryQuantityDto;
//import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
//import com.ruoyi.basic.service.RawMaterialOrderService;
//import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
//import com.ruoyi.common.core.domain.Result;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import lombok.AllArgsConstructor;
//import org.springframework.web.bind.annotation.*;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.File;
//import java.util.List;
//import java.util.Map;
//
///**
// * @Author zhuo
// * @Date 2024/7/31
// */
//@RequestMapping("/rawMaterialOrder")
//@RestController
//@AllArgsConstructor
//@Api(tags = "原材料下单")
//public class RawMaterialOrderController {
//
//    private RawMaterialOrderService rawMaterialOrderService;
//    private RawMaterialOrderTemplateService rawMaterialOrderTemplateService;
//
//    @ApiOperation(value = "更具零件号获取标准树")
//    @GetMapping("/selectStandardTreeListByPartNo")
//    public Result selectStandardTreeListByPartNo(String partNo) {
//        return Result.success(rawMaterialOrderService.selectStandardTreeListByPartNo(partNo));
//    }
//
//    @ApiOperation(value = "原材料检验查询代下单")
//    @GetMapping("/getPurchaseOrder")
//    public Result getPurchaseOrder(Page page, IfsInventoryQuantityCheckDto ifsInventoryQuantity){
//        return Result.success(rawMaterialOrderService.selectIfsInventoryQuantity(page, ifsInventoryQuantity));
//    }
//
//    @ApiOperation(value = "原材料检验查询检验中")
//    @GetMapping("/getIfsByStateOne")
//    public Result getIfsByStateOne(Page page, IfsInventoryQuantityDto ifsInventoryQuantityDto) throws Exception {
//        return Result.success(rawMaterialOrderService.getIfsByStateOne(page, ifsInventoryQuantityDto));
//    }
//
//    @ApiOperation(value = "原材料检验查询已检验")
//    @GetMapping("/getIfsByOver")
//    public Result getIfsByOver(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) throws Exception {
//        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
//    }
//
//    @ApiOperation(value = "添加原材料检验单模板")
//    @PostMapping("/addRawMaterOrderTemplate")
//    public Result<?> addRawMaterOrderTemplate(@RequestBody RawMaterialOrderTemplate rawMaterialOrderTemplate) {
//        return Result.success(rawMaterialOrderTemplateService.addRawMaterOrderTemplate(rawMaterialOrderTemplate));
//    }
//    @ApiOperation(value = "查询原材料检验单模板列表")
//    @GetMapping("/selectRawMaterOrderTemplate")
//    public Result<?> selectRawMaterOrderTemplate(String partNo) {
//        return Result.success(rawMaterialOrderTemplateService.selectRawMaterOrderTemplate(partNo));
//    }
//
//    @ApiOperation(value = "通过原材料检验单模板id获取检验单模板内容")
//    @GetMapping("/selectRawMaterOrderTemplateById")
//    public Result<?> selectRawMaterOrderTemplateById(Integer id) {
//        return Result.success("成功", rawMaterialOrderTemplateService.selectRawMaterOrderTemplateById(id));
//    }
//
//    @ApiOperation(value = "删除原材料检验单模板")
//    @PostMapping("/delRawMaterOrderTemplate")
//    public Result<?> delRawMaterOrderTemplate(Integer id) {
//        return Result.success(rawMaterialOrderTemplateService.delRawMaterOrderTemplate(id));
//    }
//
//
//    /**
//     * æŠ¥æ£€æ‰¹é‡
//     * @param param åŽŸææ–™id
//     * @return
//     */
//    @ApiOperation(value = "报检批量")
//    @PostMapping("/inspectionReport")
//    public Result<?> inspectionReport(@RequestBody Map<String, Object> param) {
//        List<Integer> ids = (List<Integer>) param.get("ids");
//        return Result.success(rawMaterialOrderService.inspectionReport(ids));
//    }
//
//    /**
//     * å–消报检
//     * @param id åŽŸææ–™ä¸‹å•
//     * @return
//     */
//    @ApiOperation(value = "撤销报检")
//    @PostMapping("/revokeInspectionReport")
//    public Result<?> revokeInspectionReport(Integer id) {
//        return Result.success(rawMaterialOrderService.revokeInspectionReport(id));
//    }
//
//    /**
//     * æ‰“印标签查询
//     * @param param åŽŸææ–™id
//     * @return
//     */
//    @ApiOperation(value = "打印标签查询")
//    @PostMapping("/printLabel")
//    public Result<?> printLabel(@RequestBody Map<String, Object> param) {
//        List<Integer> ids = (List<Integer>) param.get("ids");
//        return Result.success(rawMaterialOrderService.printLabel(ids));
//    }
//
//    /**
//     * æŠ¥æ£€
//     * @param ifsInventoryQuantity åŽŸææ–™
//     * @return
//     */
//    @ApiOperation(value = "报检")
//    @PostMapping("/inspectionReportOne")
//    public Result<?> inspectionReportOne(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
//
//        return Result.success(rawMaterialOrderService.inspectionReportOne(ifsInventoryQuantity));
//    }
//
//    /**
//     * èŽ·å–é“œäº§ä¸šé“¾æ£€æµ‹æ•°æ®
//     * @param id åŽŸææ–™id
//     * @return
//     */
//    @ApiOperation(value = "获取铜产业链检测数据")
//    @GetMapping("/getIndustryChain")
//    public Result<?> getIndustryChain(Integer id) {
//        return Result.success("成功", rawMaterialOrderService.getIndustryChain(id));
//    }
//
//    /**
//     * åŽŸææ–™æ’¤é”€
//     * @param ifsInventoryId
//     * @return
//     */
//    @ApiOperation(value = "原材料撤销下单")
//    @PutMapping("/repealRawOrder")
//    public Result<?> repealRawOrder(Integer ifsInventoryId){
//        return Result.success(rawMaterialOrderService.repealRawOrder(ifsInventoryId));
//    }
//
//
//    @ApiOperation(value = "原材料下单免检")
//    @PostMapping("/addExemptionOrder")
//    public Result<?> addExemptionOrder(String str) {
//        Map<String, Object> map = JSON.parseObject(str, Map.class);
//        JSONArray jsonArray = JSON.parseArray(map.get("list")+"");
//        List<SampleProductDto> list = jsonArray.toJavaList(SampleProductDto.class);
//        InsOrder insOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), InsOrder.class);
//        return Result.success(rawMaterialOrderService.addExemptionOrder(list, insOrder));
//    }
//
//
//    @ApiOperation(value = "仓库报检查询")
//    @PostMapping("/getWarehouseSubmit")
//    public Result getWarehouseSubmit(@RequestBody Map<String, Object> data) throws Exception {
//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
//        IfsInventoryQuantity ifsInventoryQuantity = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantity.class);
//        return Result.success(rawMaterialOrderService.getWarehouseSubmit(page, ifsInventoryQuantity));
//    }
//
//    /**
//     * å–消报检
//     * @param id åŽŸææ–™ä¸‹å•
//     * @return
//     */
//    @ApiOperation(value = "删除原材料报检信息")
//    @PostMapping("/delIfsInventory")
//    public Result<?> delIfsInventory(Integer id) {
//        return Result.success(rawMaterialOrderService.delIfsInventory(id));
//    }
//
//    /**
//     * åŽŸææ–™ä¸‹å•æ”¾è¡Œ
//     * @param param
//     * @return
//     */
//    @ApiOperation(value = "原材料下单放行免检")
//    @PostMapping("/rawOrderRelease")
//    public Result<?> rawOrderRelease(@RequestBody Map<String, Object> param){
//        Integer ifsInventoryId = (Integer) param.get("ifsInventoryId");
//        String partDetail = (String) param.get("partDetail");
//        return Result.success(rawMaterialOrderService.rawOrderRelease(ifsInventoryId, partDetail));
//    }
//
//    /**
//     * åŽŸææ–™ä¸‹å•é€šçŸ¥å…æ£€æˆ–è€…å¤šæ¬¡æ£€éªŒ
//     * @param ifsInventoryId
//     * @return
//     */
//    @ApiOperation(value = "原材料下单通知免检或者多次检验")
//    @GetMapping("/notificationRawOrder")
//    public Result<?> notificationRawOrder(Integer ifsInventoryId){
//        return Result.success(rawMaterialOrderService.notificationRawOrder(ifsInventoryId));
//    }
//
//    @ValueClassify("原材料下单")
//    @ApiOperation(value = "原材料报检查询全部")
//    @PostMapping("/getIfsByAll")
//    public Result getIfsByAll(@RequestBody Map<String, Object> data) throws Exception {
//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
//        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
//        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
//    }
//
//
//    @ApiOperation(value = "新增原材料报检信息")
//    @PostMapping("/addIfsInventoryQuantity")
//    public Result addIfsInventoryQuantity(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
//        rawMaterialOrderService.addIfsInventoryQuantity(ifsInventoryQuantity);
//        return Result.success();
//    }
//
//    @ApiOperation(value = "原材料下单查看已完成信息")
//    @PostMapping("/getIfsByFinish")
//    public Result getIfsByFinish(@RequestBody Map<String, Object> data) throws Exception {
//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
//        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
//        ifsInventoryQuantityDto.setIsFinish(1);
//        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
//    }
//
//    @ApiOperation(value = "测试移库")
//    @PostMapping("/shiftingParking")
//    public Result shiftingParking(@RequestBody List<Integer> ids){
//        rawMaterialOrderService.shiftingParking(ids);
//        return Result.success();
//    }
//
//    @ApiOperation(value = "微信发送文件")
//    @GetMapping("/wxSend")
//    public Result wxSend(String user, String content, String filePath) throws Exception {
//        WxCpUtils.inform(user, content, new File(filePath));
//        return Result.success();
//    }
//
//    @ValueClassify("原材料下单")
//    @ApiOperation(value = "铜单丝下单免检")
//    @PostMapping("/addRawCopperOrderExemptionOrder")
//    public Result<?> addRawCopperOrderExemptionOrder(String str) {
//        Map<String, Object> map = JSON.parseObject(str, Map.class);
//        JSONArray jsonArray = JSON.parseArray(map.get("list")+"");
//        List<SampleProductDto> list = jsonArray.toJavaList(SampleProductDto.class);
//        CopperInsOrderDto CopperInsOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), CopperInsOrderDto.class);
//        return Result.success(rawMaterialOrderService.addRawCopperOrderExemptionOrder(list, CopperInsOrder));
//    }
//
//    /**
//     * è®©æ­¥æ”¾è¡Œ
//     * @param ifsInventoryId
//     * @return
//     */
//    @ValueClassify("原材料下单")
//    @ApiOperation(value = "让步放行")
//    @PostMapping("/concessionRelease")
//    public Result<?> concessionRelease(Integer ifsInventoryId){
//        return Result.success(rawMaterialOrderService.concessionRelease(ifsInventoryId));
//    }
//
//    /**
//     * åŽŸææ–™è¿›åŽ‚æ’¤é”€ä¸‹å•
//     * @param enterOrderId
//     * @return
//     */
//    @ApiOperation(value = "原材料进厂撤销下单")
//    @PostMapping("/repealEnterRawOrder")
//    public Result<?> repealEnterRawOrder(Integer enterOrderId){
//        return Result.success(rawMaterialOrderService.repealEnterRawOrder(enterOrderId));
//    }
//
//    /**
//     * åŽŸææ–™å­£åº¦æ’¤é”€ä¸‹å•
//     * @param quarterOrderId
//     * @return
//     */
//    @ApiOperation(value = "原材料季度撤销下单")
//    @PostMapping("/repealQuarterRawOrder")
//    public Result<?> repealQuarterRawOrder(Integer quarterOrderId){
//        return Result.success(rawMaterialOrderService.repealQuarterRawOrder(quarterOrderId));
//    }
//
//    @ApiOperation(value = "全部信息导出")
//    @PostMapping("/rawAllExport")
//    public void rawAllExport(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception {
//        IfsInventoryQuantitySupplierDto dto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
//        rawMaterialOrderService.rawAllExport(dto,response);
//    }
//
//    @ApiOperation(value = "原材料检验查询季度检验")
//    @PostMapping("/getIfsByQuarter")
//    public Result getIfsByQuarter(@RequestBody Map<String, Object> data) throws Exception {
//        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
//        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
//        return Result.success(rawMaterialOrderService.getIfsByQuarter(page, ifsInventoryQuantityDto));
//    }
//
//    /**
//     * æå‰å…¥åº“
//     * @param ifsInventoryId
//     * @return
//     */
//    @ApiOperation(value = "提前入库")
//    @PostMapping("/advancedGodown")
//    public Result<?> advancedGodown(Integer ifsInventoryId){
//        return Result.success(rawMaterialOrderService.advancedGodown(ifsInventoryId));
//    }
//
//}
package com.ruoyi.basic.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.*;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.basic.pojo.InsOrder;
import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
import com.ruoyi.basic.service.RawMaterialOrderService;
import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.common.utils.WxCpUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;
import java.util.Map;
/**
 * @Author zhuo
 * @Date 2024/7/31
 */
@RequestMapping("/rawMaterialOrder")
@RestController
@AllArgsConstructor
@Api(tags = "原材料下单")
public class RawMaterialOrderController {
    private RawMaterialOrderService rawMaterialOrderService;
    private RawMaterialOrderTemplateService rawMaterialOrderTemplateService;
    @ApiOperation(value = "更具零件号获取标准树")
    @GetMapping("/selectStandardTreeListByPartNo")
    public Result selectStandardTreeListByPartNo(String partNo) {
        return Result.success(rawMaterialOrderService.selectStandardTreeListByPartNo(partNo));
    }
    @ApiOperation(value = "原材料检验查询代下单")
    @GetMapping("/getPurchaseOrder")
    public Result getPurchaseOrder(Page page, IfsInventoryQuantityCheckDto ifsInventoryQuantity){
        return Result.success(rawMaterialOrderService.selectIfsInventoryQuantity(page, ifsInventoryQuantity));
    }
    @ApiOperation(value = "原材料检验查询检验中")
    @GetMapping("/getIfsByStateOne")
    public Result getIfsByStateOne(Page page, IfsInventoryQuantityDto ifsInventoryQuantityDto) throws Exception {
        return Result.success(rawMaterialOrderService.getIfsByStateOne(page, ifsInventoryQuantityDto));
    }
    @ApiOperation(value = "原材料检验查询已检验")
    @GetMapping("/getIfsByOver")
    public Result getIfsByOver(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) throws Exception {
        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
    }
    @ApiOperation(value = "添加原材料检验单模板")
    @PostMapping("/addRawMaterOrderTemplate")
    public Result<?> addRawMaterOrderTemplate(@RequestBody RawMaterialOrderTemplate rawMaterialOrderTemplate) {
        return Result.success(rawMaterialOrderTemplateService.addRawMaterOrderTemplate(rawMaterialOrderTemplate));
    }
    @ApiOperation(value = "查询原材料检验单模板列表")
    @GetMapping("/selectRawMaterOrderTemplate")
    public Result<?> selectRawMaterOrderTemplate(String partNo) {
        return Result.success(rawMaterialOrderTemplateService.selectRawMaterOrderTemplate(partNo));
    }
    @ApiOperation(value = "通过原材料检验单模板id获取检验单模板内容")
    @GetMapping("/selectRawMaterOrderTemplateById")
    public Result<?> selectRawMaterOrderTemplateById(Integer id) {
        return Result.success("成功", rawMaterialOrderTemplateService.selectRawMaterOrderTemplateById(id));
    }
    @ApiOperation(value = "删除原材料检验单模板")
    @PostMapping("/delRawMaterOrderTemplate")
    public Result<?> delRawMaterOrderTemplate(Integer id) {
        return Result.success(rawMaterialOrderTemplateService.delRawMaterOrderTemplate(id));
    }
    /**
     * æŠ¥æ£€æ‰¹é‡
     * @param param åŽŸææ–™id
     * @return
     */
    @ApiOperation(value = "报检批量")
    @PostMapping("/inspectionReport")
    public Result<?> inspectionReport(@RequestBody Map<String, Object> param) {
        List<Integer> ids = (List<Integer>) param.get("ids");
        return Result.success(rawMaterialOrderService.inspectionReport(ids));
    }
    /**
     * å–消报检
     * @param id åŽŸææ–™ä¸‹å•
     * @return
     */
    @ApiOperation(value = "撤销报检")
    @PostMapping("/revokeInspectionReport")
    public Result<?> revokeInspectionReport(Integer id) {
        return Result.success(rawMaterialOrderService.revokeInspectionReport(id));
    }
    /**
     * æ‰“印标签查询
     * @param param åŽŸææ–™id
     * @return
     */
    @ApiOperation(value = "打印标签查询")
    @PostMapping("/printLabel")
    public Result<?> printLabel(@RequestBody Map<String, Object> param) {
        List<Integer> ids = (List<Integer>) param.get("ids");
        return Result.success(rawMaterialOrderService.printLabel(ids));
    }
    /**
     * æŠ¥æ£€
     * @param ifsInventoryQuantity åŽŸææ–™
     * @return
     */
    @ApiOperation(value = "报检")
    @PostMapping("/inspectionReportOne")
    public Result<?> inspectionReportOne(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
        return Result.success(rawMaterialOrderService.inspectionReportOne(ifsInventoryQuantity));
    }
    /**
     * èŽ·å–é“œäº§ä¸šé“¾æ£€æµ‹æ•°æ®
     * @param id åŽŸææ–™id
     * @return
     */
    @ApiOperation(value = "获取铜产业链检测数据")
    @GetMapping("/getIndustryChain")
    public Result<?> getIndustryChain(Integer id) {
        return Result.success("成功", rawMaterialOrderService.getIndustryChain(id));
    }
    /**
     * åŽŸææ–™æ’¤é”€
     * @param ifsInventoryId
     * @return
     */
    @ApiOperation(value = "原材料撤销下单")
    @PutMapping("/repealRawOrder")
    public Result<?> repealRawOrder(Integer ifsInventoryId){
        return Result.success(rawMaterialOrderService.repealRawOrder(ifsInventoryId));
    }
    @ApiOperation(value = "原材料下单免检")
    @PostMapping("/addExemptionOrder")
    public Result<?> addExemptionOrder(String str) {
        Map<String, Object> map = JSON.parseObject(str, Map.class);
        JSONArray jsonArray = JSON.parseArray(map.get("list")+"");
        List<SampleProductDto> list = jsonArray.toJavaList(SampleProductDto.class);
        InsOrder insOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), InsOrder.class);
        return Result.success(rawMaterialOrderService.addExemptionOrder(list, insOrder));
    }
    @ApiOperation(value = "仓库报检查询")
    @PostMapping("/getWarehouseSubmit")
    public Result getWarehouseSubmit(@RequestBody Map<String, Object> data) throws Exception {
        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
        IfsInventoryQuantity ifsInventoryQuantity = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantity.class);
        return Result.success(rawMaterialOrderService.getWarehouseSubmit(page, ifsInventoryQuantity));
    }
    /**
     * å–消报检
     * @param id åŽŸææ–™ä¸‹å•
     * @return
     */
    @ApiOperation(value = "删除原材料报检信息")
    @PostMapping("/delIfsInventory")
    public Result<?> delIfsInventory(Integer id) {
        return Result.success(rawMaterialOrderService.delIfsInventory(id));
    }
    /**
     * åŽŸææ–™ä¸‹å•æ”¾è¡Œ
     * @param param
     * @return
     */
    @ApiOperation(value = "原材料下单放行免检")
    @PostMapping("/rawOrderRelease")
    public Result<?> rawOrderRelease(@RequestBody Map<String, Object> param){
        Integer ifsInventoryId = (Integer) param.get("ifsInventoryId");
        String partDetail = (String) param.get("partDetail");
        return Result.success(rawMaterialOrderService.rawOrderRelease(ifsInventoryId, partDetail));
    }
    /**
     * åŽŸææ–™ä¸‹å•é€šçŸ¥å…æ£€æˆ–è€…å¤šæ¬¡æ£€éªŒ
     * @param ifsInventoryId
     * @return
     */
    @ApiOperation(value = "原材料下单通知免检或者多次检验")
    @GetMapping("/notificationRawOrder")
    public Result<?> notificationRawOrder(Integer ifsInventoryId){
        return Result.success(rawMaterialOrderService.notificationRawOrder(ifsInventoryId));
    }
    @ApiOperation(value = "原材料报检查询全部")
    @PostMapping("/getIfsByAll")
    public Result getIfsByAll(@RequestBody Map<String, Object> data) throws Exception {
        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
    }
    @ApiOperation(value = "新增原材料报检信息")
    @PostMapping("/addIfsInventoryQuantity")
    public Result addIfsInventoryQuantity(@RequestBody IfsInventoryQuantity ifsInventoryQuantity) {
        rawMaterialOrderService.addIfsInventoryQuantity(ifsInventoryQuantity);
        return Result.success();
    }
    @ApiOperation(value = "原材料下单查看已完成信息")
    @PostMapping("/getIfsByFinish")
    public Result getIfsByFinish(@RequestBody Map<String, Object> data) throws Exception {
        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
        IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
        ifsInventoryQuantityDto.setIsFinish(1);
        return Result.success(rawMaterialOrderService.getIfsByOver(page, ifsInventoryQuantityDto));
    }
    @ApiOperation(value = "测试移库")
    @PostMapping("/shiftingParking")
    public Result shiftingParking(@RequestBody List<Integer> ids){
        rawMaterialOrderService.shiftingParking(ids);
        return Result.success();
    }
    @ApiOperation(value = "微信发送文件测试")
    @GetMapping("/wxSend")
    public Result wxSend(String user, String content, String filePath) throws Exception {
        WxCpUtils.inform(user, content, new File(filePath));
        return Result.success();
    }
    @ApiOperation(value = "铜单丝下单免检")
    @PostMapping("/addRawCopperOrderExemptionOrder")
    public Result<?> addRawCopperOrderExemptionOrder(String str) {
        Map<String, Object> map = JSON.parseObject(str, Map.class);
        JSONArray jsonArray = JSON.parseArray(map.get("list")+"");
        List<SampleProductDto> list = jsonArray.toJavaList(SampleProductDto.class);
        CopperInsOrderDto CopperInsOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), CopperInsOrderDto.class);
        return Result.success(rawMaterialOrderService.addRawCopperOrderExemptionOrder(list, CopperInsOrder));
    }
    /**
     * è®©æ­¥æ”¾è¡Œ
     * @param ifsInventoryId
     * @return
     */
    @ApiOperation(value = "让步放行")
    @PostMapping("/concessionRelease")
    public Result<?> concessionRelease(Integer ifsInventoryId){
        return Result.success(rawMaterialOrderService.concessionRelease(ifsInventoryId));
    }
    /**
     * åŽŸææ–™è¿›åŽ‚æ’¤é”€ä¸‹å•
     * @param enterOrderId
     * @return
     */
    @ApiOperation(value = "原材料进厂撤销下单")
    @PostMapping("/repealEnterRawOrder")
    public Result<?> repealEnterRawOrder(Integer enterOrderId){
        return Result.success(rawMaterialOrderService.repealEnterRawOrder(enterOrderId));
    }
    /**
     * åŽŸææ–™å­£åº¦æ’¤é”€ä¸‹å•
     * @param quarterOrderId
     * @return
     */
    @ApiOperation(value = "原材料季度撤销下单")
    @PostMapping("/repealQuarterRawOrder")
    public Result<?> repealQuarterRawOrder(Integer quarterOrderId){
        return Result.success(rawMaterialOrderService.repealQuarterRawOrder(quarterOrderId));
    }
    @ApiOperation(value = "全部信息导出")
    @PostMapping("/rawAllExport")
    public void rawAllExport(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception {
        IfsInventoryQuantitySupplierDto dto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), IfsInventoryQuantitySupplierDto.class);
        rawMaterialOrderService.rawAllExport(dto,response);
    }
    @ApiOperation(value = "原材料检验查询季度检验")
    @GetMapping("/getIfsByQuarter")
    public Result getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto){
        return Result.success(rawMaterialOrderService.getIfsByQuarter(page, ifsInventoryQuantityDto));
    }
    /**
     * æå‰å…¥åº“
     * @param ifsInventoryId
     * @return
     */
    @ApiOperation(value = "提前入库")
    @PostMapping("/advancedGodown")
    public Result<?> advancedGodown(Integer ifsInventoryId){
        return Result.success(rawMaterialOrderService.advancedGodown(ifsInventoryId));
    }
}
inspect-server/src/main/java/com/ruoyi/basic/dto/CopperInsOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.ruoyi.basic.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.basic.pojo.InsOrder;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * é“œå•丝下单信息
 *
 * @Author zhuo
 * @Date 2024/9/13
 */
@Data
public class CopperInsOrderDto extends InsOrder {
    @ApiModelProperty("到货数量")
    private BigDecimal qtyArrived;
    @ApiModelProperty("单位")
    private String buyUnitMeas;
    @ApiModelProperty("供应商名称")
    private String supplierName;
    @ApiModelProperty("批号")
    private String updateBatchNo;
    @ApiModelProperty("接收时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime declareDate;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/CostStatisticsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.basic.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class CostStatisticsDto{
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","ZTT/QR-30-01-01","日期"})
    private LocalDateTime createTime;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","ZTT/QR-30-01-01","检验编号"})
    private String entrustCode;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","样品名称"})
    private String sample;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","规格型号"})
    private String model;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","样品数量"})
    private Integer num;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","总价"})
    private BigDecimal price;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","试验项目"})
    private String inspectionItem;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","委托单位"})
    private String company;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","委托人"})
    private String name;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","生产单位"})
    private String production;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","工程名称"})
    private String engineering;
    @ExcelIgnore
    private Integer createUser;
    @ExcelIgnore
    private Integer insSampleId;
    @ExcelIgnore
    private Double cost;//工时
    @TableField(exist = false,select = false)
    @ExcelIgnore
    private String dates;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityCheckDto.java
ÎļþÒÑɾ³ý
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
ÎļþÒÑɾ³ý
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantitySupplierDto.java
ÎļþÒÑɾ³ý
inspect-server/src/main/java/com/ruoyi/basic/dto/IfsStockQueryDTO.java
@@ -1,65 +1,65 @@
//package com.ruoyi.basic.dto;
//
//import lombok.Data;
//
//@Data
//public class IfsStockQueryDTO {
//    private String partNo;
//    private String partDescription; // é›¶ä»¶æè¿°
//    private String partDesc;
//    private String locNo; // åº“位号
//    private String locDesc; // åº“位描述
//    private String lotBatchNo; // æ‰¹å·
//    private String wdrNo; // WDR编号
//    private String warehouse; // ä»“库
//    private String quantityFlag; // æ•°é‡æ ‡è¯†(现有数量)
//    private String locationGroup; // åº“位组
//    private String locationGroupDesc; // åº“位组描述
//    private String reelNumber; // è½½å…·ç¼–号
//    private String startMeter; // èµ·å§‹ç±³æ ‡
//    private String endMeter; // æˆªæ­¢ç±³æ ‡
//    private String outerColor; // å¤–护颜色
//    private String insulationColor; // ç»ç¼˜é¢œè‰²
//    private String otcOrderNo; // ç‰©æ–™å±žæ€§é‡Œé¢çš„OTC订单号
//    private String mpsNo; // ç”Ÿäº§è®¡åˆ’号
//    private String letteringInfo; // å°å­—信息
//    private String sStockQuantity; // åº“存数量2
//    private String availableStockQuantity; // å¯ç”¨åº“存数量
//    private String sAvailableStockQuantity; // åº“用库存数量2
//    private String sunit; // å•位2
//    private String stockSource; // æ¥æº
//    private String inspInstorageTime; // æ£€æµ‹å…¥åº“日期
//    private String testRemark; // æ£€æµ‹å¤‡æ³¨
//    private String grossWeight; // æ¯›é‡
//    private String netWeight; // å‡€é‡
//    private String packingManner; // åŒ…装方式
//    private String cylinderNumber; //打圈个数
//    private String systemNo; //系统号
//    private String remark; //备注
//    private String customerName; //客户名称
//    private String reserveQuantity; //预留数量
//    private String lengthRequirement; // åˆ¤æ–­è¦æ±‚
//    private String inSource;//入库来源
//    private String splitQuality;//分割预留数量
//
//    //接口 getIfsStockReport ç”¨åˆ°çš„字段
//    private String attr23;//入库来源
//    private String attr6;//otc订单号
//    private String attr21;//客户名称
//    private String attr4;//外护颜色
//    private String attr5;//绝缘颜色
//    private String attr8;//印字信息
//    private String lot_batch_no;//批次号
//    private String location_no;//库位号
//    private String attr17;//包装方式
//    private String attr1;//载具编号
//
//    //接口queryColReservedInfoStd ç”¨åˆ°çš„两个字段
//    private String cotcOrderNo; // è¡¨é‡Œé¢çš„OTC订单号
//    private String cotcLineNo; // è¡¨é‡Œé¢çš„OTC行号
//
//    private Boolean isAll;//是否查询全部库存
//
//    private Long page;
//    private Long limit;
//}
package com.ruoyi.basic.dto;
import lombok.Data;
@Data
public class IfsStockQueryDTO {
    private String partNo;
    private String partDescription; // é›¶ä»¶æè¿°
    private String partDesc;
    private String locNo; // åº“位号
    private String locDesc; // åº“位描述
    private String lotBatchNo; // æ‰¹å·
    private String wdrNo; // WDR编号
    private String warehouse; // ä»“库
    private String quantityFlag; // æ•°é‡æ ‡è¯†(现有数量)
    private String locationGroup; // åº“位组
    private String locationGroupDesc; // åº“位组描述
    private String reelNumber; // è½½å…·ç¼–号
    private String startMeter; // èµ·å§‹ç±³æ ‡
    private String endMeter; // æˆªæ­¢ç±³æ ‡
    private String outerColor; // å¤–护颜色
    private String insulationColor; // ç»ç¼˜é¢œè‰²
    private String otcOrderNo; // ç‰©æ–™å±žæ€§é‡Œé¢çš„OTC订单号
    private String mpsNo; // ç”Ÿäº§è®¡åˆ’号
    private String letteringInfo; // å°å­—信息
    private String sStockQuantity; // åº“存数量2
    private String availableStockQuantity; // å¯ç”¨åº“存数量
    private String sAvailableStockQuantity; // åº“用库存数量2
    private String sunit; // å•位2
    private String stockSource; // æ¥æº
    private String inspInstorageTime; // æ£€æµ‹å…¥åº“日期
    private String testRemark; // æ£€æµ‹å¤‡æ³¨
    private String grossWeight; // æ¯›é‡
    private String netWeight; // å‡€é‡
    private String packingManner; // åŒ…装方式
    private String cylinderNumber; //打圈个数
    private String systemNo; //系统号
    private String remark; //备注
    private String customerName; //客户名称
    private String reserveQuantity; //预留数量
    private String lengthRequirement; // åˆ¤æ–­è¦æ±‚
    private String inSource;//入库来源
    private String splitQuality;//分割预留数量
    //接口 getIfsStockReport ç”¨åˆ°çš„字段
    private String attr23;//入库来源
    private String attr6;//otc订单号
    private String attr21;//客户名称
    private String attr4;//外护颜色
    private String attr5;//绝缘颜色
    private String attr8;//印字信息
    private String lot_batch_no;//批次号
    private String location_no;//库位号
    private String attr17;//包装方式
    private String attr1;//载具编号
    //接口queryColReservedInfoStd ç”¨åˆ°çš„两个字段
    private String cotcOrderNo; // è¡¨é‡Œé¢çš„OTC订单号
    private String cotcLineNo; // è¡¨é‡Œé¢çš„OTC行号
    private Boolean isAll;//是否查询全部库存
    private Long page;
    private Long limit;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/InsOrderUpdateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.basic.dto;
import com.ruoyi.basic.pojo.InsOrder;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/11/29
 */
@Data
public class InsOrderUpdateDto {
    @ApiModelProperty("订单修改对象")
    private InsOrder insOrder;
    @ApiModelProperty("检测样品对象")
    private List<SampleProductDto> sampleProduct;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/InsulatingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.basic.dto;
import com.ruoyi.basic.pojo.InsProduct;
import lombok.Data;
import java.util.List;
@Data
public class InsulatingDto {
    // æ–¹æ³•id
    private Integer standardMethodListId;
    // èŠ¯æ•°
    private List<String> num;
    // æ£€éªŒé¡¹
    private List<InsProduct> insProduct;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/RawMaterialStandardTreeDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.basic.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/7/31
 */
@Data
public class RawMaterialStandardTreeDto {
    @ApiModelProperty("树名称")
    private String treeName;
    @ApiModelProperty("树名称")
    private String code;
    @ApiModelProperty("树名称")
    private String label;
    @ApiModelProperty("树名称")
    private String value;
    @ApiModelProperty("产品")
    private List<SampleDto> children1;
    @ApiModelProperty("型号")
    private List<ModelDto> children2;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/SampleOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.ruoyi.basic.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.basic.pojo.InsOrder;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author gaoaoy
 * @version 1.0.0
 * @create 2024/3/14 18:46
 **/
@Data
@ExcelIgnoreUnannotated
public class SampleOrderDto extends InsOrder {
    @ApiModelProperty("检验对象")
    private String sampleType;
    @ExcelProperty(index = 2, value = "样品名称")
    @ApiModelProperty("样品名称")
    private String sampleName;
    @ExcelProperty(index = 3, value = "样品型号")
    @ApiModelProperty("样品型号")
    private String sampleModel;
    private String assign;
    @ExcelProperty(index = 4, value = "样品数量")
    @ApiModelProperty("样品数量")
    private Integer sampleNum;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ExcelProperty(index = 8, value = "检验进度%")
    @ApiModelProperty("检验进度%")
    private String insProgress;
    @ApiModelProperty("报告id")
    private String reportId;
    @TableField("`url`")
    private String url;
    private String urlS;
    private String name;
    @ExcelProperty(index = 5, value = "检验人")
    @ApiModelProperty("检验人")
    private String testingName;
    /**
     * (报告导出)紧急程度 ï¼ˆ0普通 1优先 2紧急)
     */
    @ExcelProperty(index = 6, value = "紧急程度")
    @ApiModelProperty("紧急程度 ï¼ˆ0普通 1优先 2紧急)")
    private String typeString;
    /**
     * (报告导出)检验结果
     */
    @ExcelProperty(index = 10, value = "检验结果")
    @ApiModelProperty("检验结果")
    private String insResultString;
    /**
     * (报告导出)不合格项目
     */
    @ApiModelProperty("不合格项")
    @ExcelProperty(index = 13, value = "不合格项")
    private String unqualifiedItem;
    /**
     * (报告导出)下单时间
     */
    @ExcelProperty(index = 11, value = "下单时间")
    @ApiModelProperty("下单时间")
    private String createTimeString;
    @ApiModelProperty("子实验室")
    private String sonLaboratory;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.basic.dto;
import com.ruoyi.basic.pojo.InsProduct;
import com.ruoyi.basic.pojo.InsSample;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class SampleProductDto extends InsSample {
    @ApiModelProperty("检验项目")
    private List<InsProduct> insProduct;
//    private List<BushingDto> bushing;
    @ApiModelProperty("子样品配置")
    private List<SampleProductDto> childSampleList;
    @ApiModelProperty("电缆配置对象")
    private InsulatingDto insulating;
    @ApiModelProperty("辅助线芯配置")
    private InsulatingDto auxiliaryWireCore;
//    private SheathDto sheath;
    @ApiModelProperty("检验人")
    private String checkName;
}
inspect-server/src/main/java/com/ruoyi/basic/dto/SampleProductDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
package com.ruoyi.basic.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.TreeMap;
@Data
public class SampleProductDto2 implements Serializable {
    @ApiModelProperty("样品id")
    private Integer id;
    @ApiModelProperty("检验项id")
    private Integer insProductId;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("样品名称")
    private String sample;
    @ApiModelProperty("检验项分类")
    private String inspectionItemClass;
    @ApiModelProperty("检验项分类英文")
    private String inspectionItemClassEN;
    @ApiModelProperty("检验项")
    private String inspectionItem;
    @ApiModelProperty("检验项英文")
    private String inspectionItemEn;
    @ApiModelProperty("检验子项")
    private String inspectionItemSubclass;
    @ApiModelProperty("检验子项英文")
    private String inspectionItemSubclassEn;
    @ApiModelProperty("单位")
    private String unit;
    @ApiModelProperty("样品型号")
    private String model;
    @ApiModelProperty("样品状态")
    private Integer insState;
    @ApiModelProperty("实验室")
    private String sonLaboratory;
    @ApiModelProperty("检验项类型")
    private String inspectionItemType;
    @ApiModelProperty("检验值类型")
    private String inspectionValueType;
    @ApiModelProperty("要求值")
    private String ask;
    @ApiModelProperty("试验要求")
    private String tell;
    @ApiModelProperty("检验结果")
    private String lastValue;
    @ApiModelProperty("结果判定")
    private Integer insResult;
    @ApiModelProperty("检验人")
    private String checkName;
    @ApiModelProperty("检验日期")
    private String checkTime;
    @ApiModelProperty("设备值")
    private String equipValue;
    @ApiModelProperty("序号")
    private String index;
    @ApiModelProperty("样品名称(整体)")
    private String inspectionName;
    @ApiModelProperty("条件")
    private String radius;
    @ApiModelProperty("检验结果列表")
    private List<String> lastValueList;
    @ApiModelProperty("检验结果列表")
    private List<Integer> insResultList;
    @ApiModelProperty("最终结果")
    private String finalResult;
    @ApiModelProperty("原材料id")
    private Integer ifsInventoryId;
    @ApiModelProperty("检验单类型")
    private String orderType;
    @ApiModelProperty("检验单类型")
    private Integer quantity;
    @ApiModelProperty("检验单类型")
    private Integer sort;
    @ApiModelProperty("电缆标识")
    private String cableTag;
    @ApiModelProperty("唯一结果值")
    private LinkedHashSet<String> tellSet;
    @ApiModelProperty("电缆标识内容集合")
    private TreeMap<String, String> cableTagValueMap;
    @ApiModelProperty("电缆标识结果集合")
    private TreeMap<String, Integer> cableTagResultMap;
}
inspect-server/src/main/java/com/ruoyi/basic/mapper/RawMaterialOrderTemplateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.basic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
import org.apache.ibatis.annotations.Mapper;
/**
 * åŽŸææ–™ä¸‹å•æ¨¡æ¿
 *
 * @author zhuo
 * @since 2024-08-05
 */
@Mapper
public interface RawMaterialOrderTemplateMapper extends BaseMapper<RawMaterialOrderTemplate> {
}
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,214 @@
package com.ruoyi.basic.pojo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* æ£€éªŒä¸‹å•
* @TableName ins_order
*/
@Data
@TableName("ins_order")
@ExcelIgnoreUnannotated
public class InsOrder implements Serializable {
    @ApiModelProperty(value = "主键")
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ExcelProperty(index = 0, value = "委托编号")
    @ApiModelProperty(value = "委托编号")
    private String entrustCode;
    @ApiModelProperty(value = "外部委托编号")
    private String outEntrustCode;
    @ApiModelProperty(value = "检验类别")
    private String orderType;
    @ApiModelProperty("下单客户")
    private String custom;
    @ExcelProperty(index = 1, value = "委托单位")
    @ApiModelProperty("委托单位")
    private String company;
    @ApiModelProperty("联系方式")
    private String phone;
    @ApiModelProperty("工厂域")
    private String code;
    @ApiModelProperty("紧急程度 ï¼ˆ0普通 1优先 2紧急)")
    private Integer type;
    @ExcelProperty(index = 9, value = "约定时间%")
    @ApiModelProperty("约定时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate appointed;
    @ApiModelProperty("检验结果, 0 ä¸åˆæ ¼, 1合格")
    private Integer insResult;
    @ApiModelProperty("样品处理方式")
    private Integer processing;
    @ApiModelProperty("是否留样")
    private Integer isLeave;
    @ApiModelProperty("状态:-1:原材料撤回  1:检验处理 0:待审核 2:退回 3:撤销")
    private Integer state;
    @ExcelProperty(index = 7, value = "备注")
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("备注英文")
    private String remarkEn;
    @ApiModelProperty("OTC订单号")
    private String otcCode;
    @ApiModelProperty("下单人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("下单时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty("下发时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime sendTime;
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("下单人id")
    private Integer userId;
    @ApiModelProperty("是否有配套样品")
    private Integer mating;
    @ApiModelProperty("检验状态(0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过)")
    private Integer insState;
    @ApiModelProperty("检验工厂")
    private String factory;
    @ApiModelProperty("实验室名称")
    private String laboratory;
    @ApiModelProperty("样品类型")
    private String sampleType;
    @ApiModelProperty("样品名称")
    private String sample;
    @ApiModelProperty("检验时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime insTime;
    @ApiModelProperty("退回理由")
    private String tell;
    @ApiModelProperty("报告发送方式 1: è‡ªå–, 0:其他")
    private Integer send;
    @ApiModelProperty("来样方式")
    private String formType;
    @ApiModelProperty("审核时间")
    private LocalDateTime examineTime;
    @ApiModelProperty("工程名称")
    private String engineering;
    @ApiModelProperty("工程名称英文")
    private String engineeringEn;
    @ApiModelProperty("生产单位")
    private String production;
    @ApiModelProperty("生产单位英文")
    private String productionEn;
    @ApiModelProperty("客户单位id")
    private Long companyId;
    @ApiModelProperty("委托人id")
    private Integer prepareUserId;
    @ExcelProperty(index = 12, value = "委托人")
    private String prepareUser;
    @ApiModelProperty(name = "委托人英文")
    private String prepareUserEn;
    @ApiModelProperty(name = "委托人工号")
    private String prepareCode;
    @ApiModelProperty("是否审核撤销")
    private Integer isRevocation;
    @ApiModelProperty("审核撤销的项目id")
    private String revocationInsProductIds;
    @ApiModelProperty("是否为原材料 1 æ˜¯ 0 å¦")
    private Integer typeSource;
    @ApiModelProperty("原材料id")
    private Integer ifsInventoryId;
    @ApiModelProperty("抽查数量")
    private String testQuantity;
    @ApiModelProperty("零件描述")
    private String partDetail;
    @ApiModelProperty("是否是免检, 0否 1是" )
    private Integer isExemption;
    @ApiModelProperty("温度")
    private String temperature;
    @ApiModelProperty("湿度")
    private String humidity;
    @ApiModelProperty("样品状态")
    private String sampleStatus;
    @ApiModelProperty("季度抽样项目id")
    private Integer quarterItemId;
    @ApiModelProperty("样品名称(报告展示字段)")
    private String sampleView;
    @ApiModelProperty("样品名称引文(报告展示字段)")
    private String sampleViewEn;
    @ApiModelProperty("是否是第一次提交0否1是")
    private Integer isFirstSubmit;
    @ApiModelProperty("第一次提交时间")
    private LocalDateTime firstSubmitDate;
}
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProduct.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,214 @@
package com.ruoyi.basic.pojo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
 * æ£€éªŒé¡¹ç›®
 *
 * @TableName ins_product
 */
@TableName(value = "ins_product")
@Data
public class InsProduct implements Serializable {
    /**
     * ä¸»é”®id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("项目参数id")
    private Integer structureItemParameterId;
    @TableField(exist = false,select = false)
    private String sampleCode;
    @ApiModelProperty("检验项")
    private String inspectionItem;
    @ApiModelProperty("检验项英文")
    private String inspectionItemEn;
    @ApiModelProperty("检验项分类")
    private String inspectionItemClass;
    @ApiModelProperty("检验项分类EN")
    private String inspectionItemClassEn;
    @ApiModelProperty("检验项子类")
    private String inspectionItemSubclass;
    @ApiModelProperty("检验项子类英文")
    private String inspectionItemSubclassEn;
    @ApiModelProperty("工厂")
    private String factory;
    @ApiModelProperty("实验室")
    private String laboratory;
    @ApiModelProperty("样品分类")
    private String sampleType;
    @ApiModelProperty("样品")
    private String sample;
    @ApiModelProperty("型号")
    private String model;
    @ApiModelProperty("方法")
    private String methodS;
    @ApiModelProperty("子实验室")
    private String sonLaboratory;
    @ApiModelProperty("计量单位")
    private String unit;
    @ApiModelProperty("单价(元)")
    private BigDecimal price;
    @ApiModelProperty("工时(H)")
    private BigDecimal manHour;
    @ApiModelProperty("工时分组")
    private String manHourGroup;
    @ApiModelProperty("检验项类型")
    private String inspectionItemType;
    @ApiModelProperty("检验值类型")
    private String inspectionValueType;
    @ApiModelProperty("设备组")
    private String deviceGroup;
    @ApiModelProperty("检验次数")
    private Integer checkoutNumber;
    @ApiModelProperty("区间")
    private String section;
    @ApiModelProperty("取值类型")
    private String valueType;
    @ApiModelProperty("方法")
    private String method;
    @ApiModelProperty("预计时间(h)")
    private Integer manDay;
    @ApiModelProperty("特殊标识")
    private String bsm;
    @ApiModelProperty("要求值")
    private String ask;
    @ApiModelProperty("要求描述")
    private String tell;
    @ApiModelProperty("最终值")
    @TableField("`last_value`")
    private String lastValue;
    @ApiModelProperty("合格状态: 1:合格 0:不合格, 3不判定")
    private Integer insResult;
    @ApiModelProperty("1:有效 0:无效")
    private Integer state;
    @ApiModelProperty("外键:ins_sample表id")
    private Integer insSampleId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("外键:standard_template表id")
    private Integer templateId;
    @TableField(exist = false)
    @ApiModelProperty("模板内容")
    private List<JSONObject> template;
    @TableField(exist = false)
    @ApiModelProperty("模板内容颜色")
    private Map<String, Object> style;
    @TableField(exist = false)
    @ApiModelProperty("检验结果对象")
    private InsProductResult insProductResult;
    @TableField(exist = false)
    @ApiModelProperty("模板名称")
    private String templateName;
    @ApiModelProperty("字典类型")
    private String dic;
    //温度
    private String temperature;
    //湿度
    private String humidity;
    private Integer insFiberId;
    private Integer insFibersId;
    private Integer insBushId;
    @ApiModelProperty("标准方法id")
    private Integer standardMethodListId;
    //返回的20度常温的计算值(温度循环)
    @TableField(exist = false ,select = false)
    private String complue;
    @ApiModelProperty(value = "条件")
    private String radius;
    @ApiModelProperty(value = "收费标准(元/次)")
    private String rates;
    @ApiModelProperty(value = "电缆配置标识")
    private String cableTag;
    @ApiModelProperty(value = "原材料配置标识")
    private String rawMaterialTag;
    @ApiModelProperty(value = "重复标识(一个检验项可能会存在多次)")
    private String repetitionTag;
    @ApiModelProperty(value = "排序")
    private Integer sort;
    // ç»‘定值不参加展示, åªå‚加计算
    @ApiModelProperty(value = "是否是绑定值, 0否, 1是")
    private Integer isBinding;
    @ApiModelProperty(value = "自关联(绑定id)")
    private Integer bindingProductId;
}
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsProductResult.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.basic.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æ£€éªŒé¡¹ç›®çš„结果
 * @TableName ins_product_result
 */
@TableName(value ="ins_product_result")
@Data
public class InsProductResult implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("外键:检验项目id")
    private Integer insProductId;
    @ApiModelProperty("检验值")
    private String insValue;
    @ApiModelProperty("计算值")
    private String comValue;
    @ApiModelProperty("设备值")
    private String equipValue;
    @ApiModelProperty("设备名称")
    private String equipName;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsSample.java
@@ -1,123 +1,123 @@
//package com.ruoyi.basic.pojo;
//
//import com.baomidou.mybatisplus.annotation.*;
//import com.fasterxml.jackson.annotation.JsonFormat;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//
//import java.io.Serializable;
//import java.time.LocalDateTime;
//
///**
// * æ£€éªŒæ ·å“
// * @TableName ins_sample
// */
//@TableName(value ="ins_sample")
//@Data
//public class InsSample implements Serializable {
//    /**
//     *
//     */
//    @TableId(type = IdType.AUTO)
//    private Integer id;
//
//    /**
//     * 1:合格 0:不合格
//     */
//    private Integer insResult;
//
//    /**
//     * å¤–键:ins_order表id
//     */
//    private Integer insOrderId;
//
//    /**
//     * é…å¥—样品型号
//     */
//    private String joinModel;
//
//    /**
//     * é…å¥—样品名称
//     */
//    private String joinName;
//
//    /**
//     * é…å¥—样品数量
//     */
//    private Integer joinNum;
//
//    /**
//     * æ ·å“ç¼–码
//     */
//    private String sampleCode;
//
//    /**
//     * æ£€éªŒå·¥åŽ‚
//     */
//    private String factory;
//
//    /**
//     * å®žéªŒå®¤åç§°
//     */
//    private String laboratory;
//
//    /**
//     * æ ·å“ç±»åž‹
//     */
//    private String sampleType;
//
//    /**
//     * æ ·å“åç§°
//     */
//    private String sample;
//
//    /**
//     * è§„格型号
//     */
//    private String model;
//
//    /**
//     * æ£€éªŒçŠ¶æ€(0:待检验1:检验中 2:已检验3:待复核4:复核未通过5:复核通过)
//     */
//    private Integer insState;
//
//    /**
//     * å¤‡æ³¨
//     */
//    private String remark;
//
//    private Integer standardMethodListId;
//
//    @ApiModelProperty("样品单位")
//    private String unit;
//
//    private Integer cellId;
//
//    @TableField(fill = FieldFill.INSERT)
//    private Integer createUser;
//
//    @ApiModelProperty("创建时间")
//    @TableField(fill = FieldFill.INSERT)
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private LocalDateTime createTime;
//
//    @TableField(fill = FieldFill.INSERT_UPDATE)
//    private Integer updateUser;
//
//    @ApiModelProperty("修改时间")
//    @TableField(fill = FieldFill.INSERT_UPDATE)
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private LocalDateTime updateTime;
//
//    private Integer parentId;
//
//    @ApiModelProperty("数量")
//    private Integer quantity;
//
//    @ApiModelProperty("特殊标准方法")
//    private String specialStandardMethod;
//
//    @TableField(select = false,exist = false)
//    private Integer num=1;
//
//}
package com.ruoyi.basic.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æ£€éªŒæ ·å“
 * @TableName ins_sample
 */
@TableName(value ="ins_sample")
@Data
public class InsSample implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * 1:合格 0:不合格
     */
    private Integer insResult;
    /**
     * å¤–键:ins_order表id
     */
    private Integer insOrderId;
    /**
     * é…å¥—样品型号
     */
    private String joinModel;
    /**
     * é…å¥—样品名称
     */
    private String joinName;
    /**
     * é…å¥—样品数量
     */
    private Integer joinNum;
    /**
     * æ ·å“ç¼–码
     */
    private String sampleCode;
    /**
     * æ£€éªŒå·¥åŽ‚
     */
    private String factory;
    /**
     * å®žéªŒå®¤åç§°
     */
    private String laboratory;
    /**
     * æ ·å“ç±»åž‹
     */
    private String sampleType;
    /**
     * æ ·å“åç§°
     */
    private String sample;
    /**
     * è§„格型号
     */
    private String model;
    /**
     * æ£€éªŒçŠ¶æ€(0:待检验1:检验中 2:已检验3:待复核4:复核未通过5:复核通过)
     */
    private Integer insState;
    /**
     * å¤‡æ³¨
     */
    private String remark;
    private Integer standardMethodListId;
    @ApiModelProperty("样品单位")
    private String unit;
    private Integer cellId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    private Integer parentId;
    @ApiModelProperty("数量")
    private Integer quantity;
    @ApiModelProperty("特殊标准方法")
    private String specialStandardMethod;
    @TableField(select = false,exist = false)
    private Integer num=1;
}
inspect-server/src/main/java/com/ruoyi/basic/pojo/InsUnqualifiedRetestProduct.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
package com.ruoyi.basic.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * ä¸åˆæ ¼æ£€éªŒé¡¹ç›®å¤æµ‹
 *
 * @author zhuo
 * @since 2024-09-03
 */
@TableName(value = "ins_unqualified_retest_product")
@Data
public class InsUnqualifiedRetestProduct implements Serializable {
    /**
     * ä¸»é”®id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    //外键:ins_product表id
    private Integer insProductId;
    //检验项
    private String inspectionItem;
    //检验项子类
    private String inspectionItemSubclass;
    //工厂
    private String factory;
    //实验室
    private String laboratory;
    //样品分类
    private String sampleType;
    //样品
    private String sample;
    //型号
    private String model;
    //子实验室
    private String sonLaboratory;
    //计量单位
    private String unit;
    //单价(元)
    private Double price;
    //工时(H)
    private Double manHour;
    //工时分组
    private String manHourGroup;
    //检验项类型
    private String inspectionItemType;
    //检验值类型
    private String inspectionValueType;
    //设备组
    private String deviceGroup;
    //检验次数
    private Integer checkoutNumber;
    //区间
    private String section;
    //取值类型
    private String valueType;
    //方法
    private String method;
    //预计时间(天)
    private Integer manDay;
    //特殊标识
    private String bsm;
    //要求值
    private String ask;
    //要求描述
    private String tell;
    //最终值
    @TableField("`last_value`")
    private String lastValue;
    //1:合格 0:不合格 3: ä¸åˆ¤å®š
    private Integer insResult;
    //1:有效 0:无效
    private Integer state;
    //外键:ins_sample表id
    private Integer insSampleId;
    // åˆ›å»ºäºº
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    //创建时间
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    // ä¿®æ”¹äºº
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    // ä¿®æ”¹æ—¶é—´
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    //外键:standard_template表id
    private Integer templateId;
    //字典类型
    private String dic;
    //方法
    private String methodS;
    //外键
    private Integer insFiberId;
    //外键
    private Integer insFibersId;
    //检验项EN
    private String inspectionItemEn;
    //检验项小类EN
    private String inspectionItemSubclassEn;
    //检验项分类
    private String inspectionItemClass;
    //检验项分类EN
    private String inspectionItemClassEn;
    //外键:标准方法id
    private Integer standardMethodListId;
    //温度
    private String temperature;
    //湿度
    private String humidity;
    //外键(目前只有松套管项目使用)
    private Integer insBushId;
    //范围
    private String radius;
    //电缆标识
    private String cableTag;
    //原材料批量标识
    private String rawMaterialTag;
    //复测次数标识
    private String retestTag;
    //排序
    private Integer sort;
}
inspect-server/src/main/java/com/ruoyi/basic/pojo/RawMaterialOrderTemplate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.basic.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * åŽŸææ–™ä¸‹å•æ¨¡æ¿
 *
 * @author zhuo
 * @since 2024-08-05
 */
@TableName(value = "raw_material_order_template")
@Data
public class RawMaterialOrderTemplate {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * æ¨¡æ¿åç§°
     */
    @ApiModelProperty("模板名称")
    private String name;
    /**
     * æ¨¡æ¿åç§°
     */
    @ApiModelProperty("零件编号")
    private String partNo;
    /**
     * æ¨¡æ¿å†…容
     */
    @ApiModelProperty("模板内容")
    private String thing;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
}
inspect-server/src/main/java/com/ruoyi/basic/service/InsOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
package com.ruoyi.basic.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.basic.dto.*;
import com.ruoyi.basic.pojo.InsOrder;
import com.ruoyi.basic.pojo.InsUnqualifiedRetestProduct;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * @author gaoaoy
 * @description é’ˆå¯¹è¡¨ã€ins_order(检验下单)】的数据库操作Service
 * @createDate 2024-03-12 16:17:55
 */
public interface InsOrderService extends IService<InsOrder> {
    //获取单位检验下单数据
    Map<String, Object> selectInsOrderParameter(IPage<InsOrder> page, SampleOrderDto sampleOrderDto);
    //修改检验下单数据
    int upInsOrder(Integer orderId,Integer sampleId, String appointed, Integer userId,String sonLaboratory);
    int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing);
    Map<String, Object> getInsOrder(Integer id);
    int upInsOrderOfState(InsOrder insOrder);
    Map<String, Object> getInsOrderAndSample(Integer id, String laboratory);
    Map<String, Object> selectSampleAndProductByOrderId(IPage<SampleProductDto2> page, SampleProductDto2 sampleProductDto);
    Map<String, Object> costStatistics(IPage<CostStatisticsDto> page, CostStatisticsDto costStatisticsDto);
    Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto);
    Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber);
    int updateStatus(Integer id);
    void export(CostStatisticsDto costStatisticsDto,HttpServletResponse response)throws IOException, ServletException;
    // èŽ·å–ifs库存信息
    void getIfsOrder();
    /**
     * ä¿®æ”¹è®¢å•单号
     * @param insOrder
     */
    void updateEntrustCode(InsOrder insOrder);
    List<InsUnqualifiedRetestProduct> getRetestResult(Integer insProductId);
    void updateIfsInventoryQuantity(Integer id);
    /**
     * é“œæä¸‹å•
     * @param list
     * @param copperInsOrder
     * @return
     */
    int addRawCopperOrder(List<SampleProductDto> list, CopperInsOrderDto copperInsOrder);
    /**
     * ä¿®æ”¹å§”托编号
     * @param insOrder
     */
    void updateOrderEntrustCode(InsOrder insOrder);
    /**
     * ä¿®æ”¹æ£€éªŒä¸‹å•内容
     * @param insOrderUpdateDto
     * @return
     */
    Boolean updateInsOrder(InsOrderUpdateDto insOrderUpdateDto);
    /**
     * æˆå“æ ‡ç­¾æ‰“印
     * @param ids
     * @return
     */
    List<InsOrderPrintingVo> labelOrderPrinting(List<Integer> ids);
    /**
     * æ ¹æ®æ ·å“id查询检验项树
     * @param insSampleId
     * @return
     */
    List<StandardProductList> getProductTreeBySampleId(Integer insSampleId);
    /**
     * æ·»åŠ é—æ¼çš„æ£€éªŒé¡¹
     * @param omitOrderProductDto
     * @return
     */
    boolean addOmitOrderProduct(OmitOrderProductDto omitOrderProductDto);
    /**
     * æˆå“æ£€éªŒå•导出
     * @param sampleOrderDto
     * @param response
     */
    void rawAllInsOrderExport(SampleOrderDto sampleOrderDto, HttpServletResponse response);
}
inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderService.java
@@ -1,143 +1,146 @@
//package com.ruoyi.basic.service;
//
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.UnsupportedEncodingException;
//import java.util.List;
//import java.util.Map;
//
///**
// * @Author zhuo
// * @Date 2024/7/31
// */
//public interface RawMaterialOrderService {
//
//    RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo);
//
//    /**
//     * æŠ¥æ£€æŸ¥è¯¢
//     * @param page
//     * @param ifsInventoryQuantity
//     * @return
//     */
//    Map<String,Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity);
//
//    /**
//     * æŸ¥è¯¢æ£€éªŒå€¼
//     * @param page
//     * @param ifsInventoryQuantityDto
//     * @return
//     */
//    Map<String,Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
//
//    int inspectionReport(List<Integer> ids);
//
//    int revokeInspectionReport(Integer id);
//
//    List<IfsInventoryQuantityDto> printLabel(List<Integer> ids);
//
//    int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity);
//
//    String getIndustryChain(Integer id);
//
//    /**
//     * åŽŸææ–™æ’¤é”€ä¸‹å•
//     * @param ifsInventoryId
//     * @return
//     */
//    boolean repealRawOrder(Integer ifsInventoryId);
//
//    /**
//     * æ·»åŠ å…æ£€è®¢å•
//     * @param list
//     * @param insOrder
//     * @return
//     */
//    int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder);
//
//    Map<String,Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity);
//
//    /**
//     * æŸ¥è¯¢å·²æ£€éªŒ
//     * @param page
//     * @param ifsInventoryQuantityDto
//     * @return
//     */
//    Map<String,Object>  getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
//
//    int delIfsInventory(Integer id);
//
//    /**
//     * åŽŸææ–™æ”¾è¡Œå…æ£€
//     * @param ifsInventoryId
//     * @return
//     */
//    boolean rawOrderRelease(Integer ifsInventoryId, String partDetail);
//
//    /**
//     * åŽŸææ–™ä¸‹å•é€šçŸ¥å…æ£€æˆ–è€…å¤šæ¬¡æ£€éªŒ
//     * @param ifsInventoryId
//     * @return
//     */
//    int notificationRawOrder(Integer ifsInventoryId);
//
//    /**
//     * æ‰‹åŠ¨æ·»åŠ åŽŸæä¿¡æ¯
//     * @param ifsInventoryQuantity
//     */
//    void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity);
//
//    void shiftingParking(List<Integer> ids);
//
//    /**
//     * é“œå•丝下单免检
//     * @param list
//     * @param copperInsOrder
//     */
//    int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto copperInsOrder);
//
//    /**
//     * è®©æ­¥u放行
//     * @param ifsInventoryId
//     * @return
//     */
//    boolean concessionRelease(Integer ifsInventoryId);
//
//    /**
//     * åŽŸææ–™è¿›åŽ‚æ’¤é”€ä¸‹å•
//     * @param enterOrderId
//     * @return
//     */
//    boolean repealEnterRawOrder(Integer enterOrderId);
//
//    /**
//     * åŽŸææ–™å­£åº¦æ’¤é”€ä¸‹å•
//     * @param quarterOrderId
//     * @return
//     */
//    boolean repealQuarterRawOrder(Integer quarterOrderId);
//
//    /**
//     * åŽŸææ–™æŠ¥æ£€å…¨éƒ¨ä¿¡æ¯å¯¼å‡º
//     * @param dto
//     * @param response
//     */
//    void rawAllExport(IfsInventoryQuantitySupplierDto dto, HttpServletResponse response) throws UnsupportedEncodingException;
//
//    /**
//     * åŽŸææ–™æŸ¥è¯¢å¯ä»¥å­£åº¦æ£€éªŒçš„å†…å®¹
//     * @param page
//     * @param ifsInventoryQuantityDto
//     * @return
//     */
//    Map<String,Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
//
//    /**
//     * advancedGodown
//     * @param ifsInventoryId
//     * @return
//     */
//    boolean advancedGodown(Integer ifsInventoryId);
//}
package com.ruoyi.basic.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.*;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.basic.pojo.InsOrder;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
/**
 * @Author zhuo
 * @Date 2024/7/31
 */
public interface RawMaterialOrderService {
    RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo);
    /**
     * æŠ¥æ£€æŸ¥è¯¢
     * @param page
     * @param ifsInventoryQuantity
     * @return
     */
    Map<String,Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity);
    /**
     * æŸ¥è¯¢æ£€éªŒå€¼
     * @param page
     * @param ifsInventoryQuantityDto
     * @return
     */
    Map<String,Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
    int inspectionReport(List<Integer> ids);
    int revokeInspectionReport(Integer id);
    List<IfsInventoryQuantityDto> printLabel(List<Integer> ids);
    int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity);
    String getIndustryChain(Integer id);
    /**
     * åŽŸææ–™æ’¤é”€ä¸‹å•
     * @param ifsInventoryId
     * @return
     */
    boolean repealRawOrder(Integer ifsInventoryId);
    /**
     * æ·»åŠ å…æ£€è®¢å•
     * @param list
     * @param insOrder
     * @return
     */
    int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder);
    Map<String,Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity);
    /**
     * æŸ¥è¯¢å·²æ£€éªŒ
     * @param page
     * @param ifsInventoryQuantityDto
     * @return
     */
    Map<String,Object>  getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
    int delIfsInventory(Integer id);
    /**
     * åŽŸææ–™æ”¾è¡Œå…æ£€
     * @param ifsInventoryId
     * @return
     */
    boolean rawOrderRelease(Integer ifsInventoryId, String partDetail);
    /**
     * åŽŸææ–™ä¸‹å•é€šçŸ¥å…æ£€æˆ–è€…å¤šæ¬¡æ£€éªŒ
     * @param ifsInventoryId
     * @return
     */
    int notificationRawOrder(Integer ifsInventoryId);
    /**
     * æ‰‹åŠ¨æ·»åŠ åŽŸæä¿¡æ¯
     * @param ifsInventoryQuantity
     */
    void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity);
    void shiftingParking(List<Integer> ids);
    /**
     * é“œå•丝下单免检
     * @param list
     * @param copperInsOrder
     */
    int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto copperInsOrder);
    /**
     * è®©æ­¥u放行
     * @param ifsInventoryId
     * @return
     */
    boolean concessionRelease(Integer ifsInventoryId);
    /**
     * åŽŸææ–™è¿›åŽ‚æ’¤é”€ä¸‹å•
     * @param enterOrderId
     * @return
     */
    boolean repealEnterRawOrder(Integer enterOrderId);
    /**
     * åŽŸææ–™å­£åº¦æ’¤é”€ä¸‹å•
     * @param quarterOrderId
     * @return
     */
    boolean repealQuarterRawOrder(Integer quarterOrderId);
    /**
     * åŽŸææ–™æŠ¥æ£€å…¨éƒ¨ä¿¡æ¯å¯¼å‡º
     * @param dto
     * @param response
     */
    void rawAllExport(IfsInventoryQuantitySupplierDto dto, HttpServletResponse response) throws UnsupportedEncodingException;
    /**
     * åŽŸææ–™æŸ¥è¯¢å¯ä»¥å­£åº¦æ£€éªŒçš„å†…å®¹
     * @param page
     * @param ifsInventoryQuantityDto
     * @return
     */
    Map<String,Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto);
    /**
     * advancedGodown
     * @param ifsInventoryId
     * @return
     */
    boolean advancedGodown(Integer ifsInventoryId);
}
inspect-server/src/main/java/com/ruoyi/basic/service/RawMaterialOrderTemplateService.java
@@ -1,25 +1,25 @@
//package com.ruoyi.basic.service;
//
//import com.baomidou.mybatisplus.extension.service.IService;
//import com.yuanchu.mom.pojo.RawMaterialOrderTemplate;
//
//import java.util.List;
//
///**
// * åŽŸææ–™ä¸‹å•æ¨¡æ¿
// *
// * @author zhuo
// * @since 2024-08-05
// */
//public interface RawMaterialOrderTemplateService extends IService<RawMaterialOrderTemplate> {
//
//    int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate);
//
//    List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo);
//
//    String selectRawMaterOrderTemplateById(Integer id);
//
//    int delRawMaterOrderTemplate(Integer id);
//
//}
//
package com.ruoyi.basic.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
import java.util.List;
/**
 * åŽŸææ–™ä¸‹å•æ¨¡æ¿
 *
 * @author zhuo
 * @since 2024-08-05
 */
public interface RawMaterialOrderTemplateService extends IService<RawMaterialOrderTemplate> {
    int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate);
    List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo);
    String selectRawMaterOrderTemplateById(Integer id);
    int delRawMaterOrderTemplate(Integer id);
}
inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderServiceImpl.java
@@ -1,850 +1,861 @@
//package com.ruoyi.basic.service.impl;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.core.date.DateTime;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.StrUtil;
//import com.alibaba.excel.EasyExcel;
//import com.alibaba.excel.ExcelWriter;
//import com.alibaba.excel.write.metadata.WriteSheet;
//import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
//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.StringUtils;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.ruoyi.basic.service.RawMaterialOrderService;
//import lombok.AllArgsConstructor;
//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.UnsupportedEncodingException;
//import java.math.BigDecimal;
//import java.net.URLEncoder;
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//import java.util.concurrent.atomic.AtomicInteger;
//
///**
// * @Author zhuo
// * @Date 2024/7/31
// */
//@Service
//@AllArgsConstructor
//public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
//
//    private StandardTreeMapper standardTreeMapper;
//    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
//    private GetLook getLook;
//    private UserMapper userMapper;
//    private InsOrderService insOrderService;
//    private InsOrderMapper insOrderMapper;
//    private InsSampleMapper insSampleMapper;
//    private final NumberGenerator<InsOrder> numberGenerator;
//    private InsReportService insReportService;
//    private WechatProperty wechatProperty;
//    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
//    private InsProductMapper insProductMapper;
//    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
//
//
//    @Override
//    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
//        if (StringUtils.isBlank(partNo)) {
//            throw new ErrorException("零件号丢失");
//        }
//        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
//        if (CollectionUtil.isEmpty(factoryDtos)) {
//            throw new ErrorException("零件号为" + partNo + "的原材料没有对应的标准库配置");
//        }
//        RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
//        for (FactoryDto factoryDto : factoryDtos) {
//            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
//                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
//                    if (sampleTypeDto.getChildren().size() == 0) {
//                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
//                    }
//                    // åˆ¤æ–­ç»‘定的是否是当前零件号
//                    if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
//                        // æ·»åŠ å¯¹è±¡
//                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
//                                + laboratoryDto.getValue() + "-"
//                                + sampleTypeDto.getValue());
//                        rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
//                        rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
//                        rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
//                        rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
//                    } else {
//                        for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
//                            if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
//                                // æ·»åŠ å¯¹è±¡
//                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
//                                        + laboratoryDto.getValue() + "-"
//                                        + sampleTypeDto.getValue() + "-"
//                                        + sampleDto.getValue());
//                                rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
//                                rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
//                                rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
//                                rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
//                            }
//                        }
//                    }
//                }
//            }
//        }
//        return rawMaterialStandardTreeDto;
//    }
//
//    @Override
//    public Map<String, Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
//        Map<String, Object> map = new HashMap<>();
//        map.put("head", PrintChina.printChina(IfsInventoryQuantity.class));
//        map.put("body", standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
//        return map;
//    }
//
//    @Override
//    public Map<String, Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
//        if (map1.get("look") == 1) {
//            //个人
//            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
//        }
//        Map<String, Object> map = new HashMap<>();
////        ifsInventoryQuantityDto.setOrderState(null);
//        map.put("head", PrintChina.printChina(IfsInventoryQuantityDto.class));
//        map.put("body", standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto)));
//        return map;
//    }
//
//
//    /**
//     * æŠ¥æ£€
//     * @param ids
//     * @return
//     */
//    @Override
//    public int inspectionReport(List<Integer> ids) {
//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
//                .in(IfsInventoryQuantity::getId, ids)
//                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
//                .set(IfsInventoryQuantity::getDeclareUserId, userId)
//                .set(IfsInventoryQuantity::getIsInspect, 1)
//                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
//        );
//        threadPoolTaskExecutor.execute(() -> {
//            List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
//                    .in(IfsInventoryQuantity::getId, ids));
//            // ä¼ä¸šå¾®ä¿¡é€šçŸ¥
//            String message = "";
//            message += "新增报检通知";
//            for (IfsInventoryQuantity inventoryQuantity : quantityList) {
//                message += "\n批次号: " + inventoryQuantity.getUpdateBatchNo();
//                message += "\n零件描述: " + inventoryQuantity.getPartDesc();
//                message += "\n抵达数量: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
//
//                // åˆ¤æ–­æœ‰æ²¡æœ‰åˆ°20吨. æˆ–者能否免检
//                int result = notificationRawOrder(inventoryQuantity.getId());
//                switch (result) {
//                    case 1:
//                        message += "\n当前样品已检验过, å¯ä»¥å…æ£€";
//                        break;
//                    case 2:
//                        message += "\n当前样品已超过20吨";
//                        break;
//                }
//                message += "\n";
//            }
//            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
//        });
//        return 1;
//    }
//
//    /**
//     * æ’¤é”€æŠ¥æ£€
//     * @param id
//     * @return
//     */
//    @Override
//    public int revokeInspectionReport(Integer id) {
//        return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
//                .eq(IfsInventoryQuantity::getId, id)
//                .set(IfsInventoryQuantity::getIsInspect, 0)
//        );
//    }
//
//    /**
//     * æ‰“印标签查询
//     * @param ids
//     * @return
//     */
//    @Override
//    public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
//        return ifsInventoryQuantityMapper.printLabel(ids);
//    }
//
//    /**
//     * æŠ¥æ£€
//     * @param ifsInventoryQuantity
//     * @return
//     */
//    @Override
//    public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
//                .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
//                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
//                .set(IfsInventoryQuantity::getDeclareUserId, userId)
//                .set(IfsInventoryQuantity::getIsInspect, 1)
//                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
//                .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
//        );
//
//        threadPoolTaskExecutor.execute(() -> {
//            IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
//            // ä¼ä¸šå¾®ä¿¡é€šçŸ¥
//            String message = "";
//            message += "新增报检通知";
//            message += "\n批次号: " + inventoryQuantity.getUpdateBatchNo();
//            message += "\n零件描述: " + inventoryQuantity.getPartDesc();
//            message += "\n抵达数量: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
//            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
//        });
//        return 1;
//    }
//
//    /**
//     * èŽ·å–é“œäº§ä¸šé“¾æ£€æµ‹æ•°æ®
//     * @param id
//     * @return
//     */
//    @Override
//    public String getIndustryChain(Integer id) {
//        return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
//    }
//
//    /**
//     * åŽŸææ–™æ’¤é”€æŽ¥å£
//     * @param ifsInventoryId
//     * @return
//     */
//    @Override
//    public boolean repealRawOrder(Integer ifsInventoryId) {
//        // æŸ¥è¯¢åˆ¤æ–­æ˜¯å¦æ˜¯é“œå•丝
//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
//        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
//            // é“œå•丝直接删除就行
//            ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
//        } else {
//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                    .set(IfsInventoryQuantity::getState, 0)
//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
//                    .eq(IfsInventoryQuantity::getId, ifsInventoryId));
//        }
//
//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
//                .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
//                .set(InsOrder::getState, -1)
//                .set(InsOrder::getEntrustCode, ""));// æ’¤é”€
//        return true;
//    }
//
//    /**
//     * åŽŸææ–™å…æ£€ä¸‹å•
//     * @param list
//     * @param insOrder
//     * @return
//     */
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
//        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
//            throw new ErrorException("只有进厂检验才能免检");
//        }
//        insOrder.setSendTime(LocalDateTime.now());
//        // ä¿®æ”¹è®¢å•表直接为已检验
//        insOrder.setState(4);
//        insOrder.setTypeSource(1);
//
//        String code = "Y";
//        // ç”Ÿæˆç¼–号
//        String no = numberGenerator.generateNumberWithPrefix(3,
//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
//                InsOrder::getEntrustCode);
//
//        insOrderMapper.insert(insOrder); // ä¸»è¡¨
//
//        AtomicInteger count = new AtomicInteger();
//        list.forEach(a -> {
//            count.getAndIncrement();
//            a.setId(null);
//            a.setInsOrderId(insOrder.getId());
//            if (StrUtil.isEmpty(a.getSampleCode())) {
//                // å¦‚果只有一个样品就不需要拼接数字
//                if (list.size() != 1) {
//                    a.setSampleCode(no + "-" + count.get());
//                } else {
//                    a.setSampleCode(no);
//                }
//            }
//            insSampleMapper.insert(a);
//
//            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
//                throw new ErrorException("免检不需要填写检验项");
//            }
//        });
//
//        // åŽŸææ–™ä¸‹å•: å§”托人就是报检人, ç”Ÿäº§å•位就是供应商单位
//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
//        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
//        User user = userMapper.selectById(declareUserId);
//        // ä¾›åº”商名称
//        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
//        // å§”托人名称
//        insOrder.setPrepareUser(user.getName());
//        insOrder.setPhone(user.getPhone());
//
//        // ä¿®æ”¹åŽŸææ–™æ•°æ®ç›´æŽ¥ä¸ºå·²æ£€éªŒ
//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
//                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
//
//        insOrder.setExamineTime(LocalDateTime.now());
//
//        insOrder.setEntrustCode(no);
//        insOrder.setIsExemption(1);
//
//        insOrderMapper.updateById(insOrder);
//
//        // æ·»åŠ å·¥æ—¶
//        addAuxiliary(insOrder, ifsInventoryQuantity);
//
//        // todo: ifs直接移库
//        insReportService.isRawMaterial(insOrder);
//
//        return insOrder.getId();
//    }
//
//
//    /**
//     * æŸ¥è¯¢å¾…下单
//     * @param page
//     * @param ifsInventoryQuantity
//     * @return
//     */
//    @Override
//    public Map<String, Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
//        Map<String, Object> map = new HashMap<>();
//        map.put("head", PrintChina.printChina(IfsInventoryQuantityCheckDto.class));
//        map.put("body", standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
//        return map;
//    }
//
//    /**
//     * æŸ¥è¯¢å·²æ£€éªŒ
//     * @param page
//     * @param ifsInventoryQuantityDto
//     * @return
//     */
//    @Override
//    public Map<String, Object> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
//        if (map1.get("look") == 1) {
//            //个人
//            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
//        }
//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
//        ifsInventoryQuantityDto.setEndDeclareDate(null);
//
//        Map<String, Object> map = new HashMap<>();
//        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
//        map.put("body", standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
//        return map;
//    }
//
//    /**
//     * åˆ é™¤åŽŸææ–™æŠ¥æ£€ä¿¡æ¯
//     * @param id
//     * @return
//     */
//    @Override
//    public int delIfsInventory(Integer id) {
//        return ifsInventoryQuantityMapper.deleteById(id);
//    }
//
//    /**
//     * åŽŸææ–™æ”¾è¡Œå…æ£€
//     * @param ifsInventoryId
//     * @return
//     */
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
//        // ä¿®æ”¹åŽŸææ–™æ•°æ®ç›´æŽ¥ä¸ºå·²æ£€éªŒ
//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                .set(IfsInventoryQuantity::getState, 2)
//                .set(IfsInventoryQuantity::getIsQuarter, 0)
//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
//
//        // æŸ¥è¯¢åŽŸææ–™ä¿¡æ¯
//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
//        // å§”托人就是报检人, ç”Ÿäº§å•位就是供应商单位
//        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
//        User user = userMapper.selectById(declareUserId);
//
//        InsOrder insOrder = new InsOrder();
//        insOrder.setState(4);
//        insOrder.setTypeSource(1);
//        String code = "Y";
//        // ç”Ÿæˆç¼–号
//        String no = numberGenerator.generateNumberWithPrefix(3,
//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
//                InsOrder::getEntrustCode);
//        insOrder.setExamineTime(LocalDateTime.now());
//        insOrder.setEntrustCode(no);
//        insOrder.setIsExemption(1);
//        // ä¾›åº”商名称
//        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
//        // å§”托人名称
//        insOrder.setPrepareUser(user.getName());
//        insOrder.setPhone(user.getPhone());
//        insOrder.setIfsInventoryId(ifsInventoryId);
//        insOrder.setPartDetail(partDetail);
//        insOrder.setSendTime(LocalDateTime.now());
//        insOrder.setSample(ifsInventoryQuantity.getPartDesc());
//        // è¿›åŽ‚æ£€éªŒ
//        insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
//
//        insOrderMapper.insert(insOrder);
//
//        // æ·»åŠ å·¥æ—¶
//        addAuxiliary(insOrder, ifsInventoryQuantity);
//
//        // todo: ifs直接移库
//        insReportService.isRawMaterial(insOrder);
//        return true;
//    }
//
//    /**
//     * 0, æ— æç¤º, 1提示  å½“前批次的样品已检验过, å¯ä»¥å…æ£€, 2 æç¤º å½“前批次的样品已超20吨, éœ€è¦å¤šçº§å¤šæ¬¡æ£€éªŒ
//     *
//     * åŽŸææ–™ä¸‹å•é€šçŸ¥å…æ£€æˆ–è€…å¤šæ¬¡æ£€éªŒ
//     * @param ifsInventoryId
//     * @return
//     */
//    @Override
//    public int notificationRawOrder(Integer ifsInventoryId) {
//        IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
//        // æŸ¥è¯¢å½“前批次, ä¾›åº”商, é›¶ä»¶å·çš„原材料是否超过了20吨, è¶…过了20吨需要进行多次检验提醒
//        List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
//                .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
//                .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
//                .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
//                .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
//
//        // åˆ¤æ–­æ˜¯å¦å¤§äºŽ20吨
//        BigDecimal bigDecimal = new BigDecimal("20000");
//        BigDecimal count = BigDecimal.ZERO;
//        for (IfsInventoryQuantity inventoryQuantity : quantityList) {
//            // åˆ¤æ–­å•位是kg或者t
//            if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
//                count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
//            } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
//                count = count.add(inventoryQuantity.getQtyArrived());
//            }
//        }
//
//        if (count.compareTo(bigDecimal) >= 0) {
//            return 2;
//        } else {
//            // åˆ¤æ–­ä¹‹å‰æ˜¯å¦å‡ºè¿‡æŠ¥å‘Š, å‡ºè¿‡æŠ¥å‘Šå¯ä»¥å…æ£€
//            int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
//            if (reportCount > 0) {
//                return 1;
//            }
//        }
//        return 0;
//    }
//
//    /**
//     * æŠ¥æ£€å¯ä»¥æ–°å¢žæŠ¥æ£€ä¿¡æ¯
//     * @param ifsInventoryQuantity
//     */
//    @Override
//    public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
//        ifsInventoryQuantity.setIsSource(0);
//        ifsInventoryQuantity.setState(0);
//        ifsInventoryQuantity.setIsFinish(0);
//        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
//    }
//
//    @Override
//    public void shiftingParking(List<Integer> ids) {
//        for (Integer id : ids) {
//            InsOrder order = insOrderService.getById(id);
//            // todo: ifs直接移库
//            insReportService.isRawMaterial(order);
//        }
//    }
//
//    /**
//     * é“œå•丝下单免检
//     * @param list
//     * @param insOrder
//     */
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
//        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
//            throw new ErrorException("只有进厂检验才能免检");
//        }
//        insOrder.setSendTime(LocalDateTime.now());
//        // ä¿®æ”¹è®¢å•表直接为已检验
//        insOrder.setState(4);
//        insOrder.setTypeSource(1);
//
//        String code = "Y";
//        // ç”Ÿæˆç¼–号
//        String no = numberGenerator.generateNumberWithPrefix(3,
//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
//                InsOrder::getEntrustCode);
//
//        insOrderMapper.insert(insOrder); // ä¸»è¡¨
//
//        AtomicInteger count = new AtomicInteger();
//        list.forEach(a -> {
//            count.getAndIncrement();
//            a.setId(null);
//            a.setInsOrderId(insOrder.getId());
//            if (StrUtil.isEmpty(a.getSampleCode())) {
//                // å¦‚果只有一个样品就不需要拼接数字
//                if (list.size() != 1) {
//                    a.setSampleCode(no + "-" + count.get());
//                } else {
//                    a.setSampleCode(no);
//                }
//            }
//            insSampleMapper.insert(a);
//
//            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
//                throw new ErrorException("免检不需要填写检验项");
//            }
//        });
//        // æ·»åŠ åŽŸææ–™ä¿¡æ¯
//        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
//        // åŸºæœ¬ä¿¡æ¯
//        ifsInventoryQuantity.setIsSource(0);
//        ifsInventoryQuantity.setState(2);
//        ifsInventoryQuantity.setIsInspect(1);
//        ifsInventoryQuantity.setIsFinish(1);
//        ifsInventoryQuantity.setIsCopper(1);
//        ifsInventoryQuantity.setInspectStatus(1);
//        ifsInventoryQuantity.setIsQuarter(0);
//
//        ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
//        ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
//        ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
//        ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
//        ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
//
//        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
//
//        insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
//        insOrder.setExamineTime(LocalDateTime.now());
//
//        insOrder.setEntrustCode(no);
//        insOrder.setIsExemption(1);
//
//        insOrderMapper.updateById(insOrder);
//
//        // æ·»åŠ å·¥æ—¶
//        addAuxiliary(insOrder, ifsInventoryQuantity);
//
//        return insOrder.getId();
//    }
//
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public boolean concessionRelease(Integer ifsInventoryId) {
//        // æŸ¥è¯¢åŽŸææ–™ä¿¡æ¯
//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
//        if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
//            throw new ErrorException("不合格的原材料才能让步放行");
//        }
//
//        // todo:需要判断oa流程是否是让步放行
//        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
//
//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                .set(IfsInventoryQuantity::getInspectStatus, 4)
//                .set(IfsInventoryQuantity::getToLocation, toLocation)
//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
//
//        return true;
//    }
//
//    /**
//     * åŽŸææ–™è¿›åŽ‚æ’¤é”€ä¸‹å•
//     * @param enterOrderId
//     * @return
//     */
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public boolean repealEnterRawOrder(Integer enterOrderId) {
//        // æŸ¥è¯¢è®¢å•
//        InsOrder order = insOrderMapper.selectById(enterOrderId);
//
//        // æŸ¥è¯¢åˆ¤æ–­æ˜¯å¦æ˜¯é“œå•丝
//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
//        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
//            // é“œå•丝直接删除就行
//            ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
//        } else {
//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                    .set(IfsInventoryQuantity::getState, 0)
//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
//        }
//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
//                .eq(InsOrder::getId, enterOrderId)
//                .set(InsOrder::getState, -1)
//                .set(InsOrder::getEntrustCode, ""));// æ’¤é”€
//
//        // æ¸…除之前的工时
//        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
//                .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
//
//        // æ¸…除之前报告
//        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
//                .eq(InsReport::getInsOrderId, enterOrderId));
//
//        return true;
//    }
//
//    /**
//     * åŽŸææ–™å­£åº¦æ’¤é”€ä¸‹å•
//     * @param quarterOrderId
//     * @return
//     */
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public boolean repealQuarterRawOrder(Integer quarterOrderId) {
//        // æŸ¥è¯¢è®¢å•
//        InsOrder order = insOrderMapper.selectById(quarterOrderId);
//
//        Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
//                .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
//                .ne(InsOrder::getState, -1)
//                .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
//                .ne(InsOrder::getId, order.getId()));
//        // åˆ¤æ–­ä¹‹å‰æ˜¯å¦æœ‰è¿›åŽ‚æ£€éªŒ, æ²¡æœ‰éœ€è¦ä¿®æ”¹åŽŸææ–™ä¿¡æ¯
//        if (count == 0) {
//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                    .set(IfsInventoryQuantity::getState, 0)
//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
//        } else {
//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
//        }
//
//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
//                .eq(InsOrder::getId, quarterOrderId)
//                .set(InsOrder::getState, -1)
//                .set(InsOrder::getEntrustCode, ""));// æ’¤é”€
//        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
//                .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
//        // æ¸…除之前报告
//        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
//                .eq(InsReport::getInsOrderId, quarterOrderId));
//        return true;
//    }
//
//    /**
//     * åŽŸææ–™æŠ¥æ£€å…¨éƒ¨ä¿¡æ¯å¯¼å‡º
//     * @param ifsInventoryQuantityDto
//     * @param response
//     */
//    @Override
//    public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
//        //查询导出的费用统计数据
//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
//        ifsInventoryQuantityDto.setEndDeclareDate(null);
//        List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
//
//        for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
//            dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//            dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//            dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//            switch (dto.getInspectStatus()) {
//                case 1:
//                    dto.setInspectStatusString("合格");
//                    break;
//                case 2:
//                    dto.setInspectStatusString("不合格");
//                    // æŸ¥è¯¢ä¸åˆæ ¼é¡¹
//                    List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
//                    dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
//                    break;
//                case 3:
//                    dto.setInspectStatusString("未下单");
//                    break;
//                case 4:
//                    dto.setInspectStatusString("让步放行");
//                    break;
//                case 0:
//                    dto.setInspectStatusString("检验中");
//                    break;
//
//            }
//        }
//
//
//        response.setContentType("application/vnd.ms-excel");
//        response.setCharacterEncoding("UTF-8");
//        // è¿™é‡ŒURLEncoder.encode可以防止中文乱码 å½“ç„¶å’Œeasyexcel没有关系
//        String fileName = URLEncoder.encode("原材料检测信息导出", "UTF-8");
//        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//        try {
//            //新建ExcelWriter
//            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
//            //获取sheet0对象
//            WriteSheet mainSheet = EasyExcel.writerSheet(0, "原材料检测信息导出").head(IfsInventoryQuantitySupplierDto.class).build();
//
//            //向sheet0写入数据 ä¼ å…¥ç©ºlist这样只导出表头
//            excelWriter.write(ifsByOverList, mainSheet);
//            //关闭流
//            excelWriter.finish();
//        } catch (IOException e) {
//            throw new RuntimeException("导出失败");
//        }
//    }
//
//    /**
//     * åŽŸææ–™æŸ¥è¯¢å¯ä»¥å­£åº¦æ£€éªŒçš„å†…å®¹
//     * @param page
//     * @param ifsInventoryQuantityDto
//     * @return
//     */
//    @Override
//    public Map<String, Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
//        if (map1.get("look") == 1) {
//            //个人
//            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
//        }
//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
//        ifsInventoryQuantityDto.setEndDeclareDate(null);
//
//        Map<String, Object> map = new HashMap<>();
//        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
//        map.put("body", standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
//        return map;
//    }
//
//    /**
//     * æå‰å…¥åº“
//     * @param ifsInventoryId
//     * @return
//     */
//    @Override
//    public boolean advancedGodown(Integer ifsInventoryId) {
//        // æŸ¥è¯¢åŽŸææ–™ä¿¡æ¯
//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
//        if (!ifsInventoryQuantity.getInspectStatus().equals(0)
//                && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
//            throw new ErrorException("未检测完成数据才能提前入库");
//        }
//
//        // todo:需要判断oa流程是否是让步放行
//        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
//
//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
//                .set(IfsInventoryQuantity::getInspectStatus, 1)
//                .set(IfsInventoryQuantity::getIsFinish, 1)
//                .set(IfsInventoryQuantity::getToLocation, toLocation)
//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
//
//        return true;
//    }
//
//
//    /**
//     * æ·»åŠ å·¥æ—¶
//     * @param insOrder
//     * @param ifsInventoryQuantity
//     */
//    private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
//        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
//        auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "免检");//检测项分类
//        auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//样品编号
//        auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//订单id
//        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//非加班委托单号
//
//        // å…æ£€é»˜è®¤2
//        auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//非加班工时
//        auxiliaryOutputWorkingHours.setAmount(1);//非加班数量
//        auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//产量工时
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//        auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//日期
//        LocalDateTime localDateTime = LocalDateTime.now();
//        DateTime parse = DateUtil.parse(localDateTime.format(formatter));
//        auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期
//        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
//        auxiliaryOutputWorkingHours.setCheck(getLook.selectPowerByMethodAndUserId(null).get("userId"));//检测人
//        auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//单价
//
//        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
//    }
//
//    public static String getWeek(String dayStr) {
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        try {
//            Date date = sdf.parse(dayStr);
//            Calendar calendar = Calendar.getInstance();
//            calendar.setTime(date);
//            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
//            int day = calendar.get(Calendar.DAY_OF_MONTH);
//            return getWeekDay(dayOfWeek);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    public static String getWeekDay(int dayOfWeek) {
//        switch (dayOfWeek) {
//            case Calendar.MONDAY:
//                return "周一";
//            case Calendar.TUESDAY:
//                return "周二";
//            case Calendar.WEDNESDAY:
//                return "周三";
//            case Calendar.THURSDAY:
//                return "周四";
//            case Calendar.FRIDAY:
//                return "周五";
//            case Calendar.SATURDAY:
//                return "周六";
//            case Calendar.SUNDAY:
//                return "周日";
//            default:
//                return "未知";
//        }
//    }
//}
package com.ruoyi.basic.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
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.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.FactoryDto;
import com.ruoyi.basic.dto.LaboratoryDto;
import com.ruoyi.basic.dto.RawMaterialStandardTreeDto;
import com.ruoyi.basic.dto.SampleTypeDto;
import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
import com.ruoyi.basic.mapper.StandardTreeMapper;
import com.ruoyi.basic.pojo.InsOrder;
import com.ruoyi.basic.service.InsOrderService;
import com.ruoyi.basic.service.RawMaterialOrderService;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * @Author zhuo
 * @Date 2024/7/31
 */
@Service
@AllArgsConstructor
public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
    private StandardTreeMapper standardTreeMapper;
    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
    private GetLook getLook;
    private UserMapper userMapper;
    private InsOrderService insOrderService;
    private InsOrderMapper insOrderMapper;
    private InsSampleMapper insSampleMapper;
    private final NumberGenerator<InsOrder> numberGenerator;
    private InsReportService insReportService;
    private WechatProperty wechatProperty;
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    private InsProductMapper insProductMapper;
    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    @Override
    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
        if (StringUtils.isBlank(partNo)) {
            throw new ErrorException("零件号丢失");
        }
        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
        if (CollectionUtil.isEmpty(factoryDtos)) {
            throw new ErrorException("零件号为" + partNo + "的原材料没有对应的标准库配置");
        }
        RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
        for (FactoryDto factoryDto : factoryDtos) {
            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
                    if (sampleTypeDto.getChildren().size() == 0) {
                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
                    }
                    // åˆ¤æ–­ç»‘定的是否是当前零件号
                    if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
                        // æ·»åŠ å¯¹è±¡
                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
                                + laboratoryDto.getValue() + "-"
                                + sampleTypeDto.getValue());
                        rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
                        rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
                        rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
                        rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
                    } else {
                        for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
                            if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
                                // æ·»åŠ å¯¹è±¡
                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
                                        + laboratoryDto.getValue() + "-"
                                        + sampleTypeDto.getValue() + "-"
                                        + sampleDto.getValue());
                                rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
                                rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
                                rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
                                rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
                            }
                        }
                    }
                }
            }
        }
        return rawMaterialStandardTreeDto;
    }
    @Override
    public Map<String, Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
        Map<String, Object> map = new HashMap<>();
        map.put("head", PrintChina.printChina(IfsInventoryQuantity.class));
        map.put("body", standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
        return map;
    }
    @Override
    public Map<String, Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
        if (map1.get("look") == 1) {
            //个人
            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
        }
        Map<String, Object> map = new HashMap<>();
//        ifsInventoryQuantityDto.setOrderState(null);
        map.put("head", PrintChina.printChina(IfsInventoryQuantityDto.class));
        map.put("body", standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto)));
        return map;
    }
    /**
     * æŠ¥æ£€
     * @param ids
     * @return
     */
    @Override
    public int inspectionReport(List<Integer> ids) {
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                .in(IfsInventoryQuantity::getId, ids)
                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
                .set(IfsInventoryQuantity::getDeclareUserId, userId)
                .set(IfsInventoryQuantity::getIsInspect, 1)
                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
        );
        threadPoolTaskExecutor.execute(() -> {
            List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
                    .in(IfsInventoryQuantity::getId, ids));
            // ä¼ä¸šå¾®ä¿¡é€šçŸ¥
            String message = "";
            message += "新增报检通知";
            for (IfsInventoryQuantity inventoryQuantity : quantityList) {
                message += "\n批次号: " + inventoryQuantity.getUpdateBatchNo();
                message += "\n零件描述: " + inventoryQuantity.getPartDesc();
                message += "\n抵达数量: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
                // åˆ¤æ–­æœ‰æ²¡æœ‰åˆ°20吨. æˆ–者能否免检
                int result = notificationRawOrder(inventoryQuantity.getId());
                switch (result) {
                    case 1:
                        message += "\n当前样品已检验过, å¯ä»¥å…æ£€";
                        break;
                    case 2:
                        message += "\n当前样品已超过20吨";
                        break;
                }
                message += "\n";
            }
            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
        });
        return 1;
    }
    /**
     * æ’¤é”€æŠ¥æ£€
     * @param id
     * @return
     */
    @Override
    public int revokeInspectionReport(Integer id) {
        return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                .eq(IfsInventoryQuantity::getId, id)
                .set(IfsInventoryQuantity::getIsInspect, 0)
        );
    }
    /**
     * æ‰“印标签查询
     * @param ids
     * @return
     */
    @Override
    public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
        return ifsInventoryQuantityMapper.printLabel(ids);
    }
    /**
     * æŠ¥æ£€
     * @param ifsInventoryQuantity
     * @return
     */
    @Override
    public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
                .set(IfsInventoryQuantity::getDeclareUserId, userId)
                .set(IfsInventoryQuantity::getIsInspect, 1)
                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
                .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
        );
        threadPoolTaskExecutor.execute(() -> {
            IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
            // ä¼ä¸šå¾®ä¿¡é€šçŸ¥
            String message = "";
            message += "新增报检通知";
            message += "\n批次号: " + inventoryQuantity.getUpdateBatchNo();
            message += "\n零件描述: " + inventoryQuantity.getPartDesc();
            message += "\n抵达数量: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
        });
        return 1;
    }
    /**
     * èŽ·å–é“œäº§ä¸šé“¾æ£€æµ‹æ•°æ®
     * @param id
     * @return
     */
    @Override
    public String getIndustryChain(Integer id) {
        return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
    }
    /**
     * åŽŸææ–™æ’¤é”€æŽ¥å£
     * @param ifsInventoryId
     * @return
     */
    @Override
    public boolean repealRawOrder(Integer ifsInventoryId) {
        // æŸ¥è¯¢åˆ¤æ–­æ˜¯å¦æ˜¯é“œå•丝
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
            // é“œå•丝直接删除就行
            ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
        } else {
            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                    .set(IfsInventoryQuantity::getState, 0)
                    .set(IfsInventoryQuantity::getIsQuarter, 1)
                    .eq(IfsInventoryQuantity::getId, ifsInventoryId));
        }
        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
                .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
                .set(InsOrder::getState, -1)
                .set(InsOrder::getEntrustCode, ""));// æ’¤é”€
        return true;
    }
    /**
     * åŽŸææ–™å…æ£€ä¸‹å•
     * @param list
     * @param insOrder
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
            throw new ErrorException("只有进厂检验才能免检");
        }
        insOrder.setSendTime(LocalDateTime.now());
        // ä¿®æ”¹è®¢å•表直接为已检验
        insOrder.setState(4);
        insOrder.setTypeSource(1);
        String code = "Y";
        // ç”Ÿæˆç¼–号
        String no = numberGenerator.generateNumberWithPrefix(3,
                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
                InsOrder::getEntrustCode);
        insOrderMapper.insert(insOrder); // ä¸»è¡¨
        AtomicInteger count = new AtomicInteger();
        list.forEach(a -> {
            count.getAndIncrement();
            a.setId(null);
            a.setInsOrderId(insOrder.getId());
            if (StrUtil.isEmpty(a.getSampleCode())) {
                // å¦‚果只有一个样品就不需要拼接数字
                if (list.size() != 1) {
                    a.setSampleCode(no + "-" + count.get());
                } else {
                    a.setSampleCode(no);
                }
            }
            insSampleMapper.insert(a);
            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
                throw new ErrorException("免检不需要填写检验项");
            }
        });
        // åŽŸææ–™ä¸‹å•: å§”托人就是报检人, ç”Ÿäº§å•位就是供应商单位
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
        User user = userMapper.selectById(declareUserId);
        // ä¾›åº”商名称
        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
        // å§”托人名称
        insOrder.setPrepareUser(user.getName());
        insOrder.setPhone(user.getPhone());
        // ä¿®æ”¹åŽŸææ–™æ•°æ®ç›´æŽ¥ä¸ºå·²æ£€éªŒ
        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
        insOrder.setExamineTime(LocalDateTime.now());
        insOrder.setEntrustCode(no);
        insOrder.setIsExemption(1);
        insOrderMapper.updateById(insOrder);
        // æ·»åŠ å·¥æ—¶
        addAuxiliary(insOrder, ifsInventoryQuantity);
        // todo: ifs直接移库
        insReportService.isRawMaterial(insOrder);
        return insOrder.getId();
    }
    /**
     * æŸ¥è¯¢å¾…下单
     * @param page
     * @param ifsInventoryQuantity
     * @return
     */
    @Override
    public Map<String, Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
        Map<String, Object> map = new HashMap<>();
        map.put("head", PrintChina.printChina(IfsInventoryQuantityCheckDto.class));
        map.put("body", standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
        return map;
    }
    /**
     * æŸ¥è¯¢å·²æ£€éªŒ
     * @param page
     * @param ifsInventoryQuantityDto
     * @return
     */
    @Override
    public Map<String, Object> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
        if (map1.get("look") == 1) {
            //个人
            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
        }
        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
        ifsInventoryQuantityDto.setBeginDeclareDate(null);
        ifsInventoryQuantityDto.setEndDeclareDate(null);
        Map<String, Object> map = new HashMap<>();
        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
        map.put("body", standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
        return map;
    }
    /**
     * åˆ é™¤åŽŸææ–™æŠ¥æ£€ä¿¡æ¯
     * @param id
     * @return
     */
    @Override
    public int delIfsInventory(Integer id) {
        return ifsInventoryQuantityMapper.deleteById(id);
    }
    /**
     * åŽŸææ–™æ”¾è¡Œå…æ£€
     * @param ifsInventoryId
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
        // ä¿®æ”¹åŽŸææ–™æ•°æ®ç›´æŽ¥ä¸ºå·²æ£€éªŒ
        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                .set(IfsInventoryQuantity::getState, 2)
                .set(IfsInventoryQuantity::getIsQuarter, 0)
                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
        // æŸ¥è¯¢åŽŸææ–™ä¿¡æ¯
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
        // å§”托人就是报检人, ç”Ÿäº§å•位就是供应商单位
        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
        User user = userMapper.selectById(declareUserId);
        InsOrder insOrder = new InsOrder();
        insOrder.setState(4);
        insOrder.setTypeSource(1);
        String code = "Y";
        // ç”Ÿæˆç¼–号
        String no = numberGenerator.generateNumberWithPrefix(3,
                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
                InsOrder::getEntrustCode);
        insOrder.setExamineTime(LocalDateTime.now());
        insOrder.setEntrustCode(no);
        insOrder.setIsExemption(1);
        // ä¾›åº”商名称
        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
        // å§”托人名称
        insOrder.setPrepareUser(user.getName());
        insOrder.setPhone(user.getPhone());
        insOrder.setIfsInventoryId(ifsInventoryId);
        insOrder.setPartDetail(partDetail);
        insOrder.setSendTime(LocalDateTime.now());
        insOrder.setSample(ifsInventoryQuantity.getPartDesc());
        // è¿›åŽ‚æ£€éªŒ
        insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
        insOrderMapper.insert(insOrder);
        // æ·»åŠ å·¥æ—¶
        addAuxiliary(insOrder, ifsInventoryQuantity);
        // todo: ifs直接移库
        insReportService.isRawMaterial(insOrder);
        return true;
    }
    /**
     * 0, æ— æç¤º, 1提示  å½“前批次的样品已检验过, å¯ä»¥å…æ£€, 2 æç¤º å½“前批次的样品已超20吨, éœ€è¦å¤šçº§å¤šæ¬¡æ£€éªŒ
     *
     * åŽŸææ–™ä¸‹å•é€šçŸ¥å…æ£€æˆ–è€…å¤šæ¬¡æ£€éªŒ
     * @param ifsInventoryId
     * @return
     */
    @Override
    public int notificationRawOrder(Integer ifsInventoryId) {
        IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
        // æŸ¥è¯¢å½“前批次, ä¾›åº”商, é›¶ä»¶å·çš„原材料是否超过了20吨, è¶…过了20吨需要进行多次检验提醒
        List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
                .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
                .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
                .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
                .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
        // åˆ¤æ–­æ˜¯å¦å¤§äºŽ20吨
        BigDecimal bigDecimal = new BigDecimal("20000");
        BigDecimal count = BigDecimal.ZERO;
        for (IfsInventoryQuantity inventoryQuantity : quantityList) {
            // åˆ¤æ–­å•位是kg或者t
            if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
                count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
            } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
                count = count.add(inventoryQuantity.getQtyArrived());
            }
        }
        if (count.compareTo(bigDecimal) >= 0) {
            return 2;
        } else {
            // åˆ¤æ–­ä¹‹å‰æ˜¯å¦å‡ºè¿‡æŠ¥å‘Š, å‡ºè¿‡æŠ¥å‘Šå¯ä»¥å…æ£€
            int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
            if (reportCount > 0) {
                return 1;
            }
        }
        return 0;
    }
    /**
     * æŠ¥æ£€å¯ä»¥æ–°å¢žæŠ¥æ£€ä¿¡æ¯
     * @param ifsInventoryQuantity
     */
    @Override
    public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
        ifsInventoryQuantity.setIsSource(0);
        ifsInventoryQuantity.setState(0);
        ifsInventoryQuantity.setIsFinish(0);
        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
    }
    @Override
    public void shiftingParking(List<Integer> ids) {
        for (Integer id : ids) {
            InsOrder order = insOrderService.getById(id);
            // todo: ifs直接移库
            insReportService.isRawMaterial(order);
        }
    }
    /**
     * é“œå•丝下单免检
     * @param list
     * @param insOrder
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
            throw new ErrorException("只有进厂检验才能免检");
        }
        insOrder.setSendTime(LocalDateTime.now());
        // ä¿®æ”¹è®¢å•表直接为已检验
        insOrder.setState(4);
        insOrder.setTypeSource(1);
        String code = "Y";
        // ç”Ÿæˆç¼–号
        String no = numberGenerator.generateNumberWithPrefix(3,
                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
                InsOrder::getEntrustCode);
        insOrderMapper.insert(insOrder); // ä¸»è¡¨
        AtomicInteger count = new AtomicInteger();
        list.forEach(a -> {
            count.getAndIncrement();
            a.setId(null);
            a.setInsOrderId(insOrder.getId());
            if (StrUtil.isEmpty(a.getSampleCode())) {
                // å¦‚果只有一个样品就不需要拼接数字
                if (list.size() != 1) {
                    a.setSampleCode(no + "-" + count.get());
                } else {
                    a.setSampleCode(no);
                }
            }
            insSampleMapper.insert(a);
            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
                throw new ErrorException("免检不需要填写检验项");
            }
        });
        // æ·»åŠ åŽŸææ–™ä¿¡æ¯
        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
        // åŸºæœ¬ä¿¡æ¯
        ifsInventoryQuantity.setIsSource(0);
        ifsInventoryQuantity.setState(2);
        ifsInventoryQuantity.setIsInspect(1);
        ifsInventoryQuantity.setIsFinish(1);
        ifsInventoryQuantity.setIsCopper(1);
        ifsInventoryQuantity.setInspectStatus(1);
        ifsInventoryQuantity.setIsQuarter(0);
        ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
        ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
        ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
        ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
        ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
        insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
        insOrder.setExamineTime(LocalDateTime.now());
        insOrder.setEntrustCode(no);
        insOrder.setIsExemption(1);
        insOrderMapper.updateById(insOrder);
        // æ·»åŠ å·¥æ—¶
        addAuxiliary(insOrder, ifsInventoryQuantity);
        return insOrder.getId();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean concessionRelease(Integer ifsInventoryId) {
        // æŸ¥è¯¢åŽŸææ–™ä¿¡æ¯
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
        if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
            throw new ErrorException("不合格的原材料才能让步放行");
        }
        // todo:需要判断oa流程是否是让步放行
        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                .set(IfsInventoryQuantity::getInspectStatus, 4)
                .set(IfsInventoryQuantity::getToLocation, toLocation)
                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
        return true;
    }
    /**
     * åŽŸææ–™è¿›åŽ‚æ’¤é”€ä¸‹å•
     * @param enterOrderId
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean repealEnterRawOrder(Integer enterOrderId) {
        // æŸ¥è¯¢è®¢å•
        InsOrder order = insOrderMapper.selectById(enterOrderId);
        // æŸ¥è¯¢åˆ¤æ–­æ˜¯å¦æ˜¯é“œå•丝
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
            // é“œå•丝直接删除就行
            ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
        } else {
            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                    .set(IfsInventoryQuantity::getState, 0)
                    .set(IfsInventoryQuantity::getIsQuarter, 1)
                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
        }
        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
                .eq(InsOrder::getId, enterOrderId)
                .set(InsOrder::getState, -1)
                .set(InsOrder::getEntrustCode, ""));// æ’¤é”€
        // æ¸…除之前的工时
        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
        // æ¸…除之前报告
        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
                .eq(InsReport::getInsOrderId, enterOrderId));
        return true;
    }
    /**
     * åŽŸææ–™å­£åº¦æ’¤é”€ä¸‹å•
     * @param quarterOrderId
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean repealQuarterRawOrder(Integer quarterOrderId) {
        // æŸ¥è¯¢è®¢å•
        InsOrder order = insOrderMapper.selectById(quarterOrderId);
        Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
                .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
                .ne(InsOrder::getState, -1)
                .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
                .ne(InsOrder::getId, order.getId()));
        // åˆ¤æ–­ä¹‹å‰æ˜¯å¦æœ‰è¿›åŽ‚æ£€éªŒ, æ²¡æœ‰éœ€è¦ä¿®æ”¹åŽŸææ–™ä¿¡æ¯
        if (count == 0) {
            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                    .set(IfsInventoryQuantity::getState, 0)
                    .set(IfsInventoryQuantity::getIsQuarter, 1)
                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
        } else {
            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                    .set(IfsInventoryQuantity::getIsQuarter, 1)
                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
        }
        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
                .eq(InsOrder::getId, quarterOrderId)
                .set(InsOrder::getState, -1)
                .set(InsOrder::getEntrustCode, ""));// æ’¤é”€
        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
        // æ¸…除之前报告
        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
                .eq(InsReport::getInsOrderId, quarterOrderId));
        return true;
    }
    /**
     * åŽŸææ–™æŠ¥æ£€å…¨éƒ¨ä¿¡æ¯å¯¼å‡º
     * @param ifsInventoryQuantityDto
     * @param response
     */
    @Override
    public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
        //查询导出的费用统计数据
        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
        ifsInventoryQuantityDto.setBeginDeclareDate(null);
        ifsInventoryQuantityDto.setEndDeclareDate(null);
        List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
        for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
            dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            switch (dto.getInspectStatus()) {
                case 1:
                    dto.setInspectStatusString("合格");
                    break;
                case 2:
                    dto.setInspectStatusString("不合格");
                    // æŸ¥è¯¢ä¸åˆæ ¼é¡¹
                    List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
                    dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
                    break;
                case 3:
                    dto.setInspectStatusString("未下单");
                    break;
                case 4:
                    dto.setInspectStatusString("让步放行");
                    break;
                case 0:
                    dto.setInspectStatusString("检验中");
                    break;
            }
        }
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        // è¿™é‡ŒURLEncoder.encode可以防止中文乱码 å½“ç„¶å’Œeasyexcel没有关系
        String fileName = URLEncoder.encode("原材料检测信息导出", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            //新建ExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            //获取sheet0对象
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "原材料检测信息导出").head(IfsInventoryQuantitySupplierDto.class).build();
            //向sheet0写入数据 ä¼ å…¥ç©ºlist这样只导出表头
            excelWriter.write(ifsByOverList, mainSheet);
            //关闭流
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
    /**
     * åŽŸææ–™æŸ¥è¯¢å¯ä»¥å­£åº¦æ£€éªŒçš„å†…å®¹
     * @param page
     * @param ifsInventoryQuantityDto
     * @return
     */
    @Override
    public Map<String, Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
        if (map1.get("look") == 1) {
            //个人
            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
        }
        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
        ifsInventoryQuantityDto.setBeginDeclareDate(null);
        ifsInventoryQuantityDto.setEndDeclareDate(null);
        Map<String, Object> map = new HashMap<>();
        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
        map.put("body", standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
        return map;
    }
    /**
     * æå‰å…¥åº“
     * @param ifsInventoryId
     * @return
     */
    @Override
    public boolean advancedGodown(Integer ifsInventoryId) {
        // æŸ¥è¯¢åŽŸææ–™ä¿¡æ¯
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
        if (!ifsInventoryQuantity.getInspectStatus().equals(0)
                && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
            throw new ErrorException("未检测完成数据才能提前入库");
        }
        // todo:需要判断oa流程是否是让步放行
        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                .set(IfsInventoryQuantity::getInspectStatus, 1)
                .set(IfsInventoryQuantity::getIsFinish, 1)
                .set(IfsInventoryQuantity::getToLocation, toLocation)
                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
        return true;
    }
    /**
     * æ·»åŠ å·¥æ—¶
     * @param insOrder
     * @param ifsInventoryQuantity
     */
    private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
        auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "免检");//检测项分类
        auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//样品编号
        auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//订单id
        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//非加班委托单号
        // å…æ£€é»˜è®¤2
        auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//非加班工时
        auxiliaryOutputWorkingHours.setAmount(1);//非加班数量
        auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//产量工时
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//日期
        LocalDateTime localDateTime = LocalDateTime.now();
        DateTime parse = DateUtil.parse(localDateTime.format(formatter));
        auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期
        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
        auxiliaryOutputWorkingHours.setCheck(getLook.selectPowerByMethodAndUserId(null).get("userId"));//检测人
        auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//单价
        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
    }
    public static String getWeek(String dayStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = sdf.parse(dayStr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            return getWeekDay(dayOfWeek);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String getWeekDay(int dayOfWeek) {
        switch (dayOfWeek) {
            case Calendar.MONDAY:
                return "周一";
            case Calendar.TUESDAY:
                return "周二";
            case Calendar.WEDNESDAY:
                return "周三";
            case Calendar.THURSDAY:
                return "周四";
            case Calendar.FRIDAY:
                return "周五";
            case Calendar.SATURDAY:
                return "周六";
            case Calendar.SUNDAY:
                return "周日";
            default:
                return "未知";
        }
    }
}
inspect-server/src/main/java/com/ruoyi/basic/service/impl/RawMaterialOrderTemplateServiceImpl.java
@@ -1,68 +1,70 @@
//package com.ruoyi.basic.service.impl;
//
//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
//import lombok.AllArgsConstructor;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//
///**
// * åŽŸææ–™ä¸‹å•æ¨¡æ¿
// *
// * @author zhuo
// * @since 2024-08-05
// */
//@Service
//@AllArgsConstructor
//public class RawMaterialOrderTemplateServiceImpl extends ServiceImpl<RawMaterialOrderTemplateMapper, RawMaterialOrderTemplate> implements RawMaterialOrderTemplateService {
//
//
//    /**
//     * æ·»åŠ åŽŸææ–™æ£€éªŒå•æ¨¡æ¿
//     * @param rawMaterialOrderTemplate
//     * @return
//     */
//    @Override
//    public int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate) {
//        if (StringUtils.isBlank(rawMaterialOrderTemplate.getPartNo())) {
//            throw new RuntimeException("缺少零件号");
//        }
//        return baseMapper.insert(rawMaterialOrderTemplate);
//    }
//
//    /**
//     * æŸ¥è¯¢åŽŸææ–™æ£€éªŒå•æ¨¡æ¿åˆ—è¡¨
//     * @param partNo
//     * @return
//     */
//    @Override
//    public List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo) {
//        return baseMapper.selectList(Wrappers.<RawMaterialOrderTemplate>lambdaQuery()
//                .eq(RawMaterialOrderTemplate::getPartNo, partNo));
//    }
//
//    /**
//     * é€šè¿‡åŽŸææ–™æ£€éªŒå•æ¨¡æ¿id获取检验单模板内容
//     * @param id
//     * @return
//     */
//    @Override
//    public String selectRawMaterOrderTemplateById(Integer id) {
//        return baseMapper.selectById(id).getThing();
//    }
//
//    /**
//     * åˆ é™¤åŽŸææ–™æ£€éªŒå•æ¨¡æ¿
//     * @param id
//     * @return
//     */
//    @Override
//    public int delRawMaterOrderTemplate(Integer id) {
//        return baseMapper.deleteById(id);
//    }
//
//}
//
package com.ruoyi.basic.service.impl;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.mapper.RawMaterialOrderTemplateMapper;
import com.ruoyi.basic.pojo.RawMaterialOrderTemplate;
import com.ruoyi.basic.service.RawMaterialOrderTemplateService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * åŽŸææ–™ä¸‹å•æ¨¡æ¿
 *
 * @author zhuo
 * @since 2024-08-05
 */
@Service
@AllArgsConstructor
public class RawMaterialOrderTemplateServiceImpl extends ServiceImpl<RawMaterialOrderTemplateMapper, RawMaterialOrderTemplate> implements RawMaterialOrderTemplateService {
    /**
     * æ·»åŠ åŽŸææ–™æ£€éªŒå•æ¨¡æ¿
     * @param rawMaterialOrderTemplate
     * @return
     */
    @Override
    public int addRawMaterOrderTemplate(RawMaterialOrderTemplate rawMaterialOrderTemplate) {
        if (StringUtils.isBlank(rawMaterialOrderTemplate.getPartNo())) {
            throw new RuntimeException("缺少零件号");
        }
        return baseMapper.insert(rawMaterialOrderTemplate);
    }
    /**
     * æŸ¥è¯¢åŽŸææ–™æ£€éªŒå•æ¨¡æ¿åˆ—è¡¨
     * @param partNo
     * @return
     */
    @Override
    public List<RawMaterialOrderTemplate> selectRawMaterOrderTemplate(String partNo) {
        return baseMapper.selectList(Wrappers.<RawMaterialOrderTemplate>lambdaQuery()
                .eq(RawMaterialOrderTemplate::getPartNo, partNo));
    }
    /**
     * é€šè¿‡åŽŸææ–™æ£€éªŒå•æ¨¡æ¿id获取检验单模板内容
     * @param id
     * @return
     */
    @Override
    public String selectRawMaterOrderTemplateById(Integer id) {
        return baseMapper.selectById(id).getThing();
    }
    /**
     * åˆ é™¤åŽŸææ–™æ£€éªŒå•æ¨¡æ¿
     * @param id
     * @return
     */
    @Override
    public int delRawMaterOrderTemplate(Integer id) {
        return baseMapper.deleteById(id);
    }
}
performance-server/pom.xml
@@ -12,14 +12,19 @@
    <artifactId>performance-server</artifactId>
    <dependencies>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <!-- æ ¸å¿ƒæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>
        <!-- ç³»ç»Ÿæ¨¡å—-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
pom.xml
@@ -24,7 +24,8 @@
        <swagger.version>3.0.0</swagger.version>
        <kaptcha.version>2.3.3</kaptcha.version>
        <pagehelper.boot.version>1.4.7</pagehelper.boot.version>
        <fastjson.version>2.0.53</fastjson.version>
        <fastjson2.version>2.0.53</fastjson2.version>
        <fastjson.version>2.0.23</fastjson.version>
        <oshi.version>6.6.5</oshi.version>
        <commons.io.version>2.13.0</commons.io.version>
        <poi.version>4.1.2</poi.version>
@@ -44,6 +45,7 @@
        <okhttp.version>4.9.0</okhttp.version>
        <hutool.version>5.8.18</hutool.version>
        <easyexcel.version>3.3.2</easyexcel.version>
        <poi.tl.version>1.12.2</poi.tl.version>
    </properties>
    <!-- ä¾èµ–声明 -->
@@ -182,7 +184,7 @@
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson.version}</version>
                <version>${fastjson2.version}</version>
            </dependency>
            <!-- Token生成与解析-->
@@ -206,6 +208,13 @@
                <version>${ruoyi.version}</version>
            </dependency>
            <!-- é€šç”¨å·¥å…·-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-common</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!-- æ ¸å¿ƒæ¨¡å—-->
            <dependency>
                <groupId>com.ruoyi</groupId>
@@ -220,13 +229,33 @@
                <version>${ruoyi.version}</version>
            </dependency>
            <!-- é€šç”¨å·¥å…·-->
            <!--基础模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-common</artifactId>
                <artifactId>basic-server</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!--业务模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>inspect-server</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!--绩效模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>performance-server</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!--cnas标准物质-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>cnas-require</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!-- minio -->
            <dependency>
@@ -246,6 +275,13 @@
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp.version}</version>
            </dependency>
            <!-- poi-tl包生成报告 -->
            <dependency>
                <groupId>com.deepoove</groupId>
                <artifactId>poi-tl</artifactId>
                <version>${poi.tl.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
@@ -318,7 +354,7 @@
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.23</version>
            <version>${fastjson.version}</version>
        </dependency>
    </dependencies>
ruoyi-admin/pom.xml
@@ -43,6 +43,7 @@
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
@@ -64,23 +65,21 @@
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>basic-server</artifactId>
            <version>${ruoyi.version}</version>
        </dependency>
        <!--业务模块-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>inspect-server</artifactId>
            <version>${ruoyi.version}</version>
        </dependency>
        <!--绩效模块-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>performance-server</artifactId>
            <version>${ruoyi.version}</version>
        </dependency>
        <!--cnas标准物质-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>cnas-require</artifactId>
ruoyi-common/pom.xml
@@ -141,6 +141,24 @@
            <artifactId>commons-text</artifactId>
            <version>1.3</version>
        </dependency>
        <!--企业微信接口-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-cp</artifactId>
            <version>4.1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.github.binarywang</groupId>
                    <artifactId>weixin-java-common</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-common</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Util.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.common.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
 * @author cxf
 */
public class Md5Util {
    /**
     * é»˜è®¤çš„密码字符串组合,用来将字节转换成 16 è¿›åˆ¶è¡¨ç¤ºçš„字符
     */
    protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    protected static MessageDigest messagedigest = null;
    static {
        try {
            messagedigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
    public static String getFileMd5String(File file) throws IOException {
        InputStream fis;
        fis = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int numRead = 0;
        while ((numRead = fis.read(buffer)) > 0) {
            messagedigest.update(buffer, 0, numRead);
        }
        fis.close();
        return bufferToHex(messagedigest.digest());
    }
    public static String getStringMd5(String str) {
        byte[] buffer = str.getBytes();
        messagedigest.update(buffer);
        return bufferToHex(messagedigest.digest());
    }
    public static String bufferToHex(byte bytes[]) {
        return bufferToHex(bytes, 0, bytes.length);
    }
    private static String bufferToHex(byte bytes[], int m, int n) {
        StringBuffer stringbuffer = new StringBuffer(2 * n);
        int k = m + n;
        for (int l = m; l < k; l++) {
            appendHexPair(bytes[l], stringbuffer);
        }
        return stringbuffer.toString();
    }
    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
        // å–字节中高 4 ä½çš„æ•°å­—转换
        char c0 = hexDigits[(bt & 0xf0) >> 4];
        // ä¸ºé€»è¾‘右移,将符号位一起右移,此处未发现两种符号有何不同
        // å–字节中低 4 ä½çš„æ•°å­—转换
        char c1 = hexDigits[bt & 0xf];
        stringbuffer.append(c0);
        stringbuffer.append(c1);
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/WxCpUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,153 @@
package com.ruoyi.common.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import java.io.*;
import java.net.MalformedURLException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.List;
/**
 * @Author: chenxiangfeng
 * @Date: 2021/7/20 10:35
 */
public class WxCpUtils {
    public static final String CORP_ID = "wwa423654b975441ac";
    public static final String CORP_SECRET = "snXq8qwA5tGu0YN1PlSDQqr6u9x3A0c_jQDmt8CN8Vs";
    public static final Integer AGENT_ID = 1000515;
    /**
     * @param user      ä¾‹ï¼šZT-033268|ZT-028629,多个中间用|隔开
     * @param content   ä¼ æ–‡æœ¬å†…容
     * @param imageFile å›¾ç‰‡
     * @throws Exception
     */
    public static void inform(String user, String content, File imageFile) throws Exception {
        WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
        // æ³¨å†Œçš„企业信息
        config.setCorpId(CORP_ID);
        config.setCorpSecret(CORP_SECRET);
        WxCpServiceImpl wxCpService = new WxCpServiceImpl();
        wxCpService.setWxCpConfigStorage(config);
        WxCpMessage message;
        WxCpMessageSendResult result;
        // å‘送文本
        if (StringUtils.isNotBlank(content)) {
            message = WxCpMessage.TEXT()
                    .content(content)
                    // ç”¨æˆ·id
                    .toUser(user)
                    // åº”用id
                    .agentId(AGENT_ID)
                    .build();
            result = wxCpService.getMessageService().send(message);
        }
        // å‘送文件
        if (imageFile != null) {
            // èŽ·å–æ–‡ä»¶id
            WxMediaUploadResult imgResult = wxCpService.getMediaService().upload("file", imageFile);
            message = WxCpMessage.IMAGE()
                    .mediaId(imgResult.getMediaId())
                    // ç”¨æˆ·id
                    .toUser(user)
                    // åº”用id
                    .agentId(AGENT_ID)
                    .build();
            result = wxCpService.getMessageService().send(message);
        }
    }
    /**
     * æŽ¨é€ç¾¤æ¶ˆæ¯
     *
     * @param webHookList ä¼ä¸šå¾®ä¿¡æœºå™¨äººåœ°å€
     * @param file        å›¾ç‰‡
     * @throws Exception
     */
    public static void informWebHook(List<String> webHookList, File file) throws Exception {
        JSONObject json = new JSONObject();
        json.putOpt("msgtype", "image");
        JSONObject image = new JSONObject();
        image.putOpt("base64", getBase64(file));
        image.putOpt("md5", getMd5(file));
        json.putOpt("image", image);
        webHookList.stream().forEach(webHook -> {
            String result = HttpRequest.post(webHook)
                    .header("Content-Type", "application/json")
                    .body(json.toString())
                    .execute().body();
        });
    }
    /**
     * æŽ¨é€ç¾¤æ¶ˆæ¯
     *
     * @param webHook ä¼ä¸šå¾®ä¿¡æœºå™¨äººåœ°å€
     * @param content æ•°æ®
     * @throws Exception
     */
    public static String informWebHook(String webHook, String content) {
        JSONObject jsonObject = new JSONObject()
                .accumulate("msgtype", "text")
                .accumulate("text", new JSONObject()
                        .accumulate("content", content));
        return HttpRequest.post(webHook).header("Content-Type", "application/json").body(jsonObject.toString()).execute().body();
    }
    public static String getMd5(File file) {
        String name = "";
        try {
            InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
            byte[] bytes = new byte[1024];
            int len = 0;
            MessageDigest messagedigest = MessageDigest.getInstance("MD5");
            while ((len = inputStream.read(bytes)) > 0) {
                messagedigest.update(bytes, 0, len);
            }
            name = Md5Util.bufferToHex(messagedigest.digest());
            inputStream.close();
        } catch (MalformedURLException e) {
        } catch (IOException e) {
        } catch (NoSuchAlgorithmException e) {
        }
        return name;
    }
    public static String getBase64(File file) {
        FileInputStream inputStream = null;
        String base64Str = "";
        try {
            inputStream = new FileInputStream(file);
            Base64.Encoder encoder = Base64.getEncoder();
            int available = inputStream.available();
            byte[] bytes = new byte[available];
            inputStream.read(bytes);
            base64Str = encoder.encodeToString(bytes);
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return base64Str;
    }
}