销售订单修订接口

This commit is contained in:
mzr 2025-04-01 14:11:25 +08:00
parent 5397cb9484
commit b0588958b0
2 changed files with 1357 additions and 0 deletions

View File

@ -0,0 +1,886 @@
package nccloud.api.impl.so.m30;
import nc.bd.itf.tools.BFPubTools;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.bs.framework.common.NCLocator;
import nc.bs.trade.business.HYSuperDMO;
import nc.impl.pubapp.pattern.data.bill.BillQuery;
import nc.itf.fi.pub.Currency;
import nc.itf.scmpub.reference.uap.bd.customer.CustomerPubService;
import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil;
import nc.itf.so.m30.self.ISaleOrderMaintain;
import nc.itf.so.m30.self.ISaleOrderScriptMaintain;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.pubimpl.so.m30.pub.SaleOrderSaveUtil;
import nc.pubitf.so.m30.api.ISaleOrderQueryAPI;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.VOStatus;
import nc.vo.pub.billtype.BilltypeVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.AppContext;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule;
import nc.vo.scmpub.fill.pricemny.INumPriceMnyCalculator;
import nc.vo.scmpub.res.billtype.SOBillType;
import nc.vo.scmpub.util.CollectionUtils;
import nc.vo.scmpub.util.StringUtil;
import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import nc.vo.so.pub.enumeration.BillStatus;
import nc.vo.so.pub.util.AggVOUtil;
import nccloud.api.impl.so.m30.check.SaleOrderValidator;
import nccloud.api.impl.so.m30.fill.SaleOrderNPriceMnyCal;
import nccloud.api.impl.so.m30.fill.SaleOrderSaveFillValue;
import nccloud.api.impl.so.m30.fill.SetUpdateData;
import nccloud.api.so.m30.IAPISaleOrderMaitain;
import nccloud.baseapp.core.log.NCCForUAPLogger;
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
import nccloud.openapi.scmpub.pub.TransferMapToVOTool;
import nccloud.putitf.riart.billtype.IBilltypeService;
import org.apache.commons.lang3.ArrayUtils;
import java.math.BigDecimal;
import java.util.*;
/**
* @Description: 销售订单维护实现类
* @author: yanghff
* @date: 2019-10-23 下午4:57:49
* @Copyright:
*/
public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
private static String BODYTABLE = "so_saleorder_b";
private static String HEADTABLE = "so_saleorder";
@Override
public SaleOrderVO[] save(List<Map<String, Object>> paramList) throws BusinessException {
try {
List<SaleOrderVO> aggVOList = TransferMapToVOTool.transferMapToAggVO(paramList, SaleOrderVO.class);
SaleOrderVO[] vos = (SaleOrderVO[]) aggVOList.toArray(new SaleOrderVO[aggVOList.size()]);
BillVOsCheckRule checker = new BillVOsCheckRule(new SaleOrderValidator());
checker.check(vos);
aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
SaleOrderSaveUtil saveUtil = new SaleOrderSaveUtil();
return saveUtil.processBill(vos);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public SaleOrderVO[] update(List<Map<String, Object>> paramList) throws BusinessException {
List<SaleOrderVO> aggVOList = TransferMapToVOTool.transferMapToAggVO(paramList, SaleOrderVO.class);
aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
SaleOrderVO[] vos = (SaleOrderVO[]) aggVOList.toArray(new SaleOrderVO[aggVOList.size()]);
Map<String, Set<String>> ids = getIds(vos);
if (ids.keySet() == null || ids.values() == null || ids.values().size() == 0) {
ExceptionUtils.wrappBusinessException("请传入订单主键和订单行主键");
}
String[] hids = (String[]) ids.keySet().toArray(new String[ids.keySet().size()]);
ISaleOrderMaintain service = (ISaleOrderMaintain) NCLocator.getInstance().lookup(ISaleOrderMaintain.class);
SaleOrderVO[] originVos = service.querySaleorder(hids);
if (null == originVos || originVos.length == 0) {
ExceptionUtils.wrappBusinessException("根据传入数据未匹配到相关数据");
}
for (Map<String, Object> objectMap : paramList) {
Map<String, Object> headdata = (Map<String, Object>) objectMap.get(HEADTABLE);
List<Object> bodyArr = (List<Object>) objectMap.get(BODYTABLE);
for (Object body : bodyArr) {
Map<String, Object> bodydata = (Map<String, Object>) body;
if (!(bodydata.getOrDefault("vbdef11", "") + "").isEmpty()) {
String vbdef11 = bodydata.get("vbdef11") + "";
String dr = bodydata.getOrDefault("dr", "0") + "";
String csaleorderid = bodydata.get("csaleorderid") + "";
String countSql = "SELECT count(1) FROM so_saleorder_b" +
" WHERE nvl(dr,0) = 0 and csaleorderid = '[csaleorderid]' and vbdef11 = '[vbdef11]' ";
countSql = countSql.replace("[csaleorderid]", csaleorderid);
countSql = countSql.replace("[vbdef11]", vbdef11);
Integer num = (Integer) new BaseDAO().executeQuery(countSql, new ColumnProcessor());
if ("0".equals(dr) && num <= 0) {
bodydata.put("status", "add");
}
}
}
}
// SetUpdateData setData = new SetUpdateData();
// setData.setData(vos, originVos);
// SaleOrderVO[] combinBillVOs = (SaleOrderVO[]) AggVOUtil.combinBillVO(vos, originVos);
// 创建一个新的数组并进行深拷贝
SaleOrderVO[] combinBillVOs = new SaleOrderVO[originVos.length];
for (int i = 0; i < originVos.length; i++) {
combinBillVOs[i] = (SaleOrderVO) originVos[i].clone();
}
// vos 中的元素按主键存储在 Map
Map<String, SaleOrderVO> vosMap = new HashMap<>();
for (SaleOrderVO vo : vos) {
vosMap.put(vo.getParentVO().getCsaleorderid(), vo);
}
// 遍历 combinBillVOs 并更新字段
for (SaleOrderVO vo : combinBillVOs) {
SaleOrderHVO hvo = vo.getParentVO();
String primaryKey = hvo.getCsaleorderid();
SaleOrderVO bipVo = vosMap.get(primaryKey);
// 设置单据状态
hvo.setStatus(VOStatus.UPDATED);
Map<String, SaleOrderBVO> bvoMap = new HashMap<>();
for (SaleOrderBVO saleOrderBVO : bipVo.getChildrenVO()) {
bvoMap.put(saleOrderBVO.getCsaleorderbid(), saleOrderBVO);
}
// 比较combinBillVOs中的BVO和vos中的BVO
for (SaleOrderBVO bvo : vo.getChildrenVO()) {
bvo.setStatus(VOStatus.UPDATED);
// 设置删除的物料行的状态,在bip传的数据中找不到
String csaleorderbid = bvo.getCsaleorderbid();
if (bvoMap.get(csaleorderbid) == null) {
bvo.setStatus(VOStatus.DELETED);
NCCForUAPLogger.debug("findDeletedBids:" + VOStatus.DELETED + ",csaleorderbid = " + csaleorderbid);
}
}
// 更新 combinBillVO 中的字段为 vos 中的值
updateFields(vo, bipVo);
// 设置新增的物料行
if (paramList != null && !paramList.isEmpty()) {
addBvo(combinBillVOs, paramList);
}
}
// 联动计算
INumPriceMnyCalculator cal = new SaleOrderNPriceMnyCal<SaleOrderVO>(combinBillVOs);
cal.calculate();
for (SaleOrderVO vo : combinBillVOs) {
SaleOrderHVO hvo = vo.getParentVO();
SaleOrderHVO originHvo = null;
for (SaleOrderVO originVo : originVos) {
if (hvo.getCsaleorderid().equals(originVo.getParentVO().getCsaleorderid())) {
originHvo = originVo.getParentVO();
}
}
String new_ctrantypeid = hvo.getCtrantypeid();
boolean isChangedTranType = false;// 订单类型不修改
if (originHvo != null && new_ctrantypeid != null && !new_ctrantypeid.equals(originHvo.getCtrantypeid())) {
isChangedTranType = true;
}
SaleOrderBVO[] bvos = vo.getChildrenVO();
// 判断是否存在新增的子表
boolean hasNewStatus = Arrays.stream(bvos)
.anyMatch(bvo -> bvo.getStatus() == VOStatus.NEW);
// 新增子表或改订单类型的情况下不校验是否存在下游
if (!hasNewStatus && !isChangedTranType) {
String countSql = "SELECT count(1) FROM so_saleinvoice_b a" +
" LEFT JOIN so_saleinvoice b ON a.csaleinvoiceid = b.csaleinvoiceid" +
" WHERE b.fopposeflag = 0 AND nvl(b.dr, 0) = 0 and csrcid = '[csrcid]' ";
countSql = countSql.replace("[csrcid]", hvo.getCsaleorderid());
Integer num = (Integer) new BaseDAO().executeQuery(countSql, new ColumnProcessor());
if (num > 0) {
// fopposeflag 对冲标记 0=正常 1=已被对冲 2=对冲生成
ExceptionUtils.wrappBusinessException("下游存在未红冲完成的销售发票");
return null;
}
}
}
fillcustomervidbyoid(combinBillVOs);
// 保存
ISaleOrderScriptMaintain maintainsrv =
NCLocator.getInstance().lookup(ISaleOrderScriptMaintain.class);
SaleOrderVO[] retvos =
maintainsrv.saleOrderUpdate(combinBillVOs, null, originVos);
return retvos;
}
private Map<String, Set<String>> getIds(SaleOrderVO[] vos) {
Map<String, Set<String>> ids = new HashMap<String, Set<String>>();
for (SaleOrderVO vo : vos) {
String hid = vo.getParentVO().getCsaleorderid();
Set<String> bids = new HashSet<String>();
for (SaleOrderBVO bvo : vo.getChildrenVO()) {
bids.add(bvo.getCsaleorderbid());
}
ids.put(hid, bids);
}
return ids;
}
private void setOtherId(SaleOrderVO[] vos) {
for (SaleOrderVO vo : vos) {
// 部门业务员开票客户编码转id
SaleOrderHVO orderHVO = vo.getParentVO();
String csaleorderid = orderHVO.getCsaleorderid();
String cdeptvid = orderHVO.getCdeptvid();
String cemployeeid = orderHVO.getCemployeeid();
// 开票客户
String cinvoicecustid = orderHVO.getCinvoicecustid();
// 客户
String ccustomerid = orderHVO.getCcustomerid();
// 订单类型
// String ctrantypeid = orderHVO.getAttributeValue("ctrantypeid") + "";
String vtrantypecode = orderHVO.getVtrantypecode();
NCCForUAPLogger.debug("setOtherId-ccustomerid:" + ccustomerid + ",vtrantypecode:" + vtrantypecode);
try {
String sql = "";
// 部门
if (cdeptvid != null && !cdeptvid.isEmpty()) {
sql = " select pk_vid,pk_dept from org_dept where code = '[code]' ";
sql = sql.replace("[code]", cdeptvid);
Map deptMap = (Map) new BaseDAO().executeQuery(sql, new MapProcessor());
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + deptMap);
if (deptMap != null && !deptMap.isEmpty()) {
if (!"".equals(deptMap.getOrDefault("pk_dept", "") + "")) {
orderHVO.setCdeptid(deptMap.getOrDefault("pk_dept", "") + "");
}
if (!"".equals(deptMap.getOrDefault("pk_vid", "") + "")) {
orderHVO.setCdeptvid(deptMap.getOrDefault("pk_vid", "") + "");
}
}
}
// 业务员
if (cemployeeid != null && !cemployeeid.isEmpty()) {
sql = " select pk_psndoc from bd_psndoc where code = '[code]' ";
sql = sql.replace("[code]", cemployeeid);
Object staffObj = new BaseDAO().executeQuery(sql, new ColumnProcessor("pk_psndoc"));
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" + staffObj);
if (staffObj != null) {
String id = BFPubTools.getString_TrimAsNull(staffObj);
if (!id.isEmpty()) {
orderHVO.setCemployeeid(id);
}
}
}
// 开票客户
if (cinvoicecustid != null && !cinvoicecustid.isEmpty()) {
sql = " select pk_customer from bd_customer where nvl(dr,0) = 0 and code = '[code]' ";
sql = sql.replace("[code]", cinvoicecustid);
Object invCustObj = new BaseDAO().executeQuery(sql, new ColumnProcessor("pk_customer"));
NCCForUAPLogger.debug("setOtherId-invCustObj:" + invCustObj);
if (invCustObj != null) {
String id = BFPubTools.getString_TrimAsNull(invCustObj);
if (!id.isEmpty()) {
orderHVO.setCinvoicecustid(id);
}
}
}
// 客户
if (ccustomerid != null && !ccustomerid.isEmpty()) {
sql = " select pk_customer from bd_customer where nvl(dr,0) = 0 and code = '[code]' ";
sql = sql.replace("[code]", ccustomerid);
Object custObj = new BaseDAO().executeQuery(sql, new ColumnProcessor("pk_customer"));
NCCForUAPLogger.debug("setOtherId-custObj:" + custObj);
if (custObj != null) {
String id = BFPubTools.getString_TrimAsNull(custObj);
if (!id.isEmpty()) {
orderHVO.setCcustomerid(id);
}
}
}
// 交易类型
if (vtrantypecode != null && !vtrantypecode.isEmpty()) {
IBilltypeService billtypeService = NCLocator.getInstance().lookup(IBilltypeService.class);
BilltypeVO billtype = billtypeService.getBilltype(vtrantypecode);
if (billtype != null && billtype.getPk_billtypeid() != null) {
NCCForUAPLogger.debug("setOtherId-pk_billtypeid:" + billtype.getPk_billtypeid());
orderHVO.setCtrantypeid(billtype.getPk_billtypeid());
}
}
} catch (Exception e) {
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-exp:" + e.getMessage());
throw new RuntimeException(e);
}
}
}
private void updateFields(SaleOrderVO target, SaleOrderVO source) {
// 更新 SaleOrderHVO 字段
SaleOrderHVO targetHVO = target.getParentVO();
SaleOrderHVO sourceHVO = source.getParentVO();
// 表头修改修改的字段
String cdeptvid = sourceHVO.getCdeptvid();
String cdeptid = sourceHVO.getCdeptid();
if (cdeptvid != null && !cdeptvid.isEmpty()) {
targetHVO.setCdeptvid(cdeptvid);
targetHVO.setCdeptid(cdeptid);
}
String cemployeeid = sourceHVO.getCemployeeid();
if (cemployeeid != null && !cemployeeid.isEmpty()) {
targetHVO.setCemployeeid(cemployeeid);
}
String cinvoicecustid = sourceHVO.getCinvoicecustid();
if (cinvoicecustid != null && !cinvoicecustid.isEmpty()) {
targetHVO.setCinvoicecustid(cinvoicecustid);
}
String ccustomerid = sourceHVO.getCcustomerid();
if (ccustomerid != null && !ccustomerid.isEmpty()) {
targetHVO.setCcustomerid(ccustomerid);
}
// 订单类型id
String ctrantypeid = sourceHVO.getCtrantypeid();
if (ctrantypeid != null && !ctrantypeid.isEmpty()) {
targetHVO.setCtrantypeid(ctrantypeid);
}
// 订单类型编码
String vtrantypecode = sourceHVO.getVtrantypecode();
if (vtrantypecode != null && !vtrantypecode.isEmpty()) {
targetHVO.setVtrantypecode(vtrantypecode);
}
// 更新 SaleOrderBVO 字段
SaleOrderBVO[] targetBVOs = target.getChildrenVO();
SaleOrderBVO[] sourceBVOs = source.getChildrenVO();
// BVO 的主键是 csaleorderbid
Map<String, SaleOrderBVO> sourceBVOsMap = new HashMap<>();
for (SaleOrderBVO bvo : sourceBVOs) {
sourceBVOsMap.put(bvo.getCsaleorderbid(), bvo);
}
for (SaleOrderBVO targetBVO : targetBVOs) {
String bvoId = targetBVO.getCsaleorderbid();
SaleOrderBVO sourceBVO = sourceBVOsMap.get(bvoId);
if (sourceBVO != null) {
int status = targetBVO.getStatus();
if (VOStatus.UPDATED == status) {
// 数量
UFDouble nnum = sourceBVO.getNnum();
targetBVO.setNnum(nnum);
targetBVO.setNastnum(nnum);
// targetBVO.setNqtunitnum(nnum);
// 价税合计
targetBVO.setNorigtaxmny(sourceBVO.getNorigtaxmny());
targetBVO.setCmaterialvid(sourceBVO.getCmaterialvid());
// 是否赠品
targetBVO.setBlargessflag(sourceBVO.getBlargessflag());
// 折本汇率
UFDouble nexchangerate = getUFDouble_NullAsOne(sourceBVO.getNexchangerate());
targetBVO.setNexchangerate(nexchangerate);
// 物料编码
String cmaterialvid = sourceBVO.getCmaterialvid();
// 物料关联字段赋值
if (cmaterialvid != null && !cmaterialvid.isEmpty()) {
setMaterl(targetBVO);
}
// 自定义项赋值
String vbdef1 = sourceBVO.getVbdef1();// 合同编号
Map<String, String> defList = getDefList("zdy-001");
targetBVO.setVbdef1(defList.getOrDefault(vbdef1, ""));
String vbdef5 = sourceBVO.getVbdef5();// 合同销售订单号
defList.clear();
defList = getDefList("BIP-ddh");
targetBVO.setVbdef5(defList.getOrDefault(vbdef5, ""));
targetBVO.setVbdef10(sourceBVO.getVbdef10());// 项目名称
targetBVO.setVbdef13(sourceBVO.getVbdef13());// 国网行项目号
NCCForUAPLogger.debug(String.format(
"cmaterialvid = [%S], vbdef1 = [%S], vbdef5 = [%S], vbdef10 = [%S], vbdef13 = [%S]",
cmaterialvid, targetBVO.getVbdef1(), targetBVO.getVbdef5(), targetBVO.getVbdef10(), targetBVO.getVbdef13()));
}
}
}
}
/**
* 获取自定义项信息
*/
private Map<String, String> getDefList(String code) {
Map<String, String> map = new HashMap<String, String>();
String strWhere = " pk_defdoclist in (select pk_defdoclist from bd_defdoclist where code='" + code + "' and dr=0 ) and dr = 0";
try {
DefdocVO[] defdocVOs = (DefdocVO[]) new HYSuperDMO().queryByWhereClause(DefdocVO.class, strWhere);
if (defdocVOs != null && defdocVOs.length > 0) {
for (DefdocVO defdocVO : defdocVOs) {
map.put(defdocVO.getCode().trim(), defdocVO.getPk_defdoc());
}
}
} catch (DAOException e) {
e.printStackTrace();
}
return map;
}
@Override
public void delete(String[] hids) throws BusinessException {
BillQuery<SaleOrderVO> queryTool = new BillQuery<SaleOrderVO>(SaleOrderVO.class);
SaleOrderVO[] saleOrderVOs = (SaleOrderVO[]) queryTool.query(hids);
if (saleOrderVOs.length == 0) {
ExceptionUtils.wrappBusinessException("根据传入数据未匹配到相关数据");
}
PfServiceScmUtil.processBatch("DELETE", SOBillType.Order.getCode(), saleOrderVOs, null, null);
}
private void fillcustomervidbyoid(SaleOrderVO[] combinBillVOs) {
Set<String> customeridSet = new HashSet<String>();
Map<String, String> customeridMap = new HashMap<String, String>();
for (SaleOrderVO vo : combinBillVOs) {
SaleOrderHVO hvo = vo.getParentVO();
if (!StringUtil.isSEmptyOrNull(hvo.getCcustomerid()) && StringUtil.isSEmptyOrNull(hvo.getCcustomervid())) {
customeridSet.add(hvo.getCcustomerid());
}
if (!StringUtil.isSEmptyOrNull(hvo.getCinvoicecustid()) && StringUtil.isSEmptyOrNull(hvo.getCinvoicecustvid())) {
customeridSet.add(hvo.getCinvoicecustid());
}
if (!StringUtil.isSEmptyOrNull(hvo.getChreceivecustid()) &&
StringUtil.isSEmptyOrNull(hvo.getChreceivecustvid())) {
customeridSet.add(hvo.getChreceivecustid());
}
SaleOrderBVO[] bvos = vo.getChildrenVO();
for (SaleOrderBVO bvo : bvos) {
if (!StringUtil.isSEmptyOrNull(bvo.getCreceivecustid()) &&
StringUtil.isSEmptyOrNull(bvo.getCreceivecustvid())) {
customeridSet.add(bvo.getCreceivecustid());
}
if (!StringUtil.isSEmptyOrNull(bvo.getCvendorid()) && StringUtil.isSEmptyOrNull(bvo.getCvendorvid())) {
customeridSet.add(bvo.getCvendorid());
}
}
}
if (!customeridSet.isEmpty()) {
customeridMap = CustomerPubService.queryCustomerVidsByOids((String[]) CollectionUtils.setToArray(customeridSet));
}
for (SaleOrderVO vo : combinBillVOs) {
SaleOrderHVO hvo = vo.getParentVO();
if (!StringUtil.isSEmptyOrNull(hvo.getCcustomerid()) && StringUtil.isSEmptyOrNull(hvo.getCcustomervid())) {
if (null == customeridMap || customeridMap.size() == 0) {
hvo.setCcustomervid(hvo.getCcustomerid());
} else {
hvo.setCcustomervid((String) customeridMap.get(hvo.getCcustomerid()));
}
}
if (!StringUtil.isSEmptyOrNull(hvo.getCinvoicecustid()) && StringUtil.isSEmptyOrNull(hvo.getCinvoicecustvid())) {
if (null == customeridMap || customeridMap.size() == 0) {
hvo.setCinvoicecustvid(hvo.getCinvoicecustid());
} else {
hvo.setCinvoicecustvid((String) customeridMap.get(hvo.getCinvoicecustid()));
}
}
if (!StringUtil.isSEmptyOrNull(hvo.getChreceivecustid()) &&
StringUtil.isSEmptyOrNull(hvo.getChreceivecustvid())) {
if (null == customeridMap || customeridMap.size() == 0) {
hvo.setChreceivecustvid(hvo.getChreceivecustid());
} else {
hvo.setChreceivecustvid((String) customeridMap.get(hvo.getChreceivecustid()));
}
}
SaleOrderBVO[] bvos = vo.getChildrenVO();
for (SaleOrderBVO bvo : bvos) {
if (!StringUtil.isSEmptyOrNull(bvo.getCreceivecustid()) &&
StringUtil.isSEmptyOrNull(bvo.getCreceivecustvid())) {
if (null == customeridMap || customeridMap.size() == 0) {
bvo.setCreceivecustvid(bvo.getCreceivecustid());
} else {
bvo.setCreceivecustvid((String) customeridMap.get(bvo.getCreceivecustid()));
}
}
if (!StringUtil.isSEmptyOrNull(bvo.getCvendorid()) && StringUtil.isSEmptyOrNull(bvo.getCvendorvid())) {
if (null == customeridMap || customeridMap.size() == 0) {
bvo.setCvendorvid(bvo.getCvendorid());
} else {
bvo.setCvendorvid((String) customeridMap.get(bvo.getCvendorid()));
}
}
}
}
}
@Override
public SaleOrderVO[] sendApprove(String[] hids) throws BusinessException {
SaleOrderVO[] vos = querySaleOrder(hids);
try {
for (SaleOrderVO aggvo : vos) {
SaleOrderHVO parentVO = aggvo.getParentVO();
if (!BillStatus.FREE.equalsValue(parentVO.getFstatusflag())) {
ExceptionUtils.wrappBusinessException("当前销售订单:" + parentVO.getVbillcode() + "不是自由状态,不能提交");
}
}
return (SaleOrderVO[]) PfServiceScmUtil.processBatch("SAVE", SOBillType.Order.getCode(), vos, null, null);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public SaleOrderVO[] unSendApprove(String[] hids) throws BusinessException {
SaleOrderVO[] vos = querySaleOrder(hids);
try {
for (SaleOrderVO aggvo : vos) {
SaleOrderHVO parentVO = aggvo.getParentVO();
if (!BillStatus.AUDITING.equalsValue(parentVO.getFstatusflag())) {
ExceptionUtils.wrappBusinessException("当前销售订单:" + parentVO.getVbillcode() + "不是提交状态,不能收回");
}
}
return (SaleOrderVO[]) PfServiceScmUtil.processBatch("UNSAVE", SOBillType.Order.getCode(), vos, null, null);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public SaleOrderVO[] approve(String[] hids) throws BusinessException {
SaleOrderVO[] vos = querySaleOrder(hids);
try {
for (SaleOrderVO aggvo : vos) {
SaleOrderHVO parentVO = aggvo.getParentVO();
if (!BillStatus.FREE.equalsValue(parentVO.getFstatusflag()) &&
!BillStatus.AUDIT.equalsValue(parentVO.getFstatusflag()) &&
!BillStatus.AUDITING.equalsValue(parentVO.getFstatusflag())) {
ExceptionUtils.wrappBusinessException("当前销售订单:" + parentVO.getVbillcode() + "状态不符合审批条件,不能审批");
}
}
return (SaleOrderVO[]) PfServiceScmUtil.processBatch("APPROVE", SOBillType.Order.getCode(), vos, null, null);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public SaleOrderVO[] unApprove(String[] hids) throws BusinessException {
SaleOrderVO[] vos = querySaleOrder(hids);
try {
for (SaleOrderVO aggvo : vos) {
SaleOrderHVO parentVO = aggvo.getParentVO();
if (!BillStatus.AUDIT.equalsValue(parentVO.getFstatusflag()) &&
!BillStatus.AUDITING.equalsValue(parentVO.getFstatusflag())) {
ExceptionUtils.wrappBusinessException("当前销售订单:" + parentVO.getVbillcode() + "状态不符合弃审条件,不能弃审");
}
}
return (SaleOrderVO[]) PfServiceScmUtil.processBatch("UNAPPROVE", SOBillType.Order.getCode(), vos, null, null);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
private SaleOrderVO[] querySaleOrder(String[] hids) throws BusinessException {
ISaleOrderQueryAPI service = (ISaleOrderQueryAPI) NCLocator.getInstance().lookup(ISaleOrderQueryAPI.class);
SaleOrderVO[] vos = service.queryVOByIDs(hids);
if (ArrayUtils.isEmpty(vos)) {
ExceptionUtils.wrappBusinessException("没有符合条件的数据");
} else {
return vos;
}
return null;
}
/**
* 设置物料的相关字段
*/
private void setMaterl(SaleOrderBVO bVO) {
String cmaterialvid = bVO.getCmaterialvid();
UFDouble nnum = bVO.getNnum();
UFDouble ntaxrate = bVO.getNtaxrate();
try {
String sql = " select a.pk_material,a.pk_source, a.pk_measdoc cunitid,nvl(b.pk_measdoc,a.pk_measdoc) castunitid,nvl(b.measrate,'1/1') measrate " +
"from bd_material a left join bd_materialconvert b on a.pk_material=b.pk_material " +
"where a.code='" + cmaterialvid + "' ";
Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor());
if (map == null) {
throw new BusinessException(cmaterialvid + "物料未查到");
}
NCCForUAPLogger.debug(String.format(
"setMaterl: cqtunitid = [%S], cunitid = [%S], castunitid = [%S]",
map.get("cqtunitid"), map.get("cunitid"), map.get("castunitid")));
bVO.setAttributeValue("castunitid", map.get("castunitid"));
bVO.setAttributeValue("vchangerate", map.get("vchangerate"));
// 重新计算金额
bVO.setAttributeValue("cqtunitid", map.get("cunitid"));
bVO.setAttributeValue("cunitid", map.get("cunitid"));
bVO.setAttributeValue("cmaterialid", map.get("pk_material"));
bVO.setAttributeValue("cmaterialvid", map.get("pk_material"));
UFDouble nqtunitnum = BFPubTools.getUFDouble_NullAsZero(nnum).div(BFPubTools.getUFDouble_NullAsZero(map.get("measrate").toString().split("/")[0]));
bVO.setAttributeValue("nqtunitnum", nqtunitnum);
sql = "select sl.pk_taxcode from bd_taxrate sl inner join bd_taxcode sm on sl.pk_taxcode=sm.pk_taxcode where sl.taxrate=" + ntaxrate + " and sm.pk_group<>'~' " +
"";
String o_pk_project = (String) new BaseDAO().executeQuery(sql, new ColumnProcessor());
// 税码
bVO.setAttributeValue("ctaxcodeid", o_pk_project);
} catch (BusinessException e) {
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setMaterl:" + e.getMessage());
throw new RuntimeException(e);
}
}
/**
* 修订销售订单的时候新增销售订单物料行的数据
*/
private void addBvo(SaleOrderVO[] oldVOs, List<Map<String, Object>> paramList) {
try {
SaleOrderVO[] copyVOs = new SaleOrderVO[oldVOs.length];
for (int i = 0; i < oldVOs.length; i++) {
copyVOs[i] = (SaleOrderVO) oldVOs[i].clone();
}
// vos 中的元素按主键存储在 Map
Map<String, SaleOrderVO> vosMap = new HashMap<>();
for (SaleOrderVO vo : copyVOs) {
vosMap.put(vo.getParentVO().getCsaleorderid(), vo);
}
for (Map<String, Object> objectMap : paramList) {
Map<String, Object> headdata = (Map<String, Object>) objectMap.get("so_saleorder");
String primaryKey = headdata.getOrDefault("csaleorderid", "") + "";
SaleOrderVO vo = vosMap.get(primaryKey);
SaleOrderHVO hvo = vo.getParentVO();
String csaleorderid = hvo.getCsaleorderid();
String ybpk = hvo.getCorigcurrencyid();
SaleOrderBVO[] bvos = vo.getChildrenVO();
List<SaleOrderBVO> bvoList = new ArrayList<>(Arrays.asList(bvos));
SaleOrderBVO oneBvo = vo.getChildrenVO()[0];
List<Object> bodyArr = (List<Object>) objectMap.get("so_saleorder_b");
for (Object body : bodyArr) {
Map<String, Object> bodydata = (Map<String, Object>) body;
if ("add".equals(bodydata.get("status"))) {
String pkOrgV = hvo.getPk_org_v();
String pkOrg = hvo.getPk_org();
String pk_group = AppContext.getInstance().getPkGroup();
// 新数据的实体
// SaleOrderBVO newBvo = (SaleOrderBVO) bvos[0].clone();
SaleOrderBVO newBvo = new SaleOrderBVO();
newBvo.setStatus(VOStatus.NEW);
newBvo.setAttributeValue("pk_group", pk_group);
String cprojectid = bodydata.get("cprojectid") + "";
if (oneBvo != null && oneBvo.getCprojectid() != null && !"".equals(oneBvo.getCprojectid())) {
cprojectid = oneBvo.getCprojectid();
} else {
String sql = " select pk_project from bd_project where project_code='" + cprojectid + "' and nvl(dr,0)=0 ";
cprojectid = (String) new BaseDAO().executeQuery(sql, new ColumnProcessor());
}
newBvo.setAttributeValue("cprojectid", cprojectid);
// newBvo.setAttributeValue("ctrafficorgvid", pkOrg);
// newBvo.setAttributeValue("csendstockorgvid", pkOrg);
// newBvo.setAttributeValue("csendstordocid", pkOrg);
// newBvo.setAttributeValue("csendstockorgid", pkOrg);
// newBvo.setAttributeValue("carorgid", pkOrg);
// newBvo.setAttributeValue("carorgvid", pkOrg);
// newBvo.setAttributeValue("csettleorgid", pkOrg);
// newBvo.setAttributeValue("csettleorgvid", pkOrg);
newBvo.setAttributeValue("ctaxcountryid", "CN");
newBvo.setAttributeValue("crececountryid", "CN");
newBvo.setAttributeValue("csendcountryid", "CN");
newBvo.setAttributeValue("fbuysellflag", 1);
UFDouble nexchangerateBip = getUFDouble_NullAsOne(bodydata.get("nexchangerate"));
newBvo.setNexchangerate(nexchangerateBip);
// 设置物料的关联字段的值
newBvo.setCmaterialvid(bodydata.get("cmaterialvid") + "");
UFDouble ntaxrate = BFPubTools.getUFDouble_NullAsZero(bodydata.get("ntaxrate"));
UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum"));
newBvo.setAttributeValue("ntaxrate", ntaxrate);
newBvo.setAttributeValue("nnum", nnum);
newBvo.setVbdef11(bodydata.getOrDefault("vbdef11", "") + "");
UFDouble norigtaxprice = BFPubTools.getUFDouble_NullAsZero(bodydata.get("norigtaxprice"));
newBvo.setAttributeValue("norigtaxprice", norigtaxprice);
UFDouble norigprice = BFPubTools.getUFDouble_NullAsZero(bodydata.get("norigprice"));
newBvo.setAttributeValue("norigprice", norigprice);
setMaterl(newBvo);
newBvo.setCsaleorderbid(null);
newBvo.setCcurrencyid(ybpk);
String zbbz = newBvo.getCcurrencyid();
newBvo.setFtaxtypeflag(1);
// 折本汇率
UFDouble nexchangerate = newBvo.getNexchangerate();
// 含税单价
UFDouble nqtorigtaxprice = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nqtorigtaxprice"));
newBvo.setAttributeValue("nqtorigtaxprice", nqtorigtaxprice);
// 无税单价
UFDouble nqtorigprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
// 价税合计
UFDouble norigtaxmny = nqtorigtaxprice.multiply(newBvo.getNqtunitnum()).setScale(2, 4);
newBvo.setNorigtaxmny(norigtaxmny);
// 无税金额
UFDouble norigmny = nqtorigprice.multiply(newBvo.getNqtunitnum());
newBvo.setNorigmny(nc.itf.fi.pub.Currency.getFormaUfValue(ybpk, norigmny));
// 税额
newBvo.setNqtorigprice(nqtorigprice.setScale(4, 4));
// 无税本币金额单价
UFDouble taxspric = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
nqtorigprice = nqtorigprice.setScale(4, 4);
// nqtorigtaxnetprc--含税净价
newBvo.setNqtorigtaxnetprc(nqtorigtaxprice);
//,nqtorignetprice --无税净价
newBvo.setNqtorignetprice(nqtorigprice);
String Vqtunitrate = newBvo.getVqtunitrate();
UFDouble dVqtunitrate = UFDouble.ONE_DBL;
if (Vqtunitrate != null) {
dVqtunitrate = BFPubTools.getUFDouble_NullAsZero(Vqtunitrate.split("/")[0]);
}
//,norigtaxprice --主含税单价
UFDouble wsje = taxspric.multiply(nexchangerate).multiply(newBvo.getNqtunitnum());
if (ybpk.equals(zbbz) && BFPubTools.getString_TrimAsNull(newBvo.getCqtunitid()).equals(BFPubTools.getString_TrimAsNull(newBvo.getCastunitid()))) {
wsje = taxspric.multiply(nexchangerate).multiply(newBvo.getNqtunitnum());
}
wsje = nc.itf.fi.pub.Currency.getFormaUfValue(zbbz, wsje);
// 本币无税金额
newBvo.setNorigtaxprice(nqtorigtaxprice.div(dVqtunitrate).setScale(4, 4));
//,norigprice --主无税单价
newBvo.setNorigprice(nqtorigprice.div(dVqtunitrate).setScale(4, 4));
//,norigtaxnetprice --主含税净价
newBvo.setNorigtaxnetprice(newBvo.getNorigtaxprice());
//,norignetprice --主无税净价
newBvo.setNorignetprice(newBvo.getNorigprice());
// ncaltaxmny --计税金额
// nqttaxprice --本币含税单价
newBvo.setNqttaxprice(nqtorigtaxprice.multiply(nexchangerate));
//nqtprice --本币无税单价
UFDouble bbwsd = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100))).multiply(nexchangerate);
newBvo.setNqtprice(bbwsd.setScale(4, 4));
// nqttaxnetprice --本币含税净价
newBvo.setNqttaxnetprice(nqtorigtaxprice.multiply(nexchangerate));
//nqtnetprice --本币无税净价
UFDouble Nqtnetprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100))).multiply(nexchangerate);
newBvo.setNqtnetprice(Nqtnetprice.setScale(4, 4));
//ntaxprice --主本币含税单价 nprice --主本币无税单价
newBvo.setNtaxprice(nqtorigtaxprice.div(dVqtunitrate).multiply(nexchangerate).setScale(4, 4));
UFDouble Nprice = nqtorigtaxprice.div(dVqtunitrate).div(UFDouble.ONE_DBL.add(ntaxrate.div(100))).multiply(nexchangerate);
newBvo.setNprice(Nprice.setScale(4, 4));
//ntaxnetprice --主本币含税净价
newBvo.setNtaxnetprice(nqtorigtaxprice.div(dVqtunitrate).multiply(nexchangerate).setScale(4, 4));
//nnetprice --主本币无税净价
UFDouble nnetprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100))).div(dVqtunitrate);
nnetprice = nnetprice.multiply(nexchangerate).setScale(4, 4);
newBvo.setNnetprice(nnetprice);
// nmny --本币无税金额
// ntaxmny-- 本币价税合计
newBvo.setNmny(Currency.getFormaUfValue(zbbz, norigmny.multiply(nexchangerate)));
newBvo.setNtaxmny(nqtorigtaxprice.multiply(nexchangerate).multiply(newBvo.getNqtunitnum()).setScale(2, 4));
newBvo.setNcaltaxmny(wsje);
UFDouble ntax = norigtaxmny.multiply(nexchangerate).sub(wsje);
newBvo.setNtax(ntax.setScale(2, 4));
newBvo.setCrowno(bodydata.get("crowno") + "");
// 是否赠品
String blargessflag = bodydata.getOrDefault("blargessflag", "N") + "";
newBvo.setBlargessflag(UFBoolean.valueOf(blargessflag));
bvoList.add(newBvo);
}
}
SaleOrderBVO[] array = bvoList.toArray(new SaleOrderBVO[0]);
vo.setChildrenVO(array);
}
// 填充默认值
new SaleOrderSaveFillValue().setDefValue(copyVOs);
Map<String, List<SaleOrderBVO>> listMap = new HashMap<>();
for (SaleOrderVO copyVO : copyVOs) {
List<SaleOrderBVO> newBvoList = new ArrayList<>();
for (SaleOrderBVO saleOrderBVO : copyVO.getChildrenVO()) {
if (VOStatus.NEW == saleOrderBVO.getStatus()) {
SaleOrderBVO newBvo = (SaleOrderBVO) saleOrderBVO.clone();
newBvoList.add(newBvo);
}
}
listMap.put(copyVO.getParentVO().getCsaleorderid(), newBvoList);
}
if (!listMap.isEmpty()) {
for (SaleOrderVO oldVO : oldVOs) {
String csaleorderid = oldVO.getParentVO().getCsaleorderid();
SaleOrderBVO oneBvo = oldVO.getChildrenVO()[0];
// 折本汇率
UFDouble nexchangerate = oneBvo.getNexchangerate();
nexchangerate = getUFDouble_NullAsOne(nexchangerate);
List<SaleOrderBVO> newBvoList = listMap.get(csaleorderid);
if (newBvoList != null && !newBvoList.isEmpty()) {
// 上边填充默认值的时候取了系统的默认汇率需要用BIP传的
for (SaleOrderBVO saleOrderBVO : newBvoList) {
saleOrderBVO.setNexchangerate(nexchangerate);
}
SaleOrderBVO[] bvos = oldVO.getChildrenVO();
List<SaleOrderBVO> bvoList = new ArrayList<>(Arrays.asList(bvos));
// 添加新增行
bvoList.addAll(newBvoList);
SaleOrderBVO[] array = bvoList.toArray(new SaleOrderBVO[0]);
oldVO.setChildrenVO(array);
}
}
}
/*for (SaleOrderVO combinBillVO : copyVOs) {
for (SaleOrderBVO saleOrderBVO : combinBillVO.getChildrenVO()) {
// 将实体对象转换为JSON字符串
String jsonString = JSON.toJSONString(saleOrderBVO);
NCCForUAPLogger.debug("jsonString:" + jsonString);
}
}*/
} catch (Exception e) {
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-addBvo:" + e.getMessage());
throw new RuntimeException(e);
}
}
private UFDouble getUFDouble_NullAsOne(Object value) {
if ((value == null) || (value.toString().trim().equals("")) || (value.toString().trim().equals("~")))
return UFDouble.ONE_DBL;
if ((value instanceof UFDouble))
return (UFDouble) value;
if ((value instanceof BigDecimal)) {
return new UFDouble((BigDecimal) value);
}
return new UFDouble(value.toString().trim());
}
}
/* Location: D:\home_taikaijt\bipgj\home\yonyou\YonBIP2312\modules\so\META-INF\lib\so_openapi.jar!/nccloud/api/impl/so/m30/APISaleOrderMaitainImpl.class
* Java compiler version: 17 (61.0)
* JD-Core Version: 1.0.7
*/

View File

@ -0,0 +1,471 @@
package nccloud.openapi.so.m30;
import nc.itf.bd.defdoc.IDefdocService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import nc.jdbc.framework.processor.*;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pubapp.AppContext;
import nc.vo.so.m30.entity.SaleOrderVO;
import nc.ws.opm.pub.utils.result.APIErrCodeEnum;
import nccloud.api.rest.utils.NCCRestUtils;
import nccloud.api.rest.utils.ResultMessageUtil;
import nccloud.api.so.m30.IAPISaleOrderMaitain;
import nccloud.api.so.m30.IAPISaleOrderQuery;
import nccloud.openapi.scmpub.pub.NCCPubRestResource;
import nccloud.openapi.scmpub.util.CallReturnBuildUtil;
import nc.bs.dao.BaseDAO;
import nc.bd.itf.tools.BFPubTools;
import org.json.JSONString;
import nc.vo.pim.project.ProjectHeadVO;
import nc.itf.pim.project.prv.IProject;
/**
* 销售订单接口适配2005代码
* zhangxinah
*/
@Path("so/saleorder")
public class SaleOrderResource extends NCCPubRestResource {
private static String BODYTABLE = "so_saleorder_b";
private static String HEADTABLE = "so_saleorder";
public BaseDAO dao;
public BaseDAO getDao() {
if (dao == null) {
dao = new BaseDAO();
}
return dao;
}
@POST
@Path("operation/save")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString save(Map<String, Object> paramMap) {
List<Map<String, Object>> paramList = (List) paramMap.get("array");
return saveold(paramList);
}
public JSONString saveold(List<Map<String, Object>> paramList) {
try {
for (Map<String, Object> map : paramList) {
if (!map.containsKey(HEADTABLE) || !map.containsKey(BODYTABLE)) {
return ResultMessageUtil.exceptionToJSON("传入参数不能为空", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
}
IAPISaleOrderMaitain service = (IAPISaleOrderMaitain) NCLocator.getInstance()
.lookup(IAPISaleOrderMaitain.class);
SaleOrderVO[] results = service.save(paramList);
return ResultMessageUtil.toJSON(results, "销售订单新增保存成功");
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
/**
*
* @Description: 在2312基础上适配2005代码
* @date: 2025年3月19日 18点11分
* @version NCC2312
*/
@SuppressWarnings("unchecked")
@POST
@Path("save")
@Consumes("application/json")
@Produces("application/json")
public JSONString save(List<Map<String, Object>> paramList) {
InvocationInfoProxy.getInstance().setGroupId("0001A110000000000677");
try {
for (Map<String, Object> map : paramList) {
if (!map.containsKey(HEADTABLE) || !map.containsKey(BODYTABLE)) {
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildHeadBodyResult());
}
// 设置集团
Map<String, Object> headdata = (Map<String, Object>) map.get(HEADTABLE);
headdata.put("pk_org", headdata.get("pk_org_v"));
headdata.put("cdeptid", headdata.get("cdeptvid"));
headdata.put("fstatusflag", 1);
headdata.put("dmakedate", headdata.get("dbilldate"));
headdata.put("dmakedate", headdata.get("dbilldate"));
headdata.put("cinvoicecustid", headdata.get("ccustomerid"));
String pk_group = AppContext.getInstance().getPkGroup();
headdata.put("pk_group", pk_group);
List<Object> bodyArr = (List<Object>) map.get(BODYTABLE);
for (Object body : bodyArr) {
Map<String, Object> bodydata = (Map<String, Object>) body;
bodydata.put("pk_group", pk_group);
bodydata.put("cprojectid", headdata.get("vdef6"));
bodydata.put("ctrafficorgvid", headdata.get("pk_org_v"));
bodydata.put("csendstockorgvid", headdata.get("pk_org_v"));
bodydata.put("csendstordocid", headdata.get("pk_org_v"));
bodydata.put("csendstockorgid", headdata.get("pk_org_v"));
bodydata.put("carorgid", headdata.get("pk_org_v"));
bodydata.put("carorgvid", headdata.get("pk_org_v"));
bodydata.put("csettleorgid", headdata.get("pk_org_v"));
bodydata.put("csettleorgvid", headdata.get("pk_org_v"));
bodydata.put("ctaxcountryid", "CN");
bodydata.put("crececountryid", "CN");
bodydata.put("csendcountryid", "CN");
bodydata.put("fbuysellflag", 1);
// 根据物料编码查询物料信息
setMaterl(bodydata);
}
}
// 新增自定义档案
SaleOrderVO[] salevos = OpenAPIParaUtil.changeVO(paramList, HEADTABLE, BODYTABLE);
genDef(salevos);
for (Map<String, Object> map : paramList) {
BaseDAO baseDAO = new BaseDAO();
Map<String, Object> headdata = (Map<String, Object>) map.get(HEADTABLE);
List<Object> bodyArr = (List<Object>) map.get(BODYTABLE);
for (Object body : bodyArr) {
Map<String, Object> bodydata = (Map<String, Object>) body;
String sql = " select pk_project from bd_project where project_code='" + headdata.get("vdef6")
+ "' and nvl(dr,0)=0 ";
String o_pk_project = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
bodydata.put("cprojectid", o_pk_project);
}
}
// 调用接口保存
IAPISaleOrderMaitain service = NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class);
SaleOrderVO[] results = service.save(paramList);
// 包装返回信息
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildSuccessResult(results, "销售订单保存成功"));
} catch (Exception e) {
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildFailResult(null, "销售单保存异常:" + e.getMessage()));
}
}
private void genDef(SaleOrderVO[] salevos) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
ArrayList<String> arrhth = new ArrayList<String>();
ArrayList<String> arrxmh = new ArrayList<String>();
ArrayList<String> arrxsddh = new ArrayList<String>();
String sql = " select pk_org,pk_vid from org_orgs where org_orgs.code='" + salevos[0].getParentVO().getPk_org()
+ "' and nvl(dr,0)=0 and isbusinessunit='Y' ";
Map map = (Map) baseDAO.executeQuery(sql, new MapProcessor());
if (map == null) {
throw new BusinessException("采购组织档案未查到");
}
String o = (String) map.get("pk_org");
String cprocode = salevos[0].getChildrenVO()[0].getCprojectid();
String cproname = salevos[0].getChildrenVO()[0].getVbdef10();
if (!BFPubTools.getString_TrimAsNull(cprocode).equals("")) {
sql = " select pk_project from bd_project where project_code='" + cprocode + "' and pk_duty_org='" + o
+ "' and nvl(dr,0)=0 ";
String o_pk_project = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
if (o_pk_project == null) {
// 新增项目档案
createPro(cprocode, cproname, map);
}
}
for (int i = 0; i < salevos.length; i++) {
String vdef6 = BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef6());
if (vdef6 != "" && !arrhth.contains(vdef6)) {
arrhth.add(vdef6);
}
String vdef2 = BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef2());
if (vdef2 != "" && !arrxmh.contains(vdef2)) {
arrxmh.add(vdef2);
}
String vdef13 = BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef13());
if (vdef13 != "" && !arrxsddh.contains(vdef13)) {
arrxsddh.add(vdef13);
}
}
if (arrhth.size() > 0) {
sql = " select code from bd_defdoc where pk_defdoclist in(select pk_defdoclist from bd_defdoclist where code='zdy-001') and pk_org='"
+ o + "' and ";
sql += BFPubTools.getInSqlWithOutAnd("code", arrhth, 0, arrhth.size());
ArrayList<String> obj_arrhth = (ArrayList<String>) baseDAO.executeQuery(sql, new ColumnListProcessor());
if (obj_arrhth != null && obj_arrhth.size() > 0) {
arrhth.removeAll(obj_arrhth);
}
}
// 组装销售订单数据
if (arrhth.size() > 0) {
NCLocator.getInstance().lookup(IDefdocService.class).insertDefdocs(o,
createDefVO(arrhth, "zdy-001", o.toString()));
}
if (arrxmh.size() > 0) {
sql = " select code from bd_defdoc where pk_defdoclist in(select pk_defdoclist from bd_defdoclist where code='BQxmh') and pk_org='"
+ o + "' and ";
sql += BFPubTools.getInSqlWithOutAnd("code", arrxmh, 0, arrxmh.size());
ArrayList<String> obj_arrhth = (ArrayList<String>) baseDAO.executeQuery(sql, new ColumnListProcessor());
if (obj_arrhth != null && obj_arrhth.size() > 0) {
arrxmh.removeAll(obj_arrhth);
}
}
if (arrxmh.size() > 0) {
NCLocator.getInstance().lookup(IDefdocService.class).insertDefdocs(o,
createDefVO(arrxmh, "BQxmh", o.toString()));
}
if (arrxsddh.size() > 0) {
sql = " select code from bd_defdoc where pk_defdoclist in( select pk_defdoclist from bd_defdoclist where code='BIP-ddh') and pk_org='"
+ o + "' and ";
sql += BFPubTools.getInSqlWithOutAnd("code", arrxsddh, 0, arrxsddh.size());
ArrayList<String> obj_arrhth = (ArrayList<String>) baseDAO.executeQuery(sql, new ColumnListProcessor());
if (obj_arrhth != null && obj_arrhth.size() > 0) {
arrxsddh.removeAll(obj_arrhth);
}
}
if (arrxsddh.size() > 0) {
NCLocator.getInstance().lookup(IDefdocService.class).insertDefdocs(o,
createDefVO(arrxsddh, "BIP-ddh", o.toString()));
}
}
private void createPro(String cprocode, String cproname, Map map) throws BusinessException {
String pk_org = (String) map.get("pk_org");
String pk_org_v = (String) map.get("pk_vid");
ProjectHeadVO hvo = new ProjectHeadVO();
hvo.setProject_code(cprocode);
hvo.setProject_name(cproname);
hvo.setPk_org(pk_org);
hvo.setPk_org_v(pk_org_v);
hvo.setBill_type("4D10");
hvo.setCreationtime(new UFDateTime());
hvo.setCreator(InvocationInfoProxy.getInstance().getUserId());
hvo.setPk_group(InvocationInfoProxy.getInstance().getGroupId());
hvo.setDr(0);
hvo.setPk_duty_org(pk_org);
hvo.setTransi_type("4D10-01");
hvo.setPk_eps("1001A110000000004K64");
hvo.setPk_duty_dept_v(pk_org_v);
hvo.setEnablestate(2);
NCLocator.getInstance().lookup(IProject.class).insertProject(hvo);
}
private DefdocVO[] createDefVO(List<String> newhth, String defdoclistcode, String pk_org) throws BusinessException {
String sql = " select pk_defdoclist from bd_defdoclist where code='" + defdoclistcode + "' ";
String o = (String) getDao().executeQuery(sql, new ColumnProcessor());
ArrayList<DefdocVO> arrvo = new ArrayList<DefdocVO>();
for (int i = 0; i < newhth.size(); i++) {
DefdocVO vo = new DefdocVO();
vo.setEnablestate(2);
vo.setPk_defdoclist(o);
vo.setPk_org(pk_org);
vo.setCode(newhth.get(i));
vo.setName(newhth.get(i));
vo.setDataoriginflag(0);
vo.setDr(0);
vo.setPk_group(InvocationInfoProxy.getInstance().getGroupId());
vo.setCreator(InvocationInfoProxy.getInstance().getUserId());
vo.setCreationtime(new UFDateTime());
arrvo.add(vo);
}
return arrvo.toArray(new DefdocVO[arrvo.size()]);
}
private void setMaterl(Map<String, Object> bodydata) throws BusinessException {
String sql = " select a.pk_material,a.pk_source, a.pk_measdoc cunitid,nvl(b.pk_measdoc,a.pk_measdoc) castunitid,nvl(b.measrate,'1/1') measrate from bd_material a left join bd_materialconvert b on a.pk_material=b.pk_material where a.code='"
+ bodydata.get("cmaterialvid") + "' ";
Map map = (Map) getDao().executeQuery(sql, new MapProcessor());
if (map == null) {
throw new BusinessException(bodydata.get("cmaterialvid") + "物料未查到");
}
bodydata.put("castunitid", map.get("castunitid"));
bodydata.put("vchangerate", map.get("measrate"));
// 重新计算金额
bodydata.put("cqtunitid", map.get("castunitid"));
bodydata.put("cunitid", map.get("cunitid"));
bodydata.put("cmaterialid", map.get("pk_material"));
bodydata.put("cmaterialvid", map.get("pk_source"));
bodydata.put("nqtunitnum", BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum"))
.div(BFPubTools.getUFDouble_NullAsZero(map.get("measrate").toString().split("/")[0])));
sql = "select sl.pk_taxcode from bd_taxrate sl inner join bd_taxcode sm on sl.pk_taxcode=sm.pk_taxcode where sl.taxrate="
+ bodydata.get("ntaxrate") + " and sm.pk_group<>'~' " + "";
String o_pk_project = (String) getDao().executeQuery(sql, new ColumnProcessor());
bodydata.put("ctaxcodeid", o_pk_project);
}
@POST
@Path("update")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString update(Map<String, Object> paramMap) {
try {
if (paramMap == null || !paramMap.containsKey(HEADTABLE) || !paramMap.containsKey(BODYTABLE)) {
return ResultMessageUtil.exceptionToJSON("传入参数不能为空", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
List<Map<String, Object>> paramList = new ArrayList<Map<String, Object>>();
paramList.add(paramMap);
IAPISaleOrderMaitain service = (IAPISaleOrderMaitain) NCLocator.getInstance()
.lookup(IAPISaleOrderMaitain.class);
SaleOrderVO[] results = service.update(paramList);
return ResultMessageUtil.toJSON(results, "销售订单修改成功");
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
@POST
@Path("operation/delete")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString delete(Map<String, Object> paramMap) {
ArrayList<String> paramArray = (ArrayList) paramMap.get("csaleorderid");
String[] hids = (String[]) paramArray.toArray(new String[0]);
return delete(hids);
}
@POST
@Path("delete")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString delete(String[] hids) {
if (hids == null || hids.length == 0) {
return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
((IAPISaleOrderMaitain) NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class)).delete(hids);
String[] arr = new String[0];
return ResultMessageUtil.toJSON(arr, "销售订单删除成功");
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(new BusinessException("删除销售订单出现异常", e));
}
}
@POST
@Path("querybyscheme")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString queryByScheme(Map<String, Object> paramMap) {
SaleOrderVO[] resultVOs = null;
try {
resultVOs = ((IAPISaleOrderQuery) NCLocator.getInstance().lookup(IAPISaleOrderQuery.class))
.queryByScheme(paramMap);
return ResultMessageUtil.toJSON(resultVOs, "查询销售订单成功");
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
@POST
@Path("sendapprove")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString sendApprove(Map<String, Object> paramMap) {
SaleOrderVO[] sendApprove = null;
ArrayList<String> paramArray = (ArrayList) paramMap.get("csaleorderid");
String[] hids = (String[]) paramArray.toArray(new String[0]);
if (hids == null || hids.length == 0) {
return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
sendApprove = ((IAPISaleOrderMaitain) NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class))
.sendApprove(hids);
return ResultMessageUtil.toJSON(sendApprove, "销售订单提交成功");
} catch (BusinessException e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
@POST
@Path("unsend")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString unSendApprove(Map<String, Object> paramMap) {
SaleOrderVO[] unSend = null;
ArrayList<String> paramArray = (ArrayList) paramMap.get("csaleorderid");
String[] hids = (String[]) paramArray.toArray(new String[0]);
if (hids == null || hids.length == 0) {
return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
unSend = ((IAPISaleOrderMaitain) NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class))
.unSendApprove(hids);
return ResultMessageUtil.toJSON(unSend, "销售订单收回成功");
} catch (BusinessException e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
@POST
@Path("approve")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString approve(Map<String, Object> paramMap) {
SaleOrderVO[] aprove = null;
ArrayList<String> paramArray = (ArrayList) paramMap.get("csaleorderid");
String[] hids = (String[]) paramArray.toArray(new String[0]);
if (hids == null || hids.length == 0) {
return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
aprove = ((IAPISaleOrderMaitain) NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class)).approve(hids);
return ResultMessageUtil.toJSON(aprove, "销售订单审批成功");
} catch (BusinessException e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
@POST
@Path("unapprove")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public JSONString unApprove(Map<String, Object> paramMap) {
SaleOrderVO[] unaprove = null;
ArrayList<String> paramArray = (ArrayList) paramMap.get("csaleorderid");
String[] hids = (String[]) paramArray.toArray(new String[0]);
if (hids == null || hids.length == 0) {
return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
unaprove = ((IAPISaleOrderMaitain) NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class))
.unApprove(hids);
return ResultMessageUtil.toJSON(unaprove, "销售订单取消审批成功");
} catch (BusinessException e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
}