PcdAssemblyAction.java
package com.mycim.webapp.actions.pcd;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.ObjectUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.consts.PcdStatus;
import com.mycim.valueobject.ems.Carrier;
import com.mycim.valueobject.ems.Door;
import com.mycim.valueobject.ems.POD;
import com.mycim.valueobject.ems.PcdAssembly;
import com.mycim.valueobject.wip.Lot;
import com.mycim.webapp.actions.CarrierSetupAction;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 组装
*
* @author yanbing.chen
* @version 6.0.0
* @date 2019/8/27
**/
public class PcdAssemblyAction extends CarrierSetupAction {
public Map getPcdAssembly(Map map) {
Long carrierRrn = NumberUtils.toLong(map.get("carrierRrn").toString());
PcdAssembly pcdAssembly = carrierService.getPcdAssembly(carrierRrn, null, null);
String pcdStatus = "DEASSEMBLY";
String podId = "";
String doorId = "";
if (pcdAssembly != null) {
pcdStatus = "ASSEMBLY";
podId = pcdAssembly.getPodId();
doorId = pcdAssembly.getDoorId();
}
Map result = new HashMap();
result.put("pcdStatus", pcdStatus);
result.put("podId", podId);
result.put("doorId", doorId);
return result;
}
public void assemblyPcd(Map map) {
Long facilityRrn = LocalContext.getFacilityRrn();
String user = LocalContext.getUserId();
String carrierId = map.get("carrierId").toString();
Assert.isFalse(StringUtils.isBlank(carrierId),
Errors.create().key(MessageIdList.CARRIER_CASSETTE_EMPTY).content("晶舟号不能为空!").build());
String podId = map.get("podId").toString();
String doorId = map.get("doorId").toString();
Assert.isFalse(StringUtils.isBlank(podId) && StringUtils.isBlank(doorId),
Errors.create().key(MessageIdList.PCD_POD_AND_DOOR_ALL_EMPTY).content("Pod号和Door号不能同时为空!")
.build());
String entityNamedSpace = getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn);
long carrierRrn = baseService
.getNamedObjectRrn(carrierId, entityNamedSpace, ObjectList.ENTITY_KEY, ObjectList.CARRIER_KEY);
Assert.isFalse(carrierRrn <= 0,
Errors.create().key(MessageIdList.CARRIER_CASSETTE_ID_MISSING).content("No such Cassette ID!")
.build());
//通过carrierId获取批次
List<Lot> carrierLotList = lotInqService.getLotListByCarrierId(carrierId);
// Lot carrierLot = lotQueryService.getLotByCarrierId(carrierId, LocalContext.getFacilityRrn());
//如果carrierLot不为空并且rrn大于零说明晶舟已经被占用
Assert.state(CollectionUtils.isEmpty(carrierLotList),
Errors.create().key(MessageIdList.CARRIER_CASSETTE_IN_USED)
.content("Cassette is in used cassette!").build());
/**
* 需求 #45007 将POD改为选填
* 兼容操作
*/
Long podRrn = null;
if (StringUtils.isNotEmpty(podId)) {
podRrn = baseService.getNamedObjectRrn(podId, entityNamedSpace, ObjectList.ENTITY_KEY, ObjectList.POD_KEY);
Assert.state(podRrn > 0, Errors.create().key(MessageIdList.POD_POD_ID_MISSING).content("Pod号不存在!").build());
}
/**
* 需求 #40125 要求无视door的存在
* 兼容操作
*/
/** by #40125 */
Long doorRrn =null;
if(StringUtils.isNotEmpty(doorId)){
doorRrn = baseService
.getNamedObjectRrn(doorId, entityNamedSpace, ObjectList.ENTITY_KEY, ObjectList.DOOR_KEY);
Assert.isFalse(doorRrn <= 0,
Errors.create().key(MessageIdList.DOOR_DOOR_ID_MISSING).content("Door号不存在!").build());
// PcdAssembly pcdAssembly = carrierService.getPcdAssembly(carrierRrn, podRrn, doorRrn);
}
//查询数据库中是否存在
PcdAssembly pcdAssembly = carrierService.getPcdAssembly(carrierRrn, podRrn, doorRrn);
if (pcdAssembly != null) {
// String msg = "";
Assert.isFalse(StringUtils.equals(pcdAssembly.getCarrierId(), carrierId),
Errors.create().key(MessageIdList.CARRIER_HAD_BEEN_ASSEMBLED).content("晶舟:{} 已经被组装!")
.args(carrierId).build());
Assert.isFalse(StringUtils.equals(pcdAssembly.getPodId(), podId),
Errors.create().key(MessageIdList.POD_HAD_BEEN_ASSEMBLED).content("Pod:{} 已经被组装!")
.args(podId).build());
Assert.isFalse(StringUtils.equals(pcdAssembly.getDoorId(), doorId),
Errors.create().key(MessageIdList.DOOR_HAD_BEEN_ASSEMBLED).content("Door:{} 已经被组装!")
.args(doorId).build());
}
Carrier carrier = carrierService.getCarrier(carrierRrn);
POD pod = podRrn == null ? null : carrierService.getPod(podRrn);
Door door =doorRrn==null?null:carrierService.getDoor(doorRrn);
Assert.isTrue((ObjectUtils.isEmpty(pod) || StringUtils.equalsIgnoreCase(carrier.getFlagType(), pod.getFlagType()))
&& (door == null || StringUtils.equalsIgnoreCase(carrier.getFlagType(), door.getFlagType())),
Errors.create().key(MessageIdList.PCD_CASSETTE_POD_DOOR_MUST_SAME).content( String.format("晶舟,Pod%s类别需一致!",",Door") )
.build());
Assert.isTrue(StringUtils.equalsIgnoreCase(carrier.getCarrierStatus(), PcdStatus.FREE_KEY),
Errors.create().key(MessageIdList.CARRIER_MUST_FREE_FOR_ASSEMBLY)
.content("Cassette 在free 状态下才可以组装!").build());
Assert.isTrue(door==null||StringUtils.equalsIgnoreCase(door.getDoorStatus(), PcdStatus.FREE_KEY),
Errors.create().key(MessageIdList.DOOR_MUST_FREE_FOR_ASSEMBLY).content("Door 在free 状态下才可以组装!")
.build());
Assert.state(ObjectUtils.isEmpty(pod) || StringUtils.equalsIgnoreCase(pod.getPodStatus(), PcdStatus.FREE_KEY),
Errors.create().key(MessageIdList.POD_MUST_FREE_FOR_ASSEMBLY).content("Pod 在free 状态下才可以组装!")
.build());
// check清洗有效期是否过期
Assert.isTrue(carrierService.checkPcdOverClean(carrierRrn),
Errors.create().key(MessageIdList.CARRIER_OUT_OF_CLEAN_DATE).content("Cassette 超过清洗时间").build());
Assert.state(ObjectUtils.isEmpty(pod) || carrierService.checkPcdOverClean(podRrn),
Errors.create().key(MessageIdList.POD_OUT_OF_CLEAN_DATE).content("Pod 超过清洗时间").build());
Assert.isTrue(door==null||carrierService.checkPcdOverClean(doorRrn),
Errors.create().key(MessageIdList.DOOR_OUT_OF_CLEAN_DATE).content("Door 超过清洗时间").build());
//line 110 已经判断过了 直接注释
// Assert.isTrue(StringUtils.equalsIgnoreCase(carrier.getObjectSubtype(), pod.getObjectSubtype()) ,
// /** by #40125 */
// // && StringUtils.equalsIgnoreCase(carrier.getObjectSubtype(), door.getObjectSubtype()),
// Errors.create().key(MessageIdList.PCD_CASSETTE_POD_DOOR_MUST_SAME).content("晶舟,Pod,door 类别需一致!")
// .build());
carrierService.assemblyPcd(carrierRrn, podRrn, doorRrn, user, facilityRrn);
}
public void deAssemblyPcd(Map map) {
Long facilityRrn = LocalContext.getFacilityRrn();
String user = LocalContext.getUserId();
String carrierId = map.get("carrierId").toString();
Assert.isFalse(StringUtils.isBlank(carrierId),
Errors.create().key(MessageIdList.CARRIER_CASSETTE_EMPTY).content("晶舟号不能为空!").build());
String entityNamedSpace = getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn);
long carrierRrn = baseService
.getNamedObjectRrn(carrierId, entityNamedSpace, ObjectList.ENTITY_KEY, ObjectList.CARRIER_KEY);
Assert.isFalse(carrierRrn <= 0,
Errors.create().key(MessageIdList.CARRIER_CASSETTE_ID_MISSING).content("No such Cassette ID!")
.build());
//通过carrierId获取批次
List<Lot> carrierLotList = lotInqService.getLotListByCarrierId(carrierId);
Assert.state(CollectionUtils.isEmpty(carrierLotList),
Errors.create().key(MessageIdList.CARRIER_CASSETTE_IN_USED).build());
PcdAssembly pcdAssembly = carrierService.getPcdAssembly(carrierRrn, null, null);
Assert.isFalse(pcdAssembly == null,
Errors.create().key(MessageIdList.CARRIER_CASSETTE_NOT_ASSEMBLED).content("该晶舟未被组装!").build());
carrierService.deAssemblyPcd(carrierRrn, pcdAssembly.getPodRrn(), pcdAssembly.getDoorRrn(), user, facilityRrn);
}
}