zss
2024-08-29 1bc536c54fc1c2f25a4cff4b162cfa6979604fff
企业微信对接+工时优化+设备查询项目树结构优化
已修改11个文件
已添加1个文件
246 ■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/mom/controller/CapacityScopeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/impl/PkMasterServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/StructureItemParameterMapper.xml 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsSample.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/CompaniesController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/controller/CapacityScopeController.java
@@ -120,7 +120,7 @@
        return Result.success(capacityScopeService.selectTestObjectByName());
    }
    @ValueClassify("设备")
    @ValueAuth
    @ApiOperation(value = "设备里面选择检验项目(树形结构)")
    @PostMapping("/getInsProduction")
    public Result getInsProduction() {
cnas-server/src/main/java/com/yuanchu/mom/service/impl/PkMasterServiceImpl.java
@@ -100,7 +100,6 @@
            Map<String, Object> map = insOrderPlanService.temCycle(insSample.getId(), pkMaster.getCycles(), pkMaster.getTemperature());
            List<ProductVo> productVos = (List<ProductVo>) map.get("productVos");
            if (CollectionUtils.isNotEmpty(productVos)) {
                //todo å¦‚果温度循环的项目nm有改动这里需要改动 @zss
                for (PkSlave pkSlave : pkSlaves) {
                    for (ProductVo productVo : productVos) {
                        if (pkSlave.getInsBushingId().equals(productVo.getBushColor()) &&
cnas-server/src/main/resources/mapper/StructureItemParameterMapper.xml
@@ -79,20 +79,53 @@
        <result property="name" column="subclass"/>
    </resultMap>
    <select id="getInsProduction" resultMap="getInsProductions">
        select distinct id,
               CASE
                   WHEN INSTR(sample, ',') > 0 THEN
                       SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '","', 1), '"', -1)
                   when sample = '[""]' then '*'
                   ELSE
                       TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(sample, '[["', ''), '"]]', 1))
                   END
                as sample,
               inspection_item,
               case
                   when inspection_item_subclass is null then inspection_item
                   else inspection_item_subclass end as subclass
        from structure_item_parameter
        WITH expanded_sample AS (
            SELECT
                id,
                CASE
                    WHEN INSTR(sample, '","') > 0 THEN
                        SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '","', 1), '"', -1)
                    when sample = '[]' then '*'
                    WHEN INSTR(sample, '"],["') > 0 THEN
                        TRIM(BOTH '["]' FROM SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '"],["', 1), '"', -1))
                    ELSE
                        TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(sample, '[["', ''), '"]]', 1))
                    END
                        AS component1,
                CASE
                    WHEN INSTR(sample, '"],["') > 0 THEN
                        TRIM(BOTH '["]' FROM SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '"],["', -1), '"', 1))
                    ELSE
                        NULL
                    END AS component2,
                inspection_item,
                CASE
                    WHEN inspection_item_subclass IS NULL THEN inspection_item
                    ELSE inspection_item_subclass
                    END AS subclass
            FROM
                structure_item_parameter
        )
        SELECT
            id,
            CASE
                WHEN component1 IS NOT NULL THEN component1
                ELSE '*'
                END AS sample,
            inspection_item,
            subclass
        FROM
            expanded_sample
        UNION ALL
        SELECT
            id,
            component2 AS sample,
            inspection_item,
            subclass
        FROM
            expanded_sample
        WHERE
            component2 IS NOT NULL;
    </select>
    <select id="getItemTree" resultMap="itemDto">
        select sto.id sId, sto.specimen_name sName, p.id pId, p.name pName
framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.yuanchu.mom.utils;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.vo.Result;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Data
@Slf4j
@Component
//企业微信对接接口
public class QYWXApi {
    public static final String WWA_423654_B_975441_AC = "wwa423654b975441ac";
    final String ip = "https://qyapi.weixin.qq.com/";
    final String corpid = WWA_423654_B_975441_AC;
    final String corpsecret = "VfTV3D0BFWORlBm8grykUhloQSTM06mIXYEHUqr3UIc";
    /**
     * ä¼ä¸šå¾®ä¿¡èŽ·å–token
     *
     * @return
     */
    public String getToken() {
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("corpid", corpid);
            map.put("corpsecret", corpsecret);
            String result = HttpRequest.get(ip + "cgi-bin/gettoken")
                    .contentType("application/x-www-form-urlencoded")
                    .form(map).execute().body();
            JSONObject jsonObject = JSONObject.parseObject(result);
            return jsonObject.getString("access_token");
        } catch (Exception e) {
            throw new RuntimeException("token获取异常");
        }
    }
    /**
     * å‘送应用卡片消息
     *
     * @param map
     * @return
     */
    public void send(Map map) {
        try {
            String result = HttpRequest.post(ip + "cgi-bin/message/send?access_token=" + getToken())
                    .contentType("application/json")
                    .body(JSONArray.toJSONString(map)).execute().body();
            JSONObject jsonObject = JSONObject.parseObject(result);
            if (jsonObject.getInteger("errcode") == 0) {
            } else {
                throw new ErrorException("企业微信推送消息失败" + jsonObject.getString("errmsg"));
            }
        } catch (Exception e) {
            throw new ErrorException("企业微信推送消息失败,获取异常:" + e.getMessage());
        }
    }
}
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -22,6 +22,7 @@
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -193,10 +194,7 @@
    @ValueClassify("检验任务")
    @ApiOperation(value = "插队操作")
    @PostMapping("/jumpTeam")
    public Result<?> jumpTeam(Integer orderStateId,Integer sort) {
        InsOrderState orderState = new InsOrderState();
        orderState.setId(orderStateId);
        orderState.setSort(sort);
        return Result.success(insOrderStateService.updateById(orderState));
    public Result<?> jumpTeam(@RequestBody List<InsOrderState> insOrderStates) {
        return Result.success(insOrderStateService.updateBatchById(insOrderStates));
    }
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsSample.java
@@ -114,4 +114,7 @@
    @TableField(select = false,exist = false)
    private Integer num=1;
    @ApiModelProperty("试验要求:移动,联通,电信")
    private String testRequirements;
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -30,10 +30,7 @@
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.MatrixToImageWriter;
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.utils.RedisUtil;
import com.yuanchu.mom.utils.*;
import com.yuanchu.mom.vo.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@@ -64,6 +61,7 @@
 * æ£€éªŒä»»åŠ¡-业务实现层
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
    @Resource
@@ -111,7 +109,7 @@
    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    @Resource
    AuxiliaryOutputWorkingHoursService auxiliaryOutputWorkingHoursService;
    QYWXApi qywxApi;
    @Resource
    private InformationNotificationService informationNotificationService;
@@ -552,7 +550,6 @@
                        insProductResultMapper.deleteById(insProductResultss.get(i));
                    }
                }
                //InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, Integer.parseInt(k)));
                //检验值
                if (jo.get("insValue") != null) {
                    JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue")));
@@ -639,13 +636,11 @@
                    result.setUpdateTime(LocalDateTime.now());
                    insProductResultMapper.updateById(result);
                }
                /*如果是第一次选择设备信息,且还有其余样品也有同一个经验项目,那么所有样品的该项目都用这个设备信息*/
                //先查询是否还有其余样品
                /*//先查询是否还有其余样品
                Integer insSampleId = product.getInsSampleId();
                List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSampleMapper.selectById(insSampleId).getInsOrderId()));
                //如果有多个样品或者是不是采集类型就同一个设备
                //如果有多个样品或者不是采集类型就同一个设备
                if (insSamples.size() > 1 && !product.getInspectionItemType().equals("1")) {
                    //存在其余样品,查询是否有同一种检验项目
                    for (InsSample sample : insSamples.stream().filter(insSample -> !insSample.getId().equals(insSampleId)).collect(Collectors.toList())) {
@@ -660,8 +655,7 @@
                                .eq(InsProduct::getStandardMethodListId, product.getStandardMethodListId())
                                .eq(InsProduct::getInsBushId, product.getInsBushId())
                                .eq(InsProduct::getInsFibersId, product.getInsFibersId())
                                .eq(InsProduct::getInsFiberId, product.getInsFiberId())
                        );
                                .eq(InsProduct::getInsFiberId, product.getInsFiberId()));
                        if (ObjectUtils.isNotEmpty(product1)) {
                            //如果存在项目,查询是否有表
                            InsProductResult productResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
@@ -686,13 +680,12 @@
                        }
                    }
                }
                }*/
                insProduct.setUpdateUser(userId);
                insProductMapper.updateById(insProduct);
                insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
                insProduct = insProductMapper.selectById(insProduct);
                /*生成产量工时*/
                //查询检验单信息
                InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId());
                //校验如果这个人这个检测项目已经添加过了则不需要再新增
