报工修改

tags/yfai-mes-ext-v1.9
xiangwei.zhang 8 months ago
parent 46c4bdded3
commit 66b81a0fcb

@ -36,6 +36,8 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
@ApiOperation("ccscTest")
List<MesWorkOrder> queryMesWorkOrderProcessToSap(String organizeCode);
MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo);
@ApiOperation("反向冲销")
void doReportWorkReversal(WmsProductModel model);

@ -0,0 +1,23 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private MesWorkOrderUpdateQtyJob mesWorkOrderUpdateQtyJob;
@GetMapping("/reportOrder")
@ApiOperation(value = "报工")
public void reportOrder() {
mesWorkOrderUpdateQtyJob.executeMesJob(null, null);
}
}

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

@ -1312,6 +1312,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return mesWorkOrderRDao.findByHqlWhere(packBean);
}
@Override
public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) {
// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean);
return mesWorkOrderRDao.getByProperty(packBean);
}
private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) {
MesMove move = new MesMove();
if (!Objects.isNull(mesPart)) {

Loading…
Cancel
Save