diff --git a/.classpath b/.classpath index caca428..2a23253 100644 --- a/.classpath +++ b/.classpath @@ -1,5 +1,10 @@ + + + + + @@ -106,11 +111,7 @@ - - - - - + diff --git a/arap/src/client/nccloud/web/arap/arappub/viewhandler/bodyafter/BodyCuspAfterEditHandler.java b/arap/src/client/nccloud/web/arap/arappub/viewhandler/bodyafter/BodyCuspAfterEditHandler.java new file mode 100644 index 0000000..38d79e8 --- /dev/null +++ b/arap/src/client/nccloud/web/arap/arappub/viewhandler/bodyafter/BodyCuspAfterEditHandler.java @@ -0,0 +1,925 @@ +package nccloud.web.arap.arappub.viewhandler.bodyafter; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import org.apache.commons.lang3.ArrayUtils; +import com.google.gson.Gson; +import nc.itf.arap.fieldmap.IBillFieldGet; +import nc.itf.bd.bankacc.cust.ICustBankaccQueryService; +import nc.itf.gl.api.IResourceService; +import nc.md.model.MetaDataException; +import nc.md.persist.framework.IMDPersistenceQueryService; +import nc.pubitf.arap.pub.ICurrentVersionService; +import nc.pubitf.uapbd.ICustomerPubService; +import nc.pubitf.uapbd.ISupplierPubService; +import nc.vo.arap.basebill.BaseItemVO; +import nc.vo.arap.pay.PayBillVO; +import nc.vo.arap.pub.BillEnumCollection.ObjType; +import nc.vo.arap.utils.StringUtil; +import nc.vo.bd.bankaccount.BankAccSubVO; +import nc.vo.bd.bankaccount.cust.CustBankaccUnionVO; +import nc.vo.bd.cust.CustomerVO; +import nc.vo.bd.cust.finance.CustFinanceVO; +import nc.vo.bd.cust.saleinfo.CustsaleVO; +import nc.vo.bd.supplier.SupplierVO; +import nc.vo.bd.supplier.finance.SupFinanceVO; +import nc.vo.gl.openapi.GLQueryWebVO; +import nc.vo.org.AccountingBookVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDate; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nccloud.api.rest.utils.NCCRestUtils; +import nccloud.framework.service.ServiceLocator; +import nccloud.framework.web.ui.model.row.Cell; +import nccloud.framework.web.ui.pattern.billcard.CardBodyAfterEditEvent; +import nccloud.framework.web.ui.pattern.grid.ChangedRow; +import nccloud.web.arap.arappub.util.AfterEditEventUtil; +import nccloud.web.arap.arappub.util.ArapUiUtil; +import nccloud.web.arap.arappub.util.BillEventHandlerUtil; + +/** + * @author hanzhhm + */ +public class BodyCuspAfterEditHandler extends BodyBatchBillHandler { + /** + * 220201/224103/224105/224101科目的期末余额 + */ + private String endlocamount220201 = ""; + private String endlocamount224103 = ""; + private String endlocamount224105 = ""; + private String endlocamount224101 = ""; + IMDPersistenceQueryService imDPersistenceService = ServiceLocator.find(IMDPersistenceQueryService.class); + + @Override + public void handle() { + String key = getKey(); + String pk_billtype = (String) getHeadValue(IBillFieldGet.PK_BILLTYPE); + Integer objtype = (Integer) getBodyValue(IBillFieldGet.OBJTYPE); + + if (IBillFieldGet.CUSTOMER.equals(key) || IBillFieldGet.CUSTOMER_V.equals(key)) { + // 增加客户版本化处理 qinwfh 2021-07-05 + // 分别处理编辑客户和客户版本字段 + UFDate thisbilldate = getHeadValue(IBillFieldGet.BILLDATE); + Map customerPKtoVIDMap = new HashMap();// 接收根据customer返回的customer对customer_v的MAP值 + Map customerVIDtoPKMap = new HashMap();// 接收根据customer_v和单击日期返回的customer_v对customer的MAP值 + if (IBillFieldGet.CUSTOMER_V.equals(key)) { + // 根据客户customer_v去获取对应的customer + String[] customer_vid = new String[] { (String) getBodyValue(IBillFieldGet.CUSTOMER_V) }; + if (StringUtil.isEmptyWithTrim(customer_vid[0])) { + setBodyValue(null, IBillFieldGet.CUSTOMER); + } else { + try { + customerVIDtoPKMap = ServiceLocator.find(ICustomerPubService.class) + .getCustomerOIDByVid(customer_vid); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体客户CUSTOMER_V字段值 + if (customerVIDtoPKMap != null && !customerVIDtoPKMap.isEmpty() && customerVIDtoPKMap.size() > 0) { + setBodyValue(customerVIDtoPKMap.get(customer_vid[0]), IBillFieldGet.CUSTOMER); + } + } + } else { + // 根据客户customer和时间去获取对应最新的customer_v + String customer_oid = (String) getBodyValue(IBillFieldGet.CUSTOMER); + if (StringUtil.isEmptyWithTrim(customer_oid)) { + setBodyValue(null, IBillFieldGet.CUSTOMER_V); + } else { + Map customerAndDateMap = new HashMap(); + customerAndDateMap.put(customer_oid, thisbilldate); + try { + customerPKtoVIDMap = ServiceLocator.find(ICustomerPubService.class) + .getCustomerLastVIDByOidAndDate(customerAndDateMap); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体客户CUSTOMER字段值 + // 同时,考虑升级问题,历史数据可能没有Vid值,则设置为oid + if (customerPKtoVIDMap != null && customerPKtoVIDMap.size() != 0) { + setBodyValue(customerPKtoVIDMap.get(customer_oid), IBillFieldGet.CUSTOMER_V); + } else { + setBodyValue(customer_oid, IBillFieldGet.CUSTOMER_V); + } + } + } + super.doChange4RateWithCuSp(); + + // setHeadValueByFirstLine(IBillFieldGet.CUSTOMER); + if (IBillFieldGet.F2.equals(pk_billtype) || IBillFieldGet.F0.equals(pk_billtype)) { + if (ObjType.SUPPLIER.VALUE.intValue() != objtype) { + Map customerMap = new HashMap(); + try { + customerMap = setBodyChanel(); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 modify by zhongfsh3 + // 2019-06-01 + CustomerVO customerVO = (customerMap != null && customerMap.get("customerVO") != null) + ? (CustomerVO) customerMap.get("customerVO") + : null; + if (customerVO != null) { + CustFinanceVO[] finances = customerVO.getFinances(); + if (finances != null && finances.length > 0) { + String pk_org = (String) getHeadValue(IBillFieldGet.PK_ORG); + + for (CustFinanceVO custFinanceVO : finances) { + // 根据组织匹配过滤客户基本档案财务页签 + if (custFinanceVO.getPk_org().equals(pk_org)) { + String pk_currtype = custFinanceVO.getPk_currtype1(); + String pk_payitem = custFinanceVO.getPk_payterm(); + String pk_resppsn = custFinanceVO.getPk_resppsn1(); + String pk_respdept = custFinanceVO.getPk_respdept1(); + String pk_respdept_v = null; + if (pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + pk_respdept_v = service.queryDeptPkVidByPKAndDate(pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (pk_respdept != null + && !Objects.equals(pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (pk_respdept_v != null && !Objects.equals(pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + } + } + // 清空付款银行 + if (isClear(IBillFieldGet.PAYACCOUNT, IBillFieldGet.CUSTOMER)) { + setBodyValue(null, IBillFieldGet.PAYACCOUNT); // 2012版本判断银行账户是否停用,停用清空 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.CUSTOMER); + String cusBankAccs = (customerMap != null && customerMap.get("cusBankaccs") != null) + ? (String) customerMap.get("cusBankaccs") + : null; + String defaultBankSubAccCurrtype = (customerMap != null + && customerMap.get("defaultBankSubAccCurrtype") != null) + ? ((BankAccSubVO) customerMap.get("defaultBankSubAccCurrtype")).getPk_currtype() + : null; + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(cusBankAccs, IBillFieldGet.PAYACCOUNT); + } + // setHeadValueByFirstLine(IBillFieldGet.PAYACCOUNT); + } + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER), IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER_V), IBillFieldGet.ORDERCUBASDOC_V); + } else if ((IBillFieldGet.F1.equals(pk_billtype) || IBillFieldGet.F3.equals(pk_billtype))) { + if (ObjType.CUSTOMER.VALUE.intValue() == objtype) { + Map customerMap = new HashMap(); + try { + customerMap = setBodyChanel(); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 modify by zhongfsh3 + // 2019-06-01 + CustomerVO customerVO = (customerMap != null && customerMap.get("customerVO") != null) + ? (CustomerVO) customerMap.get("customerVO") + : null; + if (customerVO != null) { + CustFinanceVO[] finances = customerVO.getFinances(); + if (finances != null && finances.length > 0) { + String pk_org = (String) getHeadValue(IBillFieldGet.PK_ORG); + + for (CustFinanceVO custFinanceVO : finances) { + // 根据组织匹配过滤客户基本档案财务页签 + if (custFinanceVO.getPk_org().equals(pk_org)) { + String pk_currtype = custFinanceVO.getPk_currtype1(); + String pk_payitem = custFinanceVO.getPk_payterm(); + String pk_resppsn = custFinanceVO.getPk_resppsn1(); + String Pk_respdept = custFinanceVO.getPk_respdept1(); + String Pk_respdept_v = null; + if (Pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + Pk_respdept_v = service.queryDeptPkVidByPKAndDate(Pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (Pk_respdept != null + && !Objects.equals(Pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(Pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (Pk_respdept_v != null && !Objects.equals(Pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(Pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + } + } + // 清空收款银行 + if (isClear(IBillFieldGet.RECACCOUNT, IBillFieldGet.CUSTOMER)) { + setBodyValue(null, IBillFieldGet.RECACCOUNT);// 2012版本 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.CUSTOMER); + String cusBankAccs = (customerMap != null && customerMap.get("cusBankaccs") != null) + ? (String) customerMap.get("cusBankaccs") + : null; + String defaultBankSubAccCurrtype = (customerMap != null + && customerMap.get("defaultBankSubAccCurrtype") != null) + ? ((BankAccSubVO) customerMap.get("defaultBankSubAccCurrtype")).getPk_currtype() + : null; + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(cusBankAccs, IBillFieldGet.RECACCOUNT); + } + } + } + + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + // setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER), + // IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + // setBodyValue(getBodyValue(IBillFieldGet.CUSTOMER_V), + // IBillFieldGet.ORDERCUBASDOC_V); + } else if (IBillFieldGet.SUPPLIER.equals(key) || IBillFieldGet.SUPPLIER_V.equals(key)) { + // 增加供应商版本化处理 + // 增加版本化处理 qinwfh 2021-07-05 + // 分别处理编辑供应商和供应商版本字段 + Map supplierPKtoVIDMap = new HashMap();// 接收根据supplier返回的supplier对supplier_v的MAP值 + Map supplierVIDtoPKMap = new HashMap();// 接收根据supplier_v和单击日期返回的supplier_v对customer的MAP值 + UFDate thisbilldate = getHeadValue(IBillFieldGet.BILLDATE); + if (IBillFieldGet.SUPPLIER_V.equals(key)) { + // 根据供应商supplier_v去获取对应的supplier + String[] supplier_vid = new String[] { (String) getBodyValue(IBillFieldGet.SUPPLIER_V) }; + if (StringUtil.isEmptyWithTrim(supplier_vid[0])) { + setBodyValue(null, IBillFieldGet.SUPPLIER); + setBodyValue(null, "def30"); + setBodyValue(null, "def31"); + setBodyValue(null, "def32"); + setBodyValue(null, "def33"); + } else { + try { + supplierVIDtoPKMap = ServiceLocator.find(ISupplierPubService.class) + .getSupplierOIDByVid(supplier_vid); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体供应商SUPPLIER_V字段值 + if (supplierVIDtoPKMap != null && !supplierVIDtoPKMap.isEmpty() && supplierVIDtoPKMap.size() > 0) { + setBodyValue(supplierVIDtoPKMap.get(supplier_vid[0]), IBillFieldGet.SUPPLIER); + } + } + } else { + // 根据供应商supplier和时间去获取对应最新的supplier_v + String supplier_oid = (String) getBodyValue(IBillFieldGet.SUPPLIER); + if (StringUtil.isEmptyWithTrim(supplier_oid)) { + setBodyValue(null, IBillFieldGet.SUPPLIER_V); + setBodyValue(null, "def30"); + setBodyValue(null, "def31"); + setBodyValue(null, "def32"); + setBodyValue(null, "def33"); + } else { + Map supplierAndDateMap = new HashMap(); + supplierAndDateMap.put(supplier_oid, thisbilldate); + try { + supplierPKtoVIDMap = ServiceLocator.find(ISupplierPubService.class) + .getSupplierLastVIDByOidAndDate(supplierAndDateMap); + } catch (BusinessException e1) { + ExceptionUtils.wrappException(e1); + } + // 设置表头和表体供应商SUPPLIER_V字段值 + // 考虑升级问题,当Vid为空时,将oid值赋值给vid + if (supplierPKtoVIDMap != null && supplierPKtoVIDMap.size() != 0) { + setBodyValue(supplierPKtoVIDMap.get(supplier_oid), IBillFieldGet.SUPPLIER_V); + } else { + setBodyValue(supplier_oid, IBillFieldGet.SUPPLIER_V); + } + } + } + super.doChange4RateWithCuSp(); + + if (IBillFieldGet.F3.equals(pk_billtype) || IBillFieldGet.F1.equals(pk_billtype)) { + if (ObjType.CUSTOMER.VALUE.intValue() != objtype) { + String supplier = (String) getBodyValue(IBillFieldGet.SUPPLIER); + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 add by zhongfsh3 2019-06-01 + SupplierVO supplierVO = BillEventHandlerUtil.getSupplierVO(supplier); + if (supplierVO != null && supplierVO.getSupfinance() != null) { + SupFinanceVO[] financeVOs = supplierVO.getSupfinance(); + String pk_org = (String) getBodyValue(IBillFieldGet.PK_ORG); + if (financeVOs != null && financeVOs.length > 0) { + for (SupFinanceVO financeVO : financeVOs) { + // 根据组织匹配过滤客户基本档案财务页签 + if (financeVO.getPk_org().equals(pk_org)) { + String pk_currtype = financeVO.getPk_currtype(); + String pk_payitem = financeVO.getPk_payterm(); + String pk_resppsn = financeVO.getPk_resppsn(); + String Pk_respdept = financeVO.getPk_respdept(); + String Pk_respdept_v = null; + if (Pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + Pk_respdept_v = service.queryDeptPkVidByPKAndDate(Pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (Pk_respdept != null + && !Objects.equals(Pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(Pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (Pk_respdept_v != null && !Objects.equals(Pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(Pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + + } + } + // 泰开项目客开,带出供应商辅助余额111 + // 核算账薄编码 + if (supplierVO != null) { + PayBillVO billvo = (PayBillVO) aggvo.getParent(); + String pk_relorg = billvo.getPk_fiorg(); + String accbookCode = getAccbookCode(pk_relorg); + // 单据日期 + UFDate billdate = billvo.getBilldate(); + // 当前时间 + Long serverDate = System.currentTimeMillis(); + // 如果有单据号则为修改,修改时单据日期选择现在 + // 单据号 + String billno = billvo.getBillno(); + if (billno != null) { + billdate = new UFDate(serverDate); + } + getAccountingSubject(accbookCode, billdate, supplierVO.getCode(), supplierVO.getName()); + setBodyValue(endlocamount220201, "def30"); + setBodyValue(endlocamount224103, "def31"); + setBodyValue(endlocamount224105, "def32"); + setBodyValue(endlocamount224101, "def33"); + } + // 清空收款银行 + if (isClear(IBillFieldGet.RECACCOUNT, IBillFieldGet.SUPPLIER)) { + setBodyValue(null, IBillFieldGet.RECACCOUNT);// 2012版本 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.SUPPLIER); + + String supBankAccs = BillEventHandlerUtil.getDefaultSupBankAccs(supplier); + String defaultBankSubAccCurrtype = BillEventHandlerUtil + .getDefaultBankSubAccCurrtypeByAccpk(supBankAccs); + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + String headCurrtype = (String) getHeadValue(IBillFieldGet.PK_CURRTYPE); + String headCustomer = (String) getHeadValue(IBillFieldGet.CUSTOMER); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(supBankAccs, IBillFieldGet.RECACCOUNT); + } + if (headCurrtype != null && headCustomer != null && supplier != null && editRowCurrtype != null) { + if (editRowCurrtype.equals(headCurrtype) && supplier.equals(headCustomer)) { + if (defaultBankSubAccCurrtype != null && headCurrtype.equals(defaultBankSubAccCurrtype)) { + // setHeadValueByFirstLine(IBillFieldGet.RECACCOUNT); + } + } + } + // setHeadValueByFirstLine(IBillFieldGet.RECACCOUNT); + } + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER), IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER_V), IBillFieldGet.ORDERCUBASDOC_V); + + } else if ((IBillFieldGet.F2.equals(pk_billtype) || IBillFieldGet.F0.equals(pk_billtype))) { + if (ObjType.SUPPLIER.VALUE.intValue() == objtype) { + String supplier = (String) getBodyValue(IBillFieldGet.SUPPLIER); + + // 带出财务信息页签 默认 币种、收付款协议、业务员、部门 add by zhongfsh3 2019-06-01 + SupplierVO supplierVO = BillEventHandlerUtil.getSupplierVO(supplier); + if (supplierVO != null && supplierVO.getSupfinance() != null) { + SupFinanceVO[] financeVOs = supplierVO.getSupfinance(); + String pk_org = (String) getBodyValue(IBillFieldGet.PK_ORG); + if (financeVOs != null && financeVOs.length > 0) { + for (SupFinanceVO financeVO : financeVOs) { + // 根据组织匹配过滤客户基本档案财务页签 + if (financeVO.getPk_org().equals(pk_org)) { + String pk_currtype = financeVO.getPk_currtype(); + String pk_payitem = financeVO.getPk_payterm(); + String pk_resppsn = financeVO.getPk_resppsn(); + String Pk_respdept = financeVO.getPk_respdept(); + String Pk_respdept_v = null; + if (Pk_respdept != null) { + try { + UFDate billdate = getHeadValue(IBillFieldGet.BILLDATE); + ICurrentVersionService service = ServiceLocator + .find(ICurrentVersionService.class); + Pk_respdept_v = service.queryDeptPkVidByPKAndDate(Pk_respdept, billdate); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + // 值不为空且发生改变,自动带出 + if (pk_currtype != null + && !Objects.equals(pk_currtype, getBodyValue(BaseItemVO.PK_CURRTYPE))) { + bodyAfterEdit(pk_currtype, IBillFieldGet.PK_CURRTYPE); + } + if (pk_payitem != null + && !Objects.equals(pk_payitem, getBodyValue(BaseItemVO.PK_PAYTERM))) { + bodyAfterEdit(pk_payitem, IBillFieldGet.PK_PAYTERM); + } + if (pk_resppsn != null + && !Objects.equals(pk_resppsn, getBodyValue(BaseItemVO.PK_PSNDOC))) { + bodyAfterEdit(pk_resppsn, IBillFieldGet.PK_PSNDOC); + } + if (Pk_respdept != null + && !Objects.equals(Pk_respdept, getBodyValue(BaseItemVO.PK_DEPTID))) { + bodyAfterEdit(Pk_respdept, IBillFieldGet.PK_DEPTID); + } + if (Pk_respdept_v != null && !Objects.equals(Pk_respdept_v, + getBodyValue(IBillFieldGet.PK_DEPTID_V))) { + bodyAfterEdit(Pk_respdept_v, IBillFieldGet.PK_DEPTID_V); + } + break; + } + } + + } + } + + // 清空收款银行 + if (isClear(IBillFieldGet.PAYACCOUNT, IBillFieldGet.SUPPLIER)) { + setBodyValue(null, IBillFieldGet.PAYACCOUNT);// 2012 + } + setBodyValue(null, IBillFieldGet.FREECUST); + // setHeadValueByFirstLine(IBillFieldGet.SUPPLIER); + + String supBankAccs = BillEventHandlerUtil.getDefaultSupBankAccs(supplier); + String defaultBankSubAccCurrtype = BillEventHandlerUtil + .getDefaultBankSubAccCurrtypeByAccpk(supBankAccs); + String editRowCurrtype = (String) getBodyValueByRowIndex(IBillFieldGet.PK_CURRTYPE, getRowindex()); + String headCurrtype = (String) getHeadValue(IBillFieldGet.PK_CURRTYPE); + String headCustomer = (String) getHeadValue(IBillFieldGet.CUSTOMER); + if (null != defaultBankSubAccCurrtype && null != editRowCurrtype + && defaultBankSubAccCurrtype.equals(editRowCurrtype)) { + setBodyValue(supBankAccs, IBillFieldGet.PAYACCOUNT); + } + if (headCurrtype != null && headCustomer != null && supplier != null && editRowCurrtype != null) { + if (editRowCurrtype.equals(headCurrtype) && supplier.equals(headCustomer)) { + if (defaultBankSubAccCurrtype != null && headCurrtype.equals(defaultBankSubAccCurrtype)) { + // setHeadValueByFirstLine(IBillFieldGet.RECACCOUNT); + } + } + } + } + } + // 订单客户与发票客户不做联动 addBy baoxina 恢复by baoxina + // setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER), + // IBillFieldGet.ORDERCUBASDOC); + // 编辑客户版本字段时联动订单客户版本字段 qinwfh 2021-07-06 + // setBodyValue(getBodyValue(IBillFieldGet.SUPPLIER_V), + // IBillFieldGet.ORDERCUBASDOC_V); + } + } + + /** + * nccloud/api/gl/accountrep/assbalance 查询辅助余额接口.查220201/224103/224105的科目的期末余额 + * + * @param accbookCode 辅助核算编码 + * @param billdate 单据日期 + * @param checkvaluecode 供应商编码 + * @param checkvaluename 供应商名称 + */ + public void getAccountingSubject(String acccode, UFDate date, String code, String name) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + String strdate = formatter.format(date.toDate()); + + endlocamount220201 = getendlocamountBy(queryAssBalance(getRequest(acccode, strdate, code, name))); + endlocamount224103 = getendlocamountBy(queryAssBalance(getRequest1(acccode, strdate, code, name))); + endlocamount224105 = getendlocamountBy(queryAssBalance(getRequest2(acccode, strdate, code, name))); + endlocamount224101 = getendlocamountBy(queryAssBalance(getRequest3(acccode, strdate, code, name))); + } + + /** + * 解析json获取期末余额 + * + * @param json + * @return 期末余额 endlocamount + */ + public String getendlocamountBy(List> data) { + if (data == null) { + return null; + } + String str2 = (String) data.get(0).get("endlocamount"); + String str3 = (String) data.get(0).get("endorint"); + if (str2 == null || "".equals(str2)) { + str2 = "0.0"; + } else { + if ("借".equals(str3)) { + str2 = "-" + str2; + } + } + return str2; + } + + public List> queryAssBalance(String json) { + NCCRestUtils.initInvocationInfo(); + GLQueryWebVO qryWebVO = (GLQueryWebVO) new Gson().fromJson(json, GLQueryWebVO.class); + List> data = null; + try { + data = ServiceLocator.find(IResourceService.class).queryAssBalanceByVO(qryWebVO); + } catch (Exception e) { + e.printStackTrace(); + } + if (data == null) { + return null; + } + return data; + } + + private static String getRequest(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "220201"); + valueMap.put("checkvaluename", "应付款"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + private static String getRequest1(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "224103"); + valueMap.put("checkvaluename", "单位"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + private static String getRequest2(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "224105"); + valueMap.put("checkvaluename", "运费"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + private static String getRequest3(String accbookCode, String strdate, String code, String name) { + Map map = new HashMap(); + List accbookcodeList = new ArrayList(); + accbookcodeList.add(accbookCode); + map.put("accbookCode", accbookcodeList); + map.put("queryByPeriod", "false"); + map.put("inclUntallyed", "true"); + map.put("inclTransfer", "true"); + map.put("inclError", "true"); + map.put("inclReclassify", "true"); + map.put("date", strdate); + map.put("endDate", strdate); + map.put("currtypeCode", "本币"); + + List> queryObjList = new ArrayList>(); + Map quyMap = new HashMap(); + Map typeMap = new HashMap(); + + typeMap.put("checktypecode", "会计科目"); + typeMap.put("checktypename", "会计科目"); + quyMap.put("checktype", typeMap); + List> valueList = new ArrayList>(); + Map valueMap = new HashMap(); + + valueMap.put("checkvaluecode", "224101"); + valueMap.put("checkvaluename", "保证金"); + valueList.add(valueMap); + quyMap.put("checkvalue", valueList); + queryObjList.add(quyMap); + // + Map quyMap1 = new HashMap(); + Map typeMap1 = new HashMap(); + + typeMap1.put("checktypecode", "0019"); + typeMap1.put("checktypename", "供应商档案"); + quyMap1.put("checktype", typeMap1); + List> valueList1 = new ArrayList>(); + Map valueMap1 = new HashMap(); + + valueMap1.put("checkvaluecode", code); + valueMap1.put("checkvaluename", name); + valueList1.add(valueMap1); + quyMap1.put("checkvalue", valueList1); + queryObjList.add(quyMap1); + map.put("queryObj", queryObjList); + return new Gson().toJson(map); + } + + /** + * + * @return 获取核算账薄code + */ + public String getAccbookCode(String pk_relorg) { + List bills = null; + String sql = "pk_relorg = '" + pk_relorg + "' and dr = 0 "; + String accbookCode = ""; + try { + bills = (List) imDPersistenceService.queryBillOfVOByCond(AccountingBookVO.class, sql, + false); + if (bills.size() != 0) { + accbookCode = bills.get(0).getCode(); + } + } catch (MetaDataException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return accbookCode; + + } + + private Map setBodyChanel() throws BusinessException { + String pk_customer = (String) getBodyValue(IBillFieldGet.CUSTOMER); + String pk_org = (String) getHeadValue(IBillFieldGet.PK_ORG); + String chanel = null; + Map customerMap = new HashMap(); + Map> cuspAfterEditHandler = new HashMap>(); + if (null != pk_customer) { + cuspAfterEditHandler = BillEventHandlerUtil.getCuspAfterEditHandler(); + if (null != cuspAfterEditHandler) { + customerMap = cuspAfterEditHandler.get(pk_customer + pk_org); + if (customerMap == null) { + BillEventHandlerUtil.setCuspAfterEditHandler(pk_customer, pk_org); + cuspAfterEditHandler = BillEventHandlerUtil.getCuspAfterEditHandler(); + customerMap = cuspAfterEditHandler.get(pk_customer + pk_org); + } + } + if (customerMap != null && customerMap.get("custsaleVOs") != null) { + CustsaleVO[] vos = (CustsaleVO[]) customerMap.get("custsaleVOs"); + if (null != vos && vos.length > 0 && null != vos[0]) { + chanel = vos[0].getChannel(); + } + } + } + for (int i = 0; i < aggvo.getChildrenVO().length; i++) { + setBodyValue(chanel, IBillFieldGet.SO_TRANSTYPE); + } + return customerMap; + } + + /** + * 设置表体值并触发编辑事件 + * + * @param newValue + * @param fieldName + * @author zhongfsh3 + * @date 2019年6月12日 + */ + private void bodyAfterEdit(Object newValue, String fieldName) { + // 设置表体值 + setBodyValue(newValue, fieldName); + // 触发编辑事件 + Cell oldCell = getEvent().getCard().getBody().getModel().getRows()[getRowindex()].getCell(fieldName); + Cell newCell = ArapUiUtil.copyCell(oldCell); + newCell.setValue(newValue); + ChangedRow changeRow = new ChangedRow(newCell, oldCell, + getEvent().getCard().getBody().getModel().getRows()[getRowindex()].getRowid()); + CardBodyAfterEditEvent event = new CardBodyAfterEditEvent(fieldName, getEvent().getCard(), getRowindex(), + new ChangedRow[] { changeRow }); + AfterEditEventUtil.bodyAfterEdit(event, aggvo, getEventInfo()); + } + + private List keys = Arrays.asList(new String[] { IBillFieldGet.CUSTOMER, IBillFieldGet.SUPPLIER, + IBillFieldGet.SUPPLIER_V, IBillFieldGet.CUSTOMER_V }); + + @Override + protected Collection getFilterKey() { + return keys; + } + + /** + * 编辑供应商后,银行账户是否停用bd_bankaccbas(银行账户)bd_bankaccsub(客商银行账户子户) + * + * @param key银行账户相关字段 ,editkey 编辑的字段 + * @return + * @throws BusinessException + */ + private boolean isClear(String key, String editKey) { + boolean flag = true; + String keyValue = (String) getBodyValue(key); + String editValue = (String) getBodyValue(editKey);// 编辑的字段的值 + try { + CustBankaccUnionVO[] custBank = ServiceLocator.find(ICustBankaccQueryService.class) + .queryCustBankaccUnionVOsByCust(editValue, IBillFieldGet.SUPPLIER.equals(editKey) ? 3 : 1, true); + if (ArrayUtils.isEmpty(custBank)) { + return true; + } + + for (CustBankaccUnionVO vo : custBank) { + if (vo.getBankaccbasVO() == null) { + continue; + } + Integer enable = (Integer) vo.getAttributeValue("a.enablestate"); + if (enable == null || (enable != null && enable != 2)) { + continue; + } + String pk_bank = (String) vo.getAttributeValue("pk_bankaccsub"); + if (StringUtil.isEmptyWithTrim(pk_bank)) { + continue; + } + if (pk_bank.equals(keyValue)) { + flag = false; + break; + } + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + + } + if (editValue == null) { + return true; + } + return flag; + + } + +} diff --git a/gl/src/private/nccloud/pubimpl/gl/lightgl/assdetail/AssDetailBO.java b/gl/src/private/nccloud/pubimpl/gl/lightgl/assdetail/AssDetailBO.java new file mode 100644 index 0000000..ac000e1 --- /dev/null +++ b/gl/src/private/nccloud/pubimpl/gl/lightgl/assdetail/AssDetailBO.java @@ -0,0 +1,1351 @@ +package nccloud.pubimpl.gl.lightgl.assdetail; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.glcom.ass.assitem.cache.AccAssItemCache; +import nc.bs.logging.Logger; +import nc.gl.account.glconst.CurrTypeConst; +import nc.gl.utils.DataFormatUtilGL; +import nc.gl.utils.GLMultiLangUtil; +import nc.itf.bd.pub.IBDMetaDataIDConst; +import nc.itf.fi.pub.Currency; +import nc.itf.fi.pub.MeasdocUtils; +import nc.itf.gl.pub.ILinkQueryParamTransfer; +import nc.pub.gl.query.CBalanceAssTool; +import nc.pub.gl.query.GlQueryVOAssTool; +import nc.pubitf.accperiod.AccountCalendar; +import nc.pubitf.bd.accessor.GeneralAccessorFactory; +import nc.pubitf.bd.accessor.IGeneralAccessor; +import nc.ui.fi.uforeport.BSDataSourceControl; +import nc.vo.bd.accassitem.AccAssItemVO; +import nc.vo.bd.accessor.IBDData; +import nc.vo.bd.accessor.bankaccsub.BankaccsubBDDataVO; +import nc.vo.bd.account.AccountVO; +import nc.vo.bd.account.pub.AccountGLSimpleVO; +import nc.vo.bd.material.MaterialVO; +import nc.vo.bd.pub.BDCacheQueryUtil; +import nc.vo.fipub.freevalue.account.proxy.AccAssGL; +import nc.vo.fipub.freevalue.util.FreeValueDefUtil; +import nc.vo.fipub.utils.StrTools; +import nc.vo.gateway60.accountbook.AccountBookUtil; +import nc.vo.gateway60.itfs.AccountByPkThreadCache; +import nc.vo.gateway60.itfs.AccountUtilGL; +import nc.vo.gateway60.itfs.CalendarUtilGL; +import nc.vo.gl.detailbooks.DetailBSKey; +import nc.vo.gl.detailbooks.DetailBSVO; +import nc.vo.glcom.account.Balanorient; +import nc.vo.glcom.ass.AssAccessorManager; +import nc.vo.glcom.ass.AssVO; +import nc.vo.glcom.balance.GLQueryObj; +import nc.vo.glcom.balance.GlQryFormatVO; +import nc.vo.glcom.balance.GlQueryVO; +import nc.vo.glcom.tools.BaseCorpChooser; +import nc.vo.jcom.util.Convertor; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDate; +import nc.vo.pub.lang.UFDateTime; +import nc.vo.pub.lang.UFDouble; +import nccloud.dto.gl.lightgl.displayformattool.ShowContentCenter; +import nccloud.pub.gl.lightgl.ColumnInfo; +import nccloud.pub.gl.lightgl.IColumnInfo; +import nccloud.pub.gl.tool.ReportExportUtil; +import nccloud.pubimpl.gl.account.AccountRepUtil; +import nccloud.pubimpl.gl.account.GLReportFormat; +import nccloud.pubimpl.gl.util.JsonUtils; + +public class AssDetailBO { + public Map queryAssBalance(Map params) throws BusinessException { + BSDataSourceControl envInit = initEnvirment(params); + try { + GlQueryVO qryvo = null; + // 判断是否为联查 + if (params.get("link") != null) { + Class clazz = Class.forName(params.get("class").toString()); + ILinkQueryParamTransfer transfor = (ILinkQueryParamTransfer) clazz.newInstance(); + qryvo = (GlQueryVO) transfor.transLinkQueryParam(params); + params.put("pageindex", "1"); + } else { + qryvo = getQueryVO(params); + AccountRepUtil.checkQueryVO(qryvo); + AccountRepUtil.checkPeriodSpan(qryvo); + checkQryObjs(qryvo); + } + DetailList dataList = new DetailList(); + Integer pageindex = JsonUtils.getInteger(params.get("pageindex")); + Integer pagedirection = JsonUtils.getInteger(params.get("pagedirection")); + HashMap dataMap = dealQuery(qryvo, pageindex - 1, dataList, pagedirection); + return getRes(dataList.getQueryVO(), dataMap); + } catch (Exception e) { + Logger.error(e.getMessage(), e); + throw new BusinessException(e.getMessage(), e); + } finally { + if (envInit != null) { + envInit.afterPress("", null, null); + } + } + } + + /** + * 初始化数据源环境变量(报表联查跨数据源) + * + * @param params + * @throws BusinessException + */ + public BSDataSourceControl initEnvirment(Map params) throws BusinessException { + if (params.containsKey("env")) { + try { + String env = (String) params.get("env"); + String[] envs = env.replace("[", "").replace("]", "").replaceAll("\"", "").split(","); + BSDataSourceControl envInit = new BSDataSourceControl(); + envInit.beforePress(null, envs, null); + return envInit; + } catch (Exception e) { + Logger.error(e.getMessage()); + throw new BusinessException(e.getMessage(), e); + } + } + return null; + } + + /** + * 根据参数获取当页数据 + * + * @param qryvo + * @param params + * @param dataList + * @return + * @throws Exception + */ + public HashMap dealQuery(GlQueryVO qryvo, int pageindex, DetailList dataList, Integer pagedirection) + throws Exception { + HashMap dataMap = new HashMap(); + dataList.setBillModel(new AssDetailWebModel()); + dataList.setQueryVO(qryvo); + int totalPage = dataList.getPageNums(); + dataList.getBillModel().preFilterDataFromBalance(qryvo); +// Integer pageindex = JsonUtils.getInteger(params.get("pageindex"));// 第几页,从1开始 + DetailBSVO[] vos = (DetailBSVO[]) dataList.goPage(pageindex); + int pageIndexCopy = pageindex; + while ((pagedirection == null || pagedirection == 0) && vos.length == 0 && pageindex + 1 < totalPage) {//辅助和科目放表头,点下一页前端过滤空数据改为后端过滤。把数据和页面数返回给前端 +// pageindex++; //如果没有余额totalPage为0,不会进入循环。 + pageindex = pageindex + 1; + vos = (DetailBSVO[]) dataList.goPage(pageindex); + } + while ((pagedirection != null && pagedirection == 1) && vos.length == 0 && pageindex + 1 > 0) {//辅助和科目放表头,点前一页前端过滤空数据改为后端过滤。把数据和页面数返回给前端 +// pageindex++; //如果没有余额totalPage为0,不会进入循环。 + pageindex = pageindex - 1; + vos = (DetailBSVO[]) dataList.goPage(pageindex); + } + if (pagedirection != null && pagedirection == 1 && (vos == null || vos.length == 0)) {//场景:点了返回第一页,第一页没数去了下一页。然后点上一页,前面页都没数所以要往后找有数的 + pageindex = pageIndexCopy; + while (vos.length == 0 && pageindex + 1 < totalPage) { + pageindex = pageindex + 1; + vos = (DetailBSVO[]) dataList.goPage(pageindex); + } + } + dataList.getQueryVO().setIVoucherState(totalPage); + dataMap.put("datavos", vos); + dataMap.put("pageindex", pageindex + 1);//比实际页面少一,这里补上 + return dataMap; + } + + public GlQueryVO constructQueryVO(Map params) throws Exception { + GlQueryVO qryvo = null; + if (params.get("link") != null) { + Class clazz = Class.forName(params.get("class").toString()); + ILinkQueryParamTransfer transfor = (ILinkQueryParamTransfer) clazz.newInstance(); + qryvo = (GlQueryVO) transfor.transLinkQueryParam(params); + params.put("pageindex", "1"); + } else { + qryvo = getQueryVO(params); + AccountRepUtil.checkQueryVO(qryvo); + AccountRepUtil.checkPeriodSpan(qryvo); + checkQryObjs(qryvo); + } + return qryvo; + } + + /** + * 小友机器人智能查账,补充必要参数 + * + * @param params + * @throws BusinessException + */ + private void fillParamMap(Map params) throws BusinessException { + // 小友参数,期间yyyyMM-yyyyMM + String companyPK = (String) ((Map) params.get("companychoose")).get("pk_org"); + String accountingPeriod = JsonUtils.getStrEmpty(params.get("accountingPeriod")); + String auxiliaryFiles = JsonUtils.getStrEmpty(params.get("auxiliaryFiles")); + String accountSubject = JsonUtils.getStrNULL(params.get("accountSubject")); + // 处理账簿、期间、辅助项、科目等参数 + List accountingbook_pks = new ArrayList(); + String pk_accountingbook = AccountRepUtil.getAccountingbookPKByOrgPK(companyPK); + accountingbook_pks.add(pk_accountingbook); + UFDate bizDate = new UFDate(InvocationInfoProxy.getInstance().getBizDateTime()); + AccountCalendar calendar = CalendarUtilGL.getAccountCalendarByAccountBook(pk_accountingbook); + calendar.setDate(bizDate); + String periodyear = calendar.getYearVO().getPeriodyear(); + if (StrTools.isEmptyStr(accountingPeriod) || accountingPeriod.length() > 40 || !accountingPeriod.matches("\\d{6}-\\d{6}[^\\s]*")) { + throw new BusinessException( + "会计期间格式不正确!请按照如下示例:" + periodyear + "01" + StrTools.PERIODSPLIT + periodyear + "03"); + } + String[] splitPeriod = accountingPeriod.split(StrTools.PERIODSPLIT); + String year_begin = splitPeriod[0].substring(0, 4); + String year_end = splitPeriod[1].substring(0, 4); + String period_begin = splitPeriod[0].substring(4); + String period_end = splitPeriod[1].substring(4); + if (StrTools.isEmptyStr(year_begin)) { + year_begin = periodyear; + } + if (StrTools.isEmptyStr(year_end)) { + year_end = year_begin; + } + if (StrTools.isEmptyStr(period_begin)) { + period_begin = calendar.getMonthVO().getAccperiodmth(); + } + if (StrTools.isEmptyStr(period_end)) { + period_end = period_begin; + } + String commaEn = ","; + String commaCh = ","; + String[] itemname = auxiliaryFiles.contains(commaEn) ? auxiliaryFiles.split(commaEn) + : auxiliaryFiles.split(commaCh); + // 设置默认参数 + params.put("pk_glorgbooks", accountingbook_pks); + params.put("selectionState", true); + params.put("beginyear", year_begin); + params.put("endyear", year_end); + params.put("beginperiod", period_begin); + params.put("endperiod", period_end); + params.put("begindate", year_begin + StrTools.PERIODSPLIT + period_begin + StrTools.PERIODSPLIT + "01"); + params.put("enddate", year_begin + StrTools.PERIODSPLIT + period_begin + StrTools.PERIODSPLIT + "01"); + params.put("includeUnTallyed", true); + params.put("includeError", true); + params.put("includeTransfer", true); + params.put("includeReClassify", false); + params.put("currTypeName", CurrTypeConst.QUERY_LOC_CURRTYPE()); + params.put("return_currtype", CurrTypeConst.LOC_RETURN); + params.put("sortType", "0"); + params.put("balanceDirection", Balanorient.TWOWAY); + params.put("pageindex", "1"); + // 查询对象:会计科目 + List> qryObjs = new ArrayList>(); + Map accountQryObj = new HashMap(6); + String MultiLang_Account = NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031");/** @res * "会计科目" */ + accountQryObj.put("name", MultiLang_Account); + accountQryObj.put("pk_checktype", MultiLang_Account); + if (!StrTools.isEmptyStr(accountSubject)) { + StringBuilder pk_accasoa = new StringBuilder(); + // 1、科目范围 1001-1002 + if (accountSubject.contains(StrTools.PERIODSPLIT)) { + String[] accountScope = accountSubject.split(StrTools.PERIODSPLIT); + AccountGLSimpleVO[] accvos = AccountUtilGL.querySimpleAccountVOs(new String[]{pk_accountingbook}, + accountScope[0], accountScope[1], "1", "1", true, false, + AccountRepUtil.getPowerCond(), bizDate.toString()); + if (accvos != null && accvos.length > 0) { + for (AccountGLSimpleVO accvo : accvos) { + pk_accasoa.append(accvo.getPk_accasoa()).append(commaEn); + } + } else { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20021101", "UPP20021101-000264")/* @res "科目编码" */ + + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000230")/* @res "查询范围"*/ + + accountSubject + + NCLangRes4VoTransl.getNCLangRes().getStrByID("20021201", "UPP20021201-000322")/*@res "没有符合条件的数据!"*/); + } + // 2、指定一个或多个科目编码,分隔符是中英文的逗号:1001 1001,1002,1003 + } else { + accountSubject = accountSubject.replaceAll(" ", ""); + String[] accountCodes = accountSubject.contains(commaCh) ? accountSubject.split(commaCh) + : accountSubject.split(commaEn); + Map accountCodesMap = new Hashtable(accountCodes.length);// 错误的科目编码 + for (String code : accountCodes) { + accountCodesMap.put(code, ""); + } + AccountVO[] accvos = AccountByPkThreadCache.getInstance().getAccountVOByCodes(pk_accountingbook, + accountCodes, bizDate.toString()); + if (accvos != null && accvos.length > 0) { + for (AccountVO accvo : accvos) { + if (accvo != null) { + pk_accasoa.append(accvo.getPk_accasoa()).append(commaEn); + accountCodesMap.remove(accvo.getCode()); + } + } + } + if (!accountCodesMap.isEmpty()) { + StringBuilder errAccCode = new StringBuilder(); + for (String code : accountCodesMap.keySet()) { + errAccCode.append(code).append(commaEn); + } + errAccCode.deleteCharAt(errAccCode.length() - 1); + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20021101", "UPP20021101-000264")/* @res "科目编码" */ + + errAccCode.toString() + + NCLangRes4VoTransl.getNCLangRes().getStrByID("20021505", "UPP20021505-000146")/* @res "不存在" */); + } + } + if (pk_accasoa.length() > 0) { + pk_accasoa.deleteCharAt(pk_accasoa.length() - 1); + } + accountQryObj.put("pk_checkvalue", pk_accasoa.toString()); + } + accountQryObj.put("headEle", false); + accountQryObj.put("accEle", false); + accountQryObj.put("includeSub", false); + qryObjs.add(accountQryObj); + // 查询对象:辅助项 + if (itemname != null && itemname.length > 0) { + IGeneralAccessor accessor = GeneralAccessorFactory.getAccessor(IBDMetaDataIDConst.ACCASSITEM); + String groupId = InvocationInfoProxy.getInstance().getGroupId(); + StringBuilder errChecktype = new StringBuilder();// 错误的辅助项名称 + for (String checktypename : itemname) { + checktypename = checktypename.trim(); + if (StrTools.isEmptyStr(checktypename)) { + continue; + } + IBDData bdData = accessor.getDocByNameWithMainLang(groupId, checktypename); + if (bdData == null) { + errChecktype.append(checktypename).append(commaEn); + } + // 如果存在错误数据,最终会抛错,就不必构造对象了 + if (errChecktype.length() == 0) { + Map qryObj = new HashMap(6); + qryObj.put("name", bdData.getName().toString()); + qryObj.put("pk_checktype", bdData.getPk()); + qryObj.put("pk_checkvalue", ""); + qryObj.put("headEle", false); + qryObj.put("accEle", false); + qryObj.put("includeSub", false); + qryObjs.add(qryObj); + } + } + if (errChecktype.length() > 0) { + errChecktype.deleteCharAt(errChecktype.length() - 1); + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000058")/* @res*"辅助核算"*/ + + errChecktype.toString() + + NCLangRes4VoTransl.getNCLangRes().getStrByID("20021505", "UPP20021505-000146")/* @res "不存在" */); + } + } + params.put("qryObjs", qryObjs); + } + + /** + * nc.ui.gl.assbalance.QueryDialogPanel.getqryVO() + * + * @param params + * @return + * @throws BusinessException + */ + public GlQueryVO getQueryVO(Map params) throws BusinessException { + // 小友机器人智能查账 + if (params.containsKey("companyName")) { + fillParamMap(params); + } + GlQueryVO qryVO = new GlQueryVO(); + String[] pk_glorgbooks = JsonUtils.getStrArray(params.get("pk_glorgbooks")); + if (pk_glorgbooks == null || pk_glorgbooks.length == 0) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("gl20111017public_v1_0", "02002001-0019")/* @res "请先选择核算账簿!!" */); + } + String pk_accountingbook = pk_glorgbooks[0]; + String newBase = BaseCorpChooser.getPk_BasCorp(pk_glorgbooks, pk_accountingbook); + qryVO.setBaseAccountingbook(newBase); + if (pk_glorgbooks == null || pk_glorgbooks.length == 0) { + pk_glorgbooks = new String[]{pk_accountingbook}; + } + qryVO.setpk_accountingbook(pk_glorgbooks); + GlQryFormatVO qryFormatVo = qryVO.getFormatVO(); + + qryVO.setQueryByPeriod(JsonUtils.getBoolean(params.get("selectionState"))); +// qryVO.setYear(JsonUtils.getStrNULL(params.get("beginyear"))); +// qryVO.setPeriod(JsonUtils.getStrNULL(params.get("beginperiod"))); +// String begindate = JsonUtils.getStrNULL(params.get("begindate")); +// qryVO.setDate(StrTools.isEmptyStr(begindate) ? null : AccountRepUtil.getStdStartDate(begindate)); +// qryVO.setEndYear(JsonUtils.getStrNULL(params.get("endyear"))); +// qryVO.setEndPeriod(JsonUtils.getStrNULL(params.get("endperiod"))); +// String enddate = JsonUtils.getStrNULL(params.get("enddate")); +// qryVO.setEndDate(StrTools.isEmptyStr(enddate) ? null : AccountRepUtil.getStdEndDate(enddate)); + if (qryVO.isQueryByPeriod()) { + qryVO.setYear(JsonUtils.getStrNULL(params.get("beginyear"))); + qryVO.setPeriod(JsonUtils.getStrNULL(params.get("beginperiod"))); + qryVO.setEndYear(JsonUtils.getStrNULL(params.get("endyear"))); + qryVO.setEndPeriod(JsonUtils.getStrNULL(params.get("endperiod"))); + if (!StrTools.isEmptyStr(qryVO.getYear()) && !StrTools.isEmptyStr(qryVO.getEndYear()) + && !StrTools.isEmptyStr(qryVO.getPeriod()) && !StrTools.isEmptyStr(qryVO.getEndPeriod())) { + AccountCalendar calendar = CalendarUtilGL.getAccountCalendarByAccountBook(qryVO.getBaseAccountingbook()); + calendar.set(qryVO.getYear(), qryVO.getPeriod()); + qryVO.setDate(calendar.getMonthVO().getBegindate()); + calendar.set(qryVO.getEndYear(), qryVO.getEndPeriod().substring(0, 2)); + qryVO.setEndDate(calendar.getMonthVO().getEnddate().asEnd()); + } + } else { + String date = JsonUtils.getStrNULL(params.get("begindate")); + qryVO.setDate(StrTools.isEmptyStr(date) ? null : AccountRepUtil.getStdStartDate(date)); + String endDate = JsonUtils.getStrNULL(params.get("enddate")); + qryVO.setEndDate(StrTools.isEmptyStr(endDate) ? null : AccountRepUtil.getStdEndDate(endDate)); + if (qryVO.getDate() != null && qryVO.getEndDate() != null) { + AccountCalendar calendar = CalendarUtilGL.getAccountCalendarByAccountBook(qryVO.getBaseAccountingbook()); + calendar.setDate(qryVO.getDate()); + qryVO.setYear(calendar.getYearVO().getPeriodyear()); + qryVO.setPeriod(calendar.getMonthVO().getAccperiodmth()); + + calendar.setDate(qryVO.getEndDate()); + qryVO.setEndYear(calendar.getYearVO().getPeriodyear()); + qryVO.setEndPeriod(calendar.getMonthVO().getAccperiodmth()); + } + } + + qryVO.setIncludeUnTallyed(JsonUtils.getBoolean(params.get("includeUnTallyed"))); + qryVO.setIncludeError(JsonUtils.getBoolean(params.get("includeError"))); + qryVO.setIncludeTransfer(JsonUtils.getBoolean(params.get("includeTransfer"))); + qryVO.setIncludeReClassify(JsonUtils.getBoolean(params.get("includeReClassify"))); + + qryVO.setCurrTypeName(JsonUtils.getStrNULL(params.get("currTypeName"))); + qryVO.setM_Return_CurrType(JsonUtils.getInteger(params.get("return_currtype"))); + qryVO.setLocalFrac(false); + // ---------------------------------- + if (qryVO.getCurrTypeName().equals(CurrTypeConst.AUX_CURRTYPE()) + || qryVO.getCurrTypeName().equals(CurrTypeConst.QUERY_LOC_CURRTYPE()) + || qryVO.getCurrTypeName().equals(CurrTypeConst.ALL_CURRTYPE())) { + qryVO.setPk_currtype(null); + if (qryVO.getCurrTypeName().equals(CurrTypeConst.AUX_CURRTYPE())) { + qryVO.setLocalFrac(true); + } + } else { + qryVO.setPk_currtype(JsonUtils.getStrNULL(params.get("pk_currtype"))); + } + if (qryVO.getCurrTypeName().equals(CurrTypeConst.ALL_CURRTYPE())) { + qryVO.setLocalFrac(ReportExportUtil.isLocalFrac(pk_accountingbook)); + } + qryFormatVo.setMultiCorpCombine(false); + + qryFormatVo.setBalanceOrient(JsonUtils.getInteger(params.get("balanceDirection"))); + // 0表示显示在查询对象之后,1为前 + qryFormatVo.setCorpDispLocation(1); + qryFormatVo.setIsSubjSelectAll(true); + qryFormatVo.setSortType(JsonUtils.getInteger(params.get("sortType")));//排序方式。制单日期0,凭证号1 + qryFormatVo.setShowDayAcc(JsonUtils.getBoolean(params.get("addupByDay")));//是否按日合计 + qryVO.setDisLocalCurySum(JsonUtils.getBoolean(params.get("disLocalCurySum")));//显示本币合计 + qryFormatVo.setShowHasBalanceButZeroOccur(!JsonUtils.getBoolean(params.get("ckNoAccurNoDsp")));//无发生不显示 + qryFormatVo.setShowYearAcc(JsonUtils.getBoolean(params.get("dspAccumu")));//期间无发生显示累计数 + qryFormatVo.setCombineVoucher(JsonUtils.getBoolean(params.get("combineVoucher")));//合并同凭证分录 + + // end v31添加 + qryVO.setFormatVO(qryFormatVo); + // add by zhaoshya,参照得到的pk是vid,需要转换下 + Object[] pk_orgs = JsonUtils.getStrArray(params.get("pk_orgs")); + String[] pk_units = null; + if (pk_glorgbooks.length == 1) { + if (pk_orgs != null && pk_orgs.length > 0) { + pk_units = new String[pk_orgs.length]; + for (int i = 0; i < pk_orgs.length; i++) { + pk_units[i] = pk_orgs[i].toString(); + } + } else { + pk_units = AccountRepUtil.getPowerUnits(pk_glorgbooks[0]); + } + } + + // 处理利润中心zlp + Object[] pk_liabilitycenteros = JsonUtils.getStrArray(params.get("pk_liabilitycenter")); //params.get("pk_liabilitycenter")==null||params.get("pk_liabilitycenter").equals("")?null:((List)params.get("pk_liabilitycenter")).toArray(new String[0]); + String[] pk_liabilitycenters = null; + if (pk_glorgbooks.length == 1) { + if (pk_liabilitycenteros != null && pk_liabilitycenteros.length > 0) { + pk_liabilitycenters = new String[pk_liabilitycenteros.length]; + for (int i = 0; i < pk_liabilitycenteros.length; i++) { + pk_liabilitycenters[i] = pk_liabilitycenteros[i].toString(); + } + } else { + //查询有权限的利润中心 +// pk_liabilitycenters=AccountRepUtil.getPowerProfitCenters(new String[] {pk_accountingbook}); + } + } + qryVO.setPk_liabilitycenters(pk_liabilitycenters); + + qryVO.setPk_unis(pk_units); + qryVO.setMultiBusi(JsonUtils.getBoolean(params.get("multiBusi"))); + //是否合并利润中心 + qryVO.setMultiLiabcenter(JsonUtils.getBoolean(params.get("multliabcenter"))); + UFDate busiDate = new UFDate(InvocationInfoProxy.getInstance().getBizDateTime()); + qryVO.setPk_user(InvocationInfoProxy.getInstance().getUserId()); + qryVO.setDefaultAdjust(false); + qryVO.setUseSubjVersion(JsonUtils.getBoolean(params.get("useSubjVersion"))); + if (qryVO.isUseSubjVersion()) { + qryVO.setSubjVersion(JsonUtils.getStrNULL(params.get("subjVersion"))); + } else { + qryVO.setSubjVersionYear("" + busiDate.getYear()); + qryVO.setSubjVerisonPeriod(busiDate.getStrMonth()); + qryVO.setSubjVersion(busiDate.toStdString()); + } + setQryObjs(qryVO, params.get("qryObjs")); + qryVO.setShowBusinessDate(JsonUtils.getBoolean(params.get("showBusDate")));// 显示业务日期 + qryVO.setNeedCheckData(true); + return qryVO; + } + + private Map getRes(GlQueryVO qryvo, HashMap dataMap) throws Exception { + Map result = new HashMap(); + + DetailBSVO[] data = (DetailBSVO[]) dataMap.get("datavos"); + int pageindex = (int) dataMap.get("pageindex"); + result.put("column", getColumn(qryvo)); + result.put("data", getData(qryvo, data)); + result.put("totalpage", qryvo.getIVoucherState()); + result.put("pageindex", pageindex);//把当前有数据的页面返回给前端 + + Map headTitle = new HashMap(); + headTitle.put("accbook", AccountRepUtil.getOrgNames(qryvo));/* @res "核算账簿:" */ + headTitle.put("period", + qryvo.isQueryByPeriod() ? + qryvo.getYear() + StrTools.PERIODSPLIT + qryvo.getPeriod() + StrTools.PERIODSCOPESPLIT + qryvo.getEndYear() + StrTools.PERIODSPLIT + qryvo.getEndPeriod() + : DataFormatUtilGL.formatDate(qryvo.getDate()).getValue() + StrTools.PERIODSCOPESPLIT + DataFormatUtilGL.formatDate(qryvo.getEndDate()).getValue());/* @res "期 间:" */ + headTitle.put("currtype", qryvo.getCurrTypeName());/* @res "币 种:" */ + // 查询对象 + StringBuilder queryObjName = new StringBuilder(); + // 取出作为表头的查询对象,然后将其辅助项值做为表头 + if (qryvo.getFormatVO() != null && qryvo.getFormatVO().getQryObjs() != null && qryvo.getAssVos() != null) { + for (GLQueryObj qryObj : qryvo.getFormatVO().getQryObjs()) { + if (qryObj.getHeadEle()) { + if (qryObj.getType().equals(NCLangRes4VoTransl.getNCLangRes().getStrByID("2002gl55", "UPP2002gl55-000061")/*@res "会计科目"*/)) { + String subjName = ShowContentCenter.getShowAccsubj( + qryvo.getBaseAccountingbook(), qryvo.getPk_account() == null ? null : qryvo.getPk_account()[0], qryvo.getSubjVersion()); + queryObjName.append(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000135")/*@res "【科 目:"*/ + + subjName + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000136")/*@res "】"*/); + } else { + for (AssVO assvo : qryvo.getAssVos()) { + if (qryObj.getType().equals(assvo.getChecktypename())) { + String assname = ShowContentCenter.getShowAss(qryvo.getBaseAccountingbook(), new AssVO[]{assvo}); + queryObjName.append(assname); + break; + } + } + } + } + } + } + headTitle.put("queryobjname", queryObjName.toString());/* @res "对象" */ + headTitle.put("unit", getUnitName(qryvo));// 计量单位 + result.put("headtitle", headTitle); + return result; + } + + /** + * 计量单位 + *
nc.ui.gl.assdetail.AssDetailUI.setTableData + * + * @param qryvo + * @return + * @throws BusinessException + */ + private String getUnitName(GlQueryVO qryvo) throws BusinessException { + String unit = ""; + GLQueryObj[] allQryObjs = qryvo.getFormatVO().getQryObjs(); + Vector vTempHead = new Vector(); + Vector vHeadAssLoc = new Vector(); + int adjustValue = 0; + for (int i = 0; i < allQryObjs.length; i++) { + if (allQryObjs[i].getType().equals(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002gl55", "UPP2002gl55-000061")/*@res "会计科目"*/)) { + adjustValue--; + } + if (allQryObjs[i].getHeadEle()) { + vTempHead.add(allQryObjs[i]); + if (!allQryObjs[i].getType().equals(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002gl55", "UPP2002gl55-000061")/*@res "会计科目"*/)) { + vHeadAssLoc.add(Integer.valueOf(i + adjustValue)); + } + + } + } + /* + * 添加对方科目查询对象是否是表头查询对象 + * added by Liyongru for V55 at 20080828 + */ + if (qryvo.getOppSubjQryObj() != null && qryvo.getOppSubjQryObj().getHeadEle()) { + vTempHead.add(qryvo.getOppSubjQryObj()); + } + + + //GLQueryObj[] body = (GLQueryObj[]) Convertor.convertVectorToArray(vTempBody); + GLQueryObj[] head = (GLQueryObj[]) Convertor.convertVectorToArray(vTempHead); + //Integer[] bodyAssLocation = (Integer[]) Convertor.convertVectorToArray(vBodyAssLoc); + Integer[] headAssLocation = (Integer[]) Convertor.convertVectorToArray(vHeadAssLoc); + if (qryvo.getPk_account() != null) { + String sUnit = ""; + /* modify by pangjsh + 只支持数量核算科目和物料放在表头进行查询时,按照物料的主计量单位显示计量单位信息 + 1.如果表头有物料辅助核算,则表头按照物料的主计量单位显示计量单位信息 + 2.如果表头无物料辅助核算,则表头按照数量核算科目的默认计量单位显示计量单位信息。 + */ + String classid = IBDMetaDataIDConst.MATERIAL_V; + AccAssItemVO[] assItems = AccAssItemCache.getAccAssItemsByClassIDs(new String[]{classid}); + AssVO headAssVO = null; + boolean accountIsHead = false; //科目在表头 + boolean assUnitIsExist = false; //存在辅助核算计量单位 + /* + * 1.数量核算科目和物料放在表头进行查询时,按照物料的主计量单位显示计量单位信息 + * 2.如果表头有物料辅助核算,则表头按照物料的主计量单位显示计量单位信息 + * 3.如果表头无物料辅助核算,则表头按照数量核算科目的默认计量单位显示计量单位信息。 + */ + if (head != null && head.length > 0) { + int assIndex = -1; + for (int i = 0; i < head.length; i++) { + if (head[i].getType().equals(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002gl55", "UPP2002gl55-000061")/*@res "会计科目"*/)) { + accountIsHead = true; + } else if (!head[i].getType().equals(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("20021010", "UPP20021005-000274")/*@res "对方科目"*/)) { + ++assIndex; + } + //辅助核算在表头 + if (headAssLocation != null && assIndex >= 0) { + headAssVO = qryvo.getAssVos()[headAssLocation[assIndex].intValue()]; + for (AccAssItemVO accAssItemVO : assItems) { + //物料基本信息的辅助核算类型在表头 + if (accAssItemVO.getPk_accassitem().equals(headAssVO.getPk_Checktype())) { + Object[] measdoc = BDCacheQueryUtil.queryVOsByIDs(MaterialVO.class, MaterialVO.PK_MATERIAL, + new String[]{headAssVO.getPk_Checkvalue()}, new String[]{MaterialVO.PK_MEASDOC}); + //物料基本信息辅助核算的计量单位 + if (measdoc != null && measdoc[0] != null) { + sUnit = ((MaterialVO) measdoc[0]).getPk_measdoc(); + assUnitIsExist = true; + break; + } + } + } + } + if (assUnitIsExist && accountIsHead) { + break; + } + } + + if (accountIsHead) { + AccountVO accountVO = AccountByPkThreadCache.getInstance().getAccountVO(qryvo.getPk_account()[0], qryvo.getSubjVersion()); + String accountUnit = accountVO == null ? null : accountVO.getUnit(); + if (!assUnitIsExist) { + //物料基本信息计量单位不存在,置为科目计量单位 + sUnit = accountUnit; + } else { + if (accountUnit == null) { + sUnit = accountUnit; + } + } + //这里处理是否有问题,老代码 +// if(sUnit==null && vos.length > 0){//针对多维分析表会计科目放表头,总计行联查明细 added by Liyongru for V55 at 20081201 +// if(vos[0].getValue(DetailBSKey.K_PK_ACCASOA) != null){ +// AccountVO acc= AccountCache.getInstance().getAccountVOByPK(qryVO.getBaseAccountingbook(),vos[0].getValue(DetailBSKey.K_PK_ACCASOA).toString()); +// sUnit=acc==null?null:acc.getUnit(); +// } +// } + } + unit = sUnit == null ? "" : MeasdocUtils.getNameBypk(sUnit); + } else { + //无表头查询,计量单位置空 + unit = ""; + } + } + return unit; + } + + private List getColumn(GlQueryVO qryvo) { + List colList = new ArrayList(); + // 跨年则显示年列 + if (qryvo.getDate().getYear() != qryvo.getEndDate().getYear()) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000485")/*@res "年"*/, "year", ColumnInfo.LEFT)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000079")/*@res "月"*/, "month", ColumnInfo.LEFT)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000087")/*@res "日"*/, "day", ColumnInfo.LEFT)); + } else { + colList.add(AccountRepUtil.getMultHeadColum(String.valueOf(qryvo.getDate().getYear()) + , new String[]{NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000079")/*@res "月"*/, + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000087")/*@res "日"*/}, + new String[]{"month", "day"}, new String[]{ColumnInfo.LEFT, ColumnInfo.LEFT})); + } + if (qryvo.isShowBusinessDate()) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-001008")/*@res "业务日期"*/, "businessdate", ColumnInfo.LEFT)); + } +// if(qryvo.getpk_accountingbook().length>1&&!qryvo.isMultiCorpCombine()){ + if (qryvo.getpk_accountingbook().length > 1) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("gl20111017public_v1_0", "1200230400004")/*@res "核算账簿名称"*/, "bookname", ColumnInfo.LEFT)); + } + if (AccountRepUtil.isAssdetailBuSupport(qryvo)) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("common", "UCMD1-000396")/*@res "业务单元"*/, "unitname", ColumnInfo.LEFT)); + } + //利润中心 + if (AccountRepUtil.isAssliabilitycenterSupport(qryvo)) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("common", "UCMD1-000445")/*@res "利润中心"*/, "liabilitycentername", ColumnInfo.LEFT)); + } + + if (!GlQueryVOAssTool.isMultiPages(qryvo)) { + GLQueryObj[] queryObjs = qryvo.getFormatVO().getQryObjs(); + for (int i = 0; i < queryObjs.length; i++) { + GLQueryObj queryObj = queryObjs[i]; + if (queryObj.getTypeName().equals(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031")/* @res "会计科目" */)) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000010")/*@res "科目编码"*/, "accsubjcode", ColumnInfo.LEFT)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000011")/*@res "科目名称"*/, "accsubjname", ColumnInfo.LEFT)); + } else { + AssVO[] assvos = queryObj.getValueRange(); + if (assvos != null && assvos[0] != null) { + AssVO assvo = assvos[0]; + colList.add(new ColumnInfo(assvo.getChecktypename() + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000033")/*@res "编码"*/, + "checkvaluecode" + i, ColumnInfo.LEFT)); + colList.add(new ColumnInfo(assvo.getChecktypename() + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000034")/*@res "名称"*/, + "showname" + i, ColumnInfo.LEFT)); + } + } + } + } else { + GLQueryObj[] queryObjs = qryvo.getFormatVO().getQryObjs(); + for (int i = 0; i < queryObjs.length; i++) { + GLQueryObj queryObj = queryObjs[i]; + if (!queryObj.getHeadEle()) { + if (queryObj.getTypeName().equals(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031")/* @res "会计科目" */)) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000010")/*@res "科目编码"*/, "accsubjcode", ColumnInfo.LEFT)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000011")/*@res "科目名称"*/, "accsubjname", ColumnInfo.LEFT)); + } else { + AssVO[] assvos = queryObj.getValueRange(); + if (assvos != null && assvos[0] != null) { + AssVO assvo = assvos[0]; + colList.add(new ColumnInfo(assvo.getChecktypename() + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000033")/*@res "编码"*/, "checkvaluecode" + i, ColumnInfo.LEFT)); + colList.add(new ColumnInfo(assvo.getChecktypename() + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000034")/*@res "名称"*/, "showname" + i, ColumnInfo.LEFT)); + } + } + } + } + } + + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000008")/*@res "凭证号"*/, "voucherno", ColumnInfo.LEFT)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000009")/*@res "摘要"*/, "explanation", ColumnInfo.LEFT)); + // 查询所有币种则显示币种列 + if (qryvo.getCurrTypeName().equals(CurrTypeConst.ALL_CURRTYPE())) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000012")/*@res "币种"*/, "currtypename", ColumnInfo.LEFT)); + } + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000287")/*@res "对方科目"*/, "oppsubjname", ColumnInfo.LEFT)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000288")/*@res "单价"*/, "price", ColumnInfo.RIGTH)); + // 查询不是本币则显示折本汇率列 + if (!qryvo.getCurrTypeName().equals(CurrTypeConst.QUERY_LOC_CURRTYPE())) { + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000290")/*@res "折本汇率"*/, "ratio2", ColumnInfo.RIGTH)); + } + + String[] childStr = null; + String[] childAlign = null; + String[] childKey = null; + if (qryvo.getCurrTypeName().equals(CurrTypeConst.QUERY_LOC_CURRTYPE())) { + childStr = new String[]{ + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000050")/* @res "数量" */, + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000053") /* @res "本币" */}; + childAlign = new String[]{ColumnInfo.RIGTH, ColumnInfo.RIGTH}; + childKey = new String[]{"debitquantity", "debitlocamount"}; + } else { + childStr = new String[]{ + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000050")/* @res "数量" */, + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000051")/* @res "原币" */, + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000053") /* @res "本币" */}; + childAlign = new String[]{ColumnInfo.RIGTH, ColumnInfo.RIGTH, ColumnInfo.RIGTH}; + childKey = new String[]{"debitquantity", "debitamount", "debitlocamount"}; + } + colList.add(AccountRepUtil.getMultHeadColum(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000074")/* @res "借方" */ + , childStr, childKey, childAlign)); + if (qryvo.getCurrTypeName().equals(CurrTypeConst.QUERY_LOC_CURRTYPE())) { + childKey = new String[]{"creditquantity", "creditlocamount"}; + } else { + childKey = new String[]{"creditquantity", "creditamount", "creditlocamount"}; + } + colList.add(AccountRepUtil.getMultHeadColum(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000076")/*@res "贷方"*/ + , childStr, childKey, childAlign)); + colList.add(new ColumnInfo(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000134")/* @res "方向" */, + "balanceorient", ColumnInfo.CENTER)); + if (qryvo.getCurrTypeName().equals(CurrTypeConst.QUERY_LOC_CURRTYPE())) { + childStr = new String[]{NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000050")/*@res "数量"*/ + , NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000291")/*@res "平均单价"*/ + , NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000053")/*@res "本币"*/}; + childAlign = new String[]{ColumnInfo.RIGTH, ColumnInfo.RIGTH, ColumnInfo.RIGTH}; + childKey = new String[]{"balancequant", "averageprice", "balancelocamount"}; + } else { + childStr = new String[]{NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000050")/*@res "数量"*/ + , NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000291")/*@res "平均单价"*/ + , NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000051")/*@res "原币"*/ + , NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000053")/*@res "本币"*/}; + childAlign = new String[]{ColumnInfo.RIGTH, ColumnInfo.RIGTH, ColumnInfo.RIGTH, ColumnInfo.RIGTH}; + childKey = new String[]{"balancequant", "averageprice", "balanceamount", "balancelocamount"}; + } + colList.add(AccountRepUtil.getMultHeadColum(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000077")/*@res "余额"*/ + , childStr, childKey, childAlign)); + return colList; + + } + + + /** + * 表体数据json + * + * @param qryvo + * @param detailBSVOs + * @return + * @throws Exception + */ + public List> getData(GlQueryVO qryvo, DetailBSVO[] detailBSVOs) throws Exception { + Map assIndexMap = new HashMap(); + GLQueryObj[] queryObjs = qryvo.getFormatVO().getQryObjs(); + for (int i = 0; i < queryObjs.length; i++) { + GLQueryObj queryObj = queryObjs[i]; + AssVO[] assvos = queryObj.getValueRange(); + if (assvos != null && assvos.length > 0 && assvos[0] != null) { + assIndexMap.put(assvos[0].getPk_Checktype(), i + ""); + } + } + + List> data = new ArrayList>(); + String pk_localcurr = AccountRepUtil.getLocalCurr(qryvo); + String pk_org = AccountBookUtil.getPk_org(qryvo.getBaseAccountingbook()); + GLReportFormat format = new GLReportFormat(DetailBSKey.K_PK_ACCOUNTINGBOOK, DetailBSKey.K_ACCSUBJCODE, DetailBSKey.K_PK_CURRTYPE); + boolean isExistsMaterial = isExistsMaterial(qryvo); + Map materialMeasdocMap = null; + if (isExistsMaterial) { + materialMeasdocMap = getMaterialMeasdoc(detailBSVOs); + } + for (DetailBSVO vo : detailBSVOs) { + Map row = new HashMap(); + // openapi新增字段 begin + row.put("prepareddate", vo.getValue(DetailBSKey.K_DAY)); + row.put("year", vo.getValue(DetailBSKey.K_YEAR)); + row.put("period", vo.getValue(DetailBSKey.K_MONTH)); + row.put("detailindex", vo.getValue(DetailBSKey.K_DETAILINDEX)); + row.put("explanation", vo.getValue(DetailBSKey.K_EXPLANATION)); + row.put("vouchertype", vo.getValue(DetailBSKey.K_VOUCHERTYPE)); + row.put("vouchernum", vo.getValue(DetailBSKey.K_VOUCHERNO)); + // openapi新增字段 end + if (vo.getDaybakAsDate() != null) { + UFDateTime date = vo.getDaybakAsDate();//去除格式化 + date = DataFormatUtilGL.getLocalDateTime(date); + row.put("year", date.getYear()); + row.put("month", date.getStrMonth()); + row.put("day", date.getStrDay()); + } + row.put("businessdate", DataFormatUtilGL.formatStringDateTime((String) vo.getValue(DetailBSKey.K_BUSINESSDATE))); + row.put("bookname", vo.getValue(DetailBSKey.K_GLORGBOOKNAME)); + row.put("unitname", vo.getValue(DetailBSKey.K_PK_UNIT_V)); + row.put("liabilitycentername", vo.getValue(DetailBSKey.K_LIABILITYCENTERNAME)); + row.put("accsubjcode", vo.getValue(DetailBSKey.K_ACCSUBJCODE)); + row.put("accsubjname", vo.getValue(DetailBSKey.K_ACCSUBJNAME)); + if (vo.getValue(DetailBSKey.K_VOUCHERTYPE) != null && vo.getValue(DetailBSKey.K_VOUCHERNO) != null) { + row.put("voucherno", vo.getValue(DetailBSKey.K_VOUCHERTYPE) + StrTools.PERIODSPLIT + vo.getValue(DetailBSKey.K_VOUCHERNO)); + } + row.put("explanation", vo.getValue(DetailBSKey.K_EXPLANATION)); + row.put("currtypename", vo.getValue(DetailBSKey.K_CURRTYPENAME)); + row.put("oppsubjname", vo.getValue(DetailBSKey.K_OPPOSSUBJ)); + row.put("price", format.getFormatPrice(vo.getValue(DetailBSKey.K_PRICE), vo, qryvo.getSubjVersion())); + if (!qryvo.getCurrTypeName().equals(CurrTypeConst.QUERY_LOC_CURRTYPE()) + && !StrTools.isEmptyStr((String) vo.getValue(DetailBSKey.K_PK_VOUCHER))) { + row.put("ratio2", format.getFormatRate(getRadio(qryvo, vo), getCurrtypePK(qryvo, vo), pk_localcurr, pk_org)); + } + row.put("debitamount", format.getFormatAmountVlaue(vo.getValue(DetailBSKey.K_DEBITAMOUNT), vo, pk_localcurr)); + row.put("debitlocamount", format.getFormatLocalVlaue(vo.getValue(DetailBSKey.K_DEBITLOCAMOUNT), pk_localcurr)); + row.put("creditamount", format.getFormatAmountVlaue(vo.getValue(DetailBSKey.K_CREDITAMOUNT), vo, pk_localcurr)); + row.put("creditlocamount", format.getFormatLocalVlaue(vo.getValue(DetailBSKey.K_CREDITLOCAMOUNT), pk_localcurr)); + String balanceorient = ""; + // 辅助明细账多账簿查询总计行去掉方向 + if (vo.getValue(DetailBSKey.K_EXPLANATION) != null && + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002033381", "UPP2002033381-000138")/*@res "总计"*/ + .equals(vo.getValue(DetailBSKey.K_EXPLANATION).toString()) && qryvo.getpk_accountingbook().length > 1) { + balanceorient = null; + } else { + balanceorient = Balanorient.getOrientStr(Integer.valueOf(vo.getValue(DetailBSKey.K_BALANCEORI).toString())); + } + row.put("balanceorient", balanceorient); + row.put("averageprice", format.getFormatPrice(vo.getValue(DetailBSKey.K_AVERAGEPRICE), vo, qryvo.getSubjVersion())); + row.put("balanceamount", format.getFormatAmountVlaue(vo.getValue(DetailBSKey.K_BALANCEAMOUNT), vo, pk_localcurr)); + row.put("balancelocamount", format.getFormatLocalVlaue(vo.getValue(DetailBSKey.K_BALANCELOCAMOUNT), pk_localcurr)); + // 数量格式化 + if (NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000000")/*@res "期初"*/.equals(vo.getValue(DetailBSKey.K_EXPLANATION))) { + //处理辅助明细表期初数量精度 + row.put("debitquantity", format.getBeginBalanceQuan(vo.getValue(DetailBSKey.K_DEBITQUANT), qryvo.getPk_account(), qryvo.getBaseAccountingbook())); + row.put("creditquantity", format.getBeginBalanceQuan(vo.getValue(DetailBSKey.K_CREDITQUANT), qryvo.getPk_account(), qryvo.getBaseAccountingbook())); + row.put("balancequant", format.getBeginBalanceQuan(vo.getValue(DetailBSKey.K_BALANCEQUANT), qryvo.getPk_account(), qryvo.getBaseAccountingbook())); + } else if (isExistsMaterial) { + String materialPK = getMaterialPK(vo); + String pk_measdoc = materialMeasdocMap.get(materialPK); + row.put("debitquantity", format.getFormatQuanMaterial(vo.getValue(DetailBSKey.K_DEBITQUANT), pk_measdoc)); + row.put("creditquantity", format.getFormatQuanMaterial(vo.getValue(DetailBSKey.K_CREDITQUANT), pk_measdoc)); + row.put("balancequant", format.getFormatQuanMaterial(vo.getValue(DetailBSKey.K_BALANCEQUANT), pk_measdoc)); + } else { + row.put("debitquantity", format.getFormatQuan(vo.getValue(DetailBSKey.K_DEBITQUANT), vo, qryvo.getSubjVersion())); + row.put("creditquantity", format.getFormatQuan(vo.getValue(DetailBSKey.K_CREDITQUANT), vo, qryvo.getSubjVersion())); + row.put("balancequant", format.getFormatQuan(vo.getValue(DetailBSKey.K_BALANCEQUANT), vo, qryvo.getSubjVersion())); + } + + // 辅助项的pk、编码和名称 + Object assvosObj = vo.getValue(DetailBSKey.K_ASSVOS); + if (row.get("mark") == null && assvosObj != null && assvosObj.getClass().isArray()) { + AssVO[] assvos = (AssVO[]) assvosObj; + for (int i = 0; i < assvos.length; i++) { + AssVO assvo = assvos[i]; + String index = assIndexMap.get(assvo.getPk_Checktype()); + row.put("checktypecode" + index, assvo.getChecktypecode()); + row.put("checktypename" + index, assvo.getChecktypename()); + row.put("checkvaluecode" + index, assvo.getCheckvaluecode()); + row.put("checkvaluename" + index, assvo.getCheckvaluename()); + row.put("classid" + index, assvo.getM_classid()); + row.put("pk_checktype" + index, assvo.getPk_Checktype()); + row.put("pk_checkvalue" + index, assvo.getPk_Checkvalue()); +// row.put("showname" + index, ShowContentCenter.getShowAss(qryvo.getBaseAccountingbook(), new AssVO[] { assvo })); + //还原为源码 start + row.put("showname" + index, assvo.getCheckvaluename()); + //end + } + } + // 联查凭证、过滤 + if (vo.getValue(DetailBSKey.K_PK_VOUCHER) != null) { + Map link = new HashMap(); + link.put("pk_voucher", vo.getValue(DetailBSKey.K_PK_VOUCHER)); + link.put("explanation", vo.getValue(DetailBSKey.K_EXPLANATION)); + link.put("debitlocamount", vo.getValue(DetailBSKey.K_DEBITLOCAMOUNT)); + link.put("creditlocamount", vo.getValue(DetailBSKey.K_CREDITLOCAMOUNT)); +// link.put("pk_unit",vo.getValue(DetailBSKey.K_PK_UNIT)); + AssVO[] assvos = (AssVO[]) vo.getValue(DetailBSKey.K_ASSVOS); + if (assvos != null && assvos.length > 0) { + List> list = new ArrayList>(assvos.length); + for (AssVO assvo : assvos) { + Map map = new HashMap(); + map.put("pk_checktype", assvo.getPk_Checktype()); + map.put("pk_checkvalue", assvo.getPk_Checkvalue()); + list.add(map); + } + link.put("ass", list); + } + if (vo.getValue(DetailBSKey.K_ACCSUBJCODE) != null && vo.getValue(DetailBSKey.K_PK_ACCASOA) != null) { + link.put("accountingcode", vo.getValue(DetailBSKey.K_ACCSUBJCODE)); + } + if (qryvo.getpk_accountingbook().length > 1) { + row.put("linkmsg", new String[]{ + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000299")/* @res "不支持多主体账簿过滤" */, + }); + } + row.put("link", link); + } + data.add(row); + } + return data; + } + + /** + * 根据返回币种取汇率 + * + * @param vo + * @return + * @throws Exception + */ + private UFDouble getRadio(GlQueryVO qryvo, DetailBSVO vo) throws Exception { + UFDouble radio = (UFDouble) vo.getValue(DetailBSKey.K_RATIO2); + if (qryvo.getM_Return_CurrType() == CurrTypeConst.GROUP_RETURN) { + radio = (UFDouble) vo.getValue(DetailBSKey.K_RATIO3); + } else if (qryvo.getM_Return_CurrType() == CurrTypeConst.GLOBAL_RETURN) { + radio = (UFDouble) vo.getValue(DetailBSKey.K_RATIO4); + } + return radio; + } + + /** + * 获取汇率转换的目标币种 + * + * @param vo + * @return + * @throws Exception + * @throws BusinessException + */ + private String getCurrtypePK(GlQueryVO qryvo, DetailBSVO vo) throws Exception, + BusinessException { + String pk_currtype = (String) vo.getValue(DetailBSKey.K_PK_CURRTYPE); + if (qryvo.getM_Return_CurrType() == CurrTypeConst.GROUP_RETURN + && !Currency.isGroupRawConvertModel(InvocationInfoProxy.getInstance().getGroupId())) { + pk_currtype = Currency.getLocalCurrPK(AccountBookUtil.getPk_org(qryvo.getBaseAccountingbook())); + } else if (qryvo.getM_Return_CurrType() == CurrTypeConst.GLOBAL_RETURN + && !Currency.isGlobalRawConvertModel(null)) { + pk_currtype = Currency.getLocalCurrPK(AccountBookUtil.getPk_org(qryvo.getBaseAccountingbook())); + } + return pk_currtype; + } + + /** + * 设置GLQueryObj[] + * + * @param qryVO + * @param json + * @return + * @throws BusinessException + */ + @SuppressWarnings("unchecked") + private void setQryObjs(GlQueryVO qryVO, Object json) throws BusinessException { + if (json == null) { + return; + } + Set checktypeList = new HashSet(); + List glQueryObjs = new ArrayList(); + List list = (List) json; + for (int i = 0; i < list.size(); i++) { + Map qryObjMap = (Map) (list.get(i)); + if (!StrTools.isEmptyStr(JsonUtils.getStrNULL(qryObjMap.get("name"))) + && !NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031")/** @res * "会计科目" */ + .equals(JsonUtils.getStrNULL(qryObjMap.get("name")))) { + checktypeList.add(JsonUtils.getStrNULL(qryObjMap.get("pk_checktype"))); + } + } + for (int i = 0; i < list.size(); i++) { + Map qryObjMap = (Map) (list.get(i)); + if (StrTools.isEmptyStr(JsonUtils.getStrNULL(qryObjMap.get("name")))) { + continue; + } + GLQueryObj glQueryObj = new GLQueryObj(); + glQueryObj.setAccEle(JsonUtils.getBoolean(qryObjMap.get("accEle"))); + glQueryObj.setAttrsValues(null);// 辅助属性余额表才用到 + glQueryObj.setHeadEle(JsonUtils.getBoolean(qryObjMap.get("headEle"))); + glQueryObj.setIncludeSub(JsonUtils.getBoolean(qryObjMap.get("includeSub"))); + glQueryObj.setLinkObj(null); + glQueryObj.setDirty(false); + glQueryObj.setType(JsonUtils.getStrNULL(qryObjMap.get("name"))); + glQueryObj.setTypeName(JsonUtils.getStrNULL(qryObjMap.get("name"))); + + String pk_checkvalues = JsonUtils.getStrNULL(qryObjMap.get("pk_checkvalue")); + if (NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031")/** @res * "会计科目"*/ + .equals(JsonUtils.getStrNULL(qryObjMap.get("name")))) { + if (pk_checkvalues != null && pk_checkvalues.length() > 0) { + AccountVO[] accvos = AccountUtilGL.queryAccountVosByPks(pk_checkvalues.split(","), qryVO.getSubjVersion(), false); + if (accvos != null && accvos.length > 0) { + // 按code上下级排序 + Arrays.sort(accvos, new Comparator() { + @Override + public int compare(AccountVO o1, AccountVO o2) { + return o1.getCode().compareTo(o2.getCode()); + } + }); + AssVO[] accounts = new AssVO[accvos.length]; + for (int j = 0; j < accvos.length; j++) { + accounts[j] = new AssVO(); + accounts[j].setCheckvaluecode(accvos[j].getCode()); + accounts[j].setCheckvaluename(accvos[j].getName()); + accounts[j].setPk_Checkvalue(accvos[j].getPk_accasoa()); + } + glQueryObj.setValueRange(accounts); + } + } else { + AccountGLSimpleVO[] accvos = AccountUtilGL.queryAccByAss( + checktypeList.toArray(new String[0]), + qryVO.getBaseAccountingbook(), + qryVO.getSubjVersion()); + if (accvos != null && accvos.length > 0) { + // 按code上下级排序 + Arrays.sort(accvos, new Comparator() { + @Override + public int compare(AccountGLSimpleVO o1, AccountGLSimpleVO o2) { + return o1.getCode().compareTo(o2.getCode()); + } + }); + AssVO[] accounts = new AssVO[accvos.length]; + for (int j = 0; j < accvos.length; j++) { + accounts[j] = new AssVO(); + accounts[j].setCheckvaluecode(accvos[j].getCode()); + accounts[j].setCheckvaluename(accvos[j].getName()); + accounts[j].setPk_Checkvalue(accvos[j].getPk_accasoa()); + } + glQueryObj.setValueRange(accounts); + } + } + if (glQueryObj.getValueRange() == null) { + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000198")/*@res "没有对应的科目!"*/); + } + } else { + String pk_checktype = JsonUtils.getStrNULL(qryObjMap.get("pk_checktype")); + AccAssItemVO accassItemVO = AccAssGL.getAccAssItemVOByPk(pk_checktype); + if (accassItemVO == null) { + Logger.error("assdetail: invalid pk_checktype:" + pk_checktype); + continue; + } + String checkvaluename = GLMultiLangUtil.getMultiName(accassItemVO); + String checkvaluecode = accassItemVO.getCode(); + String classid = AccAssGL.getClassidByCheckTypePk(pk_checktype); + if (!StrTools.isEmptyStr(pk_checkvalues)) { + String[] arrCheckvalues = pk_checkvalues.split(","); + AssVO[] assvos = new AssVO[arrCheckvalues.length]; + for (int j = 0; j < assvos.length; j++) { + assvos[j] = new AssVO(); + assvos[j].setPk_Checktype(pk_checktype); + assvos[j].setChecktypename(checkvaluename); + assvos[j].setChecktypecode(checkvaluecode); + assvos[j].setM_classid(classid); + } + // 自定义档案类型 + if (FreeValueDefUtil.getInstance().isDefDoc(classid)) { + for (int j = 0; j < assvos.length; j++) { + assvos[j].setPk_Checkvalue(arrCheckvalues[j]); + assvos[j].setCheckvaluecode(arrCheckvalues[j]); + assvos[j].setCheckvaluename(arrCheckvalues[j]); + } + } else { + IGeneralAccessor accessor = new AssAccessorManager().getDBAccess(classid); + IBDData[] datas = accessor.getDocbyPks(arrCheckvalues); + Map map = new HashMap(); + for (IBDData data : datas) { + map.put(data.getPk(), data); + } + for (int j = 0; j < assvos.length; j++) { + assvos[j].setPk_Checkvalue(arrCheckvalues[j]); + if (map.get(arrCheckvalues[j]) instanceof BankaccsubBDDataVO) { + assvos[j].setCheckvaluecode(((BankaccsubBDDataVO) map.get(arrCheckvalues[j])).getSubcode()); + assvos[j].setCheckvaluename(((BankaccsubBDDataVO) map.get(arrCheckvalues[j])).getSubname().toString()); + } else { + assvos[j].setCheckvaluecode(map.get(arrCheckvalues[j]).getCode()); + assvos[j].setCheckvaluename(map.get(arrCheckvalues[j]).getName().getText()); + } + } + } + glQueryObj.setValueRange(assvos); + } else { + AssVO[] assvos = new AssVO[1]; + assvos[0] = new AssVO(); + assvos[0].setPk_Checktype(JsonUtils.getStrNULL(qryObjMap.get("pk_checktype"))); + assvos[0].setCheckvaluename("ALL"); + assvos[0].setChecktypename(GLMultiLangUtil.getMultiName(AccAssGL.getAccAssItemVOByPk(assvos[0].getPk_Checktype()))); + assvos[0].setChecktypecode(AccAssGL.getAccAssItemVOByPk(assvos[0].getPk_Checktype()).getCode()); + assvos[0].setM_classid(classid); + glQueryObj.setValueRange(assvos); + } + } + glQueryObjs.add(glQueryObj); + } + qryVO.getFormatVO().setQryObjs(glQueryObjs.toArray(new GLQueryObj[glQueryObjs.size()])); + } + + /** + * 校验查询条件 + *
nc.ui.gl.assbalance.QueryDialogPanel.checkQryObjs(GlQryFormatVO qryFormatVo) + * + * @param qryVO + * @throws BusinessException + */ + public void checkQryObjs(GlQueryVO qryVO) throws BusinessException { + if (qryVO.getDate() == null) { + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000185")/*@res "请重新输入起始日期!"*/); + } + GlQryFormatVO qryFormatVo = qryVO.getFormatVO(); + int iKmAmount = 0; + for (GLQueryObj qryObj : qryFormatVo.getQryObjs()) { + if (!StrTools.isEmptyStr(qryObj.getType())) { + if (qryObj.getType().equals(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031")/*@res "会计科目"*/)) { + iKmAmount++; + } else if (qryObj.getValueRange()[0] != null && qryObj.getValueRange()[0].getCheckvaluename() != null //项目辅助项可能有名称为空的情况 + && qryObj.getValueRange()[0].getCheckvaluename().equals("ALL") + && qryObj.getIncludeSub()) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000187")/*@res "辅助项选空,不支持同时包含下级!"*/); + } + } + } + if (iKmAmount == 0) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000188")/*@res "没有选择设定会计科目查询对象信息!"*/); + } else if (iKmAmount > 1) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000189")/*@res "会计科目查询对象信息不唯一!"*/); + } + + GLQueryObj[] aQryObjs = qryFormatVo.getQryObjs(); + + boolean blnIsChild = false; + boolean blnAssIsChild = false; + String sCorpTmp = AccountBookUtil.getPk_orgByAccountBookPk(qryVO.getBaseAccountingbook()); + boolean blnSubjAccIsInBody = false; + boolean blnAssIsInBody = false; + int iBodyItemCount = 0; + for (int i = 0; i < aQryObjs.length; i++) { + if (!blnIsChild || !blnAssIsChild) { + if (!aQryObjs[i].getHeadEle()) { + if (aQryObjs[i].getType().equals(NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000031")/*@res "会计科目"*/)) { + if (!aQryObjs[i].getHeadEle()) { + blnSubjAccIsInBody = true; + iBodyItemCount++; + } + //如果是,隔开的科目 + if (aQryObjs[i].getValueRange() != null && aQryObjs[i].getValueRange()[0].getCheckvaluecode().contains(",")) { + String[] acccode = aQryObjs[i].getValueRange()[0].getCheckvaluecode().split(","); + for (int j = 0; j < acccode.length; j++) { + for (int k = 0; k < acccode.length; k++) { + if (j != k && acccode[j].startsWith(acccode[k])) { + blnIsChild = true; + break; + } + } + } + } else { + for (int j = 0; j < aQryObjs[i].getValueRange().length; j++) { + for (int k = 0; k < aQryObjs[i].getValueRange().length; k++) { + if (j != k + && aQryObjs[i].getValueRange()[j] + .getCheckvaluecode() + .startsWith(aQryObjs[i].getValueRange()[k].getCheckvaluecode())) { + blnIsChild = true; + break; + } + } + } + } + } else { + if (!aQryObjs[i].getHeadEle()) { + iBodyItemCount++; + blnAssIsInBody = true; + } + for (int j = 0; aQryObjs[i].getValueRange() != null + && j < aQryObjs[i].getValueRange().length; j++) { + if (aQryObjs[i].getIncludeSub()) { + try { + AssVO[] assVos = CBalanceAssTool + .getSubDocsTackle( + aQryObjs[i] + .getValueRange()[j], + sCorpTmp); + for (int f = 0; f < assVos.length; f++) { + for (int k = 0; k < aQryObjs[i] + .getValueRange().length; k++) { + if (assVos[f] + .getPk_Checkvalue() + .equals( + aQryObjs[i] + .getValueRange()[k] + .getPk_Checkvalue())) { + blnAssIsChild = true; + break; + } + } + } + } catch (Exception e) { + throw new BusinessException(e.getMessage(), e); + } + } + } + } + } + } + } + + //同一页显示可以显示上下级。 + if (blnIsChild && !(blnSubjAccIsInBody && iBodyItemCount == 1)) { + qryFormatVo.setAssBalIncludeChildSubj(true); + blnIsChild = false; + } + if (blnIsChild) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000190")/*@res "查询条件出现以下情况时,不支持科目之间有上下级关系:1、辅助明细帐查询;2、表体查询中有辅助核算; 3、选择多个单位,且“多单位排序方式”为“查询对象+单位”;4、辅助余额表跨年。 请检查是否出现上述情况,修改查询条件后再试。"*/); + } else { + qryFormatVo.setIsSubjAccIncldFatherSon(false); + } + if (blnAssIsChild) { + if (!(blnAssIsInBody && iBodyItemCount == 1) + || (qryFormatVo.getCorpDispLocation() == 0 && qryVO.getpk_accountingbook().length > 1) + ) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000191")/*@res "查询条件出现以下情况时,不支持辅助核算之间有上下级关系:1、辅助明细帐查询;2、表体查询中大于一个查询对象; 3、选择多个单位,且“多单位排序方式”为“查询对象+单位”;4、辅助余额表跨年。 请检查是否出现上述情况,修改查询条件后再试。"*/); + } else { + qryFormatVo.setIsAssIncldFatherSon(true); + } + } + + if (aQryObjs.length < 2) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000194")/*@res "没有选辅助核算类型,请重新选择!"*/); + //MessageDialog.showErrorDlg(this, "错误", + // "没有选具体科目,或者所选科目没有相同的辅助核算类型,请重新选定科目!"); + } + UFDouble from = qryVO.getFormatVO().getBalanceRangeFrom(); + UFDouble to = qryVO.getFormatVO().getBalanceRangeTo(); + if (from == null) { + from = UFDouble.ZERO_DBL; + } + if (to == null) { + to = UFDouble.ZERO_DBL; + } + if (from.compareTo(to) > 0) { + throw new BusinessException( + NCLangRes4VoTransl.getNCLangRes().getStrByID("20023030", "UPP20023030-000195")/*@res "余额范围查询条件信息输入有误(起始值大于终止值)!"*/); + } + } + + /** + * 判断查询对象里是否有物料 + * + * @param qryVO + * @return + */ + private boolean isExistsMaterial(GlQueryVO qryVO) { + for (GLQueryObj qryObj : qryVO.getFormatVO().getQryObjs()) { + if (qryObj.getValueRange() != null + && qryObj.getValueRange().length > 0 + && IBDMetaDataIDConst.MATERIAL_V.equals(qryObj.getValueRange()[0].getM_classid())) { +// && qryObj.getValueRange()[0].getCheckvaluecode()!=null) { + return true; + } + } + return false; + } + + /** + * 获取Map<物料pk,计量单位pk> + * + * @param detailBSVOs + * @return + * @throws Exception + */ + private Map getMaterialMeasdoc(DetailBSVO[] detailBSVOs) throws Exception { + Map map = new HashMap(); + // 取出辅助中的pk_material + Set pk_material = new HashSet(); + for (DetailBSVO vo : detailBSVOs) { + String materialPK = getMaterialPK(vo); + if (!StrTools.isEmptyStr(materialPK)) { + pk_material.add(materialPK); + } + } + // 查询物料计量单位,组成Map<物料pk,计量单位pk> + if (pk_material.size() > 0) { + MaterialVO[] materialVOs = (MaterialVO[]) BDCacheQueryUtil.queryVOsByIDs( + MaterialVO.class, + MaterialVO.PK_MATERIAL, + pk_material.toArray(new String[pk_material.size()]), + new String[]{MaterialVO.PK_MEASDOC}); + if (materialVOs != null && materialVOs.length > 0) { + for (MaterialVO materialVO : materialVOs) { + if (materialVO != null) { + map.put(materialVO.getPk_material(), materialVO.getPk_measdoc()); + } + } + } + } + return map; + } + + + /** + * 取出辅助中的pk_material + * + * @param vo + * @return + * @throws Exception + */ + private String getMaterialPK(DetailBSVO vo) throws Exception { + AssVO[] assvos = (AssVO[]) vo.getValue(DetailBSKey.K_ASSVOS); + if (assvos != null) { + for (AssVO assvo : assvos) { + if (IBDMetaDataIDConst.MATERIAL_V.equals(assvo.getM_classid())) { + return assvo.getPk_Checkvalue(); + } + } + } + return null; + } + +} diff --git a/ic/src/private/nc/bs/ic/m4a/sign/rule/AfterSignRuleSyncInToMesProcess.java b/ic/src/private/nc/bs/ic/m4a/sign/rule/AfterSignRuleSyncInToMesProcess.java index 93cc0d5..009acbb 100644 --- a/ic/src/private/nc/bs/ic/m4a/sign/rule/AfterSignRuleSyncInToMesProcess.java +++ b/ic/src/private/nc/bs/ic/m4a/sign/rule/AfterSignRuleSyncInToMesProcess.java @@ -138,80 +138,6 @@ public class AfterSignRuleSyncInToMesProcess implements IRule { } } - private void syncTransferIn(GeneralInVO generalInVO) throws BusinessException { - GeneralInHeadVO head = generalInVO.getHead(); - // 表体body信息拼接 - JSONArray details = new JSONArray(); - // 填充details - for (GeneralInBodyVO body : generalInVO.getBodys()) { - JSONObject temp = new JSONObject(); - temp.put("orderNo", head.getVbillcode()); // 通知单ID - temp.put("sequenceNum", body.getCrowno()); // 通知单序号 - temp.put("type", "DBRK"); // 事务类型 - MaterialVersionVO materialVersionVO = (MaterialVersionVO) IUIFSERVICE.queryByPrimaryKey(MaterialVersionVO.class, body.getCmaterialvid()); - if (Objects.isNull(materialVersionVO)) { - throw new BusinessException("物料信息不存在, 主键:" + body.getCmaterialvid()); - } - temp.put("materialId", materialVersionVO.getCode()); // 物料ID - temp.put("outQty", body.getNnum() != null ? body.getNnum().doubleValue() : null); // 应发数量 - temp.put("actInQty", body.getNshouldnum() != null ? body.getNshouldnum().doubleValue() : null); // 实收数量 - temp.put("assistActInQry", body.getNassistnum() != null ? body.getNassistnum().doubleValue() : 0); // 辅助实收数量 - temp.put("productNum", null); // 产品编号 - temp.put("inStorageId", body.getClocationid()); // 库位 - temp.put("inBatchNum", body.getVbatchcode()); // 物料批号 - temp.put("customId", null); // 客户ID - temp.put("supplierId", null); // 供应商ID - temp.put("manufactureDate", null); // 生产日期 - temp.put("color", null); // 颜色 - temp.put("packLen", null); // 包装长度 - temp.put("packSize", null); // 包装尺寸 - temp.put("remark", body.getVnotebody()); // 备注 (行) - details.add(temp); - } - - JSONObject info = new JSONObject(); - info.put("details", details); // 明细 - // 从head中取数 - info.put("orderNo", head.getVbillcode()); // 通知单ID - info.put("type", "DBRK"); // 事务类型 - info.put("outDate", head.getDbilldate() != null ? head.getDbilldate().toString() : null); // 出库日期 - - StordocVO outWarehouse = (StordocVO) IUIFSERVICE.queryByPrimaryKey(StordocVO.class, head.getCwarehouseid()); - if (Objects.isNull(outWarehouse)) { - throw new BusinessException("拨出仓库信息不存在, 主键:" + head.getCwarehouseid()); - } - if (outWarehouse.getCode() != null && outWarehouse.getCode().length() > 4) { - throw new BusinessException("MES系统拨出仓库编码[" + outWarehouse.getCode() + "]不能超过4位,请选择合适的仓库!"); - } - info.put("outStoreId", outWarehouse.getCode()); // 仓库ID - - StordocVO inWarehouse = (StordocVO) IUIFSERVICE.queryByPrimaryKey(StordocVO.class, head.getCotherwhid()); - if (Objects.isNull(inWarehouse)) { - throw new BusinessException("拨入仓库信息不存在, 主键:" + head.getCotherwhid()); - } - if (inWarehouse.getCode() != null && inWarehouse.getCode().length() > 4) { - throw new BusinessException("MES系统拨入仓库编码[" + inWarehouse.getCode() + "]不能超过4位,请选择合适的仓库!"); - } - info.put("inStoreId", inWarehouse.getCode()); // 仓库ID - - info.put("workerNo", null); - info.put("worker", null); - info.put("storeKeeper", head.getCwhsmanagerid()); - info.put("returned", "N"); // 是否退库 - info.put("mark", "N"); // 生成标志 - info.put("remark", head.getVnote()); // 备注 (头) - - - // 拼接数据,先创建一个jsonObject - JSONObject requestData = new JSONObject(); - requestData.put("operation_type", "I"); // 操作 - requestData.put("info", info); - obmlog.debug("调拨入库requestData:" + requestData.toJSONString()); - - HTTP_POST_OTHER_SYS.sendToExternalSystem("/GTHINKING/AjaxService/N_KCSJJS/101527013.ashx/gt_rec_api_dbrkdj", requestData); - obmlog.debug("调拨入库单 " + head.getVbillcode() + " 同步成功"); - } - private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException { if (StringUtils.isEmpty(pk)) { return null; diff --git a/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncOutToMesProcess.java b/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncOutToMesProcess.java index 8e5f33a..dbec75f 100644 --- a/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncOutToMesProcess.java +++ b/ic/src/private/nc/bs/ic/m4i/sign/rule/AfterSignRuleSyncOutToMesProcess.java @@ -116,10 +116,10 @@ public class AfterSignRuleSyncOutToMesProcess implements IRule { if ("4I-01".equals(trantypecode)) { syncOtherOut(generalOutVO); } -// // 调拨出库/转库单 -// else if ("4I-02".equals(trantypecode)) { -// syncTransferOut(generalOutVO); -// } + // 调拨出库/转库单 + else if ("4I-02".equals(trantypecode)) { + syncTransferOut(generalOutVO); + } } @@ -131,7 +131,7 @@ public class AfterSignRuleSyncOutToMesProcess implements IRule { // 填充details for (GeneralOutBodyVO body : generalOutVO.getBodys()) {// body中取数 JSONObject temp = new JSONObject(); - temp.put("orderNo", head.getVbillcode()); // 通知单ID +// temp.put("orderNo", head.getVbillcode()); // 通知单ID temp.put("sequenceNum", body.getCrowno()); // 通知单序号 temp.put("type", "DBCK"); // 事务类型 temp.put("genType", null); @@ -159,7 +159,7 @@ public class AfterSignRuleSyncOutToMesProcess implements IRule { JSONObject info = new JSONObject(); info.put("details", details); // 从head中取数 - info.put("orderNo", head.getVbillcode()); // 通知单ID +// info.put("orderNo", head.getVbillcode()); // 通知单ID info.put("type", "DBCK"); // 事务类型 info.put("genType", null); info.put("outDate", head.getDbilldate().toString()); diff --git a/mmsfc/META-INF/.gitkeep b/mmsfc/META-INF/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/METADATA/.gitkeep b/mmsfc/METADATA/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/component.xml b/mmsfc/component.xml new file mode 100644 index 0000000..1df9e97 --- /dev/null +++ b/mmsfc/component.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/mmsfc/config/billcodepredata/.gitkeep b/mmsfc/config/billcodepredata/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/config/doc-lucene-config/.gitkeep b/mmsfc/config/doc-lucene-config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/config/pfxx/.gitkeep b/mmsfc/config/pfxx/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/config/tabconfig/.gitkeep b/mmsfc/config/tabconfig/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/designmodel/ace/.gitkeep b/mmsfc/designmodel/ace/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/designmodel/coderule/.gitkeep b/mmsfc/designmodel/coderule/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/designmodel/funcmodel/.gitkeep b/mmsfc/designmodel/funcmodel/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/designmodel/systemplatebase/.gitkeep b/mmsfc/designmodel/systemplatebase/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/designmodel/templet/.gitkeep b/mmsfc/designmodel/templet/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/doc/.gitkeep b/mmsfc/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/resources/.gitkeep b/mmsfc/resources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/script/business/.gitkeep b/mmsfc/script/business/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/script/conf/.gitkeep b/mmsfc/script/conf/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/script/dbcreate/.gitkeep b/mmsfc/script/dbcreate/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/script/dbml/.gitkeep b/mmsfc/script/dbml/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/src/client/.gitkeep b/mmsfc/src/client/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/src/client/nccloud/web/mmsfc/dispatchlist/action/DispatchListListQueryAction.java b/mmsfc/src/client/nccloud/web/mmsfc/dispatchlist/action/DispatchListListQueryAction.java new file mode 100644 index 0000000..09ea79e --- /dev/null +++ b/mmsfc/src/client/nccloud/web/mmsfc/dispatchlist/action/DispatchListListQueryAction.java @@ -0,0 +1,60 @@ +package nccloud.web.mmsfc.dispatchlist.action; + +import nc.ui.querytemplate.querytree.IQueryScheme; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.mmsfc.dispatchlist.entity.AggDispatchlistVO; +import nc.vo.pubapp.pattern.pub.SqlBuilder; +import nc.vo.pubapp.query2.sql.process.QueryCondition; +import nc.vo.pubapp.query2.sql.process.QuerySchemeProcessor; +import nccloud.dto.mmpub.page.entity.MMQueryTreeFormatVO; +import nccloud.framework.web.ui.pattern.grid.Grid; +import nccloud.pub.mmsfc.dispatchlist.enums.ListTabEnum; +import nccloud.web.mmpub.page.action.AbstractPageQueryAction; +import nccloud.web.mmsfc.dispatchlist.util.DispatchlistScaleUtil; + +public class DispatchListListQueryAction extends AbstractPageQueryAction { + public DispatchListListQueryAction() { + } + + protected void afterProcess(Grid grid) { + DispatchlistScaleUtil scale = new DispatchlistScaleUtil(); + scale.processGrid(grid); + } + + public String getTabConditionClazz() { + return "nccloud.pub.mmsfc.dispatchlist.rule.DispatchListTabCondition"; + } + + public String getAllTabCode() { + return ListTabEnum.ALL.getCode(); + } + + public String[] getAllTabs() { + return new String[]{ListTabEnum.ALL.getCode(), ListTabEnum.TO_COMMIT.getCode(), ListTabEnum.APPROVING.getCode(), ListTabEnum.EXECUTING.getCode()}; + } + + public String getOrderDirect() { + return "asc"; + } + + public String[] getHeadOrderFields() { + return new String[]{"vbillcode"}; + } + + @Override + protected void modifyQuerySchme(MMQueryTreeFormatVO queryInfo, IQueryScheme queryScheme) { + QuerySchemeProcessor processor = new QuerySchemeProcessor(queryScheme); + + // 获取主表字段的查询条件 + QueryCondition pmoStatus = processor.getQueryCondition("pmo_status"); + if (pmoStatus == null) { + return; + } + String aliasTableName = processor.getTableAliasOfAttribute("pk_dispatchlist_b.cmooutputid"); + SqlBuilder sqlBuilder = new SqlBuilder(); + sqlBuilder.append("mm_mo.fitemstatus", pmoStatus.getValues()); + processor.appendFrom("inner join mm_mo on " + aliasTableName + ".cmooutputid =mm_mo.cmoid and " + sqlBuilder.toString()); +// processor.getFinalFromWhere() + } + +} diff --git a/mmsfc/src/private/.gitkeep b/mmsfc/src/private/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/src/public/.gitkeep b/mmsfc/src/public/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mmsfc/src/test/.gitkeep b/mmsfc/src/test/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java b/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java index 5787c17..d9c2071 100644 --- a/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java +++ b/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java @@ -133,6 +133,7 @@ public class IAPISaleInvMaitainImpl { // 数电票(增值税专用发票)=31,数电票(普通发票)=32,数电纸质发票(机动车销售统一发票)=36,数电纸质发票(增值税专用发票)=33,数电纸质发票(普通发票)=34, // 增值税电子普通发票=1,增值税电子专用发票=2,增值税普通发票=3,增值税专用发票=4,增值税电子普通发票(成品油)=8,成品油普通发票(卷式)=9, // 成品油普通发票=10,成品油专用发票=11,增值税普通发票(卷式)=12,增值税专用发票(机动车)=99 + Logger.error("vbillcode:" + saleInvoiceHVO.getVbillcode() + ",fplxStr:" + fplxStr); invoiceService.issueTaxInvoice(saleInvoiceVO, fplxStr); JSONObject desc = r.getDesc(); @@ -408,8 +409,8 @@ public class IAPISaleInvMaitainImpl { private String getTaxcode(String taxrateStr) throws BusinessException { IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); - String sql = " select code FROM bd_taxrate tt inner join bd_taxcode tc on tt.pk_taxcode=tc.pk_taxcode where taxrate='" - + taxrateStr + "' AND ROWNUM = 1 "; + String sql = " select code FROM bd_taxrate tt inner join bd_taxcode tc on tt.pk_taxcode=tc.pk_taxcode where tc.dr = 0 " + + " AND taxrate='" + taxrateStr + "' AND ROWNUM = 1 AND tc.enablestate = 2 "; String taxcodeStr = (String) queryBS.executeQuery(sql, new ColumnProcessor()); return taxcodeStr; }