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

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

View File

@ -1,9 +1,12 @@
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.pmo.pac0002.IPMOMaintainService;
import nc.itf.pu.m20.IPraybillMaintain;
import nc.itf.uap.pf.busiflow.PfButtonClickContext;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.util.mmf.busi.service.PFPubService;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.mmpac.pickm.entity.AggPickmVO;
@ -35,9 +38,9 @@ public class PickmToPmo implements ICommonAction {
String read = iRequest.read();
IJson json = JsonFactory.create();
try {
// 获取请求查询信息
// 获取请求查询信息
PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class);
// 获取主键
// 获取主键
String[] cpickmids = paramDTO.getCpickmids();
// String[] cpickmbids = paramDTO.getCpickmbids();
// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) {
@ -49,15 +52,26 @@ public class PickmToPmo implements ICommonAction {
aggVOs = service.queryBillsByPks(cpickmids);
}
if (MMValueCheck.isEmpty(aggVOs)) {
/*@res "单据已被修改或删除,请刷新界面重新操作!"*/
/*@res "单据已被修改或删除,请刷新界面重新操作!"*/
ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009"));
}
PMOAggVO[] prayVOs = convertToGeneralInVO(processAggVOs(aggVOs), null);
AggPickmVO[] vos = processAggVOs(aggVOs);
if(vos.length == 0){
throw new BusinessException("未检测到符合生成生产单数据,不能生成!");
}
PMOAggVO[] prayVOs = convertToGeneralInVO(vos, null);
List<String> pk =new ArrayList<>();
for (PMOAggVO prayVO : prayVOs) {
for (int j=0;j<prayVO.getChildrenVO().length;j++) {
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);
@ -65,26 +79,55 @@ public class PickmToPmo implements ICommonAction {
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("data", insertVos);
returnMap.put("success", true);
if(!pk.isEmpty()){
//回写是否下方为是
updetaPmo(pk);
}
return returnMap;
} catch (Exception e) {
ExceptionUtils.wrapException(e);
}
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)
throws BusinessException {
// 来源交易类型或单据类型需要在单据类型中注册
// 来源交易类型或单据类型需要在单据类型中注册
String srcBillOrTranstype = "55A3";
// 目标交易类型或单据类型需要在单据类型中注册
// 目标交易类型或单据类型需要在单据类型中注册
String destBillOrTranstype = "55A2";
// classifyMode int型参数调用模式参照PfButtonClickContext中定义代码中调用为接口方式 ClassifyByItfdef
// classifyMode int型参数调用模式参照PfButtonClickContext中定义代码中调用为接口方式 ClassifyByItfdef
int classifyMode = PfButtonClickContext.ClassifyByItfdef;
PMOAggVO[] inVOS = (PMOAggVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode);
if (MMValueCheck.isEmpty(inVOS)) {
ExceptionUtils.wrapBusinessException("备料计划转换流程生产订单失败");
ExceptionUtils.wrapBusinessException("备料计划转换流程生产订单失败");
}
for (PMOAggVO inVO : inVOS) {
// 其它入库单的仓库交易类型取自业务参数设置的默认值
// 其它入库单的仓库交易类型取自业务参数设置的默认值
PMOHeadVO head = inVO.getParentVO();
head.setCtrantypeid("0001A110000000001S1E");
@ -96,7 +139,7 @@ public class PickmToPmo implements ICommonAction {
return inVOS;
}
public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) {
public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) throws DAOException {
Map<Object, List<AggPickmVO>> groupMap = new HashMap<>();
for (AggPickmVO vo : aggVOs) {
@ -109,17 +152,36 @@ public class PickmToPmo implements ICommonAction {
for (Map.Entry<Object, List<AggPickmVO>> entry : groupMap.entrySet()) {
List<AggPickmVO> group = entry.getValue();
// 修改1使用ISuperVO列表收集子对象
// 修改1使用ISuperVO列表收集子对象
List<PickmItemVO> mergedChildren = new ArrayList<PickmItemVO>();
for (AggPickmVO vo : group) {
PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class);
if (items != null) {
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()){
mergedChildren.add(child);
}
// CircularlyAccessibleValueObject 实现了 ISuperVO
// CircularlyAccessibleValueObject 实现了 ISuperVO
}
}
}
@ -129,7 +191,7 @@ public class PickmToPmo implements ICommonAction {
AggPickmVO newVO = new AggPickmVO();
newVO.setParent(group.get(0).getParentVO());
// 修改2转换为ISuperVO数组
// 修改2转换为ISuperVO数组
newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0]));
resultList.add(newVO);