下达后回写是否已经下达字段

This commit is contained in:
lihao 2025-07-25 11:22:26 +08:00
parent 08be4cff54
commit dbcbb3e1ca
2 changed files with 156 additions and 33 deletions

View File

@ -1,9 +1,12 @@
package nccloud.web.mmpac.pickm.action; package nccloud.web.mmpac.pickm.action;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.itf.ic.m4a.IGeneralInMaintain; import nc.itf.ic.m4a.IGeneralInMaintain;
import nc.itf.mmpac.pickm.IPickmQueryService; import nc.itf.mmpac.pickm.IPickmQueryService;
import nc.itf.pu.m20.IPraybillMaintain; import nc.itf.pu.m20.IPraybillMaintain;
import nc.itf.uap.pf.busiflow.PfButtonClickContext; import nc.itf.uap.pf.busiflow.PfButtonClickContext;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.util.mmf.busi.service.PFPubService; import nc.util.mmf.busi.service.PFPubService;
import nc.util.mmf.framework.base.MMValueCheck; import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.ic.m4a.entity.GeneralInVO; import nc.vo.ic.m4a.entity.GeneralInVO;
@ -30,7 +33,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* 备料计划转请购单 * 备料计划转请购单
*/ */
public class PickmToBuyingreqAction implements ICommonAction { public class PickmToBuyingreqAction implements ICommonAction {
@Override @Override
@ -38,9 +41,9 @@ public class PickmToBuyingreqAction implements ICommonAction {
String read = iRequest.read(); String read = iRequest.read();
IJson json = JsonFactory.create(); IJson json = JsonFactory.create();
try { try {
// 获取请求查询信息 // 获取请求查询信息
PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class); PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class);
// 获取主键 // 获取主键
String[] cpickmids = paramDTO.getCpickmids(); String[] cpickmids = paramDTO.getCpickmids();
// String[] cpickmbids = paramDTO.getCpickmbids(); // String[] cpickmbids = paramDTO.getCpickmbids();
// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) { // if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) {
@ -52,17 +55,33 @@ public class PickmToBuyingreqAction implements ICommonAction {
aggVOs = service.queryBillsByPks(cpickmids); aggVOs = service.queryBillsByPks(cpickmids);
} }
if (MMValueCheck.isEmpty(aggVOs)) { if (MMValueCheck.isEmpty(aggVOs)) {
/*@res "单据已被修改或删除,请刷新界面重新操作!"*/ /*@res "单据已被修改或删除,请刷新界面重新操作!"*/
ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009"));
} }
// AggPickmVO[] aggPickmVOS=processAggVOs(aggVOs); // AggPickmVO[] aggPickmVOS=processAggVOs(aggVOs);
// 转换数据 // 转换数据
PraybillVO[] prayVOs = convertToGeneralInVO(processAggVOs(aggVOs), null); AggPickmVO[] vos = processAggVOs(aggVOs);
if(vos.length == 0){
throw new BusinessException("未检测到符合生成请购单数据,不能生成!");
}
PraybillVO[] prayVOs = convertToGeneralInVO(vos, null);
List<String> pk =new ArrayList<>();
for (AggPickmVO prayVO : vos) {
PickmItemVO[] items = (PickmItemVO[]) prayVO.getChildren(PickmItemVO.class);
for (int j=0;j<items.length;j++) {
pk.add(items[j].getCpickm_bid());
}
}
IPraybillMaintain maintain= ServiceLocator.find(IPraybillMaintain.class); IPraybillMaintain maintain= ServiceLocator.find(IPraybillMaintain.class);
PraybillVO[] insertVos = maintain.insert(prayVOs); PraybillVO[] insertVos = maintain.insert(prayVOs);
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap = new HashMap<>();
returnMap.put("data", insertVos); returnMap.put("data", insertVos);
returnMap.put("success", true); returnMap.put("success", true);
if(!pk.isEmpty()){
updetaPmo(pk);
}
return returnMap; return returnMap;
} catch (Exception e) { } catch (Exception e) {
ExceptionUtils.wrapException(e); ExceptionUtils.wrapException(e);
@ -71,18 +90,18 @@ public class PickmToBuyingreqAction implements ICommonAction {
} }
private PraybillVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) private PraybillVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo)
throws BusinessException { throws BusinessException {
// 来源交易类型或单据类型需要在单据类型中注册 // 来源交易类型或单据类型需要在单据类型中注册
String srcBillOrTranstype = "55A3"; String srcBillOrTranstype = "55A3";
// 目标交易类型或单据类型需要在单据类型中注册 // 目标交易类型或单据类型需要在单据类型中注册
String destBillOrTranstype = "20"; String destBillOrTranstype = "20";
// classifyMode int型参数调用模式参照PfButtonClickContext中定义代码中调用为接口方式 ClassifyByItfdef // classifyMode int型参数调用模式参照PfButtonClickContext中定义代码中调用为接口方式 ClassifyByItfdef
int classifyMode = PfButtonClickContext.ClassifyByItfdef; int classifyMode = PfButtonClickContext.ClassifyByItfdef;
PraybillVO[] inVOS = (PraybillVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); PraybillVO[] inVOS = (PraybillVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode);
if (MMValueCheck.isEmpty(inVOS)) { if (MMValueCheck.isEmpty(inVOS)) {
ExceptionUtils.wrapBusinessException("备料计划转换请购单失败"); ExceptionUtils.wrapBusinessException("备料计划转换请购单失败");
} }
for (PraybillVO inVO : inVOS) { for (PraybillVO inVO : inVOS) {
// 其它入库单的仓库交易类型取自业务参数设置的默认值 // 其它入库单的仓库交易类型取自业务参数设置的默认值
PraybillHeaderVO head = inVO.getHVO(); PraybillHeaderVO head = inVO.getHVO();
head.setCtrantypeid("0001A110000000001S1E"); head.setCtrantypeid("0001A110000000001S1E");
// head.setCwarehouseid(""); // head.setCwarehouseid("");
@ -90,7 +109,31 @@ public class PickmToBuyingreqAction implements ICommonAction {
return inVOS; return inVOS;
} }
public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) { private void updetaPmo(List<String> arrayList) throws DAOException {
String result = "";
StringBuilder sb = new StringBuilder();
if (arrayList.size() > 1) {
for (int i = 0; i < arrayList.size(); i++) {
sb.append("'").append(arrayList.get(i)).append("'");
if (i < arrayList.size() - 1) {
sb.append(",");
}
}
result = sb.toString();
} else {
result = "'" + (String) arrayList.get(0) + "'";
}
String sql = " update mm_pickm_b set vbdef13='Y' where mm_pickm_b.cpickm_bid in(" + result + ")";
BaseDAO dao = new BaseDAO();
dao.executeUpdate(sql);
}
public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) throws DAOException {
Map<Object, List<AggPickmVO>> groupMap = new HashMap<>(); Map<Object, List<AggPickmVO>> groupMap = new HashMap<>();
for (AggPickmVO vo : aggVOs) { for (AggPickmVO vo : aggVOs) {
@ -103,17 +146,35 @@ public class PickmToBuyingreqAction implements ICommonAction {
for (Map.Entry<Object, List<AggPickmVO>> entry : groupMap.entrySet()) { for (Map.Entry<Object, List<AggPickmVO>> entry : groupMap.entrySet()) {
List<AggPickmVO> group = entry.getValue(); List<AggPickmVO> group = entry.getValue();
// 修改1使用ISuperVO列表收集子对象 // 修改1使用ISuperVO列表收集子对象
List<PickmItemVO> mergedChildren = new ArrayList<PickmItemVO>(); List<PickmItemVO> mergedChildren = new ArrayList<PickmItemVO>();
for (AggPickmVO vo : group) { for (AggPickmVO vo : group) {
PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class);
if (items != null) { if (items != null) {
for (PickmItemVO child : items) { for (PickmItemVO child : items) {
//只合并项目专用料数据 // 未下达子表 若物料类型为采购件则备料计划中所有采购件生成一张请购单
if(child.getBprojectmaterial().booleanValue()){ if(null != child.getVbdef13() && child.getVbdef13().equals("Y") ){
mergedChildren.add(child); continue;
} }
// CircularlyAccessibleValueObject 实现了 ISuperVO String materalType = child.getVbdef14();
if(null == materalType){
// MR=制造件;
// PR=采购件;
String sql = " select martype from bd_materialstock where pk_material='" + child.getCbmaterialvid() + "' and pk_org='"+child.getPk_org()+"' and dr=0";
BaseDAO dao = new BaseDAO();
materalType = (String) dao.executeQuery(sql, new ColumnProcessor());
if(null == materalType || "MR".equals(materalType) || "".equals(materalType) ){
continue;
}
}else if("2".equals(materalType)){
continue;
}
//只合并项目专用料数据
// if(child.getBprojectmaterial().booleanValue()){
mergedChildren.add(child);
// }
// CircularlyAccessibleValueObject 实现了 ISuperVO
} }
} }
} }
@ -123,7 +184,7 @@ public class PickmToBuyingreqAction implements ICommonAction {
AggPickmVO newVO = new AggPickmVO(); AggPickmVO newVO = new AggPickmVO();
newVO.setParent(group.get(0).getParentVO()); newVO.setParent(group.get(0).getParentVO());
// 修改2转换为ISuperVO数组 // 修改2转换为ISuperVO数组
newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0])); newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0]));
resultList.add(newVO); resultList.add(newVO);

View File

@ -1,9 +1,12 @@
package nccloud.web.mmpac.pickm.action; package nccloud.web.mmpac.pickm.action;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.itf.mmpac.pickm.IPickmQueryService; import nc.itf.mmpac.pickm.IPickmQueryService;
import nc.itf.mmpac.pmo.pac0002.IPMOMaintainService; import nc.itf.mmpac.pmo.pac0002.IPMOMaintainService;
import nc.itf.pu.m20.IPraybillMaintain; import nc.itf.pu.m20.IPraybillMaintain;
import nc.itf.uap.pf.busiflow.PfButtonClickContext; import nc.itf.uap.pf.busiflow.PfButtonClickContext;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.util.mmf.busi.service.PFPubService; import nc.util.mmf.busi.service.PFPubService;
import nc.util.mmf.framework.base.MMValueCheck; import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.mmpac.pickm.entity.AggPickmVO; import nc.vo.mmpac.pickm.entity.AggPickmVO;
@ -35,9 +38,9 @@ public class PickmToPmo implements ICommonAction {
String read = iRequest.read(); String read = iRequest.read();
IJson json = JsonFactory.create(); IJson json = JsonFactory.create();
try { try {
// 获取请求查询信息 // 获取请求查询信息
PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class); PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class);
// 获取主键 // 获取主键
String[] cpickmids = paramDTO.getCpickmids(); String[] cpickmids = paramDTO.getCpickmids();
// String[] cpickmbids = paramDTO.getCpickmbids(); // String[] cpickmbids = paramDTO.getCpickmbids();
// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) { // if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) {
@ -49,15 +52,26 @@ public class PickmToPmo implements ICommonAction {
aggVOs = service.queryBillsByPks(cpickmids); aggVOs = service.queryBillsByPks(cpickmids);
} }
if (MMValueCheck.isEmpty(aggVOs)) { if (MMValueCheck.isEmpty(aggVOs)) {
/*@res "单据已被修改或删除,请刷新界面重新操作!"*/ /*@res "单据已被修改或删除,请刷新界面重新操作!"*/
ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009"));
} }
AggPickmVO[] vos = processAggVOs(aggVOs);
PMOAggVO[] prayVOs = convertToGeneralInVO(processAggVOs(aggVOs), null); if(vos.length == 0){
throw new BusinessException("未检测到符合生成生产单数据,不能生成!");
}
PMOAggVO[] prayVOs = convertToGeneralInVO(vos, null);
List<String> pk =new ArrayList<>();
for (PMOAggVO prayVO : prayVOs) { for (PMOAggVO prayVO : prayVOs) {
for (int j=0;j<prayVO.getChildrenVO().length;j++) { for (int j=0;j<prayVO.getChildrenVO().length;j++) {
prayVO.getChildrenVO()[j].setVrowno(String.valueOf(j*10+10)); prayVO.getChildrenVO()[j].setVrowno(String.valueOf(j*10+10));
pk.add(prayVO.getChildrenVO()[j].getCmoid());
}
}
for (AggPickmVO prayVO : vos) {
PickmItemVO[] items = (PickmItemVO[]) prayVO.getChildren(PickmItemVO.class);
for (int j=0;j<items.length;j++) {
pk.add(items[j].getCpickm_bid());
} }
} }
IPMOMaintainService maintain= ServiceLocator.find(IPMOMaintainService.class); IPMOMaintainService maintain= ServiceLocator.find(IPMOMaintainService.class);
@ -65,26 +79,55 @@ public class PickmToPmo implements ICommonAction {
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap = new HashMap<>();
returnMap.put("data", insertVos); returnMap.put("data", insertVos);
returnMap.put("success", true); returnMap.put("success", true);
if(!pk.isEmpty()){
//回写是否下方为是
updetaPmo(pk);
}
return returnMap; return returnMap;
} catch (Exception e) { } catch (Exception e) {
ExceptionUtils.wrapException(e); ExceptionUtils.wrapException(e);
} }
return null; return null;
} }
private void updetaPmo(List<String> arrayList) throws DAOException {
String result = "";
StringBuilder sb = new StringBuilder();
if (arrayList.size() > 1) {
for (int i = 0; i < arrayList.size(); i++) {
sb.append("'").append(arrayList.get(i)).append("'");
if (i < arrayList.size() - 1) {
sb.append(",");
}
}
result = sb.toString();
} else {
result = "'" + (String) arrayList.get(0) + "'";
}
String sql = " update mm_pickm_b set vbdef13='Y' where mm_pickm_b.cpickm_bid in(" + result + ")";
BaseDAO dao = new BaseDAO();
dao.executeUpdate(sql);
}
private PMOAggVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) private PMOAggVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo)
throws BusinessException { throws BusinessException {
// 来源交易类型或单据类型需要在单据类型中注册 // 来源交易类型或单据类型需要在单据类型中注册
String srcBillOrTranstype = "55A3"; String srcBillOrTranstype = "55A3";
// 目标交易类型或单据类型需要在单据类型中注册 // 目标交易类型或单据类型需要在单据类型中注册
String destBillOrTranstype = "55A2"; String destBillOrTranstype = "55A2";
// classifyMode int型参数调用模式参照PfButtonClickContext中定义代码中调用为接口方式 ClassifyByItfdef // classifyMode int型参数调用模式参照PfButtonClickContext中定义代码中调用为接口方式 ClassifyByItfdef
int classifyMode = PfButtonClickContext.ClassifyByItfdef; int classifyMode = PfButtonClickContext.ClassifyByItfdef;
PMOAggVO[] inVOS = (PMOAggVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); PMOAggVO[] inVOS = (PMOAggVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode);
if (MMValueCheck.isEmpty(inVOS)) { if (MMValueCheck.isEmpty(inVOS)) {
ExceptionUtils.wrapBusinessException("备料计划转换流程生产订单失败"); ExceptionUtils.wrapBusinessException("备料计划转换流程生产订单失败");
} }
for (PMOAggVO inVO : inVOS) { for (PMOAggVO inVO : inVOS) {
// 其它入库单的仓库交易类型取自业务参数设置的默认值 // 其它入库单的仓库交易类型取自业务参数设置的默认值
PMOHeadVO head = inVO.getParentVO(); PMOHeadVO head = inVO.getParentVO();
head.setCtrantypeid("0001A110000000001S1E"); head.setCtrantypeid("0001A110000000001S1E");
@ -96,7 +139,7 @@ public class PickmToPmo implements ICommonAction {
return inVOS; return inVOS;
} }
public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) { public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) throws DAOException {
Map<Object, List<AggPickmVO>> groupMap = new HashMap<>(); Map<Object, List<AggPickmVO>> groupMap = new HashMap<>();
for (AggPickmVO vo : aggVOs) { for (AggPickmVO vo : aggVOs) {
@ -109,17 +152,36 @@ public class PickmToPmo implements ICommonAction {
for (Map.Entry<Object, List<AggPickmVO>> entry : groupMap.entrySet()) { for (Map.Entry<Object, List<AggPickmVO>> entry : groupMap.entrySet()) {
List<AggPickmVO> group = entry.getValue(); List<AggPickmVO> group = entry.getValue();
// 修改1使用ISuperVO列表收集子对象 // 修改1使用ISuperVO列表收集子对象
List<PickmItemVO> mergedChildren = new ArrayList<PickmItemVO>(); List<PickmItemVO> mergedChildren = new ArrayList<PickmItemVO>();
for (AggPickmVO vo : group) { for (AggPickmVO vo : group) {
PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class);
if (items != null) { if (items != null) {
for (PickmItemVO child : items) { for (PickmItemVO child : items) {
//只合并项目专用料数据
// 未下达子表 若物料类型为制造件则备料计划中所有制造件件生成一张开立状态的流程生产订单
if(null != child.getVbdef13() && child.getVbdef13().equals("Y") ){
continue;
}
String materalType = child.getVbdef14();
if(null == materalType){
// MR=制造件;
// PR=采购件;
String sql = " select martype from bd_materialstock where pk_material='" + child.getCbmaterialvid() + "' and pk_org='"+child.getPk_org()+"' and dr=0";
BaseDAO dao = new BaseDAO();
materalType = (String) dao.executeQuery(sql, new ColumnProcessor());
if(null == materalType || "PR".equals(materalType) || "".equals(materalType) ){
continue;
}
}else if("1".equals(materalType)){
continue;
}
//只合并项目专用料数据
if(child.getBprojectmaterial().booleanValue()){ if(child.getBprojectmaterial().booleanValue()){
mergedChildren.add(child); mergedChildren.add(child);
} }
// CircularlyAccessibleValueObject 实现了 ISuperVO // CircularlyAccessibleValueObject 实现了 ISuperVO
} }
} }
} }
@ -129,7 +191,7 @@ public class PickmToPmo implements ICommonAction {
AggPickmVO newVO = new AggPickmVO(); AggPickmVO newVO = new AggPickmVO();
newVO.setParent(group.get(0).getParentVO()); newVO.setParent(group.get(0).getParentVO());
// 修改2转换为ISuperVO数组 // 修改2转换为ISuperVO数组
newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0])); newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0]));
resultList.add(newVO); resultList.add(newVO);