报工+批次可以重复+其它细节功能改善

master
zhaoxiaolin 1 year ago
parent eacf18a4a8
commit dd16e06623

@ -77,7 +77,7 @@ public interface OpenMapper {
public int addBatch(@Param("list") List<QcCheckTaskDetailDTO> items);
List<QcUserMaterialDTO> getCheckUsers(String materialCode);
List<QcUserMaterialDTO> getCheckUsers(String checkType);
public int addCheckUsers(@Param("list") List<QcUserMaterialDTO> users);
}

@ -346,7 +346,7 @@ public class OpenServiceImpl implements OpenService {
qctp.setMaterialCode(qcCheckTaskProduce.getMaterialCode());//特性
/**qc_user_material取默认检查人**/
List<QcUserMaterialDTO> users = openMapper.getCheckUsers(qcCheckTaskProduce.getOrderNo());
List<QcUserMaterialDTO> users = openMapper.getCheckUsers(qcCheckTaskProduce.getCheckType());
if (CollectionUtils.isEmpty(users)) {
QcUserMaterialDTO dto0 = new QcUserMaterialDTO();
dto0.setId(IdUtils.fastSimpleUUID());

@ -199,8 +199,7 @@
select qum.user_code userCode,
qum.user_name userName
from qc_user_material qum
left join pro_order_workorder pow on pow.workorder_code = qum.material_code
where pow.workorder_code = #{workorderCode} and pow.del_flag = '0' and qum.del_flag = '0'
where qum.material_code = #{checkType} and pow.del_flag = '0' and qum.del_flag = '0'
</select>
<insert id="insertEquRepairOrder" parameterType="DeviceRepairOrder">

@ -21,10 +21,13 @@ import com.op.common.core.utils.bean.BeanUtils;
import com.op.common.security.utils.SecurityUtils;
import com.op.quality.domain.*;
import com.op.system.api.RemoteOpenService;
import com.op.system.api.RemoteSapService;
import com.op.system.api.RemoteUserService;
import com.op.system.api.domain.SysRole;
import com.op.system.api.domain.SysUser;
import com.op.system.api.domain.quality.HRInfo;
import com.op.system.api.domain.quality.QcCheckTaskIncomeDTO;
import com.op.system.api.domain.sap.SapSupplier;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
@ -62,6 +65,9 @@ public class QcCheckTaskIncomeController extends BaseController {
@Autowired
private RemoteUserService remoteUserService;
@Autowired
private RemoteSapService remoteSapService;
/**
*
*/
@ -156,10 +162,15 @@ public class QcCheckTaskIncomeController extends BaseController {
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
try {
dateSources.forEach(dateSource -> {
Runnable run = () -> createIncomeBatchTaskFunc(dateSource.get("poolName"));
executorService.execute(run);
if(!"ds_999".equals(dateSource.get("poolName"))){
Runnable run = () -> createIncomeBatchTaskFunc(dateSource.get("poolName"));
executorService.execute(run);
}
});
} catch (Exception e) {
logger.error("controller == createIncomeBatchTask == exception", e);
return error("controller == createIncomeBatchTask == exception");
@ -174,32 +185,39 @@ public class QcCheckTaskIncomeController extends BaseController {
DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key
Date taskTime = DateUtils.getNowDate();
logger.info("++++++++++++" + poolName + "工厂来料检验批量创建任务开始+++时间:"+ taskTime +"++++++++++");
List<QcCheckTaskIncome> incomeBatchLists = qcCheckTaskIncomeService.getIncomeBatchList(poolName);
List<String> batchRecordIds = new ArrayList<>();
Map<String, Object> mapBom = new HashMap<String, Object>();
mapBom.put("P_WERKS",poolName.replace("ds_",""));//物料工厂 例如1000
logger.info("来料信息查询请求:" + JSONObject.toJSONString(mapBom));
R incomeR = remoteSapService.inComingCheck(mapBom);
if(incomeR.getCode()==500){
logger.info("来料信息查询请求:" + JSONObject.toJSONString(incomeR));
return AjaxResult.error(JSONObject.toJSONString(incomeR));
}
logger.info("来料信息查询结果:" + JSONObject.toJSONString(incomeR));
List<QcCheckTaskIncomeDTO> incomeAll = (List<QcCheckTaskIncomeDTO>)incomeR.getData();
//已经生成过检验任务的采购订单
List<String> todayIncomeLists = qcCheckTaskIncomeService.getTodayIncomeLists();
List<QcCheckTaskIncomeDTO> newIncomes = incomeAll.stream()
.filter(item -> !todayIncomeLists.contains(item.getOrderNo()))
.collect(Collectors.toList());
int successNum = 0;//成功任务数
int failNum = 0;//失败任务数
if(incomeBatchLists != null){
for( int i = 0 ; i < incomeBatchLists.size();){
QcCheckTaskIncomeDTO qcCheckTaskIncomedto = new QcCheckTaskIncomeDTO();
QcCheckTaskIncome income = incomeBatchLists.get(i);
BeanUtils.copyProperties(income,qcCheckTaskIncomedto);
//内层一个一个创建任务
AjaxResult ajaxResult = createIncomeTask(qcCheckTaskIncomedto);
if(!CollectionUtils.isEmpty(newIncomes)){
logger.info("工厂来料检验任务生成参数:" + JSONObject.toJSONString(newIncomes));
for(QcCheckTaskIncomeDTO income:newIncomes){
AjaxResult ajaxResult = createIncomeTask(income);
if(ajaxResult.isSuccess()){
batchRecordIds.add(qcCheckTaskIncomedto.getRecordId());
successNum = successNum + 1;
logger.info(poolName + "工厂的" + income.getCheckNo()+"来料检验创建任务成功++++++++++");
}else if(ajaxResult.isError()){
failNum = failNum +1;
logger.info(poolName + "工厂的" + income.getCheckNo()+"来料检验创建任务失败++++++++++");
}
i++;
}
}else{
logger.info("++++++++++++" + poolName + "工厂来料检验没有可创建的任务++++++++++");
}
//批量修改原表中的check_status和check_time
int upate = qcCheckTaskIncomeService.updateIncomeBatchList(batchRecordIds,taskTime);
logger.info("++++++++++++" + poolName + "工厂来料检验批量创建任务结束:成功"+ successNum +"失败"+ failNum +"+++++");
return success();
} catch (Exception e) {
@ -209,9 +227,7 @@ public class QcCheckTaskIncomeController extends BaseController {
}
@PostMapping("/createIncomeTask")
public AjaxResult createIncomeTask(@RequestBody QcCheckTaskIncomeDTO qcCheckTaskIncome0) {
QcCheckTaskIncome qcCheckTaskIncome = new QcCheckTaskIncome();
BeanUtils.copyProperties(qcCheckTaskIncome0, qcCheckTaskIncome);
public AjaxResult createIncomeTask(@RequestBody QcCheckTaskIncomeDTO qcCheckTaskIncome) {
if (StringUtils.isBlank(qcCheckTaskIncome.getOrderNo())) {
return error("[orderNo]不能为空");
@ -222,12 +238,7 @@ public class QcCheckTaskIncomeController extends BaseController {
if (StringUtils.isBlank(qcCheckTaskIncome.getMaterialCode())) {
return error("[materialCode]不能为空");
}
if (StringUtils.isBlank(qcCheckTaskIncome.getCheckType())) {
return error("[checkType]不能为空");
}
if (StringUtils.isBlank(qcCheckTaskIncome.getFactoryCode())) {
return error("[factoryCode]不能为空");
}
if (StringUtils.isBlank(qcCheckTaskIncome.getSupplierCode())) {
return error("[supplierCode]不能为空");
}
@ -237,14 +248,13 @@ public class QcCheckTaskIncomeController extends BaseController {
if (qcCheckTaskIncome.getIncomeTime() == null) {
return error("[incomeTime]不能为空");
}
logger.info(qcCheckTaskIncome0.getFactoryCode() + "工厂来料检验任务生成开始================================");
logger.info(qcCheckTaskIncome0.getFactoryCode() + "工厂来料检验任务生成参数:" + JSONObject.toJSONString(qcCheckTaskIncome));
int r = qcCheckTaskIncomeService.insertQcCheckTaskIncome(qcCheckTaskIncome);
QcCheckTaskIncome income = new QcCheckTaskIncome();
BeanUtils.copyProperties(qcCheckTaskIncome,income);
int r = qcCheckTaskIncomeService.insertQcCheckTaskIncome(income);
if (r > 0) {
return toAjax(r);
}
return error(qcCheckTaskIncome0.getFactoryCode() + "工厂添加失败:请检查物料的关联检测项" );
return error("添加失败:请检查物料的关联检测项" );
}

@ -88,6 +88,34 @@ public class QcCheckTaskDefect extends BaseEntity {
@Excel(name = "不合格数量")
private BigDecimal noOkQuality;
private String defectCodes;
private String defectNames;
private String defectQualitys;
public String getDefectCodes() {
return defectCodes;
}
public void setDefectCodes(String defectCodes) {
this.defectCodes = defectCodes;
}
public String getDefectNames() {
return defectNames;
}
public void setDefectNames(String defectNames) {
this.defectNames = defectNames;
}
public String getDefectQualitys() {
return defectQualitys;
}
public void setDefectQualitys(String defectQualitys) {
this.defectQualitys = defectQualitys;
}
public String getBelongToDetail() {
return belongToDetail;
}

@ -95,7 +95,7 @@ public class QcCheckTaskIncome extends BaseEntity {
*/
@Excel(name = "检测地点")
private String checkLoc;
private String checkLocName;
/**
*
*/
@ -193,6 +193,14 @@ public class QcCheckTaskIncome extends BaseEntity {
private String noOkQualityNames;
private String noOkQualityVals;
public String getCheckLocName() {
return checkLocName;
}
public void setCheckLocName(String checkLocName) {
this.checkLocName = checkLocName;
}
public String getNoOkQualityNames() {
return noOkQualityNames;
}

@ -1,8 +1,11 @@
package com.op.quality.mapper;
import java.util.List;
import java.util.Map;
import com.op.quality.domain.QcCheckTaskDefect;
import com.op.quality.domain.QcCheckTaskDetail;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
/**
@ -64,6 +67,6 @@ public interface QcCheckTaskDefectMapper {
public int deleteQcCheckTaskDefectByBelongTo(String belongTo);
public List<QcCheckTaskDefect> selectDefectByBelongTo(String belongTo);
@MapKey("belongToDetail")
public Map<String, QcCheckTaskDefect> getDefectMap(QcCheckTaskDetail qcCheckTaskDetail);
}

@ -88,9 +88,7 @@ public interface QcCheckTaskIncomeMapper {
List<String> selectQcCheckTaskCheckNoByRecordIds(String[] recordIds);
List<QcUserMaterialDTO> getUserByMaterial(String materialCode);
List<QcUserMaterialDTO> getCheckUsers(String orderNo);
List<QcUserMaterialDTO> getUserByCheckType(String checkType);
int addCheckUsers(@Param("list") List<QcUserMaterialDTO> users);
@ -112,4 +110,6 @@ public interface QcCheckTaskIncomeMapper {
int updateIncomeBatchList(@Param("list") List<String> batchRecordIds, @Param("time") Date taskTime);
List<QcDefectType> getCheckLocList(QcDefectType qcDefectType);
List<String> getTodayIncomeLists();
}

@ -98,4 +98,6 @@ public interface IQcCheckTaskIncomeService {
int updateIncomeBatchList(List<String> batchRecordIds , Date taskTime);
List<QcDefectType> getCheckLocList(QcDefectType qcDefectType);
List<String> getTodayIncomeLists();
}

@ -210,11 +210,11 @@ public class QcCheckTaskIncomeServiceImpl implements IQcCheckTaskIncomeService {
}
//检验人插入
qcCheckTaskUserService.insertQcCheckTaskUserPDA(qcCheckTaskUserList);
}else{//上位机触发
}else{
qcCheckTaskIncome.setCheckManName("");
qcCheckTaskIncome.setCheckManCode("");
/**qc_user_material取默认检查人**/
List<QcUserMaterialDTO> users = qcCheckTaskIncomeMapper.getCheckUsers(qcCheckTaskIncome.getOrderNo());
List<QcUserMaterialDTO> users = qcCheckTaskIncomeMapper.getUserByCheckType(qcCheckTaskIncome.getCheckType());
if(CollectionUtils.isEmpty(users)){
QcUserMaterialDTO dto0 = new QcUserMaterialDTO();
dto0.setId(IdUtils.fastSimpleUUID());
@ -599,7 +599,7 @@ public class QcCheckTaskIncomeServiceImpl implements IQcCheckTaskIncomeService {
break;
}
}
//TODO;today
int n = 0;
QcCheckTaskIncome qcCheckTask = new QcCheckTaskIncome();
qcCheckTask.setUpdateBy(updateBy);
@ -610,14 +610,9 @@ public class QcCheckTaskIncomeServiceImpl implements IQcCheckTaskIncomeService {
qcCheckTask.setCheckResult(result);//检验结果Y合格 N不合格
qcCheckTask.setIncomeBatchNo(qcCheckTaskIncome.getIncomeBatchNo());
BigDecimal noOkQquality = new BigDecimal("0");
List<QcCheckTaskDefect> defects = qcCheckTaskIncome.getDefects();
for(QcCheckTaskDefect defect:defects){
defect.setRecordId(IdUtils.fastSimpleUUID());
defect.setCreateTime(nowTime);
defect.setCreateBy(updateBy);
defect.setFactoryCode(factoryCode);
defect.setBelongTo(belongId);
noOkQquality = noOkQquality.add(defect.getNoOkQuality());
List<QcCheckTaskDefect> defects0 = qcCheckTaskIncome.getDefects();
for(QcCheckTaskDefect defect0:defects0){
noOkQquality = noOkQquality.add(defect0.getNoOkQuality());
}
qcCheckTask.setNoOkQuality(noOkQquality);//累计不合格数
qcCheckTask.setCheckManCode(qcCheckTaskIncome.getUpdateBy());
@ -655,6 +650,28 @@ public class QcCheckTaskIncomeServiceImpl implements IQcCheckTaskIncomeService {
/**qc_check_task_defect**/
n=qcCheckTaskIncomeMapper.deleteQcCheckTaskDefects(belongId);
logger.info("清理qc_check_task_defect:"+n);
List<QcCheckTaskDefect> defects = new ArrayList<>();
QcCheckTaskDefect defect = null;
for(QcCheckTaskDetail detail:details){
if(StringUtils.isNotBlank(detail.getDefectCodes())){
String[] defectCodes = detail.getDefectCodes().split(",");
String[] defectNames = detail.getDefectNames().split(",");
String[] defectQualitys = detail.getDefectQualitys().split(",");
for(int d=0;d<defectCodes.length;d++){
defect = new QcCheckTaskDefect();
defect.setDefectCode(defectCodes[d]);
defect.setDefectSubclass(defectNames[d].split(":")[0]);
defect.setNoOkQuality(new BigDecimal(defectQualitys[d]));
defect.setRecordId(IdUtils.fastSimpleUUID());
defect.setCreateTime(nowTime);
defect.setCreateBy(updateBy);
defect.setFactoryCode(factoryCode);
defect.setBelongTo(belongId);
defect.setBelongToDetail(detail.getRecordId());
defects.add(defect);
}
}
}
n= qcCheckTaskIncomeMapper.addQcCheckTaskDefects(defects);
logger.info("qc_check_task_defect:"+n);
@ -727,5 +744,10 @@ public class QcCheckTaskIncomeServiceImpl implements IQcCheckTaskIncomeService {
return qcCheckTaskIncomeMapper.getCheckLocList(qcDefectType);
}
@Override
public List<String> getTodayIncomeLists() {
return qcCheckTaskIncomeMapper.getTodayIncomeLists();
}
}

@ -204,7 +204,7 @@ public class QcCheckTaskProduceServiceImpl implements IQcCheckTaskProduceService
qcCheckTaskProduce.setCheckManName("");
qcCheckTaskProduce.setCheckManCode("");
/**qc_user_material取默认检查人**/
List<QcUserMaterialDTO> users = qcCheckTaskIncomeMapper.getCheckUsers(qcCheckTaskProduce.getOrderNo());
List<QcUserMaterialDTO> users = qcCheckTaskIncomeMapper.getUserByCheckType(qcCheckTaskProduce.getCheckType());
if(!CollectionUtils.isEmpty(users)){
for(QcUserMaterialDTO user:users){
user.setId(IdUtils.fastSimpleUUID());

@ -179,7 +179,7 @@ public class QcCheckTaskWarehousingServiceImpl implements IQcCheckTaskWarehousin
qcCheckTaskWarehousing.setCheckManName("");
qcCheckTaskWarehousing.setCheckManCode("");
/**qc_user_material取默认检查人**/
List<QcUserMaterialDTO> users = qcCheckTaskIncomeMapper.getUserByMaterial(qcCheckTaskWarehousing.getMaterialCode());
List<QcUserMaterialDTO> users = qcCheckTaskIncomeMapper.getUserByCheckType(qcCheckTaskWarehousing.getCheckType());
if(CollectionUtils.isEmpty(users)){
QcUserMaterialDTO dto0 = new QcUserMaterialDTO();
dto0.setUserCode("mobile");

@ -11,6 +11,7 @@ import com.op.common.core.utils.uuid.IdUtils;
import com.op.common.security.utils.SecurityUtils;
import com.op.quality.domain.*;
import com.op.quality.mapper.QMSFileMapper;
import com.op.quality.mapper.QcCheckTaskDefectMapper;
import com.op.quality.mapper.QcCheckTaskIncomeMapper;
import com.op.quality.mapper.QcProCheckMapper;
import com.op.quality.service.QcProCheckService;
@ -37,6 +38,9 @@ public class QcProCheckServiceImpl implements QcProCheckService {
@Autowired
private QcCheckTaskIncomeMapper qcCheckTaskIncomeMapper;
@Autowired
private QcCheckTaskDefectMapper qcCheckTaskDefectMapper;
@Autowired
private QMSFileMapper qmsFileMapper;
@ -136,12 +140,21 @@ public class QcProCheckServiceImpl implements QcProCheckService {
DynamicDataSourceContextHolder.push(qcCheckTaskDetail.getFactoryCode());
QcCheckTaskIncome dto = new QcCheckTaskIncome();
List<QcCheckTaskDetail> qcCheckTaskDetails = qcCheckTaskIncomeMapper.getCkeckProjectList(qcCheckTaskDetail);
/**qc_check_task_defect**/
Map<String,QcCheckTaskDefect> defectMap = qcCheckTaskDefectMapper.getDefectMap(qcCheckTaskDetail);
for (QcCheckTaskDetail qcd : qcCheckTaskDetails) {
List<BaseFile> files = qmsFileMapper.getBaseFileBatch(qcd.getRecordId());
if (CollectionUtils.isNotEmpty(files)) {
qcd.setFiles(files);
}
QcCheckTaskDefect defectInfo = defectMap.get(qcd.getRecordId());
if(defectInfo != null){
qcd.setDefectCodes(defectInfo.getDefectCodes());
qcd.setDefectNames(defectInfo.getDefectNames());
qcd.setDefectQualitys(defectInfo.getDefectQualitys());
}
}
dto.setQcCheckTaskDetails(qcCheckTaskDetails);

@ -130,5 +130,33 @@
where belong_to = #{belongTo}
order by defect_code
</select>
<select id="getDefectMap" resultType="com.op.quality.domain.QcCheckTaskDefect">
SELECT
belong_to,
belong_to_detail belongToDetail,
STUFF(
(SELECT ',' + defect_code
FROM qc_check_task_defect
WHERE belong_to_detail = qctd.belong_to_detail and belong_to = qctd.belong_to
FOR xml path('')
),1,1,''
) defectCodes,
STUFF(
(SELECT ',' + defect_subclass+':' + CAST(noOk_quality AS VARCHAR(15))
FROM qc_check_task_defect
WHERE belong_to_detail = qctd.belong_to_detail and belong_to = qctd.belong_to
FOR xml path('')
),1,1,''
) defectNames,
STUFF(
(SELECT ',' + CAST(noOk_quality AS VARCHAR(15))
FROM qc_check_task_defect
WHERE belong_to_detail = qctd.belong_to_detail and belong_to = qctd.belong_to
FOR xml path('')
),1,1,''
) defectQualitys
FROM qc_check_task_defect qctd where qctd.del_flag = '0' and belong_to= #{belongTo}
GROUP by qctd.belong_to,qctd.belong_to_detail
</select>
</mapper>

@ -337,26 +337,21 @@
#{recordId}
</foreach>
</select>
<select id="getUserByMaterial" resultType="com.op.system.api.domain.quality.QcUserMaterialDTO">
<select id="getUserByCheckType" resultType="com.op.system.api.domain.quality.QcUserMaterialDTO">
select user_code userCode,
user_name userName
from qc_user_material where material_code = #{materialCode}
from qc_user_material
where material_code = #{checkType} and del_flag = '0'
</select>
<select id="getCheckUsers" resultType="com.op.system.api.domain.quality.QcUserMaterialDTO">
select qum.user_code userCode,
qum.user_name userName
from qc_user_material qum
left join pro_order_workorder pow on pow.workorder_code = qum.material_code
where pow.workorder_code = #{orderNo} and pow.del_flag = '0' and qum.del_flag = '0'
</select>
<select id="getCkeckDefectList" resultType="com.op.quality.domain.QcCheckTaskDefect">
select
qctd.record_id recordId,
qctd.defect_code defectCode,
qctd.defect_subclass defectSubclass,
qctd.noOk_quality noOkQuality
sum(qctd.noOk_quality) noOkQuality
from qc_check_task_defect qctd
where qctd.del_flag = '0' and qctd.belong_to = #{belongTo}
group by qctd.defect_code,qctd.defect_subclass
order by qctd.defect_code
</select>
<select id="getDefectType" resultType="com.op.quality.domain.QcCheckTaskDefect">
@ -423,14 +418,14 @@
</insert>
<insert id="addQcCheckTaskDefects">
insert into qc_check_task_defect(
record_id,belong_to,
record_id,belong_to,belong_to_detail,
defect_code,defect_subclass,
noOk_quality,
create_by,create_time,factory_code
) values
<foreach item="item" index="index" collection="list" separator=",">
(
#{item.recordId},#{item.belongTo},
#{item.recordId},#{item.belongTo},#{item.belongToDetail},
#{item.defectCode},#{item.defectSubclass},
#{item.noOkQuality},
#{item.createBy},#{item.createTime},#{item.factoryCode}
@ -454,6 +449,12 @@
from base_equipment
where equipment_type_code='equ_type_bzx' and status = '1'
</select>
<select id="getTodayIncomeLists" resultType="java.lang.String">
select order_no
from qc_check_task
where check_type = 'checkTypeLL'
and CONVERT(varchar(10),GETDATE(), 120) = CONVERT(varchar(10),create_time, 120)
</select>
<!--批量更新原始表-->
<update id="updateIncomeBatchList">

@ -49,6 +49,7 @@
<result property="supplierName" column="supplier_name"/>
<result property="incomeTime" column="income_time"/>
<result property="checkLoc" column="check_loc"/>
<result property="checkLocName" column="checkLocName"/>
<result property="checkStatus" column="check_status"/>
<result property="checkManCode" column="check_man_code"/>
<result property="checkManName" column="check_man_name"/>
@ -252,7 +253,7 @@
<select id="getCheckTaskList" resultMap="QcCheckTaskIncomeResult">
select qct.record_id, qct.check_no, qct.income_batch_no, qct.order_no,
qct.material_code, qct.material_name, qct.quality, qct.unit,
qct.supplier_code, qct.supplier_name, qct.income_time, qct.check_loc,
qct.supplier_code, qct.supplier_name, qct.income_time, qct.check_loc,be.equipment_name checkLocName,
qct.check_status, qct.check_man_code,qct.check_man_name, qct.check_time, qct.check_result,
qct.status,qct.create_by,qct.create_time,qct.check_type,
qct.noOk_quality,qct.aNoOkquality,qct.bNoOkquality,qct.cNoOkquality,qct.sample_quality
@ -261,6 +262,7 @@
</if>
from qc_check_task qct
left join qc_check_task_user qctu on qctu.belong_to = qct.record_id
left join base_equipment be on be.equipment_type_code ='equ_type_bzx' and be.equipment_code = qct.check_loc
<if test='checkType=="checkTypeSCXJ" or checkType=="checkTypeSC"'>
left join pro_order_workorder pow on pow.workorder_code = qct.order_no
</if>

Loading…
Cancel
Save