销售订单生单及销售订单修订
This commit is contained in:
parent
839021a256
commit
5a11c77417
|
@ -1,5 +1,6 @@
|
|||
package nccloud.api.impl.so.m30;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import nc.bd.itf.tools.BFPubTools;
|
||||
import nc.bs.dao.BaseDAO;
|
||||
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.uap.pf.IPFBusiAction;
|
||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||
import nc.jdbc.framework.processor.MapProcessor;
|
||||
import nc.pubitf.so.m30.api.ISaleOrderQueryAPI;
|
||||
import nc.vo.ml.NCLangRes4VoTransl;
|
||||
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.UFDate;
|
||||
import nc.vo.pub.lang.UFDouble;
|
||||
import nc.vo.pubapp.AppContext;
|
||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||
import nc.vo.pubapp.pflow.PfUserObject;
|
||||
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.StringUtil;
|
||||
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.SOCurrencyUtil;
|
||||
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.dto.scmpub.pflow.SCMCloudPFlowContext;
|
||||
import nccloud.pubitf.scmpub.commit.service.IBatchRunScriptService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Description: 销售订单维护实现类
|
||||
|
@ -51,7 +52,7 @@ import java.util.Set;
|
|||
* @date: 2019-10-23 下午4:57:49
|
||||
* @Copyright:
|
||||
*/
|
||||
public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
||||
public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
||||
|
||||
@Override
|
||||
public SaleOrderVO[] save(SaleOrderVO[] vos) throws BusinessException {
|
||||
|
@ -81,9 +82,9 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
for (SaleOrderBVO bvo : bvos) {
|
||||
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
||||
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
||||
bvo.setNexchangerate(exchangerate);
|
||||
// bvo.setNexchangerate(exchangerate);
|
||||
} else {
|
||||
bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||
// bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -141,28 +142,28 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
String zbbz = childrenVO.getCcurrencyid();
|
||||
|
||||
childrenVO.setFtaxtypeflag(1);
|
||||
//得到税率
|
||||
// 得到税率
|
||||
UFDouble ntaxrate = BFPubTools.getUFDouble_NullAsZero(childrenVO.getNtaxrate());
|
||||
|
||||
// 折本汇率
|
||||
UFDouble nexchangerate = childrenVO.getNexchangerate();
|
||||
//含税单价
|
||||
// 含税单价
|
||||
UFDouble nqtorigtaxprice = childrenVO.getNqtorigtaxprice();
|
||||
//无税单价
|
||||
// 无税单价
|
||||
UFDouble nqtorigprice = nqtorigtaxprice.div(UFDouble.ONE_DBL.add(ntaxrate.div(100)));
|
||||
// 价税合计
|
||||
// UFDouble norigtaxmny=nqtorigtaxprice.multiply(childrenVO.getNqtunitnum());
|
||||
UFDouble norigtaxmny = nqtorigtaxprice.multiply(childrenVO.getNqtunitnum()).setScale(2, 4);
|
||||
childrenVO.setNorigtaxmny(norigtaxmny);
|
||||
//无税金额
|
||||
// 无税金额
|
||||
UFDouble norigmny = nqtorigprice.multiply(childrenVO.getNqtunitnum());
|
||||
|
||||
childrenVO.setNorigmny(Currency.getFormaUfValue(ybpk, norigmny));
|
||||
//税额
|
||||
// 税额
|
||||
childrenVO.setNqtorigprice(nqtorigprice.setScale(4, 4));
|
||||
|
||||
|
||||
//无税本币金额单价
|
||||
// 无税本币金额单价
|
||||
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);
|
||||
//nqtorigtaxnetprc--含税净价
|
||||
// nqtorigtaxnetprc--含税净价
|
||||
childrenVO.setNqtorigtaxnetprc(nqtorigtaxprice);
|
||||
//,nqtorignetprice --无税净价
|
||||
childrenVO.setNqtorignetprice(nqtorigprice);
|
||||
|
@ -189,7 +190,7 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
|
||||
|
||||
wsje = Currency.getFormaUfValue(zbbz, wsje);
|
||||
//本币无税金额
|
||||
// 本币无税金额
|
||||
childrenVO.setNorigtaxprice(nqtorigtaxprice.div(dVqtunitrate).setScale(4, 4));
|
||||
//,norigprice --主无税单价
|
||||
childrenVO.setNorigprice(nqtorigprice.div(dVqtunitrate).setScale(4, 4));
|
||||
|
@ -234,8 +235,21 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
|
||||
|
||||
@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
|
||||
Map<String, Set<String>> ids = this.getIds(vos);
|
||||
if (ids.keySet() == null || ids.values() == null
|
||||
|
@ -247,24 +261,57 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
ISaleOrderMaintain service =
|
||||
NCLocator.getInstance().lookup(ISaleOrderMaintain.class);
|
||||
SaleOrderVO[] originVos = service.querySaleorder(hids);
|
||||
SetUpdateData setData = new SetUpdateData();
|
||||
setData.setData(vos, originVos);
|
||||
setOtherId(vos);
|
||||
// SetUpdateData setData = new SetUpdateData();
|
||||
// setData.setData(vos, originVos);
|
||||
// 有值不覆盖
|
||||
SaleOrderVO[] combinBillVOs =
|
||||
(SaleOrderVO[]) AggVOUtil.combinBillVO(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) {
|
||||
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()) {
|
||||
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 =
|
||||
NCLocator.getInstance().lookup(ISaleOrderScriptMaintain.class);
|
||||
SaleOrderVO[] retvos =
|
||||
maintainsrv.saleOrderUpdate(combinBillVOs, null, originVos);
|
||||
;
|
||||
return retvos;
|
||||
}
|
||||
|
||||
|
@ -289,21 +336,25 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
private void setOtherId(SaleOrderVO[] vos) {
|
||||
for (SaleOrderVO vo : vos) {
|
||||
// 部门、业务员、开票客户编码转id
|
||||
String cdeptvid = vo.getParentVO().getCdeptvid();
|
||||
String cemployeeid = vo.getParentVO().getCdeptvid();
|
||||
String cinvoicecustid = vo.getParentVO().getCdeptvid();
|
||||
SaleOrderHVO orderHVO = vo.getParentVO();
|
||||
String csaleorderid = orderHVO.getCsaleorderid();
|
||||
String cdeptvid = orderHVO.getCdeptvid();
|
||||
String cemployeeid = orderHVO.getCemployeeid();
|
||||
String cinvoicecustid = orderHVO.getCinvoicecustid();
|
||||
try {
|
||||
String sql = "";
|
||||
// 部门
|
||||
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);
|
||||
Object deptObj = new BaseDAO().executeQuery(sql, new ColumnProcessor());
|
||||
NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + deptObj);
|
||||
if (deptObj != null) {
|
||||
String id = BFPubTools.getString_TrimAsNull(deptObj);
|
||||
if (!id.isEmpty()) {
|
||||
vo.getParentVO().setCdeptvid(id);
|
||||
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", "") + "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -311,12 +362,12 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
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());
|
||||
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()) {
|
||||
vo.getParentVO().setCdeptvid(id);
|
||||
orderHVO.setCemployeeid(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -324,12 +375,12 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
if (cinvoicecustid != null && !cinvoicecustid.isEmpty()) {
|
||||
sql = " select pk_customer from bd_customer where code = '[code]' ";
|
||||
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);
|
||||
if (invCustObj != null) {
|
||||
String id = BFPubTools.getString_TrimAsNull(invCustObj);
|
||||
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
|
||||
public SaleOrderVO[] modify(SaleOrderHistoryVO[] vos) throws BusinessException {
|
||||
|
@ -365,9 +475,9 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
for (SaleOrderHistoryBVO bvo : bvos) {
|
||||
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
||||
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
||||
bvo.setNexchangerate(exchangerate);
|
||||
// bvo.setNexchangerate(exchangerate);
|
||||
} else {
|
||||
bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||
// bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -400,4 +510,224 @@ public class APISaleOrderMaitainImpl2 implements IAPISaleOrderMaitain {
|
|||
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