仓库检验启用

master
zhaoxiaolin 8 months ago
parent 7f11ad3e9b
commit 5355ec828d

@ -44,4 +44,7 @@ public interface RemoteQualityService {
@PostMapping("/qcDetail/resendWXTask")
public R resendWXTask();
@PostMapping("/qcInventory/createCCTask")
public R createCCTask();
}

@ -62,6 +62,11 @@ public class RemoteQualityFallbackFactory implements FallbackFactory<RemoteQuali
public R resendWXTask() {
return R.fail("微信二次提醒失败:" + throwable.getMessage());
}
@Override
public R createCCTask() {
return R.fail("仓库检验任务失败:" + throwable.getMessage());
}
};
}
}

@ -184,6 +184,12 @@ public class RyTask {
logger.info("++质量管理系统+检验任务一小时后重新发送微信提醒+开始++resendWXTask+++++");
remoteQualityService.resendWXTask();
}
//库存检验任务创建,每天分钟执行一次
public void createCCTask(){
logger.info("++质量管理系统+仓库检验任务创建+开始++createCheckTypeCCTask+++++");
remoteQualityService.createCCTask();
}
/************质量管理系统定时任务结束*****************/
/************hr 人力基础数据定时任务开始*****************/

@ -469,7 +469,12 @@ public class OpenServiceImpl implements OpenService {
qcCheckTaskProduce.setRecordId(beLongId);
qcCheckTaskProduce.setFactoryCode(factoryCode);
qcCheckTaskProduce.setCreateTime(nowDate);
qcCheckTaskProduce.setTypeCode("produce");//大检验节点
if(StringUtils.isNotBlank(qcCheckTaskProduce.getTypeCode())){
qcCheckTaskProduce.setTypeCode(qcCheckTaskProduce.getTypeCode());//大检验节点
}else{
qcCheckTaskProduce.setTypeCode("produce");//大检验节点
}
qcCheckTaskProduce.setIncomeTime(DateUtils.getNowDate());
qcCheckTaskProduce.setSupplierCode(qcCheckTaskProduce.getCarCode());
qcCheckTaskProduce.setSupplierName(qcCheckTaskProduce.getCarName());

@ -5,7 +5,9 @@ import java.time.format.DateTimeFormatter;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.op.common.core.domain.R;
import com.op.common.core.utils.DateUtils;
import com.op.quality.domain.QcCheckTaskIncome;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -123,4 +125,20 @@ public class QcCheckTaskInventoryController extends BaseController {
public AjaxResult remove(@PathVariable String recordId) {
return toAjax(qcCheckTaskInventoryService.deleteQcCheckTaskInventoryByRecordId(recordId));
}
@GetMapping("/getPutInOrder")
public TableDataInfo getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory) {
startPage();
List<QcCheckTaskIncome> list = qcCheckTaskInventoryService.getPutInOrder(qcCheckTaskInventory);
return getDataTable(list);
}
/**
*
**/
@PostMapping("/createCCTask")
public R createCCTask() {
qcCheckTaskInventoryService.createCCTask();
return R.ok();
}
}

@ -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<QcCheckTaskIncome> getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory);
List<QcCheckTaskInventory> getPutInOrderList(QcCheckTaskInventory qoPutIn);
}

@ -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<QcCheckTaskIncome> getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory);
AjaxResult createCCTask();
}

@ -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<QcCheckUnqualifiedService> 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<QcCheckUnqualifiedService> 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();
});
}
//发企业微信--------------------结束
}

@ -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<QcCheckTaskDetail> 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<QcCheckTaskDetail> 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<SysNoticeGroup> notices = qcCheckTaskIncomeMapper.getNoticesGroup(noticeQo);
if(!CollectionUtils.isEmpty(notices)) {
List<WechartDTO> 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<QcCheckTaskIncome> getPutInOrder(QcCheckTaskInventory qcCheckTaskInventory) {
List<QcCheckTaskIncome> 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<List<Map<String, String>>> dateSources0 = remoteUserService.getPoolNameList(sysUser);
List<Map<String, String>> dateSources = dateSources0.getData();
ExecutorService executorService = new ThreadPoolExecutor(
dateSources.size(),
dateSources.size(),
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
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<QcCheckTaskInventory> 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 + "++++仓库检验任务结束++++++++++");
}
}

@ -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);
}

@ -92,6 +92,7 @@
<if test="checkType != null ">and qct.check_type = #{checkType}</if>
<if test="typeCode != null ">and q.type_code = #{typeCode}</if>
</where>
order by qct.create_time desc
</select>
<select id="selectQcCheckTaskInventoryByRecordId" parameterType="String" resultMap="QcCheckTaskInventoryResult">
@ -239,4 +240,126 @@
from qc_check_task
where CONVERT(varchar(10),create_time, 120) = CONVERT(varchar(10),GETDATE(), 120)
</select>
<select id="getPutInOrder" resultType="com.op.quality.domain.QcCheckTaskIncome">
select * from (
SELECT
wms_raw_order_in_sn.user_defined5 AS orderNo,
wms_raw_order_in_sn.material_code AS materialCode,
wms_raw_order_in_sn.material_desc AS materialName,
COUNT(wms_raw_order_in_sn.amount) AS quality,
wms_raw_order_in_sn.gmt_create incomeTime,
wms_raw_order_in_sn.wh_code supplierCode,
base_warehouse.warehouse_name supplierName,
wms_raw_order_in_sn.user_defined4 unit
FROM
wms_raw_order_in_sn
LEFT JOIN base_warehouse ON base_warehouse.warehouse_code=wms_raw_order_in_sn.wh_code
WHERE
wms_raw_order_in_sn.active_flag = '1'
GROUP BY
wms_raw_order_in_sn.wh_code,
wms_raw_order_in_sn.user_defined5,
wms_raw_order_in_sn.material_code,
wms_raw_order_in_sn.material_desc,
wms_raw_order_in_sn.user_defined4,
base_warehouse.warehouse_code,
base_warehouse.warehouse_name,
wms_raw_order_in_sn.gmt_create
union all
SELECT
wms_fp_storage_news_sn.order_no,
wms_fp_storage_news_sn.product_name,
wms_fp_storage_news_sn.product_code,
SUM ( wms_fp_storage_news_sn.amount ) AS total_amount,
wms_fp_storage_news_sn.gmt_create,
wms_fp_storage_news_sn.wh_code ,
base_warehouse.warehouse_name,
wms_fp_storage_news_sn.user_defined3
FROM
wms_fp_storage_news_sn
LEFT JOIN base_warehouse ON base_warehouse.warehouse_code=wms_fp_storage_news_sn.wh_code
WHERE
wms_fp_storage_news_sn.active_flag = '1'
GROUP BY
wms_fp_storage_news_sn.order_no,
wms_fp_storage_news_sn.product_name,
wms_fp_storage_news_sn.product_code,
wms_fp_storage_news_sn.gmt_create,
wms_fp_storage_news_sn.user_defined3,
base_warehouse.warehouse_code,
base_warehouse.warehouse_name,
wms_fp_storage_news_sn.wh_code
) t
</select>
<select id="getPutInOrderList" resultType="com.op.quality.domain.QcCheckTaskInventory">
select t0.orderNo,
t0.materialCode,
t0.materialName,
t0.quality,
t0.incomeTime,
t0.supplierCode,
t0.supplierName
from (
select t.*,bp.warehouse_cycle,
case when qct.create_time is not null then DATEDIFF(day, qct.create_time, GETDATE())
else DATEDIFF(day, t.incomeTime, GETDATE()) end days
from (
SELECT
wms_raw_order_in_sn.po_no AS orderNo,
wms_raw_order_in_sn.material_code AS materialCode,
wms_raw_order_in_sn.material_desc AS materialName,
COUNT(wms_raw_order_in_sn.amount) AS quality,
wms_raw_order_in_sn.gmt_create incomeTime,
wms_raw_order_in_sn.wh_code supplierCode,
base_warehouse.warehouse_name supplierName,
wms_raw_order_in_sn.user_defined4 unit
FROM
wms_raw_order_in_sn
LEFT JOIN base_warehouse ON base_warehouse.warehouse_code=wms_raw_order_in_sn.wh_code
WHERE
wms_raw_order_in_sn.active_flag = '1'
GROUP BY
wms_raw_order_in_sn.wh_code,
wms_raw_order_in_sn.po_no,
wms_raw_order_in_sn.material_code,
wms_raw_order_in_sn.material_desc,
wms_raw_order_in_sn.user_defined4,
base_warehouse.warehouse_code,
base_warehouse.warehouse_name,
wms_raw_order_in_sn.gmt_create
union all
SELECT
wms_fp_storage_news_sn.order_no,
wms_fp_storage_news_sn.product_name,
wms_fp_storage_news_sn.product_code,
SUM ( wms_fp_storage_news_sn.amount ) AS total_amount,
wms_fp_storage_news_sn.gmt_create,
wms_fp_storage_news_sn.wh_code ,
base_warehouse.warehouse_name,
wms_fp_storage_news_sn.user_defined3
FROM
wms_fp_storage_news_sn
LEFT JOIN base_warehouse ON base_warehouse.warehouse_code=wms_fp_storage_news_sn.wh_code
WHERE
wms_fp_storage_news_sn.active_flag = '1'
GROUP BY
wms_fp_storage_news_sn.order_no,
wms_fp_storage_news_sn.product_name,
wms_fp_storage_news_sn.product_code,
wms_fp_storage_news_sn.gmt_create,
wms_fp_storage_news_sn.user_defined3,
base_warehouse.warehouse_code,
base_warehouse.warehouse_name,
wms_fp_storage_news_sn.wh_code
) t
left join base_product_attached bp on t.materialCode = concat('0000000',bp.product_code)
left join (
select order_no,material_code,max(create_time) create_time
from qc_check_task where check_type='checkTypeCC' and del_flag = '0' GROUP BY order_no,material_code
) qct on qct.order_no = t.orderNo
and t.materialCode = qct.material_code
where bp.warehouse_cycle is not null
)t0
where t0.days >= t0.warehouse_cycle
</select>
</mapper>

@ -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;

@ -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;

@ -86,6 +86,7 @@
<if test="pc != null">pc,</if>
iei,
man_standar,
warehouse_cycle,
<if test="sprayWay != null">spray_way,</if>
<if test="blankDiameter != null">blank_diameter,</if>
<if test="blankNo != null">blank_no,</if>
@ -106,6 +107,7 @@
<if test="pc != null">#{pc},</if>
#{iei},
#{manStandar},
#{warehouseCycle},
<if test="sprayWay != null">#{sprayWay},</if>
<if test="blankDiameter != null">#{blankDiameter},</if>
<if test="blankNo != null">#{blankNo},</if>
@ -149,7 +151,8 @@
update base_product_attached
set
iei = #{iei},
man_standar = #{manStandar}
man_standar = #{manStandar},
warehouse_cycle = #{warehouseCycle}
where id = #{id}
</update>

@ -67,6 +67,8 @@
<result property="reportRate" column="report_rate"/>
<result property="mvgr5Nm" column="mvgr5_nm"/>
<result property="warehouseCycle" column="warehouse_cycle"/>
<!--附属属性-->
<result property="id" column="id"/>
</resultMap>
@ -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}

Loading…
Cancel
Save