From 5355ec828d3a18612b2c9725d526137979eac106 Mon Sep 17 00:00:00 2001 From: zhaoxiaolin Date: Fri, 2 Aug 2024 08:23:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=93=E5=BA=93=E6=A3=80=E9=AA=8C=E5=90=AF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../op/system/api/RemoteQualityService.java | 3 + .../factory/RemoteQualityFallbackFactory.java | 5 + .../src/main/java/com/op/job/task/RyTask.java | 6 + .../op/open/service/impl/OpenServiceImpl.java | 7 +- .../QcCheckTaskInventoryController.java | 18 ++ .../mapper/QcCheckTaskInventoryMapper.java | 4 + .../service/IQcCheckTaskInventoryService.java | 6 + .../impl/QcCheckTaskIncomeServiceImpl.java | 9 +- .../impl/QcCheckTaskInventoryServiceImpl.java | 156 +++++++++++++++--- .../QcCheckTaskWarehousingServiceImpl.java | 2 +- .../quality/QcCheckTaskInventoryMapper.xml | 123 ++++++++++++++ .../java/com/op/wms/domain/BaseProduct.java | 9 + .../op/wms/domain/BaseProductAttached.java | 9 + .../mapper/wms/BaseProductAttachedMapper.xml | 5 +- .../mapper/wms/BaseProductMapper.xml | 4 +- 15 files changed, 336 insertions(+), 30 deletions(-) diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteQualityService.java b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteQualityService.java index 71e2a74c..37aad484 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteQualityService.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteQualityService.java @@ -44,4 +44,7 @@ public interface RemoteQualityService { @PostMapping("/qcDetail/resendWXTask") public R resendWXTask(); + + @PostMapping("/qcInventory/createCCTask") + public R createCCTask(); } diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteQualityFallbackFactory.java b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteQualityFallbackFactory.java index 05c34975..9673c5cf 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteQualityFallbackFactory.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteQualityFallbackFactory.java @@ -62,6 +62,11 @@ public class RemoteQualityFallbackFactory implements FallbackFactory list = qcCheckTaskInventoryService.getPutInOrder(qcCheckTaskInventory); + return getDataTable(list); + } + + /** + * 库存检验:库存检验任务 + **/ + @PostMapping("/createCCTask") + public R createCCTask() { + qcCheckTaskInventoryService.createCCTask(); + return R.ok(); + } } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcCheckTaskInventoryMapper.java b/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcCheckTaskInventoryMapper.java index ceb5b5f3..0776965a 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcCheckTaskInventoryMapper.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/mapper/QcCheckTaskInventoryMapper.java @@ -2,6 +2,7 @@ package com.op.quality.mapper; import java.util.List; +import com.op.quality.domain.QcCheckTaskIncome; import com.op.quality.domain.QcCheckTaskInventory; import com.op.quality.domain.QcCheckTaskProduce; import org.apache.ibatis.annotations.Mapper; @@ -65,4 +66,7 @@ public interface QcCheckTaskInventoryMapper { int getTodayMaxNum(QcCheckTaskInventory qcCheckTaskInventory); + List getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory); + + List getPutInOrderList(QcCheckTaskInventory qoPutIn); } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/IQcCheckTaskInventoryService.java b/op-modules/op-quality/src/main/java/com/op/quality/service/IQcCheckTaskInventoryService.java index 79c2a665..6fc0e402 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/IQcCheckTaskInventoryService.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/IQcCheckTaskInventoryService.java @@ -2,6 +2,8 @@ package com.op.quality.service; import java.util.List; +import com.op.common.core.web.domain.AjaxResult; +import com.op.quality.domain.QcCheckTaskIncome; import com.op.quality.domain.QcCheckTaskInventory; /** @@ -58,4 +60,8 @@ public interface IQcCheckTaskInventoryService { * @return 结果 */ public int deleteQcCheckTaskInventoryByRecordId(String recordId); + + List getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory); + + AjaxResult createCCTask(); } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskIncomeServiceImpl.java b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskIncomeServiceImpl.java index b3bb0179..d9b9951c 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskIncomeServiceImpl.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskIncomeServiceImpl.java @@ -2,6 +2,7 @@ package com.op.quality.service.impl; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -182,11 +183,11 @@ public class QcCheckTaskIncomeServiceImpl implements qctp.setGroupId(group.getGroupId()); itemsGG = qcCheckTypeProjectMapper.getTPByTypeGroup(qctp); } - items.addAll(itemsGG); /**qc_check_task_detail**/ if(CollectionUtils.isEmpty(items)){ + logger.info("检验任务创建参数缺失:"+qcCheckTaskIncome.getMaterialCode()); return 0;//没有找到检测项目 } @@ -300,11 +301,11 @@ public class QcCheckTaskIncomeServiceImpl implements } logger.info("来料检验企业微信提醒请求:" + JSONObject.toJSONString(wecharts)); if (!CollectionUtils.isEmpty(wecharts)) { - new Thread(() -> { + CompletableFuture.runAsync(() -> { + System.out.println("异步执行企业微信发送"); AjaxResult result = remoteOpenService.sendWeChartMessage(wecharts); logger.info("来料检验企业微信提醒结果:" + JSONObject.toJSONString(result)); - - }).start(); + }); } //发企业微信--------------------结束 } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskInventoryServiceImpl.java b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskInventoryServiceImpl.java index fdd00373..56da41be 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskInventoryServiceImpl.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskInventoryServiceImpl.java @@ -4,17 +4,31 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.concurrent.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import com.op.common.core.domain.R; import com.op.common.core.utils.DateUtils; import com.op.common.core.utils.StringUtils; +import com.op.common.core.utils.bean.BeanUtils; import com.op.common.core.utils.uuid.IdUtils; +import com.op.common.core.web.domain.AjaxResult; import com.op.common.security.utils.SecurityUtils; import com.op.quality.domain.*; import com.op.quality.mapper.*; import com.op.quality.service.IQcCheckTaskDefectService; import com.op.quality.service.IQcCheckTaskUserService; +import com.op.system.api.RemoteOpenService; +import com.op.system.api.RemoteUserService; +import com.op.system.api.domain.SysNoticeGroup; +import com.op.system.api.domain.SysUser; +import com.op.system.api.domain.dto.WechartDTO; +import com.op.system.api.domain.mes.ProOrderWorkorderDTO; import com.op.system.api.domain.quality.QcUserMaterialDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,6 +41,9 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; +import static com.op.common.core.web.domain.AjaxResult.error; +import static com.op.common.core.web.domain.AjaxResult.success; + /** * 库存检验任务Service业务层处理 * @@ -57,11 +74,14 @@ public class QcCheckTaskInventoryServiceImpl implements IQcCheckTaskInventorySer private IQcCheckTaskDefectService qcCheckTaskDefectService; @Autowired - private QcSampleRuleMapper qcSampleRuleMapper; + private RemoteUserService remoteUserService; @Autowired private QcCheckTaskUserMapper qcCheckTaskUserMapper; + @Autowired + private RemoteOpenService remoteOpenService; + private static Pattern p2= Pattern.compile("<[^>]+>"); /** * 查询库存检验任务 * @@ -134,23 +154,32 @@ public class QcCheckTaskInventoryServiceImpl implements IQcCheckTaskInventorySer qcCheckTaskInventory.setCheckNo(bpDD + liushuiStr); /**取检测项**/ - QcCheckTypeProject qctp = new QcCheckTypeProject(); + QcCheckTypeProject qctp= new QcCheckTypeProject(); qctp.setTypeId(qcCheckTaskInventory.getCheckType());//生产过程检验 qctp.setMaterialCode(qcCheckTaskInventory.getMaterialCode());//特性 - /**qc_check_type_project**/ + /**qc_check_type_project**///个性 List items = qcCheckTypeProjectMapper.getTPByTypeMaterial(qctp); - if (CollectionUtils.isEmpty(items)) { - /**qc_material_group_detail**/ - QcMaterialGroupDetail group = qcMaterialGroupDetailMapper.getGroupByMaterial(qcCheckTaskInventory.getMaterialCode()); - if (group == null) { + /**qc_material_group_detail**/ + QcMaterialGroupDetail group = qcMaterialGroupDetailMapper.getGroupByMaterial(qcCheckTaskInventory.getMaterialCode()); + //共性 + if(group == null){//默认 + group = new QcMaterialGroupDetail(); + QcProjectType initGroup = qcCheckTypeProjectMapper.getProductGroup(qcCheckTaskInventory.getMaterialCode()); + if(initGroup != null){ + group.setGroupId(initGroup.getGroupId()); + }else{ return 0;//没有找到检测项目 } - qctp.setGroupId(group.getGroupId());//共性 - items = qcCheckTypeProjectMapper.getTPByTypeGroup(qctp); } + List itemsGG = new ArrayList<>(); + if(StringUtils.isNotBlank(group.getGroupId())){ + qctp.setGroupId(group.getGroupId()); + itemsGG = qcCheckTypeProjectMapper.getTPByTypeGroup(qctp); + } + items.addAll(itemsGG); /**qc_check_task_detail**/ - if (CollectionUtils.isEmpty(items)) { + if(CollectionUtils.isEmpty(items)){ return 0;//没有找到检测项目 } @@ -191,17 +220,6 @@ public class QcCheckTaskInventoryServiceImpl implements IQcCheckTaskInventorySer } } qcCheckTaskInventory.setNoOkQuality(noOkQuality); - -// /**qc_sample_rule**/ -// if(qcCheckTaskInventory.getNoOkQuality()==null) { -// QcCheckTaskIncome sampQua = new QcCheckTaskIncome(); -// sampQua.setCheckType(qcCheckTaskInventory.getCheckType()); -// sampQua.setQuality(qcCheckTaskInventory.getQuality()); -// String sampNum = qcSampleRuleMapper.getSampNum(sampQua); -// if (StringUtils.isNotBlank(sampNum)) { -// qcCheckTaskInventory.setSampleQuality(new BigDecimal(sampNum)); -// } -// } /**qc_check_task**/ qcCheckTaskInventoryMapper.insertQcCheckTaskInventory(qcCheckTaskInventory); @@ -214,7 +232,37 @@ public class QcCheckTaskInventoryServiceImpl implements IQcCheckTaskInventorySer item.setFactoryCode(factoryCode); item.setStatus("N"); } - return qcCheckTaskDetailMapper.addBatch(items); + + int batchs = qcCheckTaskDetailMapper.addBatch(items); + //发企业微信--------------------开始 + SysNoticeGroup noticeQo = new SysNoticeGroup(); + noticeQo.setNoticeId(21L); + List notices = qcCheckTaskIncomeMapper.getNoticesGroup(noticeQo); + if(!CollectionUtils.isEmpty(notices)) { + + List wecharts = new ArrayList<>(); + for (SysNoticeGroup noticedto : notices) { + WechartDTO wechart0 = new WechartDTO(); + wechart0.setUserId(noticedto.getWxId()); + String contentInfo = notices.get(0).getNoticeContent(); + contentInfo = contentInfo.replace("${checkNo}", qcCheckTaskInventory.getCheckNo() + "\n"); + Matcher m = p2.matcher(contentInfo); + contentInfo = m.replaceAll(""); + wechart0.setText(contentInfo); + wecharts.add(wechart0); + } + logger.info("库存检验企业微信提醒请求:" + JSONObject.toJSONString(wecharts)); + if (!CollectionUtils.isEmpty(wecharts)) { + CompletableFuture.runAsync(() -> { + System.out.println("异步执行企业微信发送"); + AjaxResult result = remoteOpenService.sendWeChartMessage(wecharts); + logger.info("库存检验企业微信提醒结果:" + JSONObject.toJSONString(result)); + }); + } + //发企业微信--------------------结束 + } + + return batchs; } /** @@ -291,4 +339,68 @@ public class QcCheckTaskInventoryServiceImpl implements IQcCheckTaskInventorySer qcCheckTaskUserMapper.deleteQcCheckTaskUserByBelongTo(recordId); return 1; } + + @Override + @DS("#header.poolName") + public List getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory) { + List dtos = qcCheckTaskInventoryMapper.getPutInOrder(qcCheckTaskInventory); +// for(QcCheckTaskIncome dto:dtos){ +// String statusName = ""; +// if("w5".equals(dto.getStatus())){//设计有问题TODO +// statusName = "质检完成"; +// }else{ +// statusName = "质检未完成"; +// } +// dto.setStatus(statusName); +// } + return dtos; + } + + /**库存检验任务**/ + @Override + public AjaxResult createCCTask() { + // 加载sf-cloud库的sys_datasource + SysUser sysUser = new SysUser(); + sysUser.setUserId(1L); + R>> dateSources0 = remoteUserService.getPoolNameList(sysUser); + List> dateSources = dateSources0.getData(); + ExecutorService executorService = new ThreadPoolExecutor( + dateSources.size(), + dateSources.size(), + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue()); + try { + dateSources.forEach(dateSource -> { + if("ds_1000".equals(dateSource.get("poolName"))){ + logger.info("++++++++++++" + dateSource.get("poolName") + "++++库存检验开始++++++++++"); + Runnable run = () -> createCCFunc(dateSource.get("poolName")); + executorService.execute(run); + } + }); + } catch (Exception e) { + logger.error("service == createCPBatchTask == exception", e); + return error("service == createCPBatchTask == exception"); + } finally { + executorService.shutdown(); + } + return success(); + } + + public void createCCFunc(String poolName){ + DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key + QcCheckTaskInventory qoPutIn = new QcCheckTaskInventory(); + //根据base_product的库检周期和入库时间获取当前需要检验的物料 + List qoPutInList = qcCheckTaskInventoryMapper.getPutInOrderList(qoPutIn); + for(QcCheckTaskInventory putIn:qoPutInList){ + QcCheckTaskInventory ccTask = new QcCheckTaskInventory(); + + BeanUtils.copyProperties(putIn,ccTask); + ccTask.setCheckType("checkTypeCC");//库存检验 + ccTask.setFactoryCode(poolName.replace("ds_","")); + int m = insertQcCheckTaskInventory(ccTask); + logger.info("++++++++++++仓库检验任务生成" + m + "++++++++++++++"); + } + logger.info("++++++++++++" + poolName + "++++仓库检验任务结束++++++++++"); + } + } diff --git a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskWarehousingServiceImpl.java b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskWarehousingServiceImpl.java index e8aea9be..e5d78b64 100644 --- a/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskWarehousingServiceImpl.java +++ b/op-modules/op-quality/src/main/java/com/op/quality/service/impl/QcCheckTaskWarehousingServiceImpl.java @@ -397,7 +397,7 @@ public class QcCheckTaskWarehousingServiceImpl implements IQcCheckTaskWarehousin try { dateSources.forEach(dateSource -> { if("ds_1000".equals(dateSource.get("poolName"))){ - logger.info("++++++++++++" + dateSource.get("poolName") + "++++成品入库检验巡检开始++++++++++"); + logger.info("++++++++++++" + dateSource.get("poolName") + "++++成品入库检验开始++++++++++"); Runnable run = () -> createCPFunc(dateSource.get("poolName")); executorService.execute(run); } diff --git a/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml b/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml index 66e62f36..5e2ad6b3 100644 --- a/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml +++ b/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml @@ -92,6 +92,7 @@ and qct.check_type = #{checkType} and q.type_code = #{typeCode} + order by qct.create_time desc + + diff --git a/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProduct.java b/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProduct.java index 3ce336b1..2a656afe 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProduct.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProduct.java @@ -352,6 +352,15 @@ public class BaseProduct extends BaseEntity { @Excel(name = "报工汇率") private BigDecimal reportRate; private String mvgr5Nm; + private String warehouseCycle; + + public String getWarehouseCycle() { + return warehouseCycle; + } + + public void setWarehouseCycle(String warehouseCycle) { + this.warehouseCycle = warehouseCycle; + } public String getMvgr5Nm() { return mvgr5Nm; diff --git a/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProductAttached.java b/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProductAttached.java index 2f021ecb..1e488276 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProductAttached.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/domain/BaseProductAttached.java @@ -122,6 +122,15 @@ public class BaseProductAttached extends BaseEntity { */ @Excel(name = "其它") private String other; + private String warehouseCycle; + + public String getWarehouseCycle() { + return warehouseCycle; + } + + public void setWarehouseCycle(String warehouseCycle) { + this.warehouseCycle = warehouseCycle; + } public void setId(String id) { this.id = id; diff --git a/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductAttachedMapper.xml b/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductAttachedMapper.xml index 81ecda8b..cdbd2494 100644 --- a/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductAttachedMapper.xml +++ b/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductAttachedMapper.xml @@ -86,6 +86,7 @@ pc, iei, man_standar, + warehouse_cycle, spray_way, blank_diameter, blank_no, @@ -106,6 +107,7 @@ #{pc}, #{iei}, #{manStandar}, + #{warehouseCycle}, #{sprayWay}, #{blankDiameter}, #{blankNo}, @@ -149,7 +151,8 @@ update base_product_attached set iei = #{iei}, - man_standar = #{manStandar} + man_standar = #{manStandar}, + warehouse_cycle = #{warehouseCycle} where id = #{id} diff --git a/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductMapper.xml b/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductMapper.xml index 901d8983..bd8b298f 100644 --- a/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductMapper.xml +++ b/op-modules/op-wms/src/main/resources/mapper/wms/BaseProductMapper.xml @@ -67,6 +67,8 @@ + + @@ -183,7 +185,7 @@ bpa.support_no, bpa.pvc, bpa.support_plate, - bpa.other + bpa.other,bpa.warehouse_cycle from base_product bp left join base_product_attached bpa on bpa.product_code = right(bp.product_code,11) where product_id = #{productId}