合并其它git仓库的SaleOrderResource代码

This commit is contained in:
mzr 2025-08-03 09:57:47 +08:00
parent 865f7d0a7b
commit b210ccafd0
1 changed files with 194 additions and 34 deletions

View File

@ -13,8 +13,10 @@ import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.pim.project.ProjectHeadVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pubapp.AppContext;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
@ -110,19 +112,43 @@ public class SaleOrderResource extends NCCPubRestResource {
headdata.put("ccustomervid", headdata.get("ccustomerid"));
String pk_group = AppContext.getInstance().getPkGroup();
headdata.put("pk_group", pk_group);
//add by hanwl 20250729 部分组织表体结算财务组织和应收组织需要取销售业务委托关系
//add by hanwl 20250729 根据销售组织编码去视图V_SALEORG_RELATIONS查询数据如果有数据
// 则取数据中的结算组织应收组织否则取销售组织 start
String org_code = headdata.get("pk_org_v")+"";
Map<String,String> relMap = this.getSaleorgRelations(org_code);
String settleorg_code = org_code;//初始化结算组织编码为销售组织编码
String arorg_code = org_code;//初始化应收组织编码为销售组织编码
if(relMap!=null){
String tempsettleorg_code = relMap.get("settleorg_code");
if(StringUtils.isNotBlank(tempsettleorg_code)){
settleorg_code = tempsettleorg_code;
}
String temparorg_code = relMap.get("arorg_code");
if(StringUtils.isNotBlank(temparorg_code)){
arorg_code = temparorg_code;
}
}
//add by hanwl 20250729 根据销售组织编码去视图V_SALEORG_RELATIONS查询数据如果有数据
// 则取数据中的结算组织应收组织否则取销售组织 end
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("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("carorgid", headdata.get("pk_org_v"));
// bodydata.put("carorgvid", headdata.get("pk_org_v"));
bodydata.put("carorgid", arorg_code);
bodydata.put("carorgvid", arorg_code);
// bodydata.put("csettleorgid", headdata.get("pk_org_v"));
// bodydata.put("csettleorgvid", headdata.get("pk_org_v"));
bodydata.put("csettleorgid", settleorg_code);
bodydata.put("csettleorgvid", settleorg_code);
bodydata.put("ctaxcountryid", "CN");
bodydata.put("crececountryid", "CN");
bodydata.put("csendcountryid", "CN");
@ -135,21 +161,46 @@ public class SaleOrderResource extends NCCPubRestResource {
SaleOrderVO[] salevos = OpenAPIParaUtil.changeVO(paramList, HEADTABLE, BODYTABLE);
log.error("销售订单根据自定义项创建档案开始-----------------------");
List<DefdocVO> defdocVOS = 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);
}
}
List<ProjectHeadVO> projectList = genProject(salevos);
// 参数形式转换为vo并翻译
List<SaleOrderVO> vosList = TransferMapToVOTool.transferMapToAggVO(paramList, SaleOrderVO.class);
//根据返回的projectList先行翻译
if(projectList!=null && projectList.size()>0){
Map<String,ProjectHeadVO> code_projectMap = new HashMap<>();
for(ProjectHeadVO projectHeadVO : projectList){
String code = projectHeadVO.getProject_code();
String pkProject = projectHeadVO.getPk_project();
log.error("销售订单保存接口:项目编号【"+code+"】,项目主键【"+pkProject+"");
if(code_projectMap.containsKey(code)){
}else{
code_projectMap.put(code, projectHeadVO);
}
}
//翻译
for(SaleOrderVO saleOrderVO : vosList) {
SaleOrderHVO parentVO = saleOrderVO.getParentVO();
SaleOrderBVO[] childrenVOs = saleOrderVO.getChildrenVO();
String vdef22 = parentVO.getVdef22();
if(vdef22!=null && vdef22.trim().length()>0){
ProjectHeadVO projectHeadVO = code_projectMap.get(vdef22);
if(projectHeadVO!=null){
parentVO.setVdef22(projectHeadVO.getPk_project());
parentVO.setVdef23(projectHeadVO.getProject_name());
}
}
for(SaleOrderBVO bvo:childrenVOs){
String cprojectid = bvo.getCprojectid();
if(cprojectid!=null && cprojectid.trim().length()>0){
ProjectHeadVO projectHeadVO = code_projectMap.get(cprojectid);
if(projectHeadVO!=null){
bvo.setCprojectid(projectHeadVO.getPk_project());
bvo.setVbdef10(projectHeadVO.getProject_name());
}
}
}
}
}
//根据返回的defdocVOS先行翻译
if(defdocVOS!=null && defdocVOS.size()>0){
Map<String,Map<String,String>> deflist_map = new HashMap<>();
@ -245,7 +296,7 @@ public class SaleOrderResource extends NCCPubRestResource {
}
}
private List<DefdocVO> genDef(SaleOrderVO[] salevos) throws BusinessException {
private List<ProjectHeadVO> genProject(SaleOrderVO[] salevos) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
List<DefdocVO> allDefDoc = new ArrayList<DefdocVO>();
ArrayList<String> arrhth = new ArrayList<String>();
@ -259,17 +310,82 @@ public class SaleOrderResource extends NCCPubRestResource {
}
String o = (String) map.get("pk_org");
String cprocode = salevos[0].getChildrenVO()[0].getCprojectid();
String cproname = salevos[0].getChildrenVO()[0].getVbdef10();
if (!BFPubTools.getString_TrimAsNull(cprocode).equals("")) {
sql = " select pk_project from bd_project where project_code='" + cprocode + "' and pk_duty_org='" + o + "' and nvl(dr,0)=0 ";
String o_pk_project = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
if (o_pk_project == null) {
// ÐÂÔöÏîÄ¿µµ°¸
createPro(cprocode, cproname, map);
//遍历明细去重
List<ProjectHeadVO> result=new ArrayList<>();
for(SaleOrderVO saleOrderVO:salevos){
Map<String,String > code_name =new HashMap<>();
//上级项目名称
String vdef23 = saleOrderVO.getParentVO().getVdef23();
//上级项目编码
String vdef22 = saleOrderVO.getParentVO().getVdef22();
if(vdef23 !=null &&vdef23.trim().length()>0&&vdef22 !=null &&vdef22.trim().length()>0){
code_name.put(vdef22,vdef23);
}
SaleOrderBVO[] childrenVO = saleOrderVO.getChildrenVO();
for(SaleOrderBVO saleOrderBVO:childrenVO){
String cprojectid = saleOrderBVO.getCprojectid();
String vbdef10 = saleOrderBVO.getVbdef10();
if(cprojectid ==null ||cprojectid.trim().length()==0||vbdef10 ==null ||vbdef10.trim().length()==0){
continue;
}else {
if(code_name.containsKey(cprojectid)){
//存在编码相同的行比较名称---不同则报错
if(!code_name.get(cprojectid).equals(vbdef10)){
throw new BusinessException("销售订单,项目编码相同但是名称不同,请检查!!!");
}
}else{
code_name.put(cprojectid,vbdef10);
}
}
}
UFBoolean is_hth = UFBoolean.FALSE;
ProjectHeadVO headDOCVO=null;
//查询是否重复
if(!code_name.isEmpty()){
SqlBuilder projectSql=new SqlBuilder();
projectSql.append(" project_code",code_name.keySet().toArray(new String[0]));
projectSql.append(" and pk_duty_org",o);
projectSql.append(" and nvl(dr,0)=0 ");
List<ProjectHeadVO> projectHeadVOList = (List<ProjectHeadVO>) dao.retrieveByClause(ProjectHeadVO.class, projectSql.toString());
if (projectHeadVOList != null && projectHeadVOList.size() > 0) {
for(ProjectHeadVO projectHeadVO:projectHeadVOList){
result.add(projectHeadVO);
String projectCode = projectHeadVO.getProject_code();
if(projectCode.equals(vdef22)){
is_hth=UFBoolean.TRUE;
headDOCVO=projectHeadVO;
}
if (code_name.containsKey(projectCode)) {
code_name.remove(projectCode);
}
}
if(code_name!=null && code_name.size()>0){
//存在需要新增的档案明细
createPro(code_name, is_hth, headDOCVO, vdef22, vdef23, map,result);
}
}else{
//存在需要新增的档案明细
createPro(code_name, is_hth, headDOCVO, vdef22, vdef23, map,result);
}
}
}
}
return result;
}
private List<DefdocVO> genDef(SaleOrderVO[] salevos) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
List<DefdocVO> allDefDoc = new ArrayList<DefdocVO>();
ArrayList<String> arrhth = new ArrayList<String>();
ArrayList<String> arrxmh = new ArrayList<String>();
ArrayList<String> arrxsddh = new ArrayList<String>();
String sql = " select pk_org,pk_vid from org_orgs where org_orgs.code='" + salevos[0].getParentVO().getPk_org() + "' and nvl(dr,0)=0 and isbusinessunit='Y' ";
Map map = (Map) baseDAO.executeQuery(sql, new MapProcessor());
if (map == null) {
throw new BusinessException("采购组织档案未查到");
}
String o = (String) map.get("pk_org");
for (int i = 0; i < salevos.length; i++) {
String vdef6 = BFPubTools.getString_TrimAsNull(salevos[i].getParentVO().getVdef6());
if (vdef6 != "" && !arrhth.contains(vdef6)) {
@ -346,13 +462,46 @@ public class SaleOrderResource extends NCCPubRestResource {
return allDefDoc;
}
private void createPro(String cprocode, String cproname, Map map) throws BusinessException {
private void createPro(Map<String,String > code_name, UFBoolean is_hth, ProjectHeadVO headDOCVO, String vdef22, String vdef23, Map map,List<ProjectHeadVO> new_list) throws BusinessException {
//code_name里全是需要新增的明细项目
Set<String> strings = code_name.keySet();
if(is_hth.booleanValue()==true){
//表头项目已经存在无需创建父项目
for (String code : strings) {
ProjectHeadVO hvo = new ProjectHeadVO();
hvo.setProject_code(code);
hvo.setProject_name(code_name.get(code));
hvo.setPk_parentpro(headDOCVO.getPk_project());
fillheadVOValue(hvo,map);
ProjectHeadVO projectHeadVO = NCLocator.getInstance().lookup(IProject.class).insertProject(hvo);
new_list.add(projectHeadVO);
}
}else{
//表头项目不存在需要创建父项目
ProjectHeadVO headProjectVO = new ProjectHeadVO();
headProjectVO.setProject_code(vdef22);
headProjectVO.setProject_name(vdef23);
fillheadVOValue(headProjectVO,map);
ProjectHeadVO projectHeadVO = NCLocator.getInstance().lookup(IProject.class).insertProject(headProjectVO);
new_list.add(projectHeadVO);
code_name.remove(vdef22);
if(code_name!=null&& code_name.size()>0){
for (String code : strings) {
ProjectHeadVO hvo = new ProjectHeadVO();
hvo.setProject_code(code);
hvo.setProject_name(code_name.get(code));
hvo.setPk_parentpro(projectHeadVO.getPk_project());
fillheadVOValue(hvo,map);
ProjectHeadVO itemprojectHeadVO = NCLocator.getInstance().lookup(IProject.class).insertProject(hvo);
new_list.add(itemprojectHeadVO);
}
}
}
}
private void fillheadVOValue(ProjectHeadVO hvo, Map map) {
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);
@ -366,7 +515,6 @@ public class SaleOrderResource extends NCCPubRestResource {
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 {
@ -419,6 +567,18 @@ public class SaleOrderResource extends NCCPubRestResource {
}
/**
* 根据销售组织代码获取销售组织关系信息
* @param saleorg 销售组织代码
* @return 返回包含结算组织代码和应收组织代码的Map集合key为settleorg_code和arorg_code
* @throws BusinessException 业务异常
*/
private Map<String,String> getSaleorgRelations(String saleorg) throws BusinessException{
String sql = "select settleorg_code,arorg_code from V_SALEORG_RELATIONS where saleorg_code='"+saleorg+"'";
Map map = (Map<String,String>) getDao().executeQuery(sql, new MapProcessor());
return map;
}
@POST
@Path("update")
@Consumes({"application/json"})