@@ -761,7 +754,8 @@
                                auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期
                                auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
                                auxiliaryOutputWorkingHours.setCheck(userId);//检测人
                            } else {
                            }
                            else {
                                //加班
                                auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//检测父项
                                auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//检测子项
@@ -781,7 +775,14 @@
                                auxiliaryOutputWorkingHours.setCheck(userId);//检测人
                            }
                            try {
                                if (CollectionUtils.isEmpty(insProductResultss) && !result.getInsValue().equals("[]") || (CollectionUtils.isNotEmpty(insProductResultss) && !insProductResultss.get(0).getInsValue().equals(result.getInsValue()) && !insProductResultss.get(0).getInsValue().equals("[]"))) {
                                //这个检验项目还没有填写过检验值且这次这个检验项目填写的检验值不为空
                                if (CollectionUtils.isEmpty(insProductResultss)  && jo.get("insValue") != null
                                        //这个检验项目还没有填写过检验值且这次这个检验项目填写的计算值不为空但是检验值为空
                                        || CollectionUtils.isEmpty(insProductResultss) &&  jo.get("insValue") == null  && jo.get("comValue") != null
                                        //这个检验项目有填写过检验值且这次填写的检验值和原来的检验值不相等,且这次的检验值不等于空
                                        || (CollectionUtils.isNotEmpty(insProductResultss) && !insProductResultss.get(0).getInsValue().equals(result.getInsValue()) && jo.get("insValue") != null)
                                        //这个检验项目有填写过检验值且这次填写的计算值和原来的计算值不相等,且这次的计算值不等于空,且这次的检验值等于空
                                        || (CollectionUtils.isNotEmpty(insProductResultss) && !insProductResultss.get(0).getComValue().equals(result.getComValue())  && jo.get("insValue") == null  && jo.get("comValue") != null)) {
                                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                                }
                            } catch (Exception e) {
@@ -803,6 +804,7 @@
                                .ne(InsProduct::getInsResult, 2)
                        ));
                if (l == l1) {
                    //如果所有项目都有结论,那么该样品状态已检
                    insSample.setInsState(2);
                }
                insSampleMapper.updateById(insSample);
@@ -834,7 +836,6 @@
                                .or()
                                .eq(InsProduct::getInsResult, 2)
                        )
                        //.isNull(InsProduct::getInsResult)
                        .eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory())
                        .eq(InsProduct::getState, 1));
                if (count == 0) {
@@ -1278,10 +1279,10 @@
            List<TableRenderData> tables1 = new ArrayList<>();
            tableRenderData.setRows(new ArrayList<>());
            int totalHeight = 0;
            int pageHeightLimit = 500; // å‡è®¾æ¯é¡µçš„高度限制为500单位
            int pageHeightLimit = 450; // å‡è®¾æ¯é¡µçš„高度限制为500单位
            int rowHeight = 0;
            List<RowRenderData> firstTwoRows = new ArrayList<>(); // ä¿å­˜å‰ä¸¤è¡Œä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
            List<RowRenderData> endRows = new ArrayList<>(); // ä¿å­˜å‰ä¸¤è¡Œä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
            List<RowRenderData> endRows = new ArrayList<>(); // ä¿å­˜æœ€åŽä¸€è¡Œå¤‡æ³¨ä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
            // ä¿å­˜å‰ä¸¤è¡Œä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
            if (rows.size() >= 3) {
                firstTwoRows.add(rows.get(0));
@@ -1676,17 +1677,39 @@
                .set(InsOrderState::getInsTime, LocalDateTime.now())
                .set(InsOrderState::getInsState, 3)
                .set(InsOrderState::getVerifyUser, verifyUser));
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        InformationNotification info = new InformationNotification();
        info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
        info.setMessageType("2");
        info.setTheme("复核通知");
        info.setContent("您有一条检验任务待复核消息");
        info.setSenderId(userId);
        info.setConsigneeId(verifyUser);
        info.setViewStatus(false);
        info.setJumpPath("b1-inspect-order-plan");
        informationNotificationService.addInformationNotification(info);
        /*如果是C类订单且是下发到质量部,则直接复核通过(结束试验)*/
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) {
            verifyPlan(orderId, laboratory, 2, null);
        }else {
            Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
            //LIMS系统消息推送
            InformationNotification info = new InformationNotification();
            info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
            info.setMessageType("2");
            info.setTheme("复核通知");
            info.setContent("您有一条检验任务待复核消息");
            info.setSenderId(userId);
            info.setConsigneeId(verifyUser);
            info.setViewStatus(false);
            info.setJumpPath("b1-inspect-order-plan");
            informationNotificationService.addInformationNotification(info);
            //todo ä¼ä¸šå¾®ä¿¡æ¶ˆæ¯æŽ¨é€@zss
           /* HashMap<String, Object> map = new HashMap<>();
            String account = userMapper.selectById(userId).getAccount();
            map.put("touser", *//*account*//*"ZT-012117");//接收消息成员的账号'ZT-031292'这种类型(如果有多个用'|'分隔)
            map.put("toparty", "");//接收部门id
            map.put("totag", "");//消息标签id
            map.put("msgtype", "text");//消息类型 text:文本
            map.put("agentid", 1000513);//应用id
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("content", "您有一条检验任务待复核消息,请前往LIMS系统查看。<a href=\"http://10.1.13.77/enter\"> </a>");
            map.put("text", JSONArray.toJSONString(hashMap));//消息内容
            map.put("safe", 0);//是否保密消息.0否
            map.put("enable_id_trans", 0);//是否开启id转译.0否
            map.put("enable_duplicate_check", 0);//是否开启重复消息检查.0否
            qywxApi.send(map);*/
        }
        //复核人--检验单相关负责人
        InsSampleUser insSampleUser = new InsSampleUser();
        insSampleUser.setUserId(verifyUser);
@@ -1694,11 +1717,6 @@
        insSampleUser.setState(1);
        insSampleUser.setSonLaboratory(laboratory);
        insSampleUserMapper.insert(insSampleUser);
        /*如果是C类订单且是下发到质量部,则直接复核通过(结束试验)*/
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) {
            verifyPlan(orderId, laboratory, 2, null);
        }
        /*校验一下result表*/
        CompletableFuture.supplyAsync(() -> {
            List<Integer> ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
@@ -1717,10 +1735,6 @@
        String key = "frequency" + ":" + entrustCode + ":*";
        RedisUtil.delsLike(key);
        return 1;
    }
    public int pxToCm(int px) {
        return px / 9;
    }
    // èŽ·å–ä¸¤ä¸ªlocalDateTime的每一天
inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -585,6 +585,7 @@
        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
        <result property="testRequirements" column="test_requirements" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java
@@ -123,7 +123,6 @@
    @GetMapping("temporaryInterface")
    public void temporaryInterface() {
        System.out.println("开始给每个人进行排班,默认早班======start");
        // TODO ç»™æ¯ä¸ªäººéƒ½è¿›è¡ŒæŽ’班(默认早班)
        PerformanceShiftAddDto performanceShiftAddDto = new PerformanceShiftAddDto();
        //班次--早(查询字典)
        List<Enums> shiftType = enumService.selectEnumByCategory("班次类型");
user-server/src/main/java/com/yuanchu/mom/controller/CompaniesController.java
@@ -59,10 +59,10 @@
        if (ObjectUtils.isNotEmpty(power)){
            List<Company> companies = new ArrayList<>();
            Company company = new Company();
            if (ObjectUtils.isEmpty(user.getCompanyId())){
            if (ObjectUtils.isEmpty(user.getCompany())){
                throw new ErrorException("该用户没有所属单位!");
            }
            company.setCompanyId(user.getCompanyId());
            company.setCompanyId(user.getCompany());
            companies.add(company);
            return Result.success(companies);
        }else {
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
@@ -91,7 +91,7 @@
        return Result.fail(map.get("info"));
    }
    @ValueAuth
    @ValueClassify("用户管理")
    @ApiOperation(value = "获取用户列表")
    @PostMapping("/selectUserList")
    public Result selectUserList(@RequestBody Map<String, Object> data) throws Exception {
user-server/src/main/resources/mapper/UserMapper.xml
@@ -45,7 +45,7 @@
        where u.id = #{userId}
    </select>
    <select id="getUser" resultType="com.yuanchu.mom.pojo.User">
        select * from user
        select * from user where state = 1
        # where  depart_lims_id=FIND_IN_SET(depart_lims_id, (select  GROUP_CONCAT(id SEPARATOR ',') from department_lims where department_lims.name like '%实验室'))
    </select>
</mapper>