|
|
|
@ -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 + "++++仓库检验任务结束++++++++++");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|