产前准备发消息

master
philip 4 years ago
parent 4af8faf814
commit a35da8e733

@ -19,11 +19,14 @@ import com.foreverwin.mesnac.common.model.PrintLog;
import com.foreverwin.mesnac.common.model.ProdReadyTask;
import com.foreverwin.mesnac.common.model.ProdReadyTaskDetail;
import com.foreverwin.mesnac.common.service.*;
import com.foreverwin.mesnac.common.util.ActiveMQUtil;
import com.foreverwin.mesnac.common.util.DateUtil;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.mesnac.meapi.dto.BomComponentDto;
import com.foreverwin.mesnac.meapi.mapper.WorkCenterMapper;
import com.foreverwin.mesnac.meapi.model.*;
import com.foreverwin.mesnac.meapi.service.*;
import com.foreverwin.mesnac.meapi.util.StringUtils;
import com.foreverwin.modular.core.exception.BaseException;
import com.foreverwin.modular.core.exception.BusinessException;
import com.foreverwin.modular.core.util.CommonMethods;
@ -75,21 +78,32 @@ public class ProdReadyTaskServiceImpl extends ServiceImpl<ProdReadyTaskMapper, P
@Autowired
private ProdReadyTaskMapper prodReadyTaskMapper;
@Autowired
private ResrceService resrceService;
@Autowired
private ProdReadyTaskDetailService prodReadyTaskDetailService;
@Autowired
private SfcDispatchCommonService sfcDispatchCommonService;
@Autowired
private BomComponentService bomComponentService;
@Autowired
private WorkCenterMapper workCenterMapper;
@Autowired
private CustomFieldsService customFieldsService;
@Autowired
private MessageTypeService messageTypeService;
@Autowired
private ShopOrderService shopOrderService;
@Autowired
private WorkCenterService workCenterService;
@Autowired
private PrintLogService printLogService;
@Autowired
private ActiveMQUtil activeMQUtil;
@Autowired
private MessageService messageService;
@Autowired
private NwaUserService nwaUserService;
@Autowired
private ItemService itemService;
@Autowired
@ -225,7 +239,7 @@ public class ProdReadyTaskServiceImpl extends ServiceImpl<ProdReadyTaskMapper, P
lambdaQueryWrapper.eq(ProdReadyTask::getSfcDispatchBo, sfcDispatchBO);
lambdaQueryWrapper.orderByDesc(ProdReadyTask::getCreatedDateTime);
List<ProdReadyTask> list = list(lambdaQueryWrapper);
if (list.size() >0) {
if (list.size() > 0) {
ProdReadyTask prodReadyTask = list.get(0);
if (prodReadyTask.getStatus().equals(STATUS_CANCEL)) {
throw new BaseException("产前准备任务任务已取消");
@ -285,17 +299,17 @@ public class ProdReadyTaskServiceImpl extends ServiceImpl<ProdReadyTaskMapper, P
returnMap = prodReadyTaskMapper.getToolDetail(site, LocaleContextHolder.getLocale().getLanguage(), dispatchNo);
} else {
//通过加工的零件号、设备类型、设备获取发布状态的工控程序
SfcDispatchDto sfcdispatch=new SfcDispatchDto();
sfcdispatch.setHandle(HandleEnum.SFC_DISPATCH.getHandle(site,dispatchNo));
SfcDispatchDto sfcdispatch = new SfcDispatchDto();
sfcdispatch.setHandle(HandleEnum.SFC_DISPATCH.getHandle(site, dispatchNo));
sfcdispatch = sfcDispatchCommonService.findSfcDispatchBySfc(sfcdispatch);
Sfc sfcServiceById = sfcService.getById(HandleEnum.SFC.getHandle(site, sfcdispatch.getSfc()));
String itemBo = sfcServiceById.getItemBo();
JSONObject jsonObject = sendToDnc(StringUtil.trimHandle(itemBo), sfcdispatch.getResrce(), sfcdispatch.getResourceType());
Map<String, Object> map=new HashMap<>();
map.put("RESOURCE",sfcdispatch.getResrce());
map.put("RESOURCE_TYPE",sfcdispatch.getResourceType());
map.put("RESULT",jsonObject.get("RESULT"));
map.put("MESSAGE",jsonObject.get("MESSAGE"));
Map<String, Object> map = new HashMap<>();
map.put("RESOURCE", sfcdispatch.getResrce());
map.put("RESOURCE_TYPE", sfcdispatch.getResourceType());
map.put("RESULT", jsonObject.get("RESULT"));
map.put("MESSAGE", jsonObject.get("MESSAGE"));
returnMap.add(map);
}
return returnMap;
@ -429,21 +443,20 @@ public class ProdReadyTaskServiceImpl extends ServiceImpl<ProdReadyTaskMapper, P
public void sendMsgJob(String site) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime endTime = now.plusMinutes(30);
String user = CommonMethods.getUser();
//查找当前派工单的计划开始时间30分钟内的未准备完成的任务
List<ProdReadyTask> prodReadyTasks=prodReadyTaskMapper.getUnreadyTasks(site,now,endTime);
for(ProdReadyTask prodReadyTask : prodReadyTasks){
List<ProdReadyTask> prodReadyTasks = prodReadyTaskMapper.getUnreadyTasks(site, now, endTime);
for (ProdReadyTask prodReadyTask : prodReadyTasks) {
QueryWrapper<Message> messageQueryWrapper = new QueryWrapper<>();
messageQueryWrapper.eq(Message.OBJECT_BO,prodReadyTask.getHandle());
messageQueryWrapper.eq(Message.OBJECT_BO, prodReadyTask.getHandle());
List<Message> list = messageService.list(messageQueryWrapper);
if (!list.isEmpty()){
if (!list.isEmpty()) {
continue;
}
LambdaQueryWrapper<ProdReadyTaskDetail> lambdaQuery = new LambdaQueryWrapper<>();
lambdaQuery.eq(ProdReadyTaskDetail::getProdReadyTaskBo, prodReadyTask.getHandle());
List<ProdReadyTaskDetail> readyTaskDetails = prodReadyTaskDetailService.list(lambdaQuery);
for (ProdReadyTaskDetail prodReadyTaskDetail:readyTaskDetails){
if (prodReadyTaskDetail.getInspectionItem().equals(P01)){
for (ProdReadyTaskDetail prodReadyTaskDetail : readyTaskDetails) {
if (prodReadyTaskDetail.getInspectionItem().equals(P01)) {
Message message = new Message();
String uuid = UUID.randomUUID().toString();
message.setHandle(uuid);
@ -453,56 +466,85 @@ public class ProdReadyTaskServiceImpl extends ServiceImpl<ProdReadyTaskMapper, P
message.setMessageType(MESSAGE_TYPE_WLZB);
//查询消息类型关联的用户组
String workCenter = prodReadyTask.getWorkCenter();
String userGroup=workCenter+"-"+MESSAGE_TYPE_WLZB;
String userGroup = workCenter + "-" + MESSAGE_TYPE_WLZB;
QueryWrapper<MessageTypeUserGroup> queryWrapper=new QueryWrapper<>();
queryWrapper.eq(MessageTypeUserGroup.MESSAGE_TYPE_BO, new MessageTypeBOHandle(site,MESSAGE_TYPE_WLZB).getValue());
queryWrapper.eq(MessageTypeUserGroup.USER_GROUP_BO,new UserGroupBOHandle(site,userGroup).getValue());
QueryWrapper<MessageTypeUserGroup> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(MessageTypeUserGroup.MESSAGE_TYPE_BO, new MessageTypeBOHandle(site, MESSAGE_TYPE_WLZB).getValue());
queryWrapper.eq(MessageTypeUserGroup.USER_GROUP_BO, new UserGroupBOHandle(site, userGroup).getValue());
List<MessageTypeUserGroup> messageTypeUserGroupList = messageTypeUserGroupService.list(queryWrapper);
if (messageTypeUserGroupList.isEmpty()){
if (messageTypeUserGroupList.isEmpty()) {
continue;
}
message.setSendUserGroup(userGroup);
message.setSendUser("");
message.setContent("");
message.setUpUserGroup("");
message.setUpUser("");
message.setUpMessageType("");
message.setUpDateTime(LocalDateTime.now());
message.setGrade(0.0D);
message.setResponseDateTime(LocalDateTime.now());
message.setNode("");
message.setStatus("");
message.setCreatedUser("");
message.setSendUser("JOB");
String sendMessage = this.formatMessage(prodReadyTask, MESSAGE_TYPE_WLZB, site);
message.setContent(sendMessage);
message.setUpUserGroup(null);
message.setUpUser(null);
message.setUpMessageType(null);
message.setUpDateTime(null);
message.setGrade(null);
message.setResponseDateTime(null);
message.setNode(null);
message.setStatus(Constants.STATUS_Y);
message.setCreatedUser("JOB");
message.setCreatedDateTime(LocalDateTime.now());
message.setModifiedUser("");
message.setModifiedUser("JOB");
message.setModifiedDateTime(LocalDateTime.now());
/*
List<NwaUser> nwaUsers = nwaUserService.checkUserGroup(site,abnormalMessage.getSendUserGroup());
List<NwaUser> nwaUsers = nwaUserService.checkUserGroup(site, userGroup);
StringBuilder sendUsers = new StringBuilder();
for (int i = 0; i < nwaUsers.size(); i++) {
if(i == (nwaUsers.size() - 1)){
if (i == (nwaUsers.size() - 1)) {
sendUsers.append(nwaUsers.get(i));
}else{
} else {
sendUsers.append(nwaUsers.get(i)).append("|");
}
}
activeMQUtil.wechatSendMessage(sendUsers.toString(),abnormalMessage.getContent());
// }
messageService.saveOrUpdate(abnormalMessage);*/
messageService.save(message);
activeMQUtil.wechatSendMessage(sendUsers.toString(),sendMessage);
}
}
}
}
public String formatMessage(ProdReadyTask prodReadyTask, String messageType, String site) {
//找到消息内容
String locale = LocaleContextHolder.getLocale().getLanguage();
MessageType messageTypeEntity = new MessageType();
messageTypeEntity.setSite(site);
messageTypeEntity.setMessageType(messageType);
QueryWrapper<MessageType> messageTypeQueryWrapper = new QueryWrapper<MessageType>();
messageTypeQueryWrapper.setEntity(messageTypeEntity);
MessageType sendMessageType = messageTypeService.getOne(messageTypeQueryWrapper);
if (sendMessageType == null) {
throw new BaseException("异常提报时找不到要发送的消息类型");
}
//格式化消息
String body = sendMessageType.getBody();
//替换消息类型中的参数
Map<String, String> messageMap = new HashMap<>();
//根据车间找到对应车间的描述
WorkCenter workCenter = workCenterMapper.findWorkCenterDescriptionByWorkCenter(site, prodReadyTask.getWorkCenter(), locale);
//根据资源找到对应的产线的描述
Resrce byResrce = resrceService.findByResrce(prodReadyTask.getResrce());
Item selectCurrent = itemService.selectCurrent(site, prodReadyTask.getItem());
//项目号
String item = selectCurrent.getItem() + "/" + selectCurrent.getDescription();
messageMap.put("WORKCENTER", workCenter.getDescription());
messageMap.put("RESOURCE", byResrce + "/" + byResrce.getDescription());
messageMap.put("ITEM", item);
messageMap.put("SHOPORDER", prodReadyTask.getShopOrder());
messageMap.put("SFC", prodReadyTask.getSfc());
//格式化之后的消息
return StringUtils.format(body, messageMap);
}
public JSONObject sendToDnc(String item, String resource, String resourceType) {
String site = CommonMethods.getSite();
String queue="resource.check.process";
JSONObject messageObject=new JSONObject();
String queue = "resource.check.process";
JSONObject messageObject = new JSONObject();
String tranid = UUID.randomUUID().toString();
messageObject.put("TRANID", tranid);
String dateTime = DateUtil.formatDate(new Date());

@ -4,7 +4,7 @@ import com.foreverwin.mesnac.meapi.dto.SfcDto;
import com.foreverwin.mesnac.meapi.dto.WorkCenterDto;
import com.foreverwin.mesnac.meapi.model.Sfc;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
public interface PodTemplateService {
@ -18,7 +18,7 @@ public interface PodTemplateService {
void sfcComplete(Map<String, Object> map);
void sendErp(String sfc, String stepId, BigDecimal qty, BigDecimal scrapQty);
void sendErp(List<Map<String,Object>> mapList);
SfcDto getInfoBySfc(Sfc sfc);

@ -46,7 +46,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.RemoteException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;
@ -232,8 +234,8 @@ public class PodTemplateServiceImpl implements PodTemplateService {
public void sfcComplete(Map<String, Object> map) {
List<SfcDto> sfcDtoList = (List<SfcDto>) map.get("sfcDtoList");
ObjectMapper mapper = new ObjectMapper();
sfcDtoList = mapper.convertValue(sfcDtoList, new TypeReference<List<SfcDto>>() {
});
sfcDtoList = mapper.convertValue(sfcDtoList, new TypeReference<List<SfcDto>>() {});
List<Map<String,Object>> postMapList=new ArrayList<>();
String resrce = (String) map.get("resrce");
if (sfcDtoList == null || sfcDtoList.size() < 1) {
throw new BaseException("作业列表不能为空");
@ -242,6 +244,7 @@ public class PodTemplateServiceImpl implements PodTemplateService {
throw new BaseException("资源不能为空");
}
for (SfcDto sfcDto:sfcDtoList){
Map<String,Object> postMap=new HashMap<>();
String site = CommonMethods.getSite();
String operation = sfcDto.getOperation();
Operation currentRevisionRef = operationService.getCurrentRevisionRef(site, operation);
@ -298,15 +301,26 @@ public class PodTemplateServiceImpl implements PodTemplateService {
paramMap.put("CATEGORY",Constants.INSPECTION_TYPE_S);
inspectionTaskService.createTask(paramMap);
}
//计算工时
LocalDateTime startTime = sfcService.getSfcStartTime(HandleEnum.SFC.getHandle(site, sfc));
long workHourSeconds = Duration.between(startTime, LocalDateTime.now()).getSeconds();
BigDecimal workHour = new BigDecimal(workHourSeconds).divide(BigDecimal.valueOf(3600), 2, RoundingMode.HALF_UP);
postMap.put("sfc",sfc);
postMap.put("stepId",stepId);
postMap.put("qty",qty);
postMap.put("scrapQty",BigDecimal.ZERO);
postMap.put("workHour",workHour);
postMapList.add(postMap);
sfcCrossService.completeAction(site, currentRevisionRef.getHandle(), resrce, sfcServiceById.getHandle(), qty);
//更改派工单状态
sfcDispatchCommonService.updateSfcDispatchStatus(site, CommonMethods.getUser(), dispatchNo, DispatchStatusEnum.COMPLETE.getCode());
//报工
//sendErp(sfc, stepId, qty,BigDecimal.ZERO);
} catch (Exception e) {
ExceptionUtil.throwException(e);
}
}
//报工
//sendErp(postMapList);
}
public void materialConsumption(String site, String operation, String sfcBo, String stepId, String resource) {
@ -399,40 +413,48 @@ public class PodTemplateServiceImpl implements PodTemplateService {
}
@Override
public void sendErp(String sfc, String stepId, BigDecimal qty, BigDecimal scrapQty) {
Sfc sfcServiceById = sfcService.getById(HandleEnum.SFC.getHandle(CommonMethods.getSite(),sfc));
String shopOrderBo = sfcServiceById.getShopOrderBo();
String shopOrder = StringUtil.trimHandle(shopOrderBo);
public void sendErp(List<Map<String,Object>> postMapList) {
//请求参数
ZprodordconfStruIn[] ins = new ZprodordconfStruIn[1];
for (int i=0;i<postMapList.size();i++){
Map<String, Object> map = postMapList.get(i);
String sfc = (String)map.get("sfc");
Sfc sfcServiceById = sfcService.getById(HandleEnum.SFC.getHandle(CommonMethods.getSite(),sfc));
String shopOrderBo = sfcServiceById.getShopOrderBo();
String shopOrder = StringUtil.trimHandle(shopOrderBo);
String stepId = (String)map.get("stepId");
BigDecimal qty = (BigDecimal) map.get("qty");
BigDecimal scrapQty = (BigDecimal)map.get("scrapQty");
BigDecimal workHour = (BigDecimal)map.get("workHour");
ZprodordconfStruIn struIn = new ZprodordconfStruIn();
//生产订单
struIn.setAufnr(shopOrder);
//步骤标示
struIn.setVornr(stepId);
struIn.setAueru("1");
//良品数量
struIn.setLmnga(qty);
//报废数量
struIn.setXmnga(scrapQty);
//机器工时
struIn.setIsm01(workHour);
//人工工时
struIn.setIsm02(workHour);
struIn.setIsm03(BigDecimal.ZERO);
struIn.setIsm04(BigDecimal.ZERO);
struIn.setIsm05(BigDecimal.ZERO);
struIn.setIsm06(BigDecimal.ZERO);
ins[i] = struIn;
}
ZprodordconfStruIn struIn = new ZprodordconfStruIn();
//生产订单
struIn.setAufnr(shopOrder);
//步骤标示
struIn.setVornr(stepId);
struIn.setAueru("1");
//良品数量
struIn.setLmnga(qty);
//报废数量
struIn.setXmnga(scrapQty);
//机器工时
struIn.setIsm01(BigDecimal.ZERO);
//人工工时
struIn.setIsm02(BigDecimal.ZERO);
struIn.setIsm03(BigDecimal.ZERO);
struIn.setIsm04(BigDecimal.ZERO);
struIn.setIsm05(BigDecimal.ZERO);
struIn.setIsm06(BigDecimal.ZERO);
ins[0] = struIn;
TableOfZprodordconfStruInHolder inHolder = new TableOfZprodordconfStruInHolder(ins);
//返回对象
ZprodordconfStruOut[] outs = new ZprodordconfStruOut[1];
ZprodordconfStruOut struOut = new ZprodordconfStruOut();
struOut.setAufnr(shopOrder);
struOut.setVornr(stepId);
struOut.setAufnr("");
struOut.setVornr("");
struOut.setAueru("1");
struOut.setLmnga(new BigDecimal(1));
struOut.setRet("");
@ -455,10 +477,10 @@ public class PodTemplateServiceImpl implements PodTemplateService {
log.setHandle(UUID.randomUUID().toString());
log.setSite(CommonMethods.getSite());
log.setIntegrationType(IntegrationTypeConstant.ROUTER);
log.setCategory("SEND");
log.setCategory("REQUEST");
log.setIntegrationWay("ERP");
log.setIntegrationMethod("erpWebService.zmesProdordconf");
log.setParam(struIn.toString());
log.setParam(ins.toString());
log.setStatus(outHolder.value[1].getRet());
log.setResultMessage(outHolder.value[1].getMsg());
log.setTransactionId("");

Loading…
Cancel
Save