销售订单生单及销售订单修订
This commit is contained in:
parent
839021a256
commit
5a11c77417
|
|
@ -1,5 +1,6 @@
|
||||||
package nccloud.api.impl.so.m30;
|
package nccloud.api.impl.so.m30;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import nc.bd.itf.tools.BFPubTools;
|
import nc.bd.itf.tools.BFPubTools;
|
||||||
import nc.bs.dao.BaseDAO;
|
import nc.bs.dao.BaseDAO;
|
||||||
import nc.bs.framework.common.NCLocator;
|
import nc.bs.framework.common.NCLocator;
|
||||||
|
|
@ -9,6 +10,7 @@ import nc.itf.so.m30.self.ISaleOrderMaintain;
|
||||||
import nc.itf.so.m30.self.ISaleOrderScriptMaintain;
|
import nc.itf.so.m30.self.ISaleOrderScriptMaintain;
|
||||||
import nc.itf.uap.pf.IPFBusiAction;
|
import nc.itf.uap.pf.IPFBusiAction;
|
||||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||||
|
import nc.jdbc.framework.processor.MapProcessor;
|
||||||
import nc.pubitf.so.m30.api.ISaleOrderQueryAPI;
|
import nc.pubitf.so.m30.api.ISaleOrderQueryAPI;
|
||||||
import nc.vo.ml.NCLangRes4VoTransl;
|
import nc.vo.ml.NCLangRes4VoTransl;
|
||||||
import nc.vo.pub.BusinessException;
|
import nc.vo.pub.BusinessException;
|
||||||
|
|
@ -16,9 +18,11 @@ import nc.vo.pub.VOStatus;
|
||||||
import nc.vo.pub.lang.UFBoolean;
|
import nc.vo.pub.lang.UFBoolean;
|
||||||
import nc.vo.pub.lang.UFDate;
|
import nc.vo.pub.lang.UFDate;
|
||||||
import nc.vo.pub.lang.UFDouble;
|
import nc.vo.pub.lang.UFDouble;
|
||||||
|
import nc.vo.pubapp.AppContext;
|
||||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
import nc.vo.pubapp.pflow.PfUserObject;
|
import nc.vo.pubapp.pflow.PfUserObject;
|
||||||
import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule;
|
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.res.billtype.SOBillType;
|
||||||
import nc.vo.scmpub.util.StringUtil;
|
import nc.vo.scmpub.util.StringUtil;
|
||||||
import nc.vo.so.m30.entity.SaleOrderBVO;
|
import nc.vo.so.m30.entity.SaleOrderBVO;
|
||||||
|
|
@ -33,17 +37,14 @@ import nc.vo.so.pub.keyvalue.VOKeyValue;
|
||||||
import nc.vo.so.pub.util.AggVOUtil;
|
import nc.vo.so.pub.util.AggVOUtil;
|
||||||
import nc.vo.so.pub.util.SOCurrencyUtil;
|
import nc.vo.so.pub.util.SOCurrencyUtil;
|
||||||
import nccloud.api.impl.so.m30.check.SaleOrderValidator;
|
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.SaleOrderSaveFillValue;
|
||||||
import nccloud.api.impl.so.m30.fill.SetUpdateData;
|
|
||||||
import nccloud.api.so.m30.IAPISaleOrderMaitain;
|
import nccloud.api.so.m30.IAPISaleOrderMaitain;
|
||||||
import nccloud.baseapp.core.log.NCCForUAPLogger;
|
import nccloud.baseapp.core.log.NCCForUAPLogger;
|
||||||
import nccloud.dto.scmpub.pflow.SCMCloudPFlowContext;
|
import nccloud.dto.scmpub.pflow.SCMCloudPFlowContext;
|
||||||
import nccloud.pubitf.scmpub.commit.service.IBatchRunScriptService;
|
import nccloud.pubitf.scmpub.commit.service.IBatchRunScriptService;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 销售订单维护实现类
|
* @Description: 销售订单维护实现类
|
||||||
|
|
@ -51,7 +52,7 @@ import java.util.Set;
|
||||||
* @date: 2019-10-23 下午4:57:49
|
* @date: 2019-10-23 下午4:57:49
|
||||||
* @Copyright:
|
* @Copyright:
|
||||||
*/
|
*/
|
||||||
public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SaleOrderVO[] save(SaleOrderVO[] vos) throws BusinessException {
|
public SaleOrderVO[] save(SaleOrderVO[] vos) throws BusinessException {
|
||||||
|
|
@ -81,9 +82,9 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
for (SaleOrderBVO bvo : bvos) {
|
for (SaleOrderBVO bvo : bvos) {
|
||||||
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
||||||
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
||||||
bvo.setNexchangerate(exchangerate);
|
// bvo.setNexchangerate(exchangerate);
|
||||||
} else {
|
} else {
|
||||||
bvo.setNexchangerate(UFDouble.ONE_DBL);
|
// bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -141,28 +142,28 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
String zbbz = childrenVO.getCcurrencyid();
|
String zbbz = childrenVO.getCcurrencyid();
|
||||||
|
|
||||||
childrenVO.setFtaxtypeflag(1);
|
childrenVO.setFtaxtypeflag(1);
|
||||||
//得到税率
|
// 得到税率
|
||||||
UFDouble ntaxrate = BFPubTools.getUFDouble_NullAsZero(childrenVO.getNtaxrate());
|
UFDouble ntaxrate = BFPubTools.getUFDouble_NullAsZero(childrenVO.getNtaxrate());
|
||||||
|
|
||||||
// 折本汇率
|
// 折本汇率
|
||||||
UFDouble nexchangerate = childrenVO.getNexchangerate();
|
UFDouble nexchangerate = childrenVO.getNexchangerate();
|
||||||
//含税单价
|
// 含税单价
|
||||||
UFDouble nqtorigtaxprice = childrenVO.getNqtorigtaxprice();
|
UFDouble nqtorigtaxprice = childrenVO.getNqtorigtaxprice();
|
||||||
//无税单价
|
// 无税单价
|
||||||
UFDouble nqtorigprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
|
UFDouble nqtorigprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
|
||||||
// 价税合计
|
// 价税合计
|
||||||
// UFDouble norigtaxmny=nqtorigtaxprice.multiply(childrenVO.getNqtunitnum());
|
// UFDouble norigtaxmny=nqtorigtaxprice.multiply(childrenVO.getNqtunitnum());
|
||||||
UFDouble norigtaxmny = nqtorigtaxprice.multiply(childrenVO.getNqtunitnum()).setScale(2, 4);
|
UFDouble norigtaxmny = nqtorigtaxprice.multiply(childrenVO.getNqtunitnum()).setScale(2, 4);
|
||||||
childrenVO.setNorigtaxmny(norigtaxmny);
|
childrenVO.setNorigtaxmny(norigtaxmny);
|
||||||
//无税金额
|
// 无税金额
|
||||||
UFDouble norigmny = nqtorigprice.multiply(childrenVO.getNqtunitnum());
|
UFDouble norigmny = nqtorigprice.multiply(childrenVO.getNqtunitnum());
|
||||||
|
|
||||||
childrenVO.setNorigmny(Currency.getFormaUfValue(ybpk, norigmny));
|
childrenVO.setNorigmny(Currency.getFormaUfValue(ybpk, norigmny));
|
||||||
//税额
|
// 税额
|
||||||
childrenVO.setNqtorigprice(nqtorigprice.setScale(4, 4));
|
childrenVO.setNqtorigprice(nqtorigprice.setScale(4, 4));
|
||||||
|
|
||||||
|
|
||||||
//无税本币金额单价
|
// 无税本币金额单价
|
||||||
UFDouble taxspric = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
|
UFDouble taxspric = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -171,7 +172,7 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
|
|
||||||
|
|
||||||
nqtorigprice = nqtorigprice.setScale(4, 4);
|
nqtorigprice = nqtorigprice.setScale(4, 4);
|
||||||
//nqtorigtaxnetprc--含税净价
|
// nqtorigtaxnetprc--含税净价
|
||||||
childrenVO.setNqtorigtaxnetprc(nqtorigtaxprice);
|
childrenVO.setNqtorigtaxnetprc(nqtorigtaxprice);
|
||||||
//,nqtorignetprice --无税净价
|
//,nqtorignetprice --无税净价
|
||||||
childrenVO.setNqtorignetprice(nqtorigprice);
|
childrenVO.setNqtorignetprice(nqtorigprice);
|
||||||
|
|
@ -189,7 +190,7 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
|
|
||||||
|
|
||||||
wsje = Currency.getFormaUfValue(zbbz, wsje);
|
wsje = Currency.getFormaUfValue(zbbz, wsje);
|
||||||
//本币无税金额
|
// 本币无税金额
|
||||||
childrenVO.setNorigtaxprice(nqtorigtaxprice.div(dVqtunitrate).setScale(4, 4));
|
childrenVO.setNorigtaxprice(nqtorigtaxprice.div(dVqtunitrate).setScale(4, 4));
|
||||||
//,norigprice --主无税单价
|
//,norigprice --主无税单价
|
||||||
childrenVO.setNorigprice(nqtorigprice.div(dVqtunitrate).setScale(4, 4));
|
childrenVO.setNorigprice(nqtorigprice.div(dVqtunitrate).setScale(4, 4));
|
||||||
|
|
@ -234,8 +235,21 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SaleOrderVO[] update(SaleOrderVO[] vos) throws BusinessException {
|
public SaleOrderVO[] update(SaleOrderVO[] vos, List<Map<String, Object>> paramList) throws BusinessException {
|
||||||
|
for (SaleOrderVO vo : vos) {
|
||||||
|
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]", vo.getParentVO().getCsaleorderid());
|
||||||
|
Integer num = (Integer) new BaseDAO().executeQuery(countSql, new ColumnProcessor());
|
||||||
|
if (num > 0) {
|
||||||
|
// fopposeflag 对冲标记 0=正常 1=已被对冲 2=对冲生成
|
||||||
|
ExceptionUtils.wrappBusinessException("下游存在未红冲完成的销售发票");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 编码转id
|
||||||
|
setOtherId(vos);
|
||||||
// 获取参数vo的id
|
// 获取参数vo的id
|
||||||
Map<String, Set<String>> ids = this.getIds(vos);
|
Map<String, Set<String>> ids = this.getIds(vos);
|
||||||
if (ids.keySet() == null || ids.values() == null
|
if (ids.keySet() == null || ids.values() == null
|
||||||
|
|
@ -247,24 +261,57 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
ISaleOrderMaintain service =
|
ISaleOrderMaintain service =
|
||||||
NCLocator.getInstance().lookup(ISaleOrderMaintain.class);
|
NCLocator.getInstance().lookup(ISaleOrderMaintain.class);
|
||||||
SaleOrderVO[] originVos = service.querySaleorder(hids);
|
SaleOrderVO[] originVos = service.querySaleorder(hids);
|
||||||
SetUpdateData setData = new SetUpdateData();
|
// SetUpdateData setData = new SetUpdateData();
|
||||||
setData.setData(vos, originVos);
|
// setData.setData(vos, originVos);
|
||||||
setOtherId(vos);
|
|
||||||
// 有值不覆盖
|
// 有值不覆盖
|
||||||
SaleOrderVO[] combinBillVOs =
|
// SaleOrderVO[] combinBillVOs =
|
||||||
(SaleOrderVO[]) AggVOUtil.combinBillVO(vos, originVos);
|
// (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) {
|
for (SaleOrderVO vo : vos) {
|
||||||
vo.getParentVO().setStatus(VOStatus.UPDATED);
|
vosMap.put(vo.getParentVO().getCsaleorderid(), vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 遍历 combinBillVOs 并更新字段
|
||||||
|
for (SaleOrderVO vo : combinBillVOs) {
|
||||||
|
SaleOrderHVO hvo = vo.getParentVO();
|
||||||
|
String primaryKey = hvo.getCsaleorderid();
|
||||||
|
SaleOrderVO bipVo = vosMap.get(primaryKey);
|
||||||
|
// 创建一个Set来存储vos中多的csaleorderbid
|
||||||
|
Set<String> delBids = findOtherBids(bipVo.getChildrenVO(), vo.getChildrenVO());
|
||||||
|
// 设置单据状态
|
||||||
|
hvo.setStatus(VOStatus.UPDATED);
|
||||||
|
// 比较combinBillVOs中的BVO和vos中的BVO
|
||||||
for (SaleOrderBVO bvo : vo.getChildrenVO()) {
|
for (SaleOrderBVO bvo : vo.getChildrenVO()) {
|
||||||
bvo.setStatus(VOStatus.UPDATED);
|
bvo.setStatus(VOStatus.UPDATED);
|
||||||
|
// 设置删除的物料行的状态
|
||||||
|
if (!delBids.isEmpty() && delBids.contains(bvo.getCsaleorderbid())) {
|
||||||
|
bvo.setStatus(VOStatus.DELETED);
|
||||||
|
NCCForUAPLogger.debug("findDeletedBids:" + VOStatus.DELETED + ",csaleorderbid = " + bvo.getCsaleorderbid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 更新 combinBillVO 中的字段为 vos 中的值
|
||||||
|
updateFields(vo, bipVo);
|
||||||
|
// 设置新增的物料行
|
||||||
|
if (paramList != null && !paramList.isEmpty()) {
|
||||||
|
// addBvo(combinBillVOs, paramList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 联动计算
|
||||||
|
INumPriceMnyCalculator cal = new SaleOrderNPriceMnyCal<SaleOrderVO>(combinBillVOs);
|
||||||
|
cal.calculate();
|
||||||
// 保存
|
// 保存
|
||||||
ISaleOrderScriptMaintain maintainsrv =
|
ISaleOrderScriptMaintain maintainsrv =
|
||||||
NCLocator.getInstance().lookup(ISaleOrderScriptMaintain.class);
|
NCLocator.getInstance().lookup(ISaleOrderScriptMaintain.class);
|
||||||
SaleOrderVO[] retvos =
|
SaleOrderVO[] retvos =
|
||||||
maintainsrv.saleOrderUpdate(combinBillVOs, null, originVos);
|
maintainsrv.saleOrderUpdate(combinBillVOs, null, originVos);
|
||||||
|
;
|
||||||
return retvos;
|
return retvos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -289,21 +336,25 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
private void setOtherId(SaleOrderVO[] vos) {
|
private void setOtherId(SaleOrderVO[] vos) {
|
||||||
for (SaleOrderVO vo : vos) {
|
for (SaleOrderVO vo : vos) {
|
||||||
// 部门、业务员、开票客户编码转id
|
// 部门、业务员、开票客户编码转id
|
||||||
String cdeptvid = vo.getParentVO().getCdeptvid();
|
SaleOrderHVO orderHVO = vo.getParentVO();
|
||||||
String cemployeeid = vo.getParentVO().getCdeptvid();
|
String csaleorderid = orderHVO.getCsaleorderid();
|
||||||
String cinvoicecustid = vo.getParentVO().getCdeptvid();
|
String cdeptvid = orderHVO.getCdeptvid();
|
||||||
|
String cemployeeid = orderHVO.getCemployeeid();
|
||||||
|
String cinvoicecustid = orderHVO.getCinvoicecustid();
|
||||||
try {
|
try {
|
||||||
String sql = "";
|
String sql = "";
|
||||||
// 部门
|
// 部门
|
||||||
if (cdeptvid != null && !cdeptvid.isEmpty()) {
|
if (cdeptvid != null && !cdeptvid.isEmpty()) {
|
||||||
sql = " select pk_dept from org_dept where code = '[code]' ";
|
sql = " select pk_vid,pk_dept from org_dept_v where code = '[code]' ";
|
||||||
sql = sql.replace("[code]", cdeptvid);
|
sql = sql.replace("[code]", cdeptvid);
|
||||||
Object deptObj = new BaseDAO().executeQuery(sql, new ColumnProcessor());
|
Map deptMap = (Map) new BaseDAO().executeQuery(sql, new MapProcessor());
|
||||||
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + deptObj);
|
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + deptMap);
|
||||||
if (deptObj != null) {
|
if (deptMap != null && !deptMap.isEmpty()) {
|
||||||
String id = BFPubTools.getString_TrimAsNull(deptObj);
|
if (!"".equals(deptMap.getOrDefault("pk_dept", "") + "")) {
|
||||||
if (!id.isEmpty()) {
|
orderHVO.setCdeptid(deptMap.getOrDefault("pk_dept", "") + "");
|
||||||
vo.getParentVO().setCdeptvid(id);
|
}
|
||||||
|
if (!"".equals(deptMap.getOrDefault("pk_vid", "") + "")) {
|
||||||
|
orderHVO.setCdeptvid(deptMap.getOrDefault("pk_vid", "") + "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -311,12 +362,12 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
if (cemployeeid != null && !cemployeeid.isEmpty()) {
|
if (cemployeeid != null && !cemployeeid.isEmpty()) {
|
||||||
sql = " select pk_psndoc from bd_psndoc where code = '[code]' ";
|
sql = " select pk_psndoc from bd_psndoc where code = '[code]' ";
|
||||||
sql = sql.replace("[code]", cemployeeid);
|
sql = sql.replace("[code]", cemployeeid);
|
||||||
Object staffObj = new BaseDAO().executeQuery(sql, new ColumnProcessor());
|
Object staffObj = new BaseDAO().executeQuery(sql, new ColumnProcessor("pk_psndoc"));
|
||||||
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" + staffObj);
|
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" + staffObj);
|
||||||
if (staffObj != null) {
|
if (staffObj != null) {
|
||||||
String id = BFPubTools.getString_TrimAsNull(staffObj);
|
String id = BFPubTools.getString_TrimAsNull(staffObj);
|
||||||
if (!id.isEmpty()) {
|
if (!id.isEmpty()) {
|
||||||
vo.getParentVO().setCdeptvid(id);
|
orderHVO.setCemployeeid(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -324,12 +375,12 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
if (cinvoicecustid != null && !cinvoicecustid.isEmpty()) {
|
if (cinvoicecustid != null && !cinvoicecustid.isEmpty()) {
|
||||||
sql = " select pk_customer from bd_customer where code = '[code]' ";
|
sql = " select pk_customer from bd_customer where code = '[code]' ";
|
||||||
sql = sql.replace("[code]", cinvoicecustid);
|
sql = sql.replace("[code]", cinvoicecustid);
|
||||||
Object invCustObj = new BaseDAO().executeQuery(sql, new ColumnProcessor());
|
Object invCustObj = new BaseDAO().executeQuery(sql, new ColumnProcessor("pk_customer"));
|
||||||
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-invCustObj:" + invCustObj);
|
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-invCustObj:" + invCustObj);
|
||||||
if (invCustObj != null) {
|
if (invCustObj != null) {
|
||||||
String id = BFPubTools.getString_TrimAsNull(invCustObj);
|
String id = BFPubTools.getString_TrimAsNull(invCustObj);
|
||||||
if (!id.isEmpty()) {
|
if (!id.isEmpty()) {
|
||||||
vo.getParentVO().setCdeptvid(id);
|
orderHVO.setCinvoicecustid(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -340,6 +391,65 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新 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.setNexchangerate(sourceBVO.getNexchangerate());
|
||||||
|
// 物料编码
|
||||||
|
String cmaterialvid = sourceBVO.getCmaterialvid();
|
||||||
|
// 物料关联字段赋值
|
||||||
|
if (cmaterialvid != null && !cmaterialvid.isEmpty()) {
|
||||||
|
setMaterl(targetBVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SaleOrderVO[] modify(SaleOrderHistoryVO[] vos) throws BusinessException {
|
public SaleOrderVO[] modify(SaleOrderHistoryVO[] vos) throws BusinessException {
|
||||||
|
|
@ -365,9 +475,9 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
for (SaleOrderHistoryBVO bvo : bvos) {
|
for (SaleOrderHistoryBVO bvo : bvos) {
|
||||||
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
||||||
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
||||||
bvo.setNexchangerate(exchangerate);
|
// bvo.setNexchangerate(exchangerate);
|
||||||
} else {
|
} else {
|
||||||
bvo.setNexchangerate(UFDouble.ONE_DBL);
|
// bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -400,4 +510,224 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||||
hvo.setCemployeeid(oldvo.getCemployeeid());
|
hvo.setCemployeeid(oldvo.getCemployeeid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增函数:比较两个vos,返回新增的bids和删除的bids
|
||||||
|
private Set<String> findOtherBids(SaleOrderBVO[] bipBVOs, SaleOrderBVO[] nccBVOs) {
|
||||||
|
Set<String> bipBids = new HashSet<>();
|
||||||
|
for (SaleOrderBVO bvo : bipBVOs) {
|
||||||
|
bipBids.add(bvo.getCsaleorderbid());
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> deletedBids = new HashSet<>();
|
||||||
|
for (SaleOrderBVO bvo : nccBVOs) {
|
||||||
|
if (!bipBids.contains(bvo.getCsaleorderbid())) {
|
||||||
|
deletedBids.add(bvo.getCsaleorderbid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return deletedBids;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修订销售订单的时候新增销售订单物料行的数据
|
||||||
|
*/
|
||||||
|
private void addBvo(SaleOrderVO[] combinBillVOs, List<Map<String, Object>> paramList) {
|
||||||
|
try {
|
||||||
|
for (SaleOrderVO vo : combinBillVOs) {
|
||||||
|
SaleOrderHVO hvo = vo.getParentVO();
|
||||||
|
SaleOrderBVO[] bvos = vo.getChildrenVO();
|
||||||
|
List<SaleOrderBVO> bvoList = new ArrayList<>(Arrays.asList(bvos));
|
||||||
|
String csaleorderid = hvo.getCsaleorderid();
|
||||||
|
String ybpk = hvo.getCorigcurrencyid();
|
||||||
|
Map<String, Object> objectMap = Collections.emptyMap();
|
||||||
|
for (Map<String, Object> map : paramList) {
|
||||||
|
objectMap = (Map<String, Object>) map.get(csaleorderid);
|
||||||
|
}
|
||||||
|
if (objectMap != null && !objectMap.isEmpty()) {
|
||||||
|
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);
|
||||||
|
newBvo.setAttributeValue("cprojectid", bodydata.get("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 = BFPubTools.getUFDouble_NullAsZero(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(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 = 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 --主本币含税净价
|
||||||
|
//,nnetprice --主本币无税净价
|
||||||
|
newBvo.setNtaxnetprice(nqtorigtaxprice.div(dVqtunitrate).multiply(nexchangerate).setScale(4, 4));
|
||||||
|
UFDouble Nnetprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100))).div(dVqtunitrate);
|
||||||
|
newBvo.setNnetprice(Nnetprice.multiply(nexchangerate).setScale(4, 4));
|
||||||
|
// 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") + "");
|
||||||
|
bvoList.add(newBvo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SaleOrderBVO[] array = bvoList.toArray(new SaleOrderBVO[0]);
|
||||||
|
vo.setChildrenVO(array);
|
||||||
|
}
|
||||||
|
// 填充默认值
|
||||||
|
new SaleOrderSaveFillValue().setDefValue(combinBillVOs);
|
||||||
|
for (SaleOrderVO combinBillVO : combinBillVOs) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
package nccloud.api.so.m30;
|
||||||
|
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.so.m30.entity.SaleOrderVO;
|
||||||
|
import nc.vo.so.m30.revise.entity.SaleOrderHistoryVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version NCC1909
|
||||||
|
* @Description: 销售订单维护接口
|
||||||
|
* @author: yanghff
|
||||||
|
* @date: 2019-11-1 上午9:59:48
|
||||||
|
*/
|
||||||
|
public interface IAPISaleOrderMaitain {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 销售订单新增保存
|
||||||
|
* @date: 2019-11-1 上午10:00:22
|
||||||
|
* @version NCC1909
|
||||||
|
*/
|
||||||
|
SaleOrderVO[] save(SaleOrderVO[] vos) throws BusinessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 销售订单修改保存
|
||||||
|
* @date: 2019-11-1 上午10:17:46
|
||||||
|
* @version NCC1909
|
||||||
|
*/
|
||||||
|
SaleOrderVO[] update(SaleOrderVO[] vos, List<Map<String, Object>> paramList) throws BusinessException;
|
||||||
|
|
||||||
|
// 变更销售销售订单
|
||||||
|
SaleOrderVO[] modify(SaleOrderHistoryVO[] vos) throws BusinessException;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,629 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package nccloud.openapi.so.m30;
|
||||||
|
|
||||||
|
import nc.bd.itf.tools.BFPubTools;
|
||||||
|
import nc.bs.dao.BaseDAO;
|
||||||
|
import nc.bs.framework.common.InvocationInfoProxy;
|
||||||
|
import nc.bs.framework.common.NCLocator;
|
||||||
|
import nc.itf.bd.defdoc.IDefdocService;
|
||||||
|
import nc.itf.pim.project.prv.IProject;
|
||||||
|
import nc.itf.so.m30.revise.ISaleOrderReviseMaintainApp;
|
||||||
|
import nc.jdbc.framework.processor.ColumnListProcessor;
|
||||||
|
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||||
|
import nc.jdbc.framework.processor.MapProcessor;
|
||||||
|
import nc.ui.querytemplate.querytree.IQueryScheme;
|
||||||
|
import nc.vo.bd.defdoc.DefdocVO;
|
||||||
|
import nc.vo.ml.NCLangRes4VoTransl;
|
||||||
|
import nc.vo.pim.project.ProjectHeadVO;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.VOStatus;
|
||||||
|
import nc.vo.pub.lang.UFDateTime;
|
||||||
|
import nc.vo.pubapp.AppContext;
|
||||||
|
import nc.vo.scmpub.util.CollectionUtils;
|
||||||
|
import nc.vo.scmpub.util.VOEntityUtil;
|
||||||
|
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.m30.revise.entity.SaleOrderHistoryBVO;
|
||||||
|
import nc.vo.so.m30.revise.entity.SaleOrderHistoryHVO;
|
||||||
|
import nc.vo.so.m30.revise.entity.SaleOrderHistoryVO;
|
||||||
|
import nccloud.api.rest.utils.NCCRestUtils;
|
||||||
|
import nccloud.api.so.m30.IAPISaleOrderMaitain;
|
||||||
|
import nccloud.api.so.m30.IAPISaleOrderQuery;
|
||||||
|
import nccloud.framework.core.exception.ExceptionUtils;
|
||||||
|
import nccloud.openapi.scmpub.pub.NCCPubRestResource;
|
||||||
|
import nccloud.openapi.scmpub.pub.TransferMapToVOTool;
|
||||||
|
import nccloud.openapi.scmpub.util.BillFieldsCodeToPkUtil;
|
||||||
|
import nccloud.openapi.scmpub.util.CallReturnBuildUtil;
|
||||||
|
import nccloud.openapi.so.m30.mapping.SaleOrderFieldMapping;
|
||||||
|
import nccloud.openapi.so.utils.QuerySchemeUtils;
|
||||||
|
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.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version NCC1909
|
||||||
|
* @Description: 销售订单资源访问类
|
||||||
|
* @author: yanghff
|
||||||
|
* @date: 2019-11-1 上午10:02:32
|
||||||
|
*/
|
||||||
|
@Path("so/saleorder")
|
||||||
|
public class SaleOrderResource extends NCCPubRestResource {
|
||||||
|
private Integer pageNo = defaultPageIndex;
|
||||||
|
private Integer pageSize = defaultPageNum;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 销售订单新增保存
|
||||||
|
* @date: 2019-11-1 上午10:03:21
|
||||||
|
* @version NCC1909
|
||||||
|
*/
|
||||||
|
@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("nqtunitnum", bodydata.get("nnum"));
|
||||||
|
|
||||||
|
bodydata.put("ctaxcountryid", "CN");
|
||||||
|
bodydata.put("crececountryid", "CN");
|
||||||
|
bodydata.put("csendcountryid", "CN");
|
||||||
|
|
||||||
|
bodydata.put("fbuysellflag", 1);
|
||||||
|
|
||||||
|
// bodydata.put("blargessflag", "N");
|
||||||
|
|
||||||
|
|
||||||
|
// 根据物料编码查询物料信息
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// BillFieldsCodeToPkUtil.doTranslateVOFields(salevos);
|
||||||
|
|
||||||
|
// 参数形式转换为vo并翻译
|
||||||
|
List<SaleOrderVO> vosList =
|
||||||
|
TransferMapToVOTool.transferMapToAggVO(paramList, SaleOrderVO.class,
|
||||||
|
true);
|
||||||
|
SaleOrderVO[] vos = vosList.toArray(new SaleOrderVO[vosList.size()]);
|
||||||
|
// 调用接口保存
|
||||||
|
IAPISaleOrderMaitain service =
|
||||||
|
NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class);
|
||||||
|
SaleOrderVO[] results = service.save(vos);
|
||||||
|
// 包装返回信息
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildSuccessResult(
|
||||||
|
results, "销售订单保存成功"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildFailResult(
|
||||||
|
null, "销售单保存异常:" + e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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 pk_org = salevos[0].getParentVO().getPk_org();
|
||||||
|
|
||||||
|
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 cprocode=salevos[0].getParentVO().getVdef6();
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if(!arrhth.contains(BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef6()))) {
|
||||||
|
// arrhth.add(salevos[i].getParentVO().getVdef6());
|
||||||
|
// }
|
||||||
|
|
||||||
|
String vdef2 = BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef2());
|
||||||
|
if (vdef2 != "" && !arrxmh.contains(vdef2)) {
|
||||||
|
arrxmh.add(vdef2);
|
||||||
|
}
|
||||||
|
// if(!arrxmh.contains(BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef2()))) {
|
||||||
|
// arrxmh.add(salevos[i].getParentVO().getVdef2());
|
||||||
|
// }
|
||||||
|
|
||||||
|
String vdef13 = BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef13());
|
||||||
|
if (vdef13 != "" && !arrxsddh.contains(vdef13)) {
|
||||||
|
arrxsddh.add(vdef13);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if(!arrxsddh.contains(BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef13()))) {
|
||||||
|
// arrxsddh.add(salevos[i].getParentVO().getVdef13());
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
// List<String> newhth=new ArrayList<String>();
|
||||||
|
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()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// List<String> newxmh=new ArrayList<String>();
|
||||||
|
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) {
|
||||||
|
// newarrvo.addAll(createDefVO(newxmh,"BQxmh",o.toString()));
|
||||||
|
NCLocator.getInstance().lookup(IDefdocService.class).insertDefdocs(o, createDefVO(arrxmh, "BQxmh", o.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// List<String> newxsddh=new ArrayList<String>();
|
||||||
|
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) {
|
||||||
|
// newarrvo.addAll(createDefVO(newxsddh,"BIP-ddh",o.toString()));
|
||||||
|
NCLocator.getInstance().lookup(IDefdocService.class).insertDefdocs(o, createDefVO(arrxsddh, "BIP-ddh", o.toString()));
|
||||||
|
}
|
||||||
|
// 生成自定义档案
|
||||||
|
// if(newarrvo.size()>0) {
|
||||||
|
// NCLocator.getInstance().lookup(IDefdocService.class).insertDefdocs(o.toString(), newarrvo.toArray(new DefdocVO[newarrvo.size()]));
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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()]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 销售订单修改保存
|
||||||
|
* @date: 2019-11-1 上午10:03:49
|
||||||
|
* @version NCC1909
|
||||||
|
*/
|
||||||
|
@POST
|
||||||
|
@Path("update")
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public JSONString update(Map<String, Object> paramMap) {
|
||||||
|
InvocationInfoProxy.getInstance().setGroupId("0001A110000000000677");
|
||||||
|
try {
|
||||||
|
if (paramMap == null || !paramMap.containsKey(HEADTABLE)
|
||||||
|
|| !paramMap.containsKey(BODYTABLE)) {
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil
|
||||||
|
.buildHeadBodyResult());
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> paramList =
|
||||||
|
new ArrayList<Map<String, Object>>();
|
||||||
|
paramList.add(paramMap);
|
||||||
|
// 参数形式转换为vo并翻译
|
||||||
|
List<SaleOrderVO> vosList =
|
||||||
|
TransferMapToVOTool.transferMapToAggVO(paramList, SaleOrderVO.class,
|
||||||
|
true);
|
||||||
|
SaleOrderVO[] vos = vosList.toArray(new SaleOrderVO[vosList.size()]);
|
||||||
|
List<Map<String, Object>> addMapList = new ArrayList<Map<String, Object>>();
|
||||||
|
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 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 (num <= 0) {
|
||||||
|
bodydata.put("status", "add");
|
||||||
|
Map map = new HashMap();
|
||||||
|
map.put(headdata.get("csaleorderid"), objectMap);
|
||||||
|
addMapList.add(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 调用接口保存
|
||||||
|
IAPISaleOrderMaitain service =
|
||||||
|
NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class);
|
||||||
|
SaleOrderVO[] results = service.update(vos, addMapList);
|
||||||
|
// 包装返回信息
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildSuccessResult(
|
||||||
|
results, "销售订单修改成功"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildFailResult(
|
||||||
|
null, "销售订单修改异常:" + e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 根据查询方案查询销售订单
|
||||||
|
* @date: 2019-11-1 上午10:04:20
|
||||||
|
* @version NCC1909
|
||||||
|
*/
|
||||||
|
@POST
|
||||||
|
@Path("querybyscheme")
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public JSONString queryByScheme(Map<String, Object> paramMap) {
|
||||||
|
SaleOrderVO[] results = null;
|
||||||
|
try {
|
||||||
|
// 翻译
|
||||||
|
Map<String, Object> fields =
|
||||||
|
BillFieldsCodeToPkUtil.doTranslateFields(new SaleOrderFieldMapping(),
|
||||||
|
paramMap);
|
||||||
|
|
||||||
|
// 创建查询方案
|
||||||
|
QuerySchemeUtils schemeUtil =
|
||||||
|
new QuerySchemeUtils(SaleOrderVO.class, fields);
|
||||||
|
IQueryScheme queryScheme = schemeUtil.creatQueryScheme();
|
||||||
|
|
||||||
|
// 调用查询接口
|
||||||
|
results =
|
||||||
|
NCLocator.getInstance().lookup(IAPISaleOrderQuery.class)
|
||||||
|
.queryByScheme(queryScheme);
|
||||||
|
// 包装返回信息
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildSuccessResult(
|
||||||
|
results, "查询销售订单成功"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildFailResult(
|
||||||
|
results, "查询销售订单失败:" + e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@POST
|
||||||
|
@Path("/saleOrderReviseSaveCommit")
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
public JSONString saleorderRevise(List<Map<String, Object>> paramList) throws Exception {
|
||||||
|
InvocationInfoProxy.getInstance().setGroupId("0001A110000000000677");
|
||||||
|
SaleOrderVO[] results = null;
|
||||||
|
try {
|
||||||
|
String id = "";
|
||||||
|
|
||||||
|
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"));
|
||||||
|
|
||||||
|
id = BFPubTools.getString_TrimAsNull(headdata.get("csaleorderid"));
|
||||||
|
if (id.equals("")) {
|
||||||
|
throw new Exception("csaleorderid" + "主键为空");
|
||||||
|
}
|
||||||
|
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("ctaxcountryid", "CN");
|
||||||
|
bodydata.put("fbuysellflag", 1);
|
||||||
|
bodydata.put("blargessflag", "N");
|
||||||
|
setMaterl(bodydata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// SaleOrderVO[] salevos=OpenAPIParaUtil.changeVO(paramList, HEADTABLE,BODYTABLE);
|
||||||
|
// 把最新数据传递至历史数据
|
||||||
|
// 查询销售订单不存在
|
||||||
|
String sql = " select csaleorderid from so_saleorder where csaleorderid='" + id + "' and nvl(dr,0)=0 ";
|
||||||
|
|
||||||
|
String o = (String) getDao().executeQuery(sql, new ColumnProcessor());
|
||||||
|
if (o == null) {
|
||||||
|
throw new Exception("csaleorderid" + "主键为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SaleOrderVO> vosList =
|
||||||
|
TransferMapToVOTool.transferMapToAggVO(paramList, SaleOrderVO.class,
|
||||||
|
true);
|
||||||
|
SaleOrderVO[] salevos = vosList.toArray(new SaleOrderVO[vosList.size()]);
|
||||||
|
|
||||||
|
ISaleOrderReviseMaintainApp reviseService = (ISaleOrderReviseMaintainApp) NCLocator.getInstance().lookup(ISaleOrderReviseMaintainApp.class);
|
||||||
|
SaleOrderHistoryVO VOS = reviseService.queryM30ReviseApp(new String[]{id})[0];
|
||||||
|
|
||||||
|
ArrayList<SaleOrderHistoryBVO> arrbvos = new ArrayList<SaleOrderHistoryBVO>();
|
||||||
|
|
||||||
|
if (VOS != null) {
|
||||||
|
SaleOrderBVO[] newbvos = salevos[0].getChildrenVO();
|
||||||
|
SaleOrderHistoryBVO[] oldbvos = VOS.getChildrenVO();
|
||||||
|
for (int i = 0; i < newbvos.length; i++) {
|
||||||
|
SaleOrderBVO bvo = newbvos[i];
|
||||||
|
// 新增数据
|
||||||
|
if (bvo.getPrimaryKey() == null) {
|
||||||
|
SaleOrderHistoryBVO newvo = (SaleOrderHistoryBVO) oldbvos[0].clone();
|
||||||
|
newvo.setCsaleorderbid("");
|
||||||
|
newvo.setCrowno(bvo.getCrowno());
|
||||||
|
newvo.setStatus(VOStatus.NEW);
|
||||||
|
// 重新设置数据
|
||||||
|
createNewBVo(newvo, bvo);
|
||||||
|
arrbvos.add(newvo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (int j = 0; j < oldbvos.length; j++) {
|
||||||
|
if (bvo.getCsaleorderbid().equals(oldbvos[j].getCsaleorderbid())) {
|
||||||
|
// 交换变更数据
|
||||||
|
oldbvos[j].setStatus(VOStatus.UPDATED);
|
||||||
|
createNewBVo(oldbvos[j], bvo);
|
||||||
|
arrbvos.add(oldbvos[j]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SaleOrderHistoryHVO headvo = VOS.getParentVO();
|
||||||
|
headvo.setStatus(1);
|
||||||
|
headvo.setApprover(null);
|
||||||
|
headvo.setTaudittime(null);
|
||||||
|
headvo.setAttributeValue("pseudocolumn", 0);
|
||||||
|
check30And30RTS(VOS);
|
||||||
|
|
||||||
|
VOS.setChildrenVO((SaleOrderHistoryBVO[]) CollectionUtils.listToArray(arrbvos));
|
||||||
|
SaleOrderHistoryVO[] vodis = {VOS};
|
||||||
|
VOEntityUtil.clearVOsValue(VOEntityUtil.getBodyVOs(vodis), new String[]{"corderhistorybid"});
|
||||||
|
|
||||||
|
IAPISaleOrderMaitain service =
|
||||||
|
NCLocator.getInstance().lookup(IAPISaleOrderMaitain.class);
|
||||||
|
results = service.modify(vodis);
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildSuccessResult(
|
||||||
|
results, "销售订单保存成功"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return NCCRestUtils.toJSONString(CallReturnBuildUtil.buildFailResult(
|
||||||
|
results, "销售订单修订失败:" + e.getMessage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createNewBVo(SaleOrderHistoryBVO newvo, SaleOrderBVO bvo) throws Exception {
|
||||||
|
// 重置物料信息
|
||||||
|
newvo.setCmaterialid(bvo.getCmaterialid());
|
||||||
|
newvo.setCmaterialvid(newvo.getCmaterialvid());
|
||||||
|
newvo.setCunitid(bvo.getCunitid());
|
||||||
|
newvo.setCastunitid(bvo.getCastunitid());
|
||||||
|
newvo.setCqtunitid(bvo.getCqtunitid());
|
||||||
|
// newvo.setStatus(VOStatus.NEW);
|
||||||
|
newvo.setNnum(bvo.getNnum());
|
||||||
|
newvo.setNqtunitnum(bvo.getNqtunitnum());
|
||||||
|
newvo.setNastnum(bvo.getNqtunitnum());
|
||||||
|
newvo.setVchangerate(bvo.getVchangerate());
|
||||||
|
newvo.setNtaxrate(bvo.getNtaxrate());
|
||||||
|
newvo.setCrowno(bvo.getCrowno());
|
||||||
|
newvo.setNqtorigtaxprice(bvo.getNqtorigtaxprice());
|
||||||
|
newvo.setCtaxcodeid(bvo.getCtaxcodeid());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cheageHVo(SaleOrderHistoryVO billvo, SaleOrderVO saleOrderVO) {
|
||||||
|
SaleOrderHistoryHVO hvo = billvo.getParentVO();
|
||||||
|
SaleOrderHVO oldvo = saleOrderVO.getParentVO();
|
||||||
|
hvo.setCinvoicecustid(oldvo.getCinvoicecustid());
|
||||||
|
hvo.setCemployeeid(oldvo.getCemployeeid());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void check30And30RTS(SaleOrderHistoryVO vo) {
|
||||||
|
/* 109 */
|
||||||
|
ISaleOrderReviseMaintainApp service = (ISaleOrderReviseMaintainApp) NCLocator.getInstance().lookup(ISaleOrderReviseMaintainApp.class);
|
||||||
|
/* */
|
||||||
|
try {
|
||||||
|
/* 111 */
|
||||||
|
SaleOrderHistoryVO[] vos = service.queryM30ReviseApp(new String[]{vo.getPrimaryKey()});
|
||||||
|
/* 112 */
|
||||||
|
Map<String, UFDateTime> billMap = new HashMap<String, UFDateTime>();
|
||||||
|
/* 113 */
|
||||||
|
for (SaleOrderHistoryBVO bvo : vos[0].getChildrenVO()) {
|
||||||
|
/* 114 */
|
||||||
|
billMap.put(bvo.getCsaleorderbid(), bvo.getTs());
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
/* 116 */
|
||||||
|
for (SaleOrderHistoryBVO bvo : vo.getChildrenVO()) {
|
||||||
|
/* 117 */
|
||||||
|
if (bvo.getStatus() != 2 && bvo.getStatus() != 0) {
|
||||||
|
/* 118 */
|
||||||
|
UFDateTime ts = (UFDateTime) billMap.get(bvo.getCsaleorderbid());
|
||||||
|
/* 119 */
|
||||||
|
if (!ts.equals(bvo.getTs())) {
|
||||||
|
/* 120 */
|
||||||
|
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes()
|
||||||
|
/* 121 */.getStrByID("4006013_0", "04006013-0006"));
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
/* */
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
/* 126 */
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
/* 127 */
|
||||||
|
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006013_0", "04006013-0006"));
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue