Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-mes-ext-v2.4
jun 5 months ago
commit 99c87bd8bc

@ -1,9 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardReqModel;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardResModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel;
import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel;
import cn.estsh.i3plus.pojo.model.wms.WmsProductModel;
import io.swagger.annotations.ApiOperation;
@ -67,4 +71,7 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
@ApiOperation("MES工单推送给WMS")
void doSendMesWorkOrderToWms(String organizeCode,Integer pageSize,String userName);
@ApiOperation(value = "BTO工单看板")
List<MesWorkOrderBoardResModel> orderBoard(MesWorkOrderBoardReqModel workOrderBoardReqModel);
}

@ -2,9 +2,12 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.report;
import cn.estsh.i3plus.ext.mes.api.base.IMesDowntimeRecordService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardReqModel;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardResModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData;
@ -51,6 +54,9 @@ public class MesBusiReportController extends MesBaseController {
@Autowired
private IMesDowntimeRecordService mesDowntimeRecordService;
@Autowired
private IMesWorkOrderService mesWorkOrderService;
@ApiOperation(value = "查询追溯报表", notes = "查询追溯报表")
@GetMapping("/traceability/find")
public ResultBean findTraceabilityReport(MesProduceSn mesProduceSn) {
@ -133,6 +139,22 @@ public class MesBusiReportController extends MesBaseController {
}
}
@ApiOperation(value = "BTO工单看板", notes = "BTO工单看板")
@GetMapping("/order/board/query")
public ResultBean queryProductAccount(MesWorkOrderBoardReqModel workOrderBoardReqModel) {
try {
List<MesWorkOrderBoardResModel> workOrderBoardResModels = mesWorkOrderService.orderBoard(workOrderBoardReqModel);
return ResultBean.success("查询成功").setResultList(workOrderBoardResModels);
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
e.printStackTrace();
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "设备停机记录报表", notes = "设备停机记录报表")
@GetMapping("/equipment/downtime/record")
public ResultBean downtimeRecord(MesDowntimeRecord mesDowntimeRecord, Pager pager) {

@ -1,4 +1,23 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
public class TestJob {
private String startHour;
private String endHour;
private static int d = 3;
public TestJob(int segment) {
this.startHour = segment * d + ":00:00";
this.endHour = (segment * d + d)+":00:00" ;
}
public String toString() {
return "从 " + startHour + " 到 " + endHour;
}
public static void main(String[] args) {
for (int i = 0; i < 24/d; i++) {
TestJob segment = new TestJob(i);
System.out.println(segment);
}
}
}

@ -205,7 +205,7 @@ public class MesDowntimeRecordServiceImpl extends BaseMesService<MesDowntimeReco
ListPager pagerList = new ListPager();
List<MesDowntimeRecordResModel> list = new ArrayList<>();
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(downtimeRecord.getOrganizeCode());
if (!StringUtils.isEmpty(downtimeRecord.getEquipmentCode())) {
DdlPreparedPack.getStringEqualPack(downtimeRecord.getEquipmentCode(), "equipmentCode", ddlPackBean);
}
@ -222,7 +222,7 @@ public class MesDowntimeRecordServiceImpl extends BaseMesService<MesDowntimeReco
if (!StringUtils.isEmpty(downtimeRecord.getModifyDatetime())) {
DdlPreparedPack.getStringSmallerPack(downtimeRecord.getModifyDatetime(), "modifyDatetime", ddlPackBean);
}
DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
pager = PagerHelper.getPager(pager, mesDowntimeRecordRDao.findByHqlWhereCount(ddlPackBean));
List<MesDowntimeRecord> recordList = mesDowntimeRecordRDao.findByHqlWherePage(ddlPackBean, pager);
@ -261,6 +261,9 @@ public class MesDowntimeRecordServiceImpl extends BaseMesService<MesDowntimeReco
mesDowntimeRecordResModel.setWorkCenterName(workCenterMap.get(record.getWorkCenterCode()).getWorkCenterName());
}
if (!StringUtils.isEmpty(record.getWorkCellCode())) {
if (!workCellMap.containsKey(record.getWorkCellCode())) {
return;
}
mesDowntimeRecordResModel.setWorkCellName(workCellMap.get(record.getWorkCellCode()).getWorkCellName());
}
// 如果停机结束时间还在,则需要补充动态停机时间,否则需要有停机时间

@ -3,11 +3,14 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.*;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.TestJob;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardReqModel;
import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkOrderBoardResModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
@ -25,6 +28,8 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel;
import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.DateUtilExt;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -36,6 +41,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.map.CaseInsensitiveMap;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
@ -43,7 +49,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -174,6 +183,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private IMesProductVersionService mesProductVersionService;
@Autowired
private EntityManager entityManager;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
// 数据校验
@ -2027,6 +2039,86 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
updateMesWorkOrder(organizeCode, userName, workOrderNoList);
}
@Override
public List<MesWorkOrderBoardResModel> orderBoard(MesWorkOrderBoardReqModel workOrderBoardReqModel) {
List<MesWorkOrderBoardResModel> resList = new ArrayList<>();
String sqlStr = "select mwo.part_no,mp.part_name, mwo.produce_time,mwo.qty,mwo.complete_qty,mwo.work_center_code,mwo.work_order_no,mwo.create_date_time from mes_work_order mwo\n" +
"left join mes_part mp\n" +
"on mwo.part_no = mp.part_no and mwo.organize_code = mp.organize_code" +
" where mwo.organize_code = 'CK01' and mwo.is_deleted = 2 and mwo.is_valid = 1 and work_order_status in(20, 30) and work_order_type = 30" +
" and mwo.qty > mwo.complete_qty and mwo.create_date_time > :dateTime ";
if (!StringUtils.isEmpty(workOrderBoardReqModel.getWorkCenterCode())) {
sqlStr += " and mwo.work_center_code = :workCenterCode ";
}
sqlStr += "and produce_time is not null and produce_time != ''\n" +
"order by mwo.produce_time limit 16";
String dateTime = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 10)) + " 00:00:00";
Query query = entityManager.createNativeQuery(sqlStr);
if (!StringUtils.isEmpty(workOrderBoardReqModel.getWorkCenterCode())) {
query.setParameter("workCenterCode", workOrderBoardReqModel.getWorkCenterCode());
}
query.setParameter("dateTime", dateTime);
List results = query.getResultList();
for (Object result : results) {
Object[] cells = (Object[]) result;
MesWorkOrderBoardResModel model = new MesWorkOrderBoardResModel();
model.setPartNo(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0]));
model.setPartName(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1]));
model.setProductDate(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2]));
model.setQty(StringUtils.isEmpty(cells[3]) ? 0d : Double.valueOf(String.valueOf(cells[3])));
model.setCompleteQty(StringUtils.isEmpty(cells[4]) ? 0d : Double.valueOf(String.valueOf(cells[4])));
model.setWorkCenterCode(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5]));
model.setCreateDatetime(StringUtils.isEmpty(cells[7]) ? "" : String.valueOf(cells[7]));
resList.add(model);
}
Map<String, String> map = new HashedMap();
int param = 2;
for (int i = 0; i < 24/param; i++) {
int startHour = i * param;
int endHour = i * param + param;
String startTime = "";
String endTime = "";
if (startHour < 10) {
startTime = "0" + startHour + ":00:00";
} else {
startTime = startHour + ":00:00";
}
if (endHour < 10) {
endTime = "0" + endHour + ":00:00";
} else {
endTime = endHour + ":00:00";
}
if (endHour == 24) {
endTime = "23:59:59";
}
map.put(startTime, endTime);
}
for (MesWorkOrderBoardResModel mesWorkOrderBoardResModel : resList) {
String timeStr = mesWorkOrderBoardResModel.getCreateDatetime().substring(11);
LocalTime time = LocalTime.parse(timeStr);
map.forEach((k,v) ->{
LocalTime startTime = LocalTime.parse(k);
LocalTime endTime = LocalTime.parse(v);
if (time.compareTo(startTime) > 0 && time.compareTo(endTime) <=0) {
mesWorkOrderBoardResModel.setOrderTime(k + "-" + v);
return;
}
});
}
return resList;
}
private void updateMesWorkOrder(String organizeCode, String userName, List<String> workOrderNoList) {
if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);

@ -0,0 +1,30 @@
package cn.estsh.i3plus.ext.mes.pojo.model.board;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Description :
* @Reference :
* @Author : zxw
* @CreateDate : 2024/6/19 15:26
* @Modify:
**/
@Data
@ApiModel("产线看板-查询结果封装")
public class MesWorkOrderBoardReqModel {
/**
* 线
*/
@ApiParam(value = "产线代码")
private String workCenterCode;
/**
*
*/
@ApiParam(value = "工厂编码")
private String organizeCode;
}

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.pojo.model.board;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiParam;
import lombok.Data;
/**
* @Description :
* @Reference :
* @Author : zxw
* @CreateDate : 2024/6/19 15:26
* @Modify:
**/
@Data
@ApiModel("BTO工单看板-查询结果封装")
public class MesWorkOrderBoardResModel {
/**
* 线
*/
@ApiParam(value = "产线代码")
private String workCenterCode;
/**
* 线
*/
@ApiParam(value = "物料编码")
private String partNo;
/**
*
*/
@ApiParam(value = "物料名称")
private String partName;
/**
*
*/
@ApiParam(value = "汇总日期")
private String productDate;
/**
*
*/
@ApiParam(value = "工单时间")
private String orderTime;
/**
*
*/
@ApiParam(value = "计划数量")
private Double qty;
/**
*
*/
@ApiParam(value = "完成数量")
private Double completeQty;
/**
*
*/
@ApiParam(value = "创建时间")
private String createDatetime;
}
Loading…
Cancel
Save