|
|
|
@ -0,0 +1,148 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
|
|
|
|
|
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
|
|
|
|
|
import com.google.common.base.Objects;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.quartz.DisallowConcurrentExecution;
|
|
|
|
|
import org.quartz.JobExecutionContext;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description : 汇总工单给SAP
|
|
|
|
|
* @Reference :
|
|
|
|
|
* @Author : junsheng.li
|
|
|
|
|
* @CreateDate 2024/5/11 15:58
|
|
|
|
|
* @Modify:
|
|
|
|
|
**/
|
|
|
|
|
// 禁止 JOB 并发执行
|
|
|
|
|
@DisallowConcurrentExecution
|
|
|
|
|
@ApiOperation("汇总工单报工数量")
|
|
|
|
|
@Service
|
|
|
|
|
public class MesWorkOrderUpdateQtyJob extends BaseMesScheduleJob {
|
|
|
|
|
|
|
|
|
|
public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderUpdateQtyJob.class);
|
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = 9072058154235836696L;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesWorkOrderService mesWorkOrderService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProductionRecordRepository productionRecordRao;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderRepository workOrderRepository;
|
|
|
|
|
|
|
|
|
|
public MesWorkOrderUpdateQtyJob() {
|
|
|
|
|
super(MesWorkOrderUpdateQtyJob.class, "汇总工单报工数量");
|
|
|
|
|
this.setMultiInstance(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
|
|
|
|
|
try {
|
|
|
|
|
//String jobParam = this.getJobParam();
|
|
|
|
|
String jobParam = "CK01";
|
|
|
|
|
if (StringUtils.isBlank(jobParam)) {
|
|
|
|
|
throw new IllegalArgumentException("job参数为空,请检查参数");
|
|
|
|
|
}
|
|
|
|
|
String[] organizeCodeList = jobParam.split(",");
|
|
|
|
|
LOGGER.info("汇总工单报工数量开始 -----start");
|
|
|
|
|
String userName = "job";
|
|
|
|
|
for (String organizeCode : organizeCodeList) {
|
|
|
|
|
List<MesProductionRecord> recordList = getUnReportMesProduceSn(organizeCode, null);
|
|
|
|
|
if (CollectionUtils.isEmpty(recordList)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<MesProductionRecord>> map = recordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getWorkOrderNo));
|
|
|
|
|
List<MesWorkOrder> orders = new ArrayList<>();
|
|
|
|
|
map.forEach((k,v) -> {
|
|
|
|
|
MesWorkOrder workOrder = mesWorkOrderService.getWorkOrder(organizeCode, k);
|
|
|
|
|
|
|
|
|
|
List<MesProductionRecord> productionRecords = getUnReportMesProduceSn(organizeCode, workOrder.getWorkOrderNo());
|
|
|
|
|
|
|
|
|
|
workOrder.setReportedQty(Double.valueOf(productionRecords.size()));
|
|
|
|
|
workOrder.setCompleteQty(Double.valueOf(productionRecords.size()));
|
|
|
|
|
Double uncompleteQty = workOrder.getQty() - Double.valueOf(productionRecords.size());
|
|
|
|
|
if (uncompleteQty < 0) {
|
|
|
|
|
uncompleteQty = 0d;
|
|
|
|
|
}
|
|
|
|
|
List<Integer> list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
if (!list.contains(workOrder.getWorkOrderStatus())) {
|
|
|
|
|
workOrder.setSystemSyncStatus(1);
|
|
|
|
|
orders.add(workOrder);
|
|
|
|
|
LOGGER.info("工单号【{}】状态不是已发布、加工中、已完成,不进行累积");
|
|
|
|
|
} else {
|
|
|
|
|
// 如果工单是已发布则修改成加工中
|
|
|
|
|
if (Objects.equal(workOrder.getWorkOrderStatus(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue())) {
|
|
|
|
|
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
|
|
|
|
|
}
|
|
|
|
|
// 如果数量满足,则修改成已完成
|
|
|
|
|
if (workOrder.getQty() <= workOrder.getReportedQty()) {
|
|
|
|
|
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
workOrder.setUnCompleteQty(uncompleteQty);
|
|
|
|
|
workOrder.setSystemSyncStatus(1);
|
|
|
|
|
orders.add(workOrder);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
workOrderRepository.saveAll(orders);
|
|
|
|
|
}
|
|
|
|
|
LOGGER.info("汇总工单报工数量结束 ----- end");
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
LOGGER.error("汇总工单报工数量结束e:{}", e.toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MesProductionRecord> getUnReportMesProduceSn(String organizeCode, String workOrderNo) {
|
|
|
|
|
|
|
|
|
|
//1.获取生产加工记录production_record表中,report_status为待汇报状态的工单
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean);
|
|
|
|
|
if (!StringUtils.isEmpty(workOrderNo)) {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean);
|
|
|
|
|
} else {
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(2,"systemSyncStatus", ddlPackBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), "reportStatus", ddlPackBean);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<MesProductionRecord> mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 500);
|
|
|
|
|
List<MesProductionRecord> recordList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
recordList.addAll(mesProductionRecordList);
|
|
|
|
|
|
|
|
|
|
return recordList;
|
|
|
|
|
}
|
|
|
|
|
}
|