流程生产订单-无备料领料API
This commit is contained in:
parent
005f2a508b
commit
197dc87e5f
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding='gb2312'?>
|
||||
<module>
|
||||
<rest>
|
||||
<resource classname="nccloud.openapi.mmpac.pickm.PmoUnpickmDeliveryReources" exinfo="无备料领料接口"/>
|
||||
</rest>
|
||||
|
|
@ -0,0 +1,264 @@
|
|||
package nccloud.openapi.mmpac.pickm;
|
||||
|
||||
import nc.bs.dao.BaseDAO;
|
||||
import nc.bs.dao.DAOException;
|
||||
import nc.bs.framework.common.NCLocator;
|
||||
import nc.bs.logging.Log;
|
||||
import nc.bs.uapbd.util.MyHelper;
|
||||
import nc.itf.mmpac.pickm.IPickmBusinessService;
|
||||
import nc.itf.mmpac.pmo.pac0002.IPMOQueryService;
|
||||
import nc.itf.mmpac.pmo.pac0002.IPMOTransTypeQueryService;
|
||||
import nc.itf.uap.IUAPQueryBS;
|
||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||
import nc.jdbc.framework.processor.MapProcessor;
|
||||
import nc.pubitf.mmpac.pickm.mo.IPickmQueryServiceForMO;
|
||||
import nc.util.mmf.framework.base.MMArrayUtil;
|
||||
import nc.util.mmf.framework.base.MMValueCheck;
|
||||
import nc.vo.bd.stordoc.StordocVO;
|
||||
import nc.vo.ml.NCLangRes4VoTransl;
|
||||
import nc.vo.mmpac.pickm.entity.AggPickmVO;
|
||||
import nc.vo.mmpac.pickm.entity.PickmHeadVO;
|
||||
import nc.vo.mmpac.pickm.entity.PickmItemVO;
|
||||
import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum;
|
||||
import nc.vo.mmpac.pickm.param.PickmTransParam;
|
||||
import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
||||
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum;
|
||||
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum;
|
||||
import nc.vo.org.OrgVO;
|
||||
import nc.vo.pub.BusinessException;
|
||||
import nc.vo.pub.VOStatus;
|
||||
import nc.vo.pub.lang.UFBoolean;
|
||||
import nc.vo.pub.lang.UFDate;
|
||||
import nc.vo.pub.lang.UFDouble;
|
||||
import nc.vo.pubapp.pattern.pub.SqlBuilder;
|
||||
import nc.ws.opm.pub.utils.result.APIErrCodeEnum;
|
||||
import nccloud.api.rest.utils.ResultMessageUtil;
|
||||
import nccloud.framework.core.exception.ExceptionUtils;
|
||||
import nccloud.ws.rest.resource.AbstractNCCRestResource;
|
||||
import org.json.JSONString;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 流程生产订单-无备料领料API
|
||||
*
|
||||
* @author mzr
|
||||
* @date 2025/10/13
|
||||
*/
|
||||
@Path("mmpac/unpickm")
|
||||
public class PmoUnpickmDeliveryReources extends AbstractNCCRestResource {
|
||||
private static final Log logger = Log.getInstance("qyMesLog");
|
||||
public BaseDAO dao;
|
||||
|
||||
public BaseDAO getDao() {
|
||||
if (dao == null) {
|
||||
dao = new BaseDAO();
|
||||
}
|
||||
return dao;
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("unPickmDelivery")
|
||||
@Consumes({"application/json"})
|
||||
@Produces({"application/json"})
|
||||
public JSONString unPickmDelivery(Map<String, Object> paramMap) {
|
||||
// 参数校验
|
||||
String[] fields = new String[]{"mobid", "pk_org", "item"};
|
||||
for (String field : fields) {
|
||||
Object keyValue = paramMap.get(field);
|
||||
if (null == keyValue || "".equals(keyValue)) {
|
||||
return ResultMessageUtil.exceptionToJSON("传入数据异常,参数要包含" + field, APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
}
|
||||
try {
|
||||
// 流程生产订单明细id
|
||||
String mobid = (String) paramMap.get("mobid");
|
||||
// 组织编码
|
||||
String orgCode = (String) paramMap.get("pk_org");
|
||||
// 材料明细信息
|
||||
List<Map<String, Object>> itemList = (List) paramMap.get("item");
|
||||
for (Map<String, Object> objectMap : itemList) {
|
||||
Object cbmaterialvid = objectMap.get("cbmaterialvid");
|
||||
if (null == cbmaterialvid || "".equals(cbmaterialvid)) {
|
||||
return ResultMessageUtil.exceptionToJSON("传入数据异常,物料编码参数不能为空", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
Object nplanoutastnum = objectMap.get("nplanoutastnum");
|
||||
if (null == nplanoutastnum || "".equals(nplanoutastnum) || "0".equals(nplanoutastnum)) {
|
||||
return ResultMessageUtil.exceptionToJSON("计划出库数量传入数据异常", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
}
|
||||
// 查询流程生产订单
|
||||
IPMOQueryService pmoQuery = NCLocator.getInstance().lookup(IPMOQueryService.class);
|
||||
PMOAggVO[] pmoAggVOS = pmoQuery.queryPMOAggVOByBid(new String[]{mobid});
|
||||
if (MMValueCheck.isEmpty(pmoAggVOS)) {
|
||||
ExceptionUtils.wrapBusinessException("查询不到流程生产订单");
|
||||
}
|
||||
PMOAggVO aggvo = pmoAggVOS[0];
|
||||
List<String> cmoidList = new ArrayList<>();
|
||||
PMOHeadVO headvo = aggvo.getParentVO();
|
||||
if (PMOFBillstatusEnum.AUDIT.equalsValue(headvo.getFbillstatus())) {
|
||||
Map<String, UFBoolean> trantypeMap = null;
|
||||
|
||||
try {
|
||||
trantypeMap = NCLocator.getInstance().lookup(IPMOTransTypeQueryService.class).getBunplannpickingByTranTypeIDs(new String[]{headvo.getCtrantypeid()});
|
||||
} catch (BusinessException e) {
|
||||
nc.vo.pubapp.pattern.exception.ExceptionUtils.wrappException(e);
|
||||
}
|
||||
|
||||
if (trantypeMap == null || UFBoolean.FALSE.equals(trantypeMap.get(headvo.getCtrantypeid()))) {
|
||||
ExceptionUtils.wrapBusinessException(PMOConstLang.getUnPickmDeliverTransTypeInfo());
|
||||
}
|
||||
|
||||
PMOItemVO[] items = aggvo.getChildrenVO();
|
||||
if (!MMArrayUtil.isEmpty(items)) {
|
||||
if (items.length > 1) {
|
||||
ExceptionUtils.wrapBusinessException(PMOConstLang.getSingleRowSelectedInfo());
|
||||
}
|
||||
|
||||
for (PMOItemVO item : items) {
|
||||
if (!PMOFItemStatusEnum.PLAN.equalsValue(item.getFitemstatus())) {
|
||||
cmoidList.add(item.getCmoid());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cmoidList.isEmpty()) {
|
||||
ExceptionUtils.wrapBusinessException(PMOConstLang.getMSG_RULE_NO_ROWDATA());
|
||||
}
|
||||
// 领料前校验流程生产订单
|
||||
// 根据流程生产订单明细id查询备料计划
|
||||
PickmTransParam param = new PickmTransParam();
|
||||
param.setSourceBillRowID(mobid);
|
||||
IPickmQueryServiceForMO pickmQueryServiceForMO = NCLocator.getInstance().lookup(IPickmQueryServiceForMO.class);
|
||||
AggPickmVO[] vos = pickmQueryServiceForMO.queryPickmByMO(new PickmTransParam[]{param});
|
||||
// 领料前校验流程备料计划
|
||||
if (MMValueCheck.isEmpty(vos)) {
|
||||
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0014"));
|
||||
}
|
||||
if (vos.length > 1) {
|
||||
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0015"));
|
||||
}
|
||||
if (FbillstatusEnum.PLAN_STATE.equalsValue(vos[0].getParentVO().getFbillstatus())) {
|
||||
// 只有审核态或完成态的备料计划才能进行无备料领料!
|
||||
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0016"));
|
||||
}
|
||||
AggPickmVO pickmVO = vos[0];
|
||||
PickmHeadVO pickmHeadVO = pickmVO.getParentVO();
|
||||
String cpickmid = pickmHeadVO.getCpickmid();
|
||||
List<PickmItemVO> itemVOS = new ArrayList<>();
|
||||
String pkOrg = MyHelper.getStrValByCondition(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE + " = '" + orgCode + "'" + " and ISBUSINESSUNIT = 'Y'");
|
||||
if (MMValueCheck.isEmpty(pkOrg) || "~".equals(pkOrg)) {
|
||||
return ResultMessageUtil.exceptionToJSON("组织编码不存在,未能在系统查询到该组织", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
String warehouseId = getWarehouseInfo(pkOrg);
|
||||
if (MMValueCheck.isEmpty(warehouseId) || "~".equals(warehouseId)) {
|
||||
return ResultMessageUtil.exceptionToJSON("请检查仓库编码是否配置正确", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
for (int i = 0; i < itemList.size(); i++) {
|
||||
Map<String, Object> objectMap = itemList.get(i);
|
||||
String cbmaterialvid = objectMap.getOrDefault("cbmaterialvid", "") + "";
|
||||
Map<String, Object> materialMap = getMaterialInfo(cbmaterialvid);
|
||||
if (materialMap == null || materialMap.isEmpty()) {
|
||||
throw new BusinessException("传入数据异常,物料编码不存在");
|
||||
}
|
||||
String pkMaterial = materialMap.get("pk_material") + "";
|
||||
String pkMeasdoc = materialMap.get("pk_measdoc") + "";
|
||||
PickmItemVO itemVO = new PickmItemVO();
|
||||
itemVO.setCpickmid(cpickmid);
|
||||
itemVO.setPk_group("00");
|
||||
itemVO.setPk_org(pkOrg);
|
||||
itemVO.setPk_org_v(pkOrg);
|
||||
itemVO.setCdeliverorgvid(pkOrg);// 发料组织
|
||||
itemVO.setCdeliverorgid(pkOrg);// 发料组织
|
||||
itemVO.setVrowno((i * 10) + "");// 行号
|
||||
itemVO.setCbmaterialid(pkMaterial);
|
||||
itemVO.setCbmaterialvid(pkMaterial);
|
||||
itemVO.setCbastunitid(pkMeasdoc);
|
||||
itemVO.setCbunitid(pkMeasdoc);
|
||||
itemVO.setVbchangerate("1/1");
|
||||
itemVO.setCoutstockid(warehouseId);// 发料仓库
|
||||
// 需用日期
|
||||
if (MMValueCheck.isNotEmpty(objectMap.get("drequiredate"))) {
|
||||
itemVO.setDrequiredate(new UFDate(objectMap.get("drequiredate").toString()));
|
||||
} else {
|
||||
itemVO.setDrequiredate(new UFDate());
|
||||
}
|
||||
// 计划出库数量
|
||||
if (MMValueCheck.isNotEmpty(objectMap.get("nplanoutastnum"))) {
|
||||
UFDouble nplanoutastnum = new UFDouble(objectMap.get("nplanoutastnum").toString());
|
||||
itemVO.setNplanoutastnum(nplanoutastnum);// 计划出库数量
|
||||
itemVO.setNplanoutnum(nplanoutastnum);// 计划出库主数量
|
||||
itemVO.setNunitastnum(nplanoutastnum);// 单位定额
|
||||
itemVO.setNunitnum(nplanoutastnum);// 主单位定额
|
||||
itemVO.setNunituseastnum(nplanoutastnum);// 单位用量
|
||||
itemVO.setNunitusenum(nplanoutastnum);// 单位主用量
|
||||
// itemVO.setAttributeValue("nastnum", nplanoutastnum);
|
||||
itemVO.setAttributeValue("nquotastnum", nplanoutastnum);// 定额用量
|
||||
itemVO.setAttributeValue("nquotnum", nplanoutastnum);// 主定额用量
|
||||
// itemVO.setAttributeValue("ndissipationum", nplanoutastnum);
|
||||
} else {
|
||||
itemVO.setNplanoutnum(UFDouble.ONE_DBL);
|
||||
}
|
||||
itemVO.setFsupplytype(1);// 供应方式 一般发料=0,定量发料=1
|
||||
if (MMValueCheck.isNotEmpty(objectMap.get("vnote"))) {
|
||||
itemVO.setVbnote(objectMap.get("vnote").toString());// 备注
|
||||
}
|
||||
itemVO.setStatus(VOStatus.NEW);
|
||||
itemVOS.add(itemVO);
|
||||
}
|
||||
// 调用无备料领料的标准业务方法
|
||||
IPickmBusinessService service = NCLocator.getInstance().lookup(IPickmBusinessService.class);
|
||||
service.noItemsDeliverMaterial(itemVOS.toArray(new PickmItemVO[0]));
|
||||
return ResultMessageUtil.toJSON(true, "操作成功");
|
||||
} catch (Exception e) {
|
||||
logger.error("未备料领料操作异常", e);
|
||||
return ResultMessageUtil.exceptionToJSON(e);
|
||||
}
|
||||
}
|
||||
|
||||
private String getWarehouseInfo(String pk_org) throws DAOException {
|
||||
Map<String, String> configParams = MyHelper.getConfigParams("jm-config", null);
|
||||
String warehouseCode = configParams.get("warehouseCode");
|
||||
SqlBuilder sqlBuilder = new SqlBuilder();
|
||||
sqlBuilder.append(" select " + StordocVO.PK_STORDOC);
|
||||
sqlBuilder.append(" from " + StordocVO.getDefaultTableName());
|
||||
sqlBuilder.append(" where dr = 0");
|
||||
sqlBuilder.append(" and ");
|
||||
sqlBuilder.append(StordocVO.CODE, warehouseCode);
|
||||
sqlBuilder.append(" and ");
|
||||
sqlBuilder.append(StordocVO.PK_ORG, pk_org);
|
||||
String warehouseId = (String) getDao().executeQuery(sqlBuilder.toString(), new ColumnProcessor());
|
||||
return warehouseId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物料的信息
|
||||
*
|
||||
* @param cbmaterialvid
|
||||
* @return
|
||||
* @throws BusinessException
|
||||
*/
|
||||
private Map<String, Object> getMaterialInfo(String cbmaterialvid) throws BusinessException {
|
||||
if (cbmaterialvid == null || cbmaterialvid.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class);
|
||||
String sql = " select pk_material,pk_measdoc" +
|
||||
" from bd_material" +
|
||||
" where code = '" + cbmaterialvid + "' ";
|
||||
return (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor());
|
||||
}
|
||||
|
||||
public String getModule() {
|
||||
return "mmpac";
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue