diff --git a/erm/src/private/nccloud/pubimpl/erm/billmanage/BillManageServiceImpl.java b/erm/src/private/nccloud/pubimpl/erm/billmanage/BillManageServiceImpl.java index a634b8d8..f5217353 100644 --- a/erm/src/private/nccloud/pubimpl/erm/billmanage/BillManageServiceImpl.java +++ b/erm/src/private/nccloud/pubimpl/erm/billmanage/BillManageServiceImpl.java @@ -46,616 +46,831 @@ import nccloud.pubitf.platform.query.INCCloudQueryService; import org.apache.commons.lang3.StringUtils; public class BillManageServiceImpl implements IBillManageService { - private final String APPCODE_DJGL = "201104DJGL"; - private final String SQLKEY_JK = "JK"; - private final String SQLKEY_BX = "BX"; - private final String SQLKEY_HK = "HK"; - private final String SQLKEY_TZ = "TZ"; - private final String SQLKEY_SQ = "SQ"; - private final String SQLKEY_YT = "YT"; - private final String SQLKEY_JZ = "JZ"; - private final String SQLKEY_TX = "TX"; - - public BillManageServiceImpl() { - } - - public List queryBillInfoByPks(String[] pks) throws Exception { - if (pks != null && pks.length != 0) { - String whereSql = SqlUtils.getInStr("pk_jkbx", pks, true); - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("select *").append(" from (select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_jkzb where dr = 0 ").append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb where dr = 0 ").append(" union all").append(" select pk_accrued_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" org_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" operator_dept as deptid_v,").append(" operator as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" redflag as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_accrued where dr=0 ").append(" union all").append(" select pk_mtapp_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" orig_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" apply_dept as deptid_v,").append(" billmaker as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" null as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_mtapp_bill where dr = 0 ").append(" union all").append(" select pk_costshare as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" billstatus as djzt,").append(" case when billstatus=2 or billstatus=3 then 1 else -1 end as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" null as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvedate as shrq").append(" from er_costshare").append(" where dr = 0 ").append(" union all").append(" select e.pk_jkbx as pk_jkbx,").append(" t.pk_billtypeid as pk_tradetypeid,").append(" e.bx_pk_billtype as djlxbm,").append(" t.parentbilltype as pk_billtype,").append(" e.bx_billno as djbh,").append(" e.bx_djrq as djrq,").append(" e.bzbm as bzbm,").append(" e.total_amount as ybje,").append(" 3 as djzt,").append(" \t\t\t\t 1\t\t as spzt,").append(" e.bx_deptid as deptid_v,").append(" e.bx_jkbxr as jkbxr,").append(" null as approver,").append(" e.pk_org as pk_org, ").append(" e.creator as creator, ").append(" null as red_status, ").append(" e.saga_frozen as saga_frozen, ").append(" e.saga_btxid as saga_btxid, ").append(" e.saga_gtxid as saga_gtxid, ").append(" e.saga_status as saga_status, ").append(" null as shrq").append(" from er_expamtinfo e").append(" left join bd_billtype t on t.PK_BILLTYPECODE=e.bx_pk_billtype and t.PK_GROUP=e.PK_GROUP").append(" where e.dr = 0 ").append(" ) temp where ").append(whereSql); - sqlBuilder.append(" order by temp.djrq desc"); - String sql = sqlBuilder.toString(); - SQLParameter sqlParam = new SQLParameter(); - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - List resultList = (List)iuapQryService.executeQuery(sql, sqlParam, new JKBXHeaderResultSetProcessor()); - return resultList; - } else { - return null; - } - } - - public List queryPermBillType(String userId, String currentDate, String pkGroup) { - List permBillTypeList = new ArrayList(); - - try { - String sql = " select distinct pub_publishapp.pk_billtypecode as pk_billtypecode,sm_appregister.code as apppcode,sm_apppage.pagecode as pagecode,sm_apppage.pageurl as url, bd_billtype.parentbilltype as parentbilltype, bd_billtype.pk_billtypeid as pk_billtypeid, bd_billtype.billtypename" + MultiLangUtil.getCurrentLangSeqSuffix() + " as billtypename from sm_appregister inner join pub_publishapp on sm_appregister.pk_appregister=pub_publishapp.publishappid inner join sm_apppage on sm_apppage.parent_id=sm_appregister.pk_appregister inner join bd_billtype on pub_publishapp.pk_billtypecode=bd_billtype.pk_billtypecode where sm_appregister.pk_appregister in ( select distinct ra.pk_app from sm_resp_app ra, sm_perm_func pf, sm_appregister app where ra.pk_responsibility = pf.ruleid and app.pk_appregister = ra.pk_app and exists ( select 1 from sm_user_role ur where pf.subjectid = ur.pk_role and cuserid = ? and enabledate <= ? and ( isnull(cast(disabledate as char),'~')='~' or disabledate > ?)) and app.isenable = 'Y' and ( isnull(app.pk_group,'~') = '~' or app.pk_group = ?) and pf.pk_group = ? and app.own_module='2011') and pub_publishapp.sence=10 and pub_publishapp.dr=0 and bd_billtype.parentbilltype in('261X','262X','263X','264X','265X','266X') and bd_billtype.pk_billtypecode != '264X-Cxx-SKBG' and sm_apppage.isdefault='Y' and bd_billtype.pk_group= ? "; - SQLParameter sqlParam = new SQLParameter(); - sqlParam.addParam(userId); - sqlParam.addParam(currentDate); - sqlParam.addParam(currentDate); - sqlParam.addParam(pkGroup); - sqlParam.addParam(pkGroup); - sqlParam.addParam(pkGroup); - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - permBillTypeList = (List)iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { - private static final long serialVersionUID = 1L; - - public Object handleResultSet(ResultSet rs) throws SQLException { - List resultList; - BillManageTradeTypeVO billManageTradeTypeVO; - for(resultList = new ArrayList(); rs.next(); resultList.add(billManageTradeTypeVO)) { - billManageTradeTypeVO = new BillManageTradeTypeVO(); - String pk_billtypecode = rs.getString("pk_billtypecode"); - String appcode = rs.getString("apppcode"); - String pagecode = rs.getString("pagecode"); - String url = rs.getString("url"); - String parentbilltype = rs.getString("parentbilltype"); - billManageTradeTypeVO.setPk_billtypecode(pk_billtypecode); - billManageTradeTypeVO.setAppcode(appcode); - billManageTradeTypeVO.setPagecode(pagecode); - billManageTradeTypeVO.setUrl(url); - billManageTradeTypeVO.setParentbilltype(parentbilltype); - billManageTradeTypeVO.setPk_billtypeid(rs.getString("pk_billtypeid")); - billManageTradeTypeVO.setBilltypename(rs.getString("billtypename")); - if ("263X".equals(parentbilltype)) { - billManageTradeTypeVO.setJkbx("jk"); - } else if ("264X".equals(parentbilltype)) { - billManageTradeTypeVO.setJkbx("bx"); - } - } - - return resultList; - } - }); - } catch (BusinessException e) { - Logger.error(e.getMessage(), e); - } - - return permBillTypeList; - } - - private String[] queryPkPsndocByNameLike(String keyWord) throws Exception { - String sql = "select pk_psndoc from bd_psndoc where ( dr = 0 or dr is null ) and name like ? "; - SQLParameter sqlParam = new SQLParameter(); - sqlParam.addParam("%" + keyWord + "%"); - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - String[] resultPsndoc = (String[])iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { - private static final long serialVersionUID = 1L; - - public Object handleResultSet(ResultSet rs) throws SQLException { - List resultList = new ArrayList(); - - while(rs.next()) { - String pkPsndoc = rs.getString("pk_psndoc"); - resultList.add(pkPsndoc); - } - - return resultList.size() == 0 ? new String[0] : resultList.toArray(new String[resultList.size()]); - } - }); - return resultPsndoc; - } - - private String[] queryPkDeptByNameLike(String keyWord) throws Exception { - String sql = "select pk_dept, name from org_dept where ( dr = 0 or dr is null ) and name like ? "; - SQLParameter sqlParam = new SQLParameter(); - sqlParam.addParam("%" + keyWord + "%"); - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - String[] resultPkDept = (String[])iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { - private static final long serialVersionUID = 1L; - - public Object handleResultSet(ResultSet rs) throws SQLException { - List resultList = new ArrayList(); - - while(rs.next()) { - String pkDept = rs.getString("pk_dept"); - resultList.add(pkDept); - } - - return resultList.size() == 0 ? new String[0] : resultList.toArray(new String[resultList.size()]); - } - }); - return resultPkDept; - } - - private Map geConditionSqlByConditions(QueryTreeFormatVO queryTreeFormatVO) throws BusinessException { - Map whereSqlMap = new HashMap(); - QueryCondition queryCondition = queryTreeFormatVO.getQuerycondition(); - if (queryCondition != null) { - List conditions = queryCondition.getConditions(); - if (conditions != null && conditions.size() > 0) { - StringBuilder conditionBuilderJK = new StringBuilder(""); - StringBuilder conditionBuilderBX = new StringBuilder(" and djlxbm!='264a' and djlxbm!='2647' and djlxbm != '264X-Cxx-SKBG'"); - StringBuilder conditionBuilderHK = new StringBuilder(" and djlxbm='2647' "); - StringBuilder conditionBuilderTZ = new StringBuilder(" and djlxbm='264a' "); - StringBuilder conditionBuilderSQ = new StringBuilder(""); - StringBuilder conditionBuilderYT = new StringBuilder(""); - StringBuilder conditionBuilderJZ = new StringBuilder(""); - StringBuilder conditionBuilderTX = new StringBuilder(""); - String appCode = queryTreeFormatVO.getAppcode(); - if ("201104DJGL".equals(appCode)) { - String userId = InvocationInfoProxy.getInstance().getUserId(); - String pk_group = InvocationInfoProxy.getInstance().getGroupId(); - String jkbxr = ""; - String[] psnInfos = ((IBXBillPrivate)NCLocator.getInstance().lookup(IBXBillPrivate.class)).queryPsnidAndDeptid(userId, pk_group); - if (psnInfos != null && psnInfos.length > 0) { - jkbxr = psnInfos[0]; - } - - conditionBuilderJK.append(" and (creator='").append(userId).append("' or jkbxr='").append(jkbxr).append("' ) "); - conditionBuilderBX.append(" and (creator='").append(userId).append("' or jkbxr='").append(jkbxr).append("' ) "); - conditionBuilderHK.append(" and creator='").append(userId).append("' "); - conditionBuilderTZ.append(" and creator='").append(userId).append("' "); - conditionBuilderSQ.append(" and creator='").append(userId).append("' "); - conditionBuilderYT.append(" and creator='").append(userId).append("' "); - conditionBuilderJZ.append(" and (creator='").append(userId).append("' or jkbxr='").append(jkbxr).append("' ) "); - conditionBuilderTX.append(" and (e.creator='").append(userId).append("' or e.bx_jkbxr='").append(jkbxr).append("' ) "); - } - - boolean ifHasTradeType = false; - boolean filterByPkOrg = false; - String reconSQ = "1=2"; - String reconYT = "1=2"; - String reconJK = "1=2"; - String reconBX = "1=2"; - String reconHK = "1=2"; - String reconTZ = "1=2"; - String reconJZ = "1=2"; - String reconTX = "1=2"; - boolean hasRecon = false; - - for(Condition condition : conditions) { - if ("261X".equals(condition.getField())) { - reconSQ = SqlUtils.getInStr("pk_mtapp_bill", condition.getValue().getFirstvalue().split(","), true); - hasRecon = true; - } else if ("262X".equals(condition.getField())) { - reconYT = SqlUtils.getInStr("pk_accrued_bill", condition.getValue().getFirstvalue().split(","), true); - hasRecon = true; - } else if ("263X".equals(condition.getField())) { - reconJK = SqlUtils.getInStr("pk_jkbx", condition.getValue().getFirstvalue().split(","), true); - hasRecon = true; - } else if ("264X".equals(condition.getField())) { - reconBX = reconHK = reconTZ = SqlUtils.getInStr("pk_jkbx", condition.getValue().getFirstvalue().split(","), true); - hasRecon = true; - } else if ("265X".equals(condition.getField())) { - hasRecon = true; - reconJZ = SqlUtils.getInStr("pk_costshare", condition.getValue().getFirstvalue().split(","), true); - } else if ("266X".equals(condition.getField())) { - hasRecon = true; - reconTX = SqlUtils.getInStr("e.pk_expamtinfo", condition.getValue().getFirstvalue().split(","), true); - } else if ("isReconEmpty".equals(condition.getField())) { - hasRecon = true; - } else { - if ("pk_org".equals(condition.getField())) { - filterByPkOrg = true; - if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - String[] orgs = condition.getValue().getFirstvalue().split(","); - String inSql = SqlUtils.getInStr("pk_org", orgs, true); - conditionBuilderJK.append(" and ").append(inSql); - conditionBuilderBX.append(" and ").append(inSql); - conditionBuilderHK.append(" and ").append(inSql); - conditionBuilderTZ.append(" and ").append(inSql); - conditionBuilderSQ.append(" and ").append(inSql); - conditionBuilderYT.append(" and ").append(inSql); - conditionBuilderJZ.append(" and ").append(inSql); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.pk_org", orgs, true)); - } - } - if ("defitem11".equals(condition.getField())) { - filterByPkOrg = true; - if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - String[] orgs = condition.getValue().getFirstvalue().split(","); -// String inSql = SqlUtils.getInStr("pk_org", orgs, true); er_mtapp_bill assume_dept - conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); - conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); - conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); - conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); - conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("assume_dept", orgs, true)); - conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("operator_dept", orgs, true)); - conditionBuilderJZ.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.bx_deptid", orgs, true)); - } - } - - if ("djrq".equals(condition.getField())) { - if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - conditionBuilderJK.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderBX.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderHK.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderTZ.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderSQ.append(" and billdate >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderYT.append(" and billdate >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderJZ.append(" and billdate >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderTX.append(" and e.bx_djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); - } - - if (StringUtils.isNotEmpty(condition.getValue().getSecondvalue())) { - conditionBuilderJK.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderBX.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderHK.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderTZ.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderSQ.append(" and billdate <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderYT.append(" and billdate <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderJZ.append(" and billdate <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderTX.append(" and e.bx_djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); - } - } - - - if ("paydate".equals(condition.getField())) { - if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - conditionBuilderJK.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderBX.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderHK.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderTZ.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); - } - - if (StringUtils.isNotEmpty(condition.getValue().getSecondvalue())) { - conditionBuilderJK.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderBX.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderHK.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderTZ.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); - } - } - - if ("djbh".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - conditionBuilderJK.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderHK.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderBX.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderTZ.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderSQ.append(" and billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderYT.append(" and billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderJZ.append(" and billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); - conditionBuilderTX.append(" and e.bx_billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); - } - - if ("pk_tradetypeid".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - ifHasTradeType = true; - String[] tradetypes = condition.getValue().getFirstvalue().split(","); - String inSql = SqlUtils.getInStr("pk_tradetypeid", tradetypes, true); - conditionBuilderJK.append(" and ").append(inSql); - conditionBuilderBX.append(" and ").append(inSql); - conditionBuilderHK.append(" and ").append(inSql); - conditionBuilderTZ.append(" and ").append(inSql); - conditionBuilderSQ.append(" and ").append(inSql); - conditionBuilderYT.append(" and ").append(inSql); - conditionBuilderJZ.append(" and ").append(inSql); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("t.pk_billtypeid", tradetypes, true)); - } - - if ("ybje".equals(condition.getField())) { - if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - conditionBuilderJK.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderBX.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderHK.append(" and hkybje >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderTZ.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderSQ.append(" and orig_amount\t >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderYT.append(" and org_amount >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderJZ.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); - conditionBuilderTX.append(" and e.total_amount >= '").append(condition.getValue().getFirstvalue()).append("' "); - } - - if (StringUtils.isNotEmpty(condition.getValue().getSecondvalue())) { - conditionBuilderJK.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderBX.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderHK.append(" and hkybje <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderTZ.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderSQ.append(" and orig_amount <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderYT.append(" and org_amount <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderJZ.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); - conditionBuilderTX.append(" and e.total_amount <= '").append(condition.getValue().getSecondvalue()).append("' "); - } - } - - if ("bzbm".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - String[] bzbms = condition.getValue().getFirstvalue().split(","); - conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); - conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); - conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); - conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); - conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("pk_currtype", bzbms, true)); - conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("pk_currtype", bzbms, true)); - conditionBuilderJZ.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.bzbm", bzbms, true)); - } - - if ("djzt".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - List list = Arrays.asList(condition.getValue().getFirstvalue().split(",")); - conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); - conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); - conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); - conditionBuilderJZ.append(" and ").append(SqlUtils.getInStr("billstatus", list, true)); - list = new ArrayList(list); - if (list.contains("3")) { - list.remove("3"); - } - - if (list.contains("2")) { - Collections.replaceAll(list, "2", "3"); - } - - conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); - conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("billstatus", list, true)); - conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("billstatus", list, true)); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("3", list, true)); - } - - if ("spzt".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { - List list = Arrays.asList(condition.getValue().getFirstvalue().split(",")); - conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); - conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); - conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); - conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); - conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("apprstatus", list, true)); - conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("apprstatus", list, true)); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("1", list, true)); - } - } - } - - if (hasRecon) { - conditionBuilderJK.append(" and ").append(reconJK); - conditionBuilderBX.append(" and ").append(reconBX); - conditionBuilderHK.append(" and ").append(reconHK); - conditionBuilderTZ.append(" and ").append(reconTZ); - conditionBuilderSQ.append(" and ").append(reconSQ); - conditionBuilderYT.append(" and ").append(reconYT); - conditionBuilderJZ.append(" and ").append(reconJZ); - conditionBuilderTX.append(" and ").append(reconTX); - } else { - if (!ifHasTradeType) { - String groupPk = InvocationInfoProxy.getInstance().getGroupId(); - String userId = InvocationInfoProxy.getInstance().getUserId(); - String currentDate = (new UFDateTime()).toLocalString(); - List permBillTypeList = ((IBillManageService)NCLocator.getInstance().lookup(IBillManageService.class)).queryPermBillType(userId, currentDate, groupPk); - if (permBillTypeList != null && permBillTypeList.size() > 0) { - String[] hasPermissionTradeTypecode = new String[permBillTypeList.size()]; - - for(int i = 0; i < permBillTypeList.size(); ++i) { - hasPermissionTradeTypecode[i] = ((BillManageTradeTypeVO)permBillTypeList.get(i)).getPk_billtypeid(); - } - - String inSql = SqlUtils.getInStr("pk_tradetypeid", hasPermissionTradeTypecode, true); - conditionBuilderJK.append(" and ").append(inSql); - conditionBuilderBX.append(" and ").append(inSql); - conditionBuilderHK.append(" and ").append(inSql); - conditionBuilderTZ.append(" and ").append(inSql); - conditionBuilderSQ.append(" and ").append(inSql); - conditionBuilderYT.append(" and ").append(inSql); - conditionBuilderJZ.append(" and ").append(inSql); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("t.pk_billtypeid", hasPermissionTradeTypecode, true)); - } else { - conditionBuilderJK.append(" and ").append("1=2"); - conditionBuilderBX.append(" and ").append("1=2"); - conditionBuilderHK.append(" and ").append("1=2"); - conditionBuilderTZ.append(" and ").append("1=2"); - conditionBuilderSQ.append(" and ").append("1=2"); - conditionBuilderYT.append(" and ").append("1=2"); - conditionBuilderJZ.append(" and ").append("1=2"); - conditionBuilderTX.append(" and ").append("1=2"); - } - } - - if (!filterByPkOrg) { - IFunctionPermissionPubService service = (IFunctionPermissionPubService)NCLocator.getInstance().lookup(IFunctionPermissionPubService.class); - String[] orgByIDs = service.getUserPermissionPkOrgs(InvocationInfoProxy.getInstance().getUserId(), (String)null, InvocationInfoProxy.getInstance().getGroupId()); - String inSql = SqlUtils.getInStr("pk_org", orgByIDs, true); - conditionBuilderJK.append(" and ").append(inSql); - conditionBuilderBX.append(" and ").append(inSql); - conditionBuilderHK.append(" and ").append(inSql); - conditionBuilderTZ.append(" and ").append(inSql); - conditionBuilderSQ.append(" and ").append(inSql); - conditionBuilderYT.append(" and ").append(inSql); - conditionBuilderJZ.append(" and ").append(inSql); - conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.pk_org", orgByIDs, true)); - } - } - - whereSqlMap.put("JK", conditionBuilderJK.toString()); - whereSqlMap.put("BX", conditionBuilderBX.toString()); - whereSqlMap.put("HK", conditionBuilderHK.toString()); - whereSqlMap.put("TZ", conditionBuilderTZ.toString()); - whereSqlMap.put("SQ", conditionBuilderSQ.toString()); - whereSqlMap.put("YT", conditionBuilderYT.toString()); - whereSqlMap.put("JZ", conditionBuilderJZ.toString()); - whereSqlMap.put("TX", conditionBuilderTX.toString()); - } - } - - return whereSqlMap; - } - - public List queryBillInfoByPage(QueryTreeFormatVO queryTreeFormatVO) throws Exception { - INCCloudQueryService ncCloudQueryService = (INCCloudQueryService)NCLocator.getInstance().lookup(INCCloudQueryService.class); - PageInfo pageInfo = null; - if (queryTreeFormatVO != null) { - pageInfo = queryTreeFormatVO.getPageInfo(); - } - - IQueryScheme queryscheme = ncCloudQueryService.convertCondition(queryTreeFormatVO); - if (queryscheme == null) { - return null; - } else { - SQLParameter sqlParam = new SQLParameter(); - StringBuilder conditionBuilder = new StringBuilder(); - String conditionSql = null; - QueryCondition queryCondition = queryTreeFormatVO.getQuerycondition(); - List conditions = queryCondition.getConditions(); - if (conditions != null && conditions.size() > 0) { - for(Condition condition : conditions) { - if (condition != null && condition.getValue() != null && "search".equals(condition.getField()) && !StringUtils.isEmpty(condition.getValue().getFirstvalue())) { - String keyWord = condition.getValue().getFirstvalue(); - conditionBuilder.append("and ( djbh like ? "); - sqlParam.addParam("%" + keyWord + "%"); - String[] pkDepts = this.queryPkDeptByNameLike(keyWord); - String[] pkPsndocs = this.queryPkPsndocByNameLike(keyWord); - if (pkDepts != null && pkDepts.length > 0) { - conditionBuilder.append(" or " + SqlUtils.getInStr("deptid_v", pkDepts, true)); - } - - if (pkPsndocs != null && pkPsndocs.length > 0) { - conditionBuilder.append(" or " + SqlUtils.getInStr("jkbxr", pkPsndocs, true)); - } - - conditionBuilder.append(")"); - } - } - } - - conditionSql = conditionBuilder.toString(); - Map sqlMap = this.geConditionSqlByConditions(queryTreeFormatVO); - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("select *").append(" from (select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_jkzb").append(" where dr = 0 ").append(null == sqlMap.get("JK") ? "" : (String)sqlMap.get("JK")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" \t\t\t ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("BX") ? "" : (String)sqlMap.get("BX")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" hkybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("HK") ? "" : (String)sqlMap.get("HK")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("TZ") ? "" : (String)sqlMap.get("TZ")).append(" union all").append(" select pk_accrued_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" org_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" operator_dept as deptid_v,").append(" operator as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" redflag as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_accrued").append(" where dr = 0 ").append(null == sqlMap.get("YT") ? "" : (String)sqlMap.get("YT")).append(" union all").append(" select pk_mtapp_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" orig_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" apply_dept as deptid_v,").append(" billmaker as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" null as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_mtapp_bill").append(" where dr = 0 ").append(null == sqlMap.get("SQ") ? "" : (String)sqlMap.get("SQ")).append(" union all").append(" select pk_costshare as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" billstatus as djzt,").append(" case when billstatus=2 or billstatus=3 then 1 else -1 end as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" null as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvedate as shrq").append(" from er_costshare").append(" where dr = 0 ").append(null == sqlMap.get("JZ") ? "" : (String)sqlMap.get("JZ")).append(" union all").append(" select e.pk_jkbx as pk_jkbx,").append(" t.pk_billtypeid as pk_tradetypeid,").append(" e.bx_pk_billtype as djlxbm,").append(" t.parentbilltype as pk_billtype,").append(" e.bx_billno as djbh,").append(" e.bx_djrq as djrq,").append(" e.bzbm as bzbm,").append(" e.total_amount as ybje,").append(" 3 as djzt,").append(" \t\t\t\t 1\t\t as spzt,").append(" e.bx_deptid as deptid_v,").append(" e.bx_jkbxr as jkbxr,").append(" null as approver,").append(" e.pk_org as pk_org, ").append(" e.creator as creator, ").append(" null as red_status, ").append(" e.saga_frozen as saga_frozen, ").append(" e.saga_btxid as saga_btxid, ").append(" e.saga_gtxid as saga_gtxid, ").append(" e.saga_status as saga_status, ").append(" null as shrq").append(" from er_expamtinfo e").append(" left join bd_billtype t on t.PK_BILLTYPECODE=e.bx_pk_billtype and t.PK_GROUP=e.PK_GROUP").append(" where e.dr = 0 ").append(null == sqlMap.get("TX") ? "" : (String)sqlMap.get("TX")).append(" ) temp where 1=1 "); - if (!conditionSql.isEmpty()) { - sqlBuilder.append(conditionSql); - } - - String sql = sqlBuilder.toString(); - if (pageInfo != null) { - if (pageInfo.getTotal() == 0) { - Integer total = this.countBillInfoByCondition(queryTreeFormatVO, conditionSql, sqlParam, sqlMap); - pageInfo.setTotal(total); - } - - Integer pageSize = Integer.valueOf(pageInfo.getPageSize()); - Integer totalPage = pageInfo.getTotal() % pageSize == 0 ? pageInfo.getTotal() / pageSize : pageInfo.getTotal() / pageSize + 1; - pageInfo.setTotalPage(totalPage); - int databaseType = DataSourceCenter.getInstance().getDatabaseType(); - LimitSQLBuilder sqlBuilderPage = SQLBuilderFactory.getInstance().createLimitSQLBuilder(databaseType); - int pageIndex = 0; - if (!StringUtils.isEmpty(pageInfo.getPageIndex())) { - pageIndex = Integer.valueOf(pageInfo.getPageIndex()); - } - - sql = sqlBuilderPage.build(sql + " order by temp.djrq desc", pageIndex + 1, Integer.valueOf(pageInfo.getPageSize())); - } else { - sql = sql + " order by temp.djrq desc"; - } - - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - List resultList = (List)iuapQryService.executeQuery(sql, sqlParam, new JKBXHeaderResultSetProcessor()); - return resultList; - } - } - - public int countBillInfoByCondition(QueryTreeFormatVO queryTreeFormatVO, String conditionSql, SQLParameter sqlParam, Map sqlMap) throws Exception { - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("select count(1) as count from("); - sqlBuilder.append("select *").append(" from (select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_jkzb").append(" where dr = 0 ").append(null == sqlMap.get("JK") ? "" : (String)sqlMap.get("JK")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("BX") ? "" : (String)sqlMap.get("BX")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" hkybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("HK") ? "" : (String)sqlMap.get("HK")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("TZ") ? "" : (String)sqlMap.get("TZ")).append(" union all").append(" select pk_accrued_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" org_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" operator_dept as deptid_v,").append(" operator as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_accrued").append(" where dr = 0 ").append(null == sqlMap.get("YT") ? "" : (String)sqlMap.get("YT")).append(" union all").append(" select pk_mtapp_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" orig_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" apply_dept as deptid_v,").append(" billmaker as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_mtapp_bill").append(" where dr = 0 ").append(null == sqlMap.get("SQ") ? "" : (String)sqlMap.get("SQ")).append(" union all").append(" select pk_costshare as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" billstatus as djzt,").append(" case when billstatus=2 or billstatus=3 then 1 else -1 end as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvedate as shrq").append(" from er_costshare").append(" where dr = 0 ").append(null == sqlMap.get("JZ") ? "" : (String)sqlMap.get("JZ")).append(" union all").append(" select e.pk_jkbx as pk_jkbx,").append(" t.pk_billtypeid as pk_tradetypeid,").append(" e.bx_pk_billtype as djlxbm,").append(" t.parentbilltype as pk_billtype,").append(" e.bx_billno as djbh,").append(" e.bx_djrq as djrq,").append(" e.bzbm as bzbm,").append(" e.total_amount as ybje,").append(" 3 as djzt,").append(" \t\t\t\t 1\t\t as spzt,").append(" e.bx_deptid as deptid_v,").append(" e.bx_jkbxr as jkbxr,").append(" null as approver,").append(" e.pk_org as pk_org, ").append(" e.creator as creator, ").append(" e.saga_frozen as saga_frozen, ").append(" e.saga_btxid as saga_btxid, ").append(" e.saga_gtxid as saga_gtxid, ").append(" e.saga_status as saga_status, ").append(" null as shrq").append(" from er_expamtinfo e").append(" left join bd_billtype t on t.PK_BILLTYPECODE=e.bx_pk_billtype and t.PK_GROUP=e.PK_GROUP").append(" where e.dr = 0 ").append(null == sqlMap.get("TX") ? "" : (String)sqlMap.get("TX")).append(" )temp where 1=1 "); - if (!conditionSql.isEmpty()) { - sqlBuilder.append(conditionSql); - } - - sqlBuilder.append(") a "); - String sql = sqlBuilder.toString(); - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - int count = (Integer)iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { - private static final long serialVersionUID = 1L; - - public Object handleResultSet(ResultSet rs) throws SQLException { - int count; - for(count = 0; rs.next(); count = rs.getInt("count")) { - } - - return count; - } - }); - return count; - } - - public Map qryCurApproveman(List billIds) throws BusinessException { - StringBuilder sqlExe = new StringBuilder(); - sqlExe.append("select n.billid as billid, n.checkman as checkman, n.ischeck as ischeck"); - sqlExe.append(" from pub_wf_task t inner join pub_workflownote n on t.pk_wf_task=n.pk_wf_task"); - sqlExe.append(" where ").append(SqlUtils.getInStr("n.billid", billIds, true)); - sqlExe.append(" and t.taskstatus=0 "); - sqlExe.append(" and n.approvestatus =0 "); - IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); - SQLParameter sqlParam = new SQLParameter(); - List approveInfos = (List)iuapQryService.executeQuery(sqlExe.toString(), sqlParam, new ArrayListProcessor()); - List busiidUserList = new ArrayList(); - List userid = new ArrayList(); - - for(Object[] approveInfo : approveInfos) { - String[] busiidUser = new String[]{(String)approveInfo[0], (String)approveInfo[1]}; - busiidUserList.add(busiidUser); - userid.add((String)approveInfo[1]); - } - - IUserManageQuery userQry = (IUserManageQuery)NCLocator.getInstance().lookup(IUserManageQuery.class); - UserVO[] userVOs = userQry.queryUserByClause(SqlUtils.getInStr("cuserid", userid, true)); - Map userid_username = new HashMap(); - - for(UserVO vo : userVOs) { - userid_username.put(vo.getCuserid(), vo.getUser_name()); - } - - for(String[] busiidUser : busiidUserList) { - busiidUser[1] = (String)userid_username.get(busiidUser[1]); - } - - Map busiid_username = new HashMap(); - - for(String[] busiidUser : busiidUserList) { - if (!busiid_username.containsKey(busiidUser[0])) { - busiid_username.put(busiidUser[0], busiidUser[1]); - } else { - String var10000 = (String)busiid_username.get(busiidUser[0]); - String multiName = var10000 + ", " + busiidUser[1]; - busiid_username.put(busiidUser[0], multiName); - } - } - - return busiid_username; - } - - private class JKBXHeaderResultSetProcessor implements ResultSetProcessor { - private static final long serialVersionUID = 1L; - - private JKBXHeaderResultSetProcessor() { - } - - public Object handleResultSet(ResultSet rs) throws SQLException { - List resultList = new ArrayList(); - - while(rs.next()) { - JKBXHeaderVO tempHeader = new BXHeaderVO(); - tempHeader.setPk_jkbx(rs.getString("pk_jkbx")); - tempHeader.setPk_tradetypeid(rs.getString("pk_tradetypeid")); - tempHeader.setDjlxbm(rs.getString("djlxbm")); - tempHeader.setPk_billtype(rs.getString("pk_billtype")); - tempHeader.setDjbh(rs.getString("djbh")); - tempHeader.setDjrq(StringUtils.isEmpty(rs.getString("djrq")) ? null : new UFDate(rs.getString("djrq"))); - tempHeader.setBzbm(rs.getString("bzbm")); - tempHeader.setYbje(new UFDouble(rs.getDouble("ybje"))); - tempHeader.setDjzt(rs.getInt("djzt")); - tempHeader.setSpzt(rs.getInt("spzt")); - tempHeader.setDeptid_v(rs.getString("deptid_v")); - tempHeader.setJkbxr(rs.getString("jkbxr")); - tempHeader.setApprover(rs.getString("approver")); - tempHeader.setPk_org(rs.getString("pk_org")); - tempHeader.setCreator(rs.getString("creator")); - tempHeader.setRed_status(rs.getInt("red_status")); - tempHeader.setShrq(StringUtils.isEmpty(rs.getString("shrq")) ? null : new UFDateTime(rs.getString("shrq"))); - tempHeader.setSaga_frozen(rs.getInt("saga_frozen")); - tempHeader.setSaga_btxid(rs.getString("saga_btxid")); - tempHeader.setSaga_gtxid(rs.getString("saga_gtxid")); - tempHeader.setSaga_status(rs.getInt("saga_status")); - resultList.add(tempHeader); - } - - return resultList; - } - } + private final String APPCODE_DJGL = "201104DJGL"; + private final String SQLKEY_JK = "JK"; + private final String SQLKEY_BX = "BX"; + private final String SQLKEY_HK = "HK"; + private final String SQLKEY_TZ = "TZ"; + private final String SQLKEY_SQ = "SQ"; + private final String SQLKEY_YT = "YT"; + private final String SQLKEY_JZ = "JZ"; + private final String SQLKEY_TX = "TX"; + + public BillManageServiceImpl() { + } + + public List queryBillInfoByPks(String[] pks) throws Exception { + if (pks != null && pks.length != 0) { + String whereSql = SqlUtils.getInStr("pk_jkbx", pks, true); + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("select *").append(" from (select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_jkzb where dr = 0 ").append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" red_status as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb where dr = 0 ").append(" union all").append(" select pk_accrued_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" org_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" operator_dept as deptid_v,").append(" operator as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" redflag as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_accrued where dr=0 ").append(" union all").append(" select pk_mtapp_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" orig_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" apply_dept as deptid_v,").append(" billmaker as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" null as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_mtapp_bill where dr = 0 ").append(" union all").append(" select pk_costshare as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" billstatus as djzt,").append(" case when billstatus=2 or billstatus=3 then 1 else -1 end as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" null as red_status, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvedate as shrq").append(" from er_costshare").append(" where dr = 0 ").append(" union all").append(" select e.pk_jkbx as pk_jkbx,").append(" t.pk_billtypeid as pk_tradetypeid,").append(" e.bx_pk_billtype as djlxbm,").append(" t.parentbilltype as pk_billtype,").append(" e.bx_billno as djbh,").append(" e.bx_djrq as djrq,").append(" e.bzbm as bzbm,").append(" e.total_amount as ybje,").append(" 3 as djzt,").append(" \t\t\t\t 1\t\t as spzt,").append(" e.bx_deptid as deptid_v,").append(" e.bx_jkbxr as jkbxr,").append(" null as approver,").append(" e.pk_org as pk_org, ").append(" e.creator as creator, ").append(" null as red_status, ").append(" e.saga_frozen as saga_frozen, ").append(" e.saga_btxid as saga_btxid, ").append(" e.saga_gtxid as saga_gtxid, ").append(" e.saga_status as saga_status, ").append(" null as shrq").append(" from er_expamtinfo e").append(" left join bd_billtype t on t.PK_BILLTYPECODE=e.bx_pk_billtype and t.PK_GROUP=e.PK_GROUP").append(" where e.dr = 0 ").append(" ) temp where ").append(whereSql); + sqlBuilder.append(" order by temp.djrq desc"); + String sql = sqlBuilder.toString(); + SQLParameter sqlParam = new SQLParameter(); + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + List resultList = (List)iuapQryService.executeQuery(sql, sqlParam, new JKBXHeaderResultSetProcessor()); + return resultList; + } else { + return null; + } + } + + public List queryPermBillType(String userId, String currentDate, String pkGroup) { + List permBillTypeList = new ArrayList(); + + try { + String sql = " select distinct pub_publishapp.pk_billtypecode as pk_billtypecode,sm_appregister.code as apppcode,sm_apppage.pagecode as pagecode,sm_apppage.pageurl as url, bd_billtype.parentbilltype as parentbilltype, bd_billtype.pk_billtypeid as pk_billtypeid, bd_billtype.billtypename" + MultiLangUtil.getCurrentLangSeqSuffix() + " as billtypename from sm_appregister inner join pub_publishapp on sm_appregister.pk_appregister=pub_publishapp.publishappid inner join sm_apppage on sm_apppage.parent_id=sm_appregister.pk_appregister inner join bd_billtype on pub_publishapp.pk_billtypecode=bd_billtype.pk_billtypecode where sm_appregister.pk_appregister in ( select distinct ra.pk_app from sm_resp_app ra, sm_perm_func pf, sm_appregister app where ra.pk_responsibility = pf.ruleid and app.pk_appregister = ra.pk_app and exists ( select 1 from sm_user_role ur where pf.subjectid = ur.pk_role and cuserid = ? and enabledate <= ? and ( isnull(cast(disabledate as char),'~')='~' or disabledate > ?)) and app.isenable = 'Y' and ( isnull(app.pk_group,'~') = '~' or app.pk_group = ?) and pf.pk_group = ? and app.own_module='2011') and pub_publishapp.sence=10 and pub_publishapp.dr=0 and bd_billtype.parentbilltype in('261X','262X','263X','264X','265X','266X') and bd_billtype.pk_billtypecode != '264X-Cxx-SKBG' and sm_apppage.isdefault='Y' and bd_billtype.pk_group= ? "; + SQLParameter sqlParam = new SQLParameter(); + sqlParam.addParam(userId); + sqlParam.addParam(currentDate); + sqlParam.addParam(currentDate); + sqlParam.addParam(pkGroup); + sqlParam.addParam(pkGroup); + sqlParam.addParam(pkGroup); + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + permBillTypeList = (List)iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { + private static final long serialVersionUID = 1L; + + public Object handleResultSet(ResultSet rs) throws SQLException { + List resultList; + BillManageTradeTypeVO billManageTradeTypeVO; + for(resultList = new ArrayList(); rs.next(); resultList.add(billManageTradeTypeVO)) { + billManageTradeTypeVO = new BillManageTradeTypeVO(); + String pk_billtypecode = rs.getString("pk_billtypecode"); + String appcode = rs.getString("apppcode"); + String pagecode = rs.getString("pagecode"); + String url = rs.getString("url"); + String parentbilltype = rs.getString("parentbilltype"); + billManageTradeTypeVO.setPk_billtypecode(pk_billtypecode); + billManageTradeTypeVO.setAppcode(appcode); + billManageTradeTypeVO.setPagecode(pagecode); + billManageTradeTypeVO.setUrl(url); + billManageTradeTypeVO.setParentbilltype(parentbilltype); + billManageTradeTypeVO.setPk_billtypeid(rs.getString("pk_billtypeid")); + billManageTradeTypeVO.setBilltypename(rs.getString("billtypename")); + if ("263X".equals(parentbilltype)) { + billManageTradeTypeVO.setJkbx("jk"); + } else if ("264X".equals(parentbilltype)) { + billManageTradeTypeVO.setJkbx("bx"); + } + } + + return resultList; + } + }); + } catch (BusinessException e) { + Logger.error(e.getMessage(), e); + } + + return permBillTypeList; + } + + private String[] queryPkPsndocByNameLike(String keyWord) throws Exception { + String sql = "select pk_psndoc from bd_psndoc where ( dr = 0 or dr is null ) and name like ? "; + SQLParameter sqlParam = new SQLParameter(); + sqlParam.addParam("%" + keyWord + "%"); + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + String[] resultPsndoc = (String[])iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { + private static final long serialVersionUID = 1L; + + public Object handleResultSet(ResultSet rs) throws SQLException { + List resultList = new ArrayList(); + + while(rs.next()) { + String pkPsndoc = rs.getString("pk_psndoc"); + resultList.add(pkPsndoc); + } + + return resultList.size() == 0 ? new String[0] : resultList.toArray(new String[resultList.size()]); + } + }); + return resultPsndoc; + } + + private String[] queryPkDeptByNameLike(String keyWord) throws Exception { + String sql = "select pk_dept, name from org_dept where ( dr = 0 or dr is null ) and name like ? "; + SQLParameter sqlParam = new SQLParameter(); + sqlParam.addParam("%" + keyWord + "%"); + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + String[] resultPkDept = (String[])iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { + private static final long serialVersionUID = 1L; + + public Object handleResultSet(ResultSet rs) throws SQLException { + List resultList = new ArrayList(); + + while(rs.next()) { + String pkDept = rs.getString("pk_dept"); + resultList.add(pkDept); + } + + return resultList.size() == 0 ? new String[0] : resultList.toArray(new String[resultList.size()]); + } + }); + return resultPkDept; + } + + private Map geConditionSqlByConditions(QueryTreeFormatVO queryTreeFormatVO) throws BusinessException { + Map whereSqlMap = new HashMap(); + QueryCondition queryCondition = queryTreeFormatVO.getQuerycondition(); + if (queryCondition != null) { + List conditions = queryCondition.getConditions(); + if (conditions != null && conditions.size() > 0) { + StringBuilder conditionBuilderJK = new StringBuilder(""); + StringBuilder conditionBuilderBX = new StringBuilder(" and djlxbm!='264a' and djlxbm!='2647' and djlxbm != '264X-Cxx-SKBG'"); + StringBuilder conditionBuilderHK = new StringBuilder(" and djlxbm='2647' "); + StringBuilder conditionBuilderTZ = new StringBuilder(" and djlxbm='264a' "); + StringBuilder conditionBuilderSQ = new StringBuilder(""); + StringBuilder conditionBuilderYT = new StringBuilder(""); + StringBuilder conditionBuilderJZ = new StringBuilder(""); + StringBuilder conditionBuilderTX = new StringBuilder(""); + String appCode = queryTreeFormatVO.getAppcode(); + if ("201104DJGL".equals(appCode)) { + String userId = InvocationInfoProxy.getInstance().getUserId(); + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + String jkbxr = ""; + String[] psnInfos = ((IBXBillPrivate)NCLocator.getInstance().lookup(IBXBillPrivate.class)).queryPsnidAndDeptid(userId, pk_group); + if (psnInfos != null && psnInfos.length > 0) { + jkbxr = psnInfos[0]; + } + + conditionBuilderJK.append(" and (creator='").append(userId).append("' or jkbxr='").append(jkbxr).append("' ) "); + conditionBuilderBX.append(" and (creator='").append(userId).append("' or jkbxr='").append(jkbxr).append("' ) "); + conditionBuilderHK.append(" and creator='").append(userId).append("' "); + conditionBuilderTZ.append(" and creator='").append(userId).append("' "); + conditionBuilderSQ.append(" and creator='").append(userId).append("' "); + conditionBuilderYT.append(" and creator='").append(userId).append("' "); + conditionBuilderJZ.append(" and (creator='").append(userId).append("' or jkbxr='").append(jkbxr).append("' ) "); + conditionBuilderTX.append(" and (e.creator='").append(userId).append("' or e.bx_jkbxr='").append(jkbxr).append("' ) "); + } + + boolean ifHasTradeType = false; + boolean filterByPkOrg = false; + String reconSQ = "1=2"; + String reconYT = "1=2"; + String reconJK = "1=2"; + String reconBX = "1=2"; + String reconHK = "1=2"; + String reconTZ = "1=2"; + String reconJZ = "1=2"; + String reconTX = "1=2"; + boolean hasRecon = false; + + for(Condition condition : conditions) { + if ("261X".equals(condition.getField())) { + reconSQ = SqlUtils.getInStr("pk_mtapp_bill", condition.getValue().getFirstvalue().split(","), true); + hasRecon = true; + } else if ("262X".equals(condition.getField())) { + reconYT = SqlUtils.getInStr("pk_accrued_bill", condition.getValue().getFirstvalue().split(","), true); + hasRecon = true; + } else if ("263X".equals(condition.getField())) { + reconJK = SqlUtils.getInStr("pk_jkbx", condition.getValue().getFirstvalue().split(","), true); + hasRecon = true; + } else if ("264X".equals(condition.getField())) { + reconBX = reconHK = reconTZ = SqlUtils.getInStr("pk_jkbx", condition.getValue().getFirstvalue().split(","), true); + hasRecon = true; + } else if ("265X".equals(condition.getField())) { + hasRecon = true; + reconJZ = SqlUtils.getInStr("pk_costshare", condition.getValue().getFirstvalue().split(","), true); + } else if ("266X".equals(condition.getField())) { + hasRecon = true; + reconTX = SqlUtils.getInStr("e.pk_expamtinfo", condition.getValue().getFirstvalue().split(","), true); + } else if ("isReconEmpty".equals(condition.getField())) { + hasRecon = true; + } else { + if ("pk_org".equals(condition.getField())) { + filterByPkOrg = true; + if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + String[] orgs = condition.getValue().getFirstvalue().split(","); + String inSql = SqlUtils.getInStr("pk_org", orgs, true); + conditionBuilderJK.append(" and ").append(inSql); + conditionBuilderBX.append(" and ").append(inSql); + conditionBuilderHK.append(" and ").append(inSql); + conditionBuilderTZ.append(" and ").append(inSql); + conditionBuilderSQ.append(" and ").append(inSql); + conditionBuilderYT.append(" and ").append(inSql); + conditionBuilderJZ.append(" and ").append(inSql); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.pk_org", orgs, true)); + } + } + if ("defitem11".equals(condition.getField())) { + filterByPkOrg = true; + if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + String[] orgs = condition.getValue().getFirstvalue().split(","); + // String inSql = SqlUtils.getInStr("pk_org", orgs, true); er_mtapp_bill assume_dept + conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); + conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); + conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); + conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); + conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("assume_dept", orgs, true)); + conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("operator_dept", orgs, true)); + conditionBuilderJZ.append(" and ").append(SqlUtils.getInStr("fydeptid", orgs, true)); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.bx_deptid", orgs, true)); + } + } + + if ("djrq".equals(condition.getField())) { + if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + conditionBuilderJK.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderBX.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderHK.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderTZ.append(" and djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderSQ.append(" and billdate >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderYT.append(" and billdate >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderJZ.append(" and billdate >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderTX.append(" and e.bx_djrq >= '").append(condition.getValue().getFirstvalue()).append("' "); + } + + if (StringUtils.isNotEmpty(condition.getValue().getSecondvalue())) { + conditionBuilderJK.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderBX.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderHK.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderTZ.append(" and djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderSQ.append(" and billdate <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderYT.append(" and billdate <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderJZ.append(" and billdate <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderTX.append(" and e.bx_djrq <= '").append(condition.getValue().getSecondvalue()).append("' "); + } + } + + + if ("paydate".equals(condition.getField())) { + if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + conditionBuilderJK.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderBX.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderHK.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderTZ.append(" and paydate >= '").append(condition.getValue().getFirstvalue()).append("' "); + } + + if (StringUtils.isNotEmpty(condition.getValue().getSecondvalue())) { + conditionBuilderJK.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderBX.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderHK.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderTZ.append(" and paydate <= '").append(condition.getValue().getSecondvalue()).append("' "); + } + } + + if ("djbh".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + conditionBuilderJK.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderHK.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderBX.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderTZ.append(" and djbh like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderSQ.append(" and billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderYT.append(" and billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderJZ.append(" and billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); + conditionBuilderTX.append(" and e.bx_billno like '%").append(condition.getValue().getFirstvalue()).append("%' "); + } + + if ("pk_tradetypeid".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + ifHasTradeType = true; + String[] tradetypes = condition.getValue().getFirstvalue().split(","); + String inSql = SqlUtils.getInStr("pk_tradetypeid", tradetypes, true); + conditionBuilderJK.append(" and ").append(inSql); + conditionBuilderBX.append(" and ").append(inSql); + conditionBuilderHK.append(" and ").append(inSql); + conditionBuilderTZ.append(" and ").append(inSql); + conditionBuilderSQ.append(" and ").append(inSql); + conditionBuilderYT.append(" and ").append(inSql); + conditionBuilderJZ.append(" and ").append(inSql); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("t.pk_billtypeid", tradetypes, true)); + } + + if ("ybje".equals(condition.getField())) { + if (StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + conditionBuilderJK.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderBX.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderHK.append(" and hkybje >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderTZ.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderSQ.append(" and orig_amount\t >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderYT.append(" and org_amount >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderJZ.append(" and ybje >= '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderTX.append(" and e.total_amount >= '").append(condition.getValue().getFirstvalue()).append("' "); + } + + if (StringUtils.isNotEmpty(condition.getValue().getSecondvalue())) { + conditionBuilderJK.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderBX.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderHK.append(" and hkybje <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderTZ.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderSQ.append(" and orig_amount <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderYT.append(" and org_amount <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderJZ.append(" and ybje <= '").append(condition.getValue().getSecondvalue()).append("' "); + conditionBuilderTX.append(" and e.total_amount <= '").append(condition.getValue().getSecondvalue()).append("' "); + } + } + + if ("bzbm".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + String[] bzbms = condition.getValue().getFirstvalue().split(","); + conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); + conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); + conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); + conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); + conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("pk_currtype", bzbms, true)); + conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("pk_currtype", bzbms, true)); + conditionBuilderJZ.append(" and ").append(SqlUtils.getInStr("bzbm", bzbms, true)); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.bzbm", bzbms, true)); + } + + if ("djzt".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + List list = Arrays.asList(condition.getValue().getFirstvalue().split(",")); + conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); + conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); + conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); + conditionBuilderJZ.append(" and ").append(SqlUtils.getInStr("billstatus", list, true)); + list = new ArrayList(list); + if (list.contains("3")) { + list.remove("3"); + } + + if (list.contains("2")) { + Collections.replaceAll(list, "2", "3"); + } + + conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("djzt", list, true)); + conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("billstatus", list, true)); + conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("billstatus", list, true)); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("3", list, true)); + } + + if ("spzt".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + List list = Arrays.asList(condition.getValue().getFirstvalue().split(",")); + conditionBuilderJK.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); + conditionBuilderBX.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); + conditionBuilderHK.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); + conditionBuilderTZ.append(" and ").append(SqlUtils.getInStr("spzt", list, true)); + conditionBuilderSQ.append(" and ").append(SqlUtils.getInStr("apprstatus", list, true)); + conditionBuilderYT.append(" and ").append(SqlUtils.getInStr("apprstatus", list, true)); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("1", list, true)); + } + + if("receiver".equals(condition.getField()) && StringUtils.isNotEmpty(condition.getValue().getFirstvalue())) { + conditionBuilderJK.append(" and receiver = '").append(condition.getValue().getFirstvalue()).append("' "); + conditionBuilderBX.append(" and receiver = '").append(condition.getValue().getFirstvalue()).append("' "); + } + } + } + + if (hasRecon) { + conditionBuilderJK.append(" and ").append(reconJK); + conditionBuilderBX.append(" and ").append(reconBX); + conditionBuilderHK.append(" and ").append(reconHK); + conditionBuilderTZ.append(" and ").append(reconTZ); + conditionBuilderSQ.append(" and ").append(reconSQ); + conditionBuilderYT.append(" and ").append(reconYT); + conditionBuilderJZ.append(" and ").append(reconJZ); + conditionBuilderTX.append(" and ").append(reconTX); + } else { + if (!ifHasTradeType) { + String groupPk = InvocationInfoProxy.getInstance().getGroupId(); + String userId = InvocationInfoProxy.getInstance().getUserId(); + String currentDate = (new UFDateTime()).toLocalString(); + List permBillTypeList = ((IBillManageService)NCLocator.getInstance().lookup(IBillManageService.class)).queryPermBillType(userId, currentDate, groupPk); + if (permBillTypeList != null && permBillTypeList.size() > 0) { + String[] hasPermissionTradeTypecode = new String[permBillTypeList.size()]; + + for(int i = 0; i < permBillTypeList.size(); ++i) { + hasPermissionTradeTypecode[i] = ((BillManageTradeTypeVO)permBillTypeList.get(i)).getPk_billtypeid(); + } + + String inSql = SqlUtils.getInStr("pk_tradetypeid", hasPermissionTradeTypecode, true); + conditionBuilderJK.append(" and ").append(inSql); + conditionBuilderBX.append(" and ").append(inSql); + conditionBuilderHK.append(" and ").append(inSql); + conditionBuilderTZ.append(" and ").append(inSql); + conditionBuilderSQ.append(" and ").append(inSql); + conditionBuilderYT.append(" and ").append(inSql); + conditionBuilderJZ.append(" and ").append(inSql); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("t.pk_billtypeid", hasPermissionTradeTypecode, true)); + } else { + conditionBuilderJK.append(" and ").append("1=2"); + conditionBuilderBX.append(" and ").append("1=2"); + conditionBuilderHK.append(" and ").append("1=2"); + conditionBuilderTZ.append(" and ").append("1=2"); + conditionBuilderSQ.append(" and ").append("1=2"); + conditionBuilderYT.append(" and ").append("1=2"); + conditionBuilderJZ.append(" and ").append("1=2"); + conditionBuilderTX.append(" and ").append("1=2"); + } + } + + if (!filterByPkOrg) { + IFunctionPermissionPubService service = (IFunctionPermissionPubService)NCLocator.getInstance().lookup(IFunctionPermissionPubService.class); + String[] orgByIDs = service.getUserPermissionPkOrgs(InvocationInfoProxy.getInstance().getUserId(), (String)null, InvocationInfoProxy.getInstance().getGroupId()); + String inSql = SqlUtils.getInStr("pk_org", orgByIDs, true); + conditionBuilderJK.append(" and ").append(inSql); + conditionBuilderBX.append(" and ").append(inSql); + conditionBuilderHK.append(" and ").append(inSql); + conditionBuilderTZ.append(" and ").append(inSql); + conditionBuilderSQ.append(" and ").append(inSql); + conditionBuilderYT.append(" and ").append(inSql); + conditionBuilderJZ.append(" and ").append(inSql); + conditionBuilderTX.append(" and ").append(SqlUtils.getInStr("e.pk_org", orgByIDs, true)); + } + } + + whereSqlMap.put("JK", conditionBuilderJK.toString()); + whereSqlMap.put("BX", conditionBuilderBX.toString()); + whereSqlMap.put("HK", conditionBuilderHK.toString()); + whereSqlMap.put("TZ", conditionBuilderTZ.toString()); + whereSqlMap.put("SQ", conditionBuilderSQ.toString()); + whereSqlMap.put("YT", conditionBuilderYT.toString()); + whereSqlMap.put("JZ", conditionBuilderJZ.toString()); + whereSqlMap.put("TX", conditionBuilderTX.toString()); + } + } + + return whereSqlMap; + } + + public List queryBillInfoByPage(QueryTreeFormatVO queryTreeFormatVO) throws Exception { + INCCloudQueryService ncCloudQueryService = (INCCloudQueryService)NCLocator.getInstance().lookup(INCCloudQueryService.class); + PageInfo pageInfo = null; + if (queryTreeFormatVO != null) { + pageInfo = queryTreeFormatVO.getPageInfo(); + } + + IQueryScheme queryscheme = ncCloudQueryService.convertCondition(queryTreeFormatVO); + if (queryscheme == null) { + return null; + } else { + SQLParameter sqlParam = new SQLParameter(); + StringBuilder conditionBuilder = new StringBuilder(); + String conditionSql = null; + QueryCondition queryCondition = queryTreeFormatVO.getQuerycondition(); + List conditions = queryCondition.getConditions(); + if (conditions != null && conditions.size() > 0) { + for(Condition condition : conditions) { + if (condition != null && condition.getValue() != null && "search".equals(condition.getField()) && !StringUtils.isEmpty(condition.getValue().getFirstvalue())) { + String keyWord = condition.getValue().getFirstvalue(); + conditionBuilder.append("and ( djbh like ? "); + sqlParam.addParam("%" + keyWord + "%"); + String[] pkDepts = this.queryPkDeptByNameLike(keyWord); + String[] pkPsndocs = this.queryPkPsndocByNameLike(keyWord); + if (pkDepts != null && pkDepts.length > 0) { + conditionBuilder.append(" or " + SqlUtils.getInStr("deptid_v", pkDepts, true)); + } + + if (pkPsndocs != null && pkPsndocs.length > 0) { + conditionBuilder.append(" or " + SqlUtils.getInStr("jkbxr", pkPsndocs, true)); + } + + conditionBuilder.append(")"); + } + } + } + + conditionSql = conditionBuilder.toString(); + Map sqlMap = this.geConditionSqlByConditions(queryTreeFormatVO); + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("select *") + .append(" from (select pk_jkbx as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" djlxbm as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" djbh as djbh,") + .append(" djrq as djrq,") + .append(" bzbm as bzbm,") + .append(" ybje as ybje,") + .append(" djzt as djzt,") + .append(" spzt as spzt,") + .append(" deptid as deptid_v,") + .append(" jkbxr as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" red_status as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" shrq as shrq,") + .append(" receiver as receiver ") + .append(" from er_jkzb") + .append(" where dr = 0 ") + .append(null == sqlMap.get("JK") ? "" : (String)sqlMap.get("JK")) + .append(" union all") + .append(" select pk_jkbx as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" djlxbm as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" djbh as djbh,") + .append(" djrq as djrq,") + .append(" bzbm as bzbm,") + .append(" \t\t\t ybje as ybje,") + .append(" djzt as djzt,") + .append(" spzt as spzt,") + .append(" deptid as deptid_v,") + .append(" jkbxr as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" red_status as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" shrq as shrq,") + .append(" receiver as receiver ") + .append(" from er_bxzb") + .append(" where dr = 0 ") + .append(null == sqlMap.get("BX") ? "" : (String)sqlMap.get("BX")) + .append(" union all") + .append(" select pk_jkbx as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" djlxbm as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" djbh as djbh,") + .append(" djrq as djrq,") + .append(" bzbm as bzbm,") + .append(" hkybje as ybje,") + .append(" djzt as djzt,") + .append(" spzt as spzt,") + .append(" deptid as deptid_v,") + .append(" jkbxr as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" red_status as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" shrq as shrq,") + .append(" receiver as receiver ") + .append(" from er_bxzb") + .append(" where dr = 0 ") + .append(null == sqlMap.get("HK") ? "" : (String)sqlMap.get("HK")) + .append(" union all") + .append(" select pk_jkbx as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" djlxbm as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" djbh as djbh,") + .append(" djrq as djrq,") + .append(" bzbm as bzbm,") + .append(" ybje as ybje,") + .append(" djzt as djzt,") + .append(" spzt as spzt,") + .append(" deptid as deptid_v,") + .append(" jkbxr as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" red_status as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" shrq as shrq,") + .append(" receiver as receiver ") + .append(" from er_bxzb") + .append(" where dr = 0 ") + .append(null == sqlMap.get("TZ") ? "" : (String)sqlMap.get("TZ")) + .append(" union all") + .append(" select pk_accrued_bill as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" pk_tradetype as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" billno as djbh,") + .append(" billdate as djrq,") + .append(" pk_currtype as bzbm,") + .append(" org_amount as ybje,") + .append(" billstatus as djzt,") + .append(" apprstatus as spzt,") + .append(" operator_dept as deptid_v,") + .append(" operator as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" redflag as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" approvetime as shrq,") + .append(" null as receiver ") + .append(" from er_accrued") + .append(" where dr = 0 ") + .append(null == sqlMap.get("YT") ? "" : (String)sqlMap.get("YT")) + .append(" union all") + .append(" select pk_mtapp_bill as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" pk_tradetype as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" billno as djbh,") + .append(" billdate as djrq,") + .append(" pk_currtype as bzbm,") + .append(" orig_amount as ybje,") + .append(" billstatus as djzt,") + .append(" apprstatus as spzt,") + .append(" apply_dept as deptid_v,") + .append(" billmaker as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" null as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" approvetime as shrq,") + .append(" null as receiver ") + .append(" from er_mtapp_bill") + .append(" where dr = 0 ") + .append(null == sqlMap.get("SQ") ? "" : (String)sqlMap.get("SQ")) + .append(" union all") + .append(" select pk_costshare as pk_jkbx,") + .append(" pk_tradetypeid as pk_tradetypeid,") + .append(" pk_tradetype as djlxbm,") + .append(" pk_billtype as pk_billtype,") + .append(" billno as djbh,") + .append(" billdate as djrq,") + .append(" bzbm as bzbm,") + .append(" ybje as ybje,") + .append(" billstatus as djzt,") + .append(" case when billstatus=2 or billstatus=3 then 1 else -1 end as spzt,") + .append(" deptid as deptid_v,") + .append(" jkbxr as jkbxr,") + .append(" approver as approver,") + .append(" pk_org as pk_org, ") + .append(" creator as creator, ") + .append(" null as red_status, ") + .append(" saga_frozen as saga_frozen, ") + .append(" saga_btxid as saga_btxid, ") + .append(" saga_gtxid as saga_gtxid, ") + .append(" saga_status as saga_status, ") + .append(" approvedate as shrq,") + .append(" null as receiver ") + .append(" from er_costshare") + .append(" where dr = 0 ") + .append(null == sqlMap.get("JZ") ? "" : (String)sqlMap.get("JZ")) + .append(" union all") + .append(" select e.pk_jkbx as pk_jkbx,") + .append(" t.pk_billtypeid as pk_tradetypeid,") + .append(" e.bx_pk_billtype as djlxbm,") + .append(" t.parentbilltype as pk_billtype,") + .append(" e.bx_billno as djbh,") + .append(" e.bx_djrq as djrq,") + .append(" e.bzbm as bzbm,") + .append(" e.total_amount as ybje,") + .append(" 3 as djzt,") + .append(" \t\t\t\t 1\t\t as spzt,") + .append(" e.bx_deptid as deptid_v,") + .append(" e.bx_jkbxr as jkbxr,") + .append(" null as approver,") + .append(" e.pk_org as pk_org, ") + .append(" e.creator as creator, ") + .append(" null as red_status, ") + .append(" e.saga_frozen as saga_frozen, ") + .append(" e.saga_btxid as saga_btxid, ") + .append(" e.saga_gtxid as saga_gtxid, ") + .append(" e.saga_status as saga_status, ") + .append(" null as shrq,") + .append(" null as receiver ") + .append(" from er_expamtinfo e") + .append(" left join bd_billtype t on t.PK_BILLTYPECODE=e.bx_pk_billtype and t.PK_GROUP=e.PK_GROUP") + .append(" where e.dr = 0 ") + .append(null == sqlMap.get("TX") ? "" : (String)sqlMap.get("TX")) + .append(" ) temp where 1=1 "); + + if (!conditionSql.isEmpty()) { + sqlBuilder.append(conditionSql); + } + + String sql = sqlBuilder.toString(); + if (pageInfo != null) { + if (pageInfo.getTotal() == 0) { + Integer total = this.countBillInfoByCondition(queryTreeFormatVO, conditionSql, sqlParam, sqlMap); + pageInfo.setTotal(total); + } + + Integer pageSize = Integer.valueOf(pageInfo.getPageSize()); + Integer totalPage = pageInfo.getTotal() % pageSize == 0 ? pageInfo.getTotal() / pageSize : pageInfo.getTotal() / pageSize + 1; + pageInfo.setTotalPage(totalPage); + int databaseType = DataSourceCenter.getInstance().getDatabaseType(); + LimitSQLBuilder sqlBuilderPage = SQLBuilderFactory.getInstance().createLimitSQLBuilder(databaseType); + int pageIndex = 0; + if (!StringUtils.isEmpty(pageInfo.getPageIndex())) { + pageIndex = Integer.valueOf(pageInfo.getPageIndex()); + } + + sql = sqlBuilderPage.build(sql + " order by temp.djrq desc", pageIndex + 1, Integer.valueOf(pageInfo.getPageSize())); + } else { + sql = sql + " order by temp.djrq desc"; + } + + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + List resultList = (List)iuapQryService.executeQuery(sql, sqlParam, new JKBXHeaderResultSetProcessor()); + return resultList; + } + } + + public int countBillInfoByCondition(QueryTreeFormatVO queryTreeFormatVO, String conditionSql, SQLParameter sqlParam, Map sqlMap) throws Exception { + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("select count(1) as count from("); + sqlBuilder.append("select *").append(" from (select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_jkzb").append(" where dr = 0 ").append(null == sqlMap.get("JK") ? "" : (String)sqlMap.get("JK")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("BX") ? "" : (String)sqlMap.get("BX")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" hkybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("HK") ? "" : (String)sqlMap.get("HK")).append(" union all").append(" select pk_jkbx as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" djlxbm as djlxbm,").append(" pk_billtype as pk_billtype,").append(" djbh as djbh,").append(" djrq as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" djzt as djzt,").append(" spzt as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" shrq as shrq").append(" from er_bxzb").append(" where dr = 0 ").append(null == sqlMap.get("TZ") ? "" : (String)sqlMap.get("TZ")).append(" union all").append(" select pk_accrued_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" org_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" operator_dept as deptid_v,").append(" operator as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_accrued").append(" where dr = 0 ").append(null == sqlMap.get("YT") ? "" : (String)sqlMap.get("YT")).append(" union all").append(" select pk_mtapp_bill as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" pk_currtype as bzbm,").append(" orig_amount as ybje,").append(" billstatus as djzt,").append(" apprstatus as spzt,").append(" apply_dept as deptid_v,").append(" billmaker as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvetime as shrq").append(" from er_mtapp_bill").append(" where dr = 0 ").append(null == sqlMap.get("SQ") ? "" : (String)sqlMap.get("SQ")).append(" union all").append(" select pk_costshare as pk_jkbx,").append(" pk_tradetypeid as pk_tradetypeid,").append(" pk_tradetype as djlxbm,").append(" pk_billtype as pk_billtype,").append(" billno as djbh,").append(" billdate as djrq,").append(" bzbm as bzbm,").append(" ybje as ybje,").append(" billstatus as djzt,").append(" case when billstatus=2 or billstatus=3 then 1 else -1 end as spzt,").append(" deptid as deptid_v,").append(" jkbxr as jkbxr,").append(" approver as approver,").append(" pk_org as pk_org, ").append(" creator as creator, ").append(" saga_frozen as saga_frozen, ").append(" saga_btxid as saga_btxid, ").append(" saga_gtxid as saga_gtxid, ").append(" saga_status as saga_status, ").append(" approvedate as shrq").append(" from er_costshare").append(" where dr = 0 ").append(null == sqlMap.get("JZ") ? "" : (String)sqlMap.get("JZ")).append(" union all").append(" select e.pk_jkbx as pk_jkbx,").append(" t.pk_billtypeid as pk_tradetypeid,").append(" e.bx_pk_billtype as djlxbm,").append(" t.parentbilltype as pk_billtype,").append(" e.bx_billno as djbh,").append(" e.bx_djrq as djrq,").append(" e.bzbm as bzbm,").append(" e.total_amount as ybje,").append(" 3 as djzt,").append(" \t\t\t\t 1\t\t as spzt,").append(" e.bx_deptid as deptid_v,").append(" e.bx_jkbxr as jkbxr,").append(" null as approver,").append(" e.pk_org as pk_org, ").append(" e.creator as creator, ").append(" e.saga_frozen as saga_frozen, ").append(" e.saga_btxid as saga_btxid, ").append(" e.saga_gtxid as saga_gtxid, ").append(" e.saga_status as saga_status, ").append(" null as shrq").append(" from er_expamtinfo e").append(" left join bd_billtype t on t.PK_BILLTYPECODE=e.bx_pk_billtype and t.PK_GROUP=e.PK_GROUP").append(" where e.dr = 0 ").append(null == sqlMap.get("TX") ? "" : (String)sqlMap.get("TX")).append(" )temp where 1=1 "); + if (!conditionSql.isEmpty()) { + sqlBuilder.append(conditionSql); + } + + sqlBuilder.append(") a "); + String sql = sqlBuilder.toString(); + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + int count = (Integer)iuapQryService.executeQuery(sql, sqlParam, new ResultSetProcessor() { + private static final long serialVersionUID = 1L; + + public Object handleResultSet(ResultSet rs) throws SQLException { + int count; + for(count = 0; rs.next(); count = rs.getInt("count")) { + } + + return count; + } + }); + return count; + } + + public Map qryCurApproveman(List billIds) throws BusinessException { + StringBuilder sqlExe = new StringBuilder(); + sqlExe.append("select n.billid as billid, n.checkman as checkman, n.ischeck as ischeck"); + sqlExe.append(" from pub_wf_task t inner join pub_workflownote n on t.pk_wf_task=n.pk_wf_task"); + sqlExe.append(" where ").append(SqlUtils.getInStr("n.billid", billIds, true)); + sqlExe.append(" and t.taskstatus=0 "); + sqlExe.append(" and n.approvestatus =0 "); + IUAPQueryBS iuapQryService = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class); + SQLParameter sqlParam = new SQLParameter(); + List approveInfos = (List)iuapQryService.executeQuery(sqlExe.toString(), sqlParam, new ArrayListProcessor()); + List busiidUserList = new ArrayList(); + List userid = new ArrayList(); + + for(Object[] approveInfo : approveInfos) { + String[] busiidUser = new String[]{(String)approveInfo[0], (String)approveInfo[1]}; + busiidUserList.add(busiidUser); + userid.add((String)approveInfo[1]); + } + + IUserManageQuery userQry = (IUserManageQuery)NCLocator.getInstance().lookup(IUserManageQuery.class); + UserVO[] userVOs = userQry.queryUserByClause(SqlUtils.getInStr("cuserid", userid, true)); + Map userid_username = new HashMap(); + + for(UserVO vo : userVOs) { + userid_username.put(vo.getCuserid(), vo.getUser_name()); + } + + for(String[] busiidUser : busiidUserList) { + busiidUser[1] = (String)userid_username.get(busiidUser[1]); + } + + Map busiid_username = new HashMap(); + + for(String[] busiidUser : busiidUserList) { + if (!busiid_username.containsKey(busiidUser[0])) { + busiid_username.put(busiidUser[0], busiidUser[1]); + } else { + String var10000 = (String)busiid_username.get(busiidUser[0]); + String multiName = var10000 + ", " + busiidUser[1]; + busiid_username.put(busiidUser[0], multiName); + } + } + + return busiid_username; + } + + private class JKBXHeaderResultSetProcessor implements ResultSetProcessor { + private static final long serialVersionUID = 1L; + + private JKBXHeaderResultSetProcessor() { + } + + public Object handleResultSet(ResultSet rs) throws SQLException { + List resultList = new ArrayList(); + + while(rs.next()) { + JKBXHeaderVO tempHeader = new BXHeaderVO(); + tempHeader.setPk_jkbx(rs.getString("pk_jkbx")); + tempHeader.setPk_tradetypeid(rs.getString("pk_tradetypeid")); + tempHeader.setDjlxbm(rs.getString("djlxbm")); + tempHeader.setPk_billtype(rs.getString("pk_billtype")); + tempHeader.setDjbh(rs.getString("djbh")); + tempHeader.setDjrq(StringUtils.isEmpty(rs.getString("djrq")) ? null : new UFDate(rs.getString("djrq"))); + tempHeader.setBzbm(rs.getString("bzbm")); + tempHeader.setYbje(new UFDouble(rs.getDouble("ybje"))); + tempHeader.setDjzt(rs.getInt("djzt")); + tempHeader.setSpzt(rs.getInt("spzt")); + tempHeader.setDeptid_v(rs.getString("deptid_v")); + tempHeader.setJkbxr(rs.getString("jkbxr")); + tempHeader.setApprover(rs.getString("approver")); + tempHeader.setPk_org(rs.getString("pk_org")); + tempHeader.setCreator(rs.getString("creator")); + tempHeader.setRed_status(rs.getInt("red_status")); + tempHeader.setShrq(StringUtils.isEmpty(rs.getString("shrq")) ? null : new UFDateTime(rs.getString("shrq"))); + tempHeader.setSaga_frozen(rs.getInt("saga_frozen")); + tempHeader.setSaga_btxid(rs.getString("saga_btxid")); + tempHeader.setSaga_gtxid(rs.getString("saga_gtxid")); + tempHeader.setSaga_status(rs.getInt("saga_status")); + resultList.add(tempHeader); + } + + return resultList; + } + } } diff --git a/erm/src/public/.gitkeep b/erm/src/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/fbm/src/client/nccloud/web/fbm/fbm/gather/action/DzButton.java b/fbm/src/client/nccloud/web/fbm/fbm/gather/action/DzButton.java index 426ebcf2..e701c4fc 100644 --- a/fbm/src/client/nccloud/web/fbm/fbm/gather/action/DzButton.java +++ b/fbm/src/client/nccloud/web/fbm/fbm/gather/action/DzButton.java @@ -65,7 +65,7 @@ public class DzButton implements ICommonAction { // 获取当前年份 String sql = "select fbm.gatherdate,bank1.pk_bankdoc as fkyh,bank2.pk_bankdoc as skyh,fbm.acceptorbank,fbm.hidereceivebankacc ,holdunit,org.name as orgname , reg.name as pjname,xxb_bon.bdcode,btype.pk_balatype,reg.code,xxe.exsystemcode,\n" + "xxb_bon.exsysval\n" + - ",invoiceunit,fbmbilltype,fbm.fbmbillno,fbm.pk_register, paybankacc as bankaccount,fbm.payunit,cust.name as bankname,fbm.billmaker,fbm.creator,fbm.note,fbm.money,cust.custsupprop ,cust.custsuptype,fbm.pk_banktype ,fbm.pk_org ,fbm.pk_org_v,fbm.hidereceiveunit, fbm.hidepayunit,fbm.hidepaybankacc ,fbm.hidepaybank ,fbm.paybankacc ,fbm.paybank ,fbm.receiveunit,fbm.receivebankacc ,fbm.receivebank ,hidereceivebank, bankdoc.pk_bankaccbas ,fbm.pk_group \n" + + ",invoiceunit,fbmbilltype,fbm.fbmbillno,fbm.pk_register, paybankacc as bankaccount,fbm.payunit,cust.name as bankname,fbm.billmaker,fbm.creator,fbm.note,fbm.money,cust.custsupprop ,cust.custsuptype,fbm.pk_banktype ,fbm.pk_org ,fbm.pk_org_v,fbm.hidereceiveunit, fbm.hidepayunit,fbm.hidepaybankacc ,fbm.hidepaybank ,fbm.paybankacc ,fbm.paybank ,fbm.receiveunit,fbm.receivebankacc ,fbm.receivebank ,hidereceivebank, bankdoc.pk_bankaccbas ,fbm.pk_group,fbm.billrange \n" + "from fbm_register fbm \n" + "left join bd_cust_supplier cust on fbm.hidepayunit=cust.pk_cust_sup \n" + "left join bd_bankaccbas bankdoc on fbm.receivebankacc = bankdoc.code\n" + @@ -227,10 +227,16 @@ public class DzButton implements ICommonAction { int randomNumber = random.nextInt(10000); // 生成0到9999之间的随机数 String vBillNo = "36S" + String.format("%d%04d", timestamp, randomNumber); String note_no = (String) row.get("fbmbillno"); + //对账标识码 + String bankrelated_code = "";//sunfj2 流水对账标识码 = 票据号+子票区间 + if(row.get("billrange")!=null && !"".equals(String.valueOf(row.get("billrange")))) { + bankrelated_code= (String)row.get("fbmbillno")+(String)row.get("billrange"); + } + // String sqlp="insert into cmp_informer(bankaccount,bankname,billmaker,consignagreement,creationtime,creator,direction,domain,doperatedate,doperatetime,dr,family,generateflag,infodate,infodatetime,memo,modifiedtime,modifier,moneyy,oppbankaccount,oppinout,oppunitname,oppunittype,pk_acc_sub,pk_balatype,pk_bank,pk_bankacc,pk_bankaccer,pk_banktype,pk_billtypecode,pk_billtypeid,pk_claimer,pk_currtype,pk_fundtype,pk_group,pk_informer,pk_org,pk_org_v,pk_src,pk_vouch,recpay_fundorg,recpay_fundplansubj,recpay_inneracc,recpay_org,recpay_orgplansubj,release_org,styleflag,subfamily,syscode,ts,vbillno) values('"+num+"','济南热电有限公司','1001A110000000003Q0I','~','"+dam+"','1001A110000000003Q0I','"+pr+"','~','"+transactionDate+"','"+dam+"','0','~','hasnogenerate','"+transactionDate+"','"+timesub+"','"+zhaiYao+"','"+dam+"','1001A110000000003Q0I',"+money+",'"+oppositeAccountNumber+"','"+opp+"','"+oppositeUserName+"','"+opptype+"','"+select[2]+"','~','"+select[0]+"','"+select[1]+"','~','"+select3[0]+"','36S3','1001Z61000000001SOPF','~','1002Z0100000000001K1','~','0001N2100000000002ZE','"+vId+"','0001N710000000001FWC','0001N710000000001FWB','1001A110000000007IWJ','~','~','~','~','~','~','~','A','~','sysnet','"+dam+"','"+fId2+"')" // 形成sql - String sqlp = "insert into cmp_informer(bankaccount,bankname,billmaker,consignagreement,creationtime,creator,direction,domain,doperatedate,doperatetime,dr,family,generateflag,infodate,infodatetime,memo,modifiedtime,modifier,moneyy,oppbankaccount,oppinout,oppunitname,oppunittype,pk_acc_sub,pk_balatype,pk_bank,pk_bankacc,pk_bankaccer,pk_banktype,pk_billtypecode,pk_billtypeid,pk_claimer,pk_currtype,pk_fundtype,pk_group,pk_informer,pk_org,pk_org_v,pk_src,pk_vouch,recpay_fundorg,recpay_fundplansubj,recpay_inneracc,recpay_org,recpay_orgplansubj,release_org,styleflag,subfamily,syscode,ts,vbillno,note_no,pk_oppunit,pk_oppbank,pk_oppacc) values('" - + bankAccount + "','" + bankName + "','" + billMaker + "','" + consignAgreement + "','" + formatteddatatime + "','" + creator + "','" + direction + "','" + domain + "','" + doOperateDate + "','" + sj + "','" + dr + "','" + family + "','" + generateFlag + "','" + infoDate + "','" + infoDateTime + "','" + memo + "','" + modifiedTime + "','" + modifier + "','" + money + "','" + oppBankAccount + "','" + oppInOut + "','" + oppUnitName + "','" + oppUnitType + "','" + pkAccSub + "','" + pk_balatype + "','" + pkBank + "','" + pkBankAcc + "','" + pkBankAccer + "','" + pkBankType + "','" + pkBillTypeCode + "','" + pkBillTypeId + "','" + pkClaimer + "','" + pkCurrType + "','" + pkFundType + "','" + pkGroup + "','" + pkInformer + "','" + pkOrg + "','" + pkOrgV + "','" + pkSrc + "','" + pkVouch + "','" + recPayFundOrg + "','" + recPayFundPlansubj + "','" + recPayInnerAcc + "','" + recPayOrg + "','" + recPayOrgPlansubj + "','" + releaseOrg + "','" + styleFlag + "','" + subFamily + "','" + sysCode + "','" + ts + "','" + vBillNo + "','" + note_no + "','" + pk_oppunit + "','" + pk_oppbank + "','" + pk_oppacc + "')"; + String sqlp = "insert into cmp_informer(bankaccount,bankname,billmaker,consignagreement,creationtime,creator,direction,domain,doperatedate,doperatetime,dr,family,generateflag,infodate,infodatetime,memo,modifiedtime,modifier,moneyy,oppbankaccount,oppinout,oppunitname,oppunittype,pk_acc_sub,pk_balatype,pk_bank,pk_bankacc,pk_bankaccer,pk_banktype,pk_billtypecode,pk_billtypeid,pk_claimer,pk_currtype,pk_fundtype,pk_group,pk_informer,pk_org,pk_org_v,pk_src,pk_vouch,recpay_fundorg,recpay_fundplansubj,recpay_inneracc,recpay_org,recpay_orgplansubj,release_org,styleflag,subfamily,syscode,ts,vbillno,note_no,pk_oppunit,pk_oppbank,pk_oppacc,bankrelated_code) values('" + + bankAccount + "','" + bankName + "','" + billMaker + "','" + consignAgreement + "','" + formatteddatatime + "','" + creator + "','" + direction + "','" + domain + "','" + doOperateDate + "','" + sj + "','" + dr + "','" + family + "','" + generateFlag + "','" + infoDate + "','" + infoDateTime + "','" + memo + "','" + modifiedTime + "','" + modifier + "','" + money + "','" + oppBankAccount + "','" + oppInOut + "','" + oppUnitName + "','" + oppUnitType + "','" + pkAccSub + "','" + pk_balatype + "','" + pkBank + "','" + pkBankAcc + "','" + pkBankAccer + "','" + pkBankType + "','" + pkBillTypeCode + "','" + pkBillTypeId + "','" + pkClaimer + "','" + pkCurrType + "','" + pkFundType + "','" + pkGroup + "','" + pkInformer + "','" + pkOrg + "','" + pkOrgV + "','" + pkSrc + "','" + pkVouch + "','" + recPayFundOrg + "','" + recPayFundPlansubj + "','" + recPayInnerAcc + "','" + recPayOrg + "','" + recPayOrgPlansubj + "','" + releaseOrg + "','" + styleFlag + "','" + subFamily + "','" + sysCode + "','" + ts + "','" + vBillNo + "','" + note_no + "','" + pk_oppunit + "','" + pk_oppbank + "','" + pk_oppacc + "','" + bankrelated_code + "')"; sqlStr.add(sqlp); } int succState = executeUpdate(sqlStr); diff --git a/fbm/src/private/nc/impl/fbm/gather/GatherManageServiceImpl.java b/fbm/src/private/nc/impl/fbm/gather/GatherManageServiceImpl.java index 1180d825..ac2c6237 100644 --- a/fbm/src/private/nc/impl/fbm/gather/GatherManageServiceImpl.java +++ b/fbm/src/private/nc/impl/fbm/gather/GatherManageServiceImpl.java @@ -5,6 +5,9 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; + +import org.apache.commons.lang3.ArrayUtils; + import nc.bs.dao.BaseDAO; import nc.bs.dao.DAOException; import nc.bs.fbm.base.validator.FbmBaseDeleteValidator; @@ -18,7 +21,6 @@ import nc.bs.fbm.gather.action.DestroyGatherAction; import nc.bs.fbm.gather.action.DisableGather; import nc.bs.fbm.gather.action.ReliefKeepGather; import nc.bs.fbm.gather.action.SaveGather; -import nc.bs.fbm.gather.validator.GatherCancelApproveValidator; import nc.bs.fbm.gather.validator.GatherCanoperateValidator; import nc.bs.fbm.gather.validator.GatherOuterValidator; import nc.bs.fbm.gather.validator.GatherRecieveCancelValidator; @@ -27,7 +29,6 @@ import nc.bs.fbm.gather.validator.GatherSaveAndApproveValidator; import nc.bs.fbm.gather.validator.GatherSaveValidator; import nc.bs.fbm.gather.validator.SaveIllegalGatherValidator; import nc.bs.fbm.proxy.FBMPrivateServiceProxy; -import nc.bs.fbm.pub.tools.FbmPrivateUtil; import nc.bs.fbm.pub.validator.FbmCheckIntegratedValidator; import nc.bs.framework.common.InvocationInfoProxy; import nc.bs.framework.common.NCLocator; @@ -36,6 +37,7 @@ import nc.bs.pf.pub.PfDataCache; import nc.bs.pfbm.proxy.PFBMPrivateServiceProxy; import nc.bs.pub.tools.CheckInitDateTool; import nc.bs.pub.tools.FbmHideFieldUtil; +import nc.bs.fbm.pub.tools.FbmPrivateUtil; import nc.bs.sec.esapi.NCESAPI; import nc.bs.uif2.validation.DefaultValidationService; import nc.bs.uif2.validation.IValidationService; @@ -45,12 +47,14 @@ import nc.impl.fbm.pub.action.ActionQueryServiceImpl; import nc.itf.bd.bankdoc.IBankdocQueryService; import nc.itf.bd.currtype.ICurrtypeQuery; import nc.itf.bd.notetype.INotetypeQueryService; +import nc.itf.cm.prv.CmpConst; import nc.itf.fbm.beforeregister.IBeforeRegisterManageService; import nc.itf.fbm.gather.IGatherManageService; import nc.itf.fbm.gather.IGatherQueryService; import nc.itf.fbm.outer.IOuterQueryService; import nc.itf.fbm.pub.FBMPublicServiceProxy; import nc.itf.fbm.pub.proxy.FbmPubPublicServiceProxy; +import nc.itf.org.IOrgConstBasic; import nc.itf.pfbm.centeroccupyct.ICenteroccupyctManageService; import nc.itf.uap.pf.IplatFormEntry; import nc.pubitf.bd.accessor.GeneralAccessorFactory; @@ -66,6 +70,7 @@ import nc.vo.arap.gathering.AggGatheringBillVO; import nc.vo.arap.gathering.GatheringBillItemVO; import nc.vo.arap.gathering.GatheringBillVO; import nc.vo.bd.accessor.IBDData; +import nc.vo.bd.bankaccount.IBankAccConstant; import nc.vo.bd.bankdoc.BankdocVO; import nc.vo.bd.currtype.CurrtypeVO; import nc.vo.bd.cust.CustSupplierVO; @@ -74,12 +79,15 @@ import nc.vo.cmp.bill.RecBillAggVO; import nc.vo.cmp.bill.RecBillDetailVO; import nc.vo.cmp.bill.RecBillVO; import nc.vo.cmp.originalbalance.OriginalBalanceVO; +import nc.vo.fbm.FBMSysParamConst; import nc.vo.fbm.endore.EndoreVO; import nc.vo.fbm.outer.OuterVO; import nc.vo.fbm.pub.action.ActionVO; import nc.vo.fbm.pub.adapter.GatherSagaInfoAdapter; import nc.vo.fbm.pub.adapter.SagasFrozenProcessor; import nc.vo.fbm.pub.constant.FbmBusConstant; +import nc.vo.fbm.pub.constant.FbmFieldConstant; +import nc.vo.fbm.pub.constant.RegisterStatusConstant; import nc.vo.fbm.pub.statuscontrol.IStatusControlStrategy; import nc.vo.fbm.pub.statuscontrol.StatusControlProcess; import nc.vo.fbm.pub.util.FbmCommonTools; @@ -95,15 +103,15 @@ import nc.vo.fts.commissiongathering.AggGatheringVO; import nc.vo.fts.commissiongathering.GatherFinanceVO; import nc.vo.fts.commissiongathering.GatherFundVO; import nc.vo.fts.commissiongathering.GatheringVO; -import nc.vo.ml.NCLangRes4VoTransl; import nc.vo.org.OrgVO; import nc.vo.org.util.OrgPubUtil; import nc.vo.pf.pub.util.ArrayUtil; import nc.vo.pfbm.centeroccupyct.AggCenteroccupyctVO; +import nc.vo.pfbm.pub.constant.EFbmBusConstant; import nc.vo.pub.AggregatedValueObject; import nc.vo.pub.BusinessException; -import nc.vo.pub.CircularlyAccessibleValueObject; import nc.vo.pub.SuperVO; +import nc.vo.pub.VOStatus; import nc.vo.pub.lang.UFBoolean; import nc.vo.pub.lang.UFDate; import nc.vo.pub.lang.UFDateTime; @@ -116,186 +124,249 @@ import nc.vo.tmpub.validator.FinOrgUnUseValidator; import nc.vo.tmpub.validator.VOFieldDesc; import nc.vo.uap.pf.PfProcessBatchRetObject; import nccloud.pubitf.platform.saga.CheckInfo; -import org.apache.commons.lang3.ArrayUtils; +/** + * @author Administrator + * + */ public class GatherManageServiceImpl implements IGatherManageService { + + /** + * 没有状态控制更新 + * + * @param aggvo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO updateGatherWithoutStatusControl(AggRegisterVO aggvo) throws BusinessException { - aggvo.getParentVO().setStatus(1); - + aggvo.getParentVO().setStatus(VOStatus.UPDATED); + // 更新数据库 FBMPrivateServiceProxy.getMDService().saveBillWithRealDelete(aggvo); - + // 返回更新的VO return (AggRegisterVO) FbmPrivateUtil.queryAggvoByPK(aggvo); } + /** + * 没有状态控制更新 + * + * @param aggvo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO[] updateGathersWithoutStatusControl(AggRegisterVO[] aggvos) throws BusinessException { if (aggvos != null && aggvos.length > 0) { ArrayList regarr = new ArrayList(); for (int i = 0; i < aggvos.length; i++) { - aggvos[i].getParentVO().setStatus(1); + aggvos[i].getParentVO().setStatus(VOStatus.UPDATED); regarr.add((RegisterVO) aggvos[i].getParentVO()); } - - FBMPrivateServiceProxy.getMDService() - .saveBillWithRealDelete((CircularlyAccessibleValueObject[]) regarr.toArray(new RegisterVO[0])); - + // 更新数据库 + FBMPrivateServiceProxy.getMDService().saveBillWithRealDelete(regarr.toArray(new RegisterVO[0])); + // 返回更新的VO return FbmPrivateUtil.queryAggvosByPKsNCC(aggvos); } return null; } + /** + * 新增 + * + * @param aggvo + * @return aggvo + * @throws BusinessException + */ + @Override public AggRegisterVO insertGather(AggRegisterVO aggvo) throws BusinessException { RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); - + // 轻量级票据保存校验 Validator gatherSaveValidator = new GatherSaveValidator(); - IValidationService vEcdService = ValidationFrameworkUtil - .createValidationService(new Validator[] { gatherSaveValidator }); + IValidationService vEcdService = ValidationFrameworkUtil.createValidationService(gatherSaveValidator); vEcdService.validate(registervo); + // 组织停用校验 modify by aishm 2013-03-26 DefaultValidationService validateService = new DefaultValidationService(); - validateService.addValidator(new FinOrgUnUseValidator(new VOFieldDesc[] { new VOFieldDesc("pk_org") })); + validateService.addValidator(new FinOrgUnUseValidator(new VOFieldDesc(RegisterVO.PK_ORG))); validateService.validate(aggvo); + /** + * 20200618 xuhrc 产品优化 需求6.6.2 + * 收票登记保存/保存提交时校验,该票据目前在系统中的状态,如果背书或者付票的指令还是交易失败则不可保存 + */ Validator gatherSaveAndApproveValidator = new GatherSaveAndApproveValidator(); - IValidationService vgatherSaveAndApprovevice = ValidationFrameworkUtil - .createValidationService(new Validator[] { gatherSaveAndApproveValidator }); + .createValidationService(gatherSaveAndApproveValidator); vgatherSaveAndApprovevice.validate(aggvo.getParentVO()); - + // 非法票据的校验 Validator saveIllegalGatherValidator = new SaveIllegalGatherValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { saveIllegalGatherValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(saveIllegalGatherValidator); vService.validate(aggvo.getParentVO()); - + + // 对前台用户输入的数据进行验签 下方的signDataAggVO方法自带验签功能,故不需要在此重复验签 +// if (FbmBusConstant.GATHER_TYPE_INPUT.equals(registervo.getGathertype()) +// && StringUtil.isNull(registervo.getCode())) { +// FbmSignPubSecurityUtil.verifySign(aggvo,FbmSignPubSecurityUtil.CONST_ACTIONCODE_SAVE,false,null); +// } + + // 持票单位为空时,取组织对应的内部客商 modify by aishm 2011-09-29 if (StringUtil.isNull(registervo.getHoldunit())) { + // V6.1持票单位改为组织 2011-12-20 modify by aishm registervo.setHoldunit(registervo.getPk_org()); } - - ICustsupPubService cusService = (ICustsupPubService) NCLocator.getInstance().lookup(ICustsupPubService.class); + // 查询付票单位对应的财务组织,如果收票登记单的所属财务组织与付票单位对应的财务组织相同,认定为同名背书 + ICustsupPubService cusService = NCLocator.getInstance().lookup(ICustsupPubService.class); String paybillunit = registervo.getPaybillunit(); String entrustedpaybillunit = registervo.getEntrustedpaybillunit(); - // zhangxinah 去掉收票单位校验 +// NCC-93126在新增时付票单位和被委托付票方都为空抛错 在提交时付票单位必须有值(提交时有校验) if (StringUtil.isNull(paybillunit) && StringUtil.isNull(entrustedpaybillunit)) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc1_0", "03618ncc1-0000") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc1_0", "03618ncc1-0000") - + registervo.getFbmbillno()); + throw new BusinessException( + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc1_0", "03618ncc1-0000") + /* @res "票据" */ + registervo.getFbmbillno() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc1_0", "03618ncc1-0006")/* @res "缺少付票单位信息!" */); } - Map cusOrgMap = cusService.queryOrgPkByCustsupPk(new String[] { paybillunit }); String pk_cus_org = null; if (cusOrgMap != null && StringUtil.isNotNull(cusOrgMap.get(paybillunit))) { - pk_cus_org = (String) cusOrgMap.get(paybillunit); + pk_cus_org = cusOrgMap.get(paybillunit); } EndoreVO ownedr = FBMPrivateServiceProxy.getEndoreQueryService().queryOwnEndore4Register(registervo.getPk_org(), registervo.getFbmbillno()); if (StringUtil.isNotNull(pk_cus_org) && pk_cus_org.equals(registervo.getPk_org()) && ownedr != null && ownedr.getOwnendore() != null && ownedr.getOwnendore().booleanValue()) { - + // 有同名背书的背书单记录,且付票单位与财务组织相同,认为是同名背书 registervo.setSelfendore(UFBoolean.TRUE); } else { registervo.setSelfendore(UFBoolean.FALSE); - + //判断是否为上收下拨收票 Map pkMaps = FBMPrivateServiceProxy.getBillDeliveryQueryService() - .queryBillDeliveryPksByFbmbillno(registervo.getPk_org(), new String[] { registervo.getFbmbillno() }, - true); - if (null == pkMaps || pkMaps.isEmpty()) { - - pkMaps = FBMPrivateServiceProxy.getBillAllocateQueryService().queryBillAllocatePksByFbmbillno( - registervo.getPk_org(), new String[] { registervo.getFbmbillno() }, true); - if (null != pkMaps && !pkMaps.isEmpty()) { - registervo.setGathertype("billallocate"); + .queryBillDeliveryPksByFbmbillno(registervo.getPk_org(), new String[] { registervo.getFbmbillno() }, true); + if(null == pkMaps || pkMaps.isEmpty()) { + pkMaps = FBMPrivateServiceProxy.getBillAllocateQueryService() + .queryBillAllocatePksByFbmbillno(registervo.getPk_org(), new String[] { registervo.getFbmbillno() }, true); + if(null != pkMaps && !pkMaps.isEmpty()) { + registervo.setGathertype(FbmBusConstant.GATHER_TYPE_ALLOCATE); } - } else { - registervo.setGathertype("billdelivery"); + }else { + registervo.setGathertype(FbmBusConstant.GATHER_TYPE_DELIVERY); } } - + + // 检验票据池登记银行承兑银行信息 checkBankDoc(registervo); if (registervo.getSignagrbank() != null && !registervo.getSignagrbank().trim().equals("")) { - - BankdocVO bankdocVOByPk = ((IBankdocQueryService) NCLocator.getInstance() - .lookup(IBankdocQueryService.class)).getBankdocVOByPk(registervo.getSignagrbank()); + BankdocVO bankdocVOByPk = NCLocator.getInstance().lookup(IBankdocQueryService.class) + .getBankdocVOByPk(registervo.getSignagrbank()); if (bankdocVOByPk != null) { if (bankdocVOByPk.getPcombinenum() != null && !bankdocVOByPk.getPcombinenum().trim().equals("")) { registervo.setSignagrbanknum(bankdocVOByPk.getPcombinenum()); + } else { + // 2018-12-11 朱三鹏让注释掉,待签收批量生成收票登记的时候,校验直接抛错,为了继续走业务,只是显示,没有业务含义 +// throw new BusinessException("所选择的承兑银行没有设置人行联行行号"); } - if (bankdocVOByPk.getPcombinename() != null && !bankdocVOByPk.getPcombinename().trim().equals("")) { registervo.setSignagrbankname(bankdocVOByPk.getPcombinename()); - + } else { + // 2018-12-11 朱三鹏让注释掉,待签收批量生成收票登记的时候,校验直接抛错,为了继续走业务,只是显示,没有业务含义 +// throw new BusinessException("所选择的承兑银行没有设置人行联行名称"); } } else { - - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0323")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0323")/* @res "根据所选择的承兑银行找不到相关银行档案" */); } } + // end_luxiong7_20180921_山西正华票据池票据签发部分补丁FBM + //可用余额赋值 + aggvo.getparentVO().setAvailablemoney(aggvo.getparentVO().getMoney()); + aggvo.getparentVO().setTotalavailablemoney(aggvo.getparentVO().getOlcmoney()); + // 取单据编号并设置 String vbillno = FBMPrivateServiceProxy.getBillcodeManage().getBillCode_RequiresNew( registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), aggvo); - registervo.setAttributeValue("vbillno", vbillno); - - FbmPrivateUtil.updateAggVO(aggvo, 2); - - FbmSignPubSecurityUtil.signDataAggVO(new AggregatedValueObject[] { aggvo }); - - IStatusControlStrategy strategy = new SaveGather((RegisterVO) aggvo.getParentVO(), "add"); + registervo.setAttributeValue(FbmFieldConstant.VBILLNO, vbillno); + // 更新数据库 + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.NEW); + /** + * 数字签名 + */ + FbmSignPubSecurityUtil.signDataAggVO(aggvo); + // 设置票据状态 + IStatusControlStrategy strategy = new SaveGather((RegisterVO) aggvo.getParentVO(), SaveGather.ADD_ACTION); StatusControlProcess.getInstance().process(strategy); return FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(((RegisterVO) aggvo.getParentVO()).getPk_register()); } + /** + * 检验票据池登记银行承兑银行信息 + * + * @param registervo + * @throws BusinessException + */ private void checkBankDoc(RegisterVO registervo) throws BusinessException { if (registervo.getSignagrbank() != null && !registervo.getSignagrbank().trim().equals("")) { - - BankdocVO bankdocVOByPk = ((IBankdocQueryService) NCLocator.getInstance() - .lookup(IBankdocQueryService.class)).getBankdocVOByPk(registervo.getSignagrbank()); + BankdocVO bankdocVOByPk = NCLocator.getInstance().lookup(IBankdocQueryService.class) + .getBankdocVOByPk(registervo.getSignagrbank()); if (bankdocVOByPk != null) { if (!StringUtil.isNull(bankdocVOByPk.getPcombinenum())) { registervo.setSignagrbanknum(bankdocVOByPk.getPcombinenum()); + } else { + // 2018-12-11 朱三鹏让注释掉,待签收批量生成收票登记的时候,校验直接抛错,为了继续走业务,只是显示,没有业务含义 +// throw new BusinessException("所选择的承兑银行没有设置人行联行行号"); } - if (!StringUtil.isNull(bankdocVOByPk.getPcombinename())) { registervo.setSignagrbankname(bankdocVOByPk.getPcombinename()); - + } else { + // 2018-12-11 朱三鹏让注释掉,待签收批量生成收票登记的时候,校验直接抛错,为了继续走业务,只是显示,没有业务含义 +// throw new BusinessException("所选择的承兑银行没有设置人行联行名称"); } } else { - - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0323")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0323")/* @res "根据所选择的承兑银行找不到相关银行档案" */); } } } + /** + * 删除 + * + * @param aggvo + * @throws BusinessException + */ + @Override public AggRegisterVO deleteGather(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); + // 删除校验(非自由态单据不能删除) Validator deleteValidator = new FbmBaseDeleteValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { deleteValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(deleteValidator); vService.validate(aggvo.getParentVO()); + // 有关联关系的单据不能删除 Validator outerValidator = new GatherOuterValidator(); - IValidationService outerService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService outerService = ValidationFrameworkUtil.createValidationService(outerValidator); outerService.validate(aggvo.getParentVO()); - Validator delValidator = new GatherCanoperateValidator(); - IValidationService delService = ValidationFrameworkUtil - .createValidationService(new Validator[] { delValidator }); - delService.validate(aggvo.getParentVO()); + // 非收票录入或者期初票据的单据不能删除 +// Validator delValidator = new GatherCanoperateValidator(); +// IValidationService delService = ValidationFrameworkUtil.createValidationService(delValidator); +// delService.validate(aggvo.getParentVO()); + // 设置票据状态 IStatusControlStrategy strategy = new DeleteGather((RegisterVO) aggvo.getParentVO()); StatusControlProcess.getInstance().process(strategy); - if ("signinput".equals(registervo.getGathertype())) { - ((IBeforeRegisterManageService) NCLocator.getInstance().lookup(IBeforeRegisterManageService.class)) - .undoWhenDeleteGather(registervo); + // 如果是待签收生成的,需要将状态回退为未生成 + if(FbmBusConstant.GATHER_TYPE_SIGNINPUT.equals(registervo.getGathertype())) { + NCLocator.getInstance().lookup(IBeforeRegisterManageService.class).undoWhenDeleteGather(registervo); } + // 退单据号 FBMPrivateServiceProxy.getBillcodeManage().returnBillCodeOnDelete(registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), registervo.getVbillno(), aggvo); FBMPrivateServiceProxy.getMDService().deleteBillFromDB(aggvo); @@ -303,23 +374,37 @@ public class GatherManageServiceImpl implements IGatherManageService { return aggvo; } + /** + * 删除 + * + * @param aggvo + * @throws BusinessException + */ + @Override public AggRegisterVO deleteAutoGatherFromEndore(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); + // 删除校验(非自由态单据不能删除) Validator deleteValidator = new FbmBaseDeleteValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { deleteValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(deleteValidator); vService.validate(aggvo.getParentVO()); + // 有关联关系的单据不能删除 Validator outerValidator = new GatherOuterValidator(); - IValidationService outerService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService outerService = ValidationFrameworkUtil.createValidationService(outerValidator); outerService.validate(aggvo.getParentVO()); +// // 非收票录入或者期初票据的单据不能删除 +// Validator delValidator = new GatherCanoperateValidator(); +// IValidationService delService = ValidationFrameworkUtil.createValidationService(delValidator); +// delService.validate(aggvo.getParentVO()); + + // 设置票据状态 IStatusControlStrategy strategy = new DeleteGather((RegisterVO) aggvo.getParentVO()); StatusControlProcess.getInstance().process(strategy); - + // 退单据号 FBMPrivateServiceProxy.getBillcodeManage().returnBillCodeOnDelete(registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), registervo.getVbillno(), aggvo); FBMPrivateServiceProxy.getMDService().deleteBillFromDB(aggvo); @@ -327,159 +412,215 @@ public class GatherManageServiceImpl implements IGatherManageService { return aggvo; } + /** + * 更新 + * + * @param aggvo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO updateGather(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); - + // 轻量级票据保存校验 Validator gatherSaveValidator = new GatherSaveValidator(); - IValidationService vEcdService = ValidationFrameworkUtil - .createValidationService(new Validator[] { gatherSaveValidator }); + IValidationService vEcdService = ValidationFrameworkUtil.createValidationService(gatherSaveValidator); vEcdService.validate(registervo); + // 非法票据的校验 Validator saveIllegalGatherValidator = new SaveIllegalGatherValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { saveIllegalGatherValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(saveIllegalGatherValidator); vService.validate(aggvo.getParentVO()); + // begin_luxiong7_20180921_山西正华票据池票据签发部分补丁FBM if (registervo.getSignagrbank() != null && !registervo.getSignagrbank().trim().equals("")) { - - BankdocVO bankdocVOByPk = ((IBankdocQueryService) NCLocator.getInstance() - .lookup(IBankdocQueryService.class)).getBankdocVOByPk(registervo.getSignagrbank()); + BankdocVO bankdocVOByPk = NCLocator.getInstance().lookup(IBankdocQueryService.class) + .getBankdocVOByPk(registervo.getSignagrbank()); if (bankdocVOByPk != null) { if (bankdocVOByPk.getPcombinenum() != null && !bankdocVOByPk.getPcombinenum().trim().equals("")) { registervo.setSignagrbanknum(bankdocVOByPk.getPcombinenum()); + } else { +// throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0","03618fbm_add02-0324")/*@res "所选择的承兑银行没有设置人行联行行号"*/); } - if (bankdocVOByPk.getPcombinename() != null && !bankdocVOByPk.getPcombinename().trim().equals("")) { registervo.setSignagrbankname(bankdocVOByPk.getPcombinename()); - + } else { +// throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0","03618fbm_add02-0325")/*@res "所选择的承兑银行没有设置人行联行名称"*/); } - } else { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0323")); + } else { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0323")/* @res "根据所选择的承兑银行找不到相关银行档案" */); } } + // end_luxiong7_20180921_山西正华票据池票据签发部分补丁FBM AggRegisterVO oldAggVO = (AggRegisterVO) FbmPrivateUtil.queryAggvoByPK(aggvo); - + // 数字验签,验签数据库是否被修改 if (oldAggVO != null) { - - FbmSignPubSecurityUtil.verifySign(oldAggVO, "saveupdate", false, aggvo); + /** + * 对数据库老数据进行数字验签 + */ + FbmSignPubSecurityUtil.verifySign(oldAggVO, FbmSignPubSecurityUtil.CONST_ACTIONCODE_SAVEUPDATE, false, + aggvo); } + // 检验票据池登记银行承兑银行信息 checkBankDoc(registervo); + // 设置票据状态 AggRegisterVO oldaggvo = FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(((RegisterVO) aggvo.getParentVO()).getPk_register()); - IStatusControlStrategy deletestrategy = new DeleteGather((RegisterVO) oldaggvo.getParentVO()); + IStatusControlStrategy deletestrategy = new DeleteGather((RegisterVO) oldaggvo.getParentVO());// 先删旧数据 StatusControlProcess.getInstance().process(deletestrategy); + // 更新数据库 + //可用余额赋值 + aggvo.getparentVO().setAvailablemoney(aggvo.getparentVO().getMoney()); + aggvo.getparentVO().setTotalavailablemoney(aggvo.getparentVO().getOlcmoney()); - AggRegisterVO retvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 1); - IStatusControlStrategy strategy = new SaveGather((RegisterVO) retvo.getParentVO(), "update"); + AggRegisterVO retvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + IStatusControlStrategy strategy = new SaveGather((RegisterVO) retvo.getParentVO(), SaveGather.UPDATE_ACTION);// 再增 StatusControlProcess.getInstance().process(strategy); return FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(((RegisterVO) aggvo.getParentVO()).getPk_register()); } + /** + * 弃审 + * + * @param aggvo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO unApproveGather(AggRegisterVO aggvo, boolean isEndStep, UFDate tallydate) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); + // 推式生成单据如果已经审批不能取消审批 shigy 20110301 +// Validator unApproveValidator = new GatherCancelApproveValidator(); +// IValidationService vService = ValidationFrameworkUtil.createValidationService(unApproveValidator); +// vService.validate(aggvo.getParentVO()); - Validator unApproveValidator = new GatherCancelApproveValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { unApproveValidator }); - vService.validate(aggvo.getParentVO()); - + // 有关联关系的单据不能取消审批 Validator outerValidator = new GatherOuterValidator(); - IValidationService outerService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService outerService = ValidationFrameworkUtil.createValidationService(outerValidator); outerService.validate(aggvo.getParentVO()); + // 已签收的票据不能取消审批 RegisterVO parentVO = aggvo.getparentVO(); if (parentVO != null && parentVO.getSfflag() == UFBoolean.TRUE) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1042")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-1042")/* @res "已签收的票据不能取消审批!" */); + } + // 已发送指令的不能取消审批 + if(parentVO.getElcpaymentstatus() != null) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618fbm_add02_0", "03618fbm_add02-0220")/* @res "已向银行发送指令,不允许取消审批!" */); } - if (parentVO.getElcpaymentstatus() != null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0220")); - } - - FbmPrivateUtil.updateAggVO(aggvo, 1); + // 更新数据库 + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); RegisterVO revo = (RegisterVO) aggvo.getParent(); + // 单据状态为自由态时才能维护堆栈 if (isEndStep) { - + // 设置票据状态 IStatusControlStrategy strategy = new CancelAuditGather((RegisterVO) aggvo.getParentVO()); StatusControlProcess.getInstance().process(strategy); + // 期初登记票据期初 if (revo.getSfflag() != null && revo.getSfflag().booleanValue() && (revo.getInitflag() == null || !revo.getInitflag().booleanValue())) { - + // 删掉票据帐 GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.deleteBillAcc(aggvo, tallydate); } - if (revo.getInitflag() != null && revo.getInitflag().booleanValue() - && FbmPublicUtil.isCMPInitDateEnable(revo.getPk_group(), revo.getPk_org())) { - IOriBalanceService balser = FBMPublicServiceProxy.getOriBalanceService(); - balser.insertNote(init2OriginalBalanceVO(aggvo, "DEL")); + // 期初登记票据期初 + if (revo.getInitflag() != null && revo.getInitflag().booleanValue()) { + if (FbmPublicUtil.isCMPInitDateEnable(revo.getPk_group(),revo.getPk_org())) { + IOriBalanceService balser = FBMPublicServiceProxy.getOriBalanceService(); + balser.insertNote(init2OriginalBalanceVO(aggvo, "DEL")); + } } } - return FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(((RegisterVO) aggvo.getParentVO()).getPk_register()); } + /** + * 审批 + * + * @param aggvo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO approveGather(AggRegisterVO aggvo, boolean isEndStep) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); - + // 如果是保存及审批,vo没有审批日期 if (((RegisterVO) aggvo.getParentVO()).getDapprovedate() == null) { ((RegisterVO) aggvo.getParentVO()).setDapprovedate(((RegisterVO) aggvo.getParentVO()).getDoperatedate()); } - + // 审批日期必须晚于等于制单日期 modify by aishm 2013-03-27 if (aggvo.getparentVO().getDapprovedate() != null - && aggvo.getparentVO().getDapprovedate().beforeDate(aggvo.getparentVO().getDoperatedate())) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1025")); + && aggvo.getparentVO().getDapprovedate().beforeDate(aggvo.getparentVO().getDoperatedate()) ) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-1025")/* @res "审批日期必须晚于等于制单日期!" */); } +// // 推式生成单据不能审批 +// Validator approveValidator = new GatherCanoperateValidator(); +// IValidationService approveService = ValidationFrameworkUtil.createValidationService(approveValidator); +// approveService.validate(aggvo.getParentVO()); +// + // 有关联关系的单据不能审批 Validator outerValidator = new GatherOuterValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(outerValidator); vService.validate(aggvo.getParentVO()); - FbmPrivateUtil.updateAggVO(aggvo, 1); + // 更新数据库 + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); RegisterVO revo = (RegisterVO) aggvo.getParent(); String pk_org = revo.getPk_org(); + // 只有审批通过才处理堆栈 if (isEndStep) { - + // 设置票据状态 IStatusControlStrategy strategy = new AuditGather((RegisterVO) aggvo.getParentVO()); StatusControlProcess.getInstance().process(strategy); - FbmSignPubSecurityUtil.verifySign(aggvo, "approve", false, null); +// if(revo.getCyberbankflag() != null && revo.getCyberbankflag().booleanValue()){ + // 单位票据池需要进行验签 + FbmSignPubSecurityUtil.verifySign(aggvo, FbmSignPubSecurityUtil.CONST_ACTIONCODE_APPROVE, false, null); +// } - if (revo.getSfflag() != null && revo.getSfflag().booleanValue() + // 如果已收票,登记票据帐,期初不登记票据帐 + if ((revo.getSfflag() != null && revo.getSfflag().booleanValue()) && (revo.getInitflag() == null || !revo.getInitflag().booleanValue())) { GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.writeBillAcc(aggvo); - + // ydx自动制证 if (FbmPublicUtil.isAutoVoucher(pk_org)) { FBMPrivateServiceProxy.getGatherManageService().voucherGatherVO(aggvo); } } - if (revo.getInitflag() != null && revo.getInitflag().booleanValue() - && FbmPublicUtil.isCMPInitDateEnable(revo.getPk_group(), revo.getPk_org())) { - IOriBalanceService balser = FBMPublicServiceProxy.getOriBalanceService(); - balser.insertNote(init2OriginalBalanceVO(aggvo, "ADD")); + // 期初登记票据期初 + if (revo.getInitflag() != null && revo.getInitflag().booleanValue()) { + if (FbmPublicUtil.isCMPInitDateEnable(revo.getPk_group(),revo.getPk_org())) { + IOriBalanceService balser = FBMPublicServiceProxy.getOriBalanceService(); + balser.insertNote(init2OriginalBalanceVO(aggvo, "ADD")); + } } } - return FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(((RegisterVO) aggvo.getParentVO()).getPk_register()); } @@ -487,21 +628,21 @@ public class GatherManageServiceImpl implements IGatherManageService { private OriginalBalanceVO[] init2OriginalBalanceVO(AggRegisterVO aggvo, String operate) { RegisterVO resvo = (RegisterVO) aggvo.getParentVO(); OriginalBalanceVO vo = new OriginalBalanceVO(); - vo.setAcctype(Integer.valueOf(3)); - - vo.setApprovedate((resvo.getGatherdate() == null) ? new UFLiteralDate((new UFDate()).toString()) + vo.setAcctype(IBankAccConstant.ACCTYPE_BILL); + // NCdp204576522 写期初余额的复核日期修改为收票日期 modify by aishm 2013-06-06 + vo.setApprovedate(resvo.getGatherdate() == null ? new UFLiteralDate((new UFDate()).toString()) : new UFLiteralDate(resvo.getGatherdate().toString())); vo.setApprovetime( - (resvo.getGatherdate() == null) ? new UFDateTime() : new UFDateTime(resvo.getGatherdate().toString())); + resvo.getGatherdate() == null ? new UFDateTime() : new UFDateTime(resvo.getGatherdate().toString())); vo.setApprover(resvo.getApprover()); vo.setCreationtime(resvo.getApprovetime()); vo.setCreator(resvo.getApprover()); - vo.setFormcode(Integer.valueOf(3)); + vo.setFormcode(CmpConst.BILL_RECDEPOSIT); vo.setModifiedtime(resvo.getApprovetime()); vo.setModifier(resvo.getApprover()); - vo.setPk_account("3"); + vo.setPk_account(CmpConst.BILL_RECDEPOSIT + ""); vo.setPk_currtype(resvo.getPk_curr()); vo.setPk_group(resvo.getPk_group()); vo.setPk_notetype(resvo.getFbmbilltype()); @@ -510,345 +651,534 @@ public class GatherManageServiceImpl implements IGatherManageService { if ("DEL".equalsIgnoreCase(operate)) { vo.setGlobalinit_local( - (resvo.getGllcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGllcmoney())); + resvo.getGllcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGllcmoney())); vo.setGroupinit_local( - (resvo.getGlcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGlcmoney())); + resvo.getGlcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGlcmoney())); vo.setInit_local( - (resvo.getOlcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getOlcmoney())); + resvo.getOlcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getOlcmoney())); vo.setInit_primal(UFDouble.ZERO_DBL.sub(resvo.getMoney())); vo.setCurrent_local( - (resvo.getOlcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getOlcmoney())); + resvo.getOlcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getOlcmoney())); vo.setCurrent_primal(UFDouble.ZERO_DBL.sub(resvo.getMoney())); vo.setGlobalcurrent_local( - (resvo.getGllcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGllcmoney())); + resvo.getGllcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGllcmoney())); vo.setGlobalrealtime_local( - (resvo.getGllcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGllcmoney())); + resvo.getGllcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGllcmoney())); vo.setGrouprealtime_local( - (resvo.getGlcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGlcmoney())); + resvo.getGlcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGlcmoney())); vo.setGroupcurrent_local( - (resvo.getGlcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGlcmoney())); + resvo.getGlcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getGlcmoney())); vo.setRealtime_local( - (resvo.getOlcmoney() == null) ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getOlcmoney())); + resvo.getOlcmoney() == null ? UFDouble.ZERO_DBL : UFDouble.ZERO_DBL.sub(resvo.getOlcmoney())); vo.setRealtime_primal(UFDouble.ZERO_DBL.sub(resvo.getMoney())); } else { - vo.setGlobalinit_local((resvo.getGllcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getGllcmoney()); - vo.setGroupinit_local((resvo.getGlcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getGlcmoney()); - vo.setInit_local((resvo.getOlcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getOlcmoney()); + vo.setGlobalinit_local(resvo.getGllcmoney() == null ? UFDouble.ZERO_DBL : resvo.getGllcmoney()); + vo.setGroupinit_local(resvo.getGlcmoney() == null ? UFDouble.ZERO_DBL : resvo.getGlcmoney()); + vo.setInit_local(resvo.getOlcmoney() == null ? UFDouble.ZERO_DBL : resvo.getOlcmoney()); vo.setInit_primal(resvo.getMoney()); - vo.setCurrent_local((resvo.getOlcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getOlcmoney()); + vo.setCurrent_local(resvo.getOlcmoney() == null ? UFDouble.ZERO_DBL : resvo.getOlcmoney()); vo.setCurrent_primal(resvo.getMoney()); - vo.setGlobalcurrent_local((resvo.getGllcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getGllcmoney()); - vo.setGlobalrealtime_local((resvo.getGllcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getGllcmoney()); - vo.setGrouprealtime_local((resvo.getGlcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getGlcmoney()); - vo.setGroupcurrent_local((resvo.getGlcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getGlcmoney()); - vo.setRealtime_local((resvo.getOlcmoney() == null) ? UFDouble.ZERO_DBL : resvo.getOlcmoney()); + vo.setGlobalcurrent_local(resvo.getGllcmoney() == null ? UFDouble.ZERO_DBL : resvo.getGllcmoney()); + vo.setGlobalrealtime_local(resvo.getGllcmoney() == null ? UFDouble.ZERO_DBL : resvo.getGllcmoney()); + vo.setGrouprealtime_local(resvo.getGlcmoney() == null ? UFDouble.ZERO_DBL : resvo.getGlcmoney()); + vo.setGroupcurrent_local(resvo.getGlcmoney() == null ? UFDouble.ZERO_DBL : resvo.getGlcmoney()); + vo.setRealtime_local(resvo.getOlcmoney() == null ? UFDouble.ZERO_DBL : resvo.getOlcmoney()); vo.setRealtime_primal(resvo.getMoney()); } return new OriginalBalanceVO[] { vo }; } + /** + * 收票登记批量银行托收 + * + * @param registerList + * @throws BusinessException + */ + @Override public void batchConsignBank(List registerList) throws BusinessException { + return; } + /** + * 收票登记批量贴现 + * + * @param registerList + * @throws BusinessException + */ + @Override public void batchDiscount(List registerList) throws BusinessException { + return; } + /** + * 收票登记批量质押 + * + * @param registerList + * @throws BusinessException + */ + @Override public void batchImpawn(List registerList) throws BusinessException { + return; } + /** + * 收票登记取消收票 + * + * @param registervo + * @throws BusinessException + */ + @Override public AggRegisterVO cancleGather(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO regvo = (RegisterVO) aggvo.getParentVO(); - + // 加票据号锁 FbmPublicUtil.lockFbmbillno(new String[] { regvo.getFbmbillno() }); - Validator integratedValidator = new FbmCheckIntegratedValidator(); - - Validator dateValidator = new GatherRecieveCancelValidator(); - IValidationService integratedValidatorService = ValidationFrameworkUtil - .createValidationService(new Validator[] { integratedValidator }); - IValidationService dateValidatorService = ValidationFrameworkUtil - .createValidationService(new Validator[] { dateValidator }); - - if (regvo.getSelfendore() == null || !regvo.getSelfendore().booleanValue()) { - - if (regvo.getOnlinebankflag() == null || !regvo.getOnlinebankflag().booleanValue()) { - integratedValidatorService.validate(regvo); - dateValidatorService.validate(regvo); - } + // 集成应用校验 + //Validator integratedValidator = new FbmCheckIntegratedValidator(); + // 调用校验 +// Validator dateValidator = new GatherRecieveCancelValidator(); +// IValidationService integratedValidatorService = ValidationFrameworkUtil.createValidationService(integratedValidator); +// IValidationService dateValidatorService = ValidationFrameworkUtil.createValidationService(dateValidator); + // begin-wangsh7-20191129-签收集成校验问题 + /** + * 收款单参照sql部分截取 ((isnull(sfflag, 'N') = 'Y' and isnull(onlinebankflag, 'N') = + * 'Y') or (isnull(sfflag, 'N') = 'N' and isnull(onlinebankflag, 'N') = 'N'))))) + * + * 由此可见如果是网银指令的,才会参照已经签收完成,即已经指令成功的,如果不发指令,参照的是还未签收的,因此电票类型也要被校验住, + * 而且以前的校验是不对的,判断电票是要查询票据所属的大类才行 + */ + // begin_luxiong7_20181214_电票收票完成后才能关联功能,不需要此校验 +// String fbmbilltype = regvo.getFbmbilltype(); +// if (fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BANK) || fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BUSI)) { +// vService.validate(regvo); +// } + // 为同名背书的收票登记做处理 + if (regvo.getSelfendore() != null && regvo.getSelfendore().booleanValue()) { + // 同名背书不需要集成校验 + } else { + // 非同名背书,正常校验 +// if (regvo.getOnlinebankflag() == null || !regvo.getOnlinebankflag().booleanValue()) { +// integratedValidatorService.validate(regvo); +// dateValidatorService.validate(regvo); +// } + // 有关联关系校验 Validator outerValidator = new GatherOuterValidator(); - IValidationService outerService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService outerService = ValidationFrameworkUtil.createValidationService(outerValidator); outerService.validate(aggvo.getParentVO()); } + // end_luxiong7_20181214_电票收票完成后才能关联功能,不需要此校验 + // end-wangsh7-20191129-签收集成校验问题 + // ydx:付款排程已经预订的票据不能取消审批 付款排程已经执行占用的票据不能取消审批 if (regvo.getBookflag() != null && regvo.getBookflag().booleanValue()) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0717")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-0717")/* @res "付款排程已经预订的票据不能取消收票" */); } - if (regvo.getPlanflag() != null && regvo.getPlanflag().booleanValue()) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0718")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-0718")/* @res "付款排程已经执行占用的票据不能取消收票" */); } + // 如果最新票据动作栈记录不是已收票 一定有其他后续处理 ActionQueryServiceImpl actionQueryService = new ActionQueryServiceImpl(); ActionVO actionVo = actionQueryService.queryNewestActionByPKRegister(regvo.getPk_register()); - if (null != actionVo && !"register".equals(actionVo.getEndstatus())) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1060", null, - new String[] { regvo.getFbmbillno() })); + if (null != actionVo && !RegisterStatusConstant.REGISTER.equals(actionVo.getEndstatus())) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-1060", null, new String[] { regvo.getFbmbillno() }/* @res "票据{0}的前一操作必须是已登記的數據。" */)); } + // 已收票标志位置为false regvo.setSfflag(UFBoolean.FALSE); - + //收票登记取消签收,def1设置为空 + regvo.setDef1(null); + //清空签收人、签收日期 aggvo.getparentVO().setSigner(null); aggvo.getparentVO().setSigndate(null); - + // 删除票据帐 GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.deleteBillAcc(aggvo, regvo.getGatherdate()); - aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 1); + // 更新数据库并返回VO + aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // begin_luxiong7_20181213_取消收票后自动删除占用费计算单据(centeroccupyct_config) deleteCenterVO(aggvo); + // end_luxiong7_20181213_取消收票后自动删除占用费计算单据(centeroccupyct_config) + // 调用票据上收进行取消收票 + // 202206版本 20211109 校验是否票据上收 如果是的话就做票据上收取消签收操作 processBillDeliveryAllocate(regvo, false); return aggvo; } + /** + * 收票登记收票完成 + * + * @param registervo + * @return RegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO completeGather_RequiresNew(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO regvo = (RegisterVO) aggvo.getParentVO(); - + // 加票据号锁 FbmPublicUtil.lockFbmbillno(new String[] { regvo.getFbmbillno() }); String pk_org = regvo.getPk_org(); - + // 状态校验 Validator dateValidator = new GatherRecieveCompleteValidator(); - IValidationService dService = ValidationFrameworkUtil - .createValidationService(new Validator[] { dateValidator }); + IValidationService dService = ValidationFrameworkUtil.createValidationService(dateValidator); dService.validate(regvo); - - Validator integratedValidator = new FbmCheckIntegratedValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { integratedValidator }); - - if (regvo.getSelfendore() == null || !regvo.getSelfendore().booleanValue()) { - - if (regvo.getOnlinebankflag() == null || !regvo.getOnlinebankflag().booleanValue()) { - vService.validate(regvo); - } - + // 集成应用校验 +// Validator integratedValidator = new FbmCheckIntegratedValidator(); +// IValidationService vService = ValidationFrameworkUtil.createValidationService(integratedValidator); + // begin-wangsh7-20191129-签收集成校验问题-NCdp206226432 + /** + * 收款单参照sql部分截取 ((isnull(sfflag, 'N') = 'Y' and isnull(onlinebankflag, 'N') = + * 'Y') or (isnull(sfflag, 'N') = 'N' and isnull(onlinebankflag, 'N') = 'N'))))) + * + * 由此可见如果是网银指令的,才会参照已经签收完成,即已经指令成功的,如果不发指令,参照的是还未签收的,因此电票类型也要被校验住, + * 而且以前的校验是不对的,判断电票是要查询票据所属的大类才行 + */ + // begin_luxiong7_20181214_电票收票完成后才能关联功能,不需要此校验 +// String fbmbilltype = regvo.getFbmbilltype(); +// if (fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BANK) || fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BUSI)) { +// vService.validate(regvo); +// } + // 为同名背书的收票登记做处理 + if (regvo.getSelfendore() != null && regvo.getSelfendore().booleanValue()) { + // 同名背书不需要集成校验 + } else { + // 非同名背书,正常校验 +// if (regvo.getOnlinebankflag() == null || !regvo.getOnlinebankflag().booleanValue()) { +// vService.validate(regvo); +// } + // 有关联关系校验 Validator outerValidator = new GatherOuterValidator(); - IValidationService outerService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService outerService = ValidationFrameworkUtil.createValidationService(outerValidator); outerService.validate(aggvo.getParentVO()); } + // end_luxiong7_20181214_电票收票完成后才能关联功能,不需要此校验 + // end-wangsh7-20191129-签收集成校验问题-NCdp206226432 + // 已收票标志位置为false regvo.setSfflag(UFBoolean.TRUE); - + //代表是在收票登记签收的 + regvo.setDef1("Y"); + //回写签收人、签收日期 aggvo.getparentVO().setSigner(AppContext.getInstance().getPkUser()); aggvo.getparentVO().setSigndate(AppContext.getInstance().getBusiDate()); - FbmSignPubSecurityUtil.verifySign(aggvo, "recievecomplete", false, null); +// if(regvo.getCyberbankflag() != null && regvo.getCyberbankflag().booleanValue()){ + // 单位票据池需要进行验签 + FbmSignPubSecurityUtil.verifySign(aggvo, FbmSignPubSecurityUtil.CONST_ACTIONCODE_RECIEVECOMPLETE, false, null); +// } + // 登记票据帐 if (!regvo.getInitflag().booleanValue()) { GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.writeBillAcc(aggvo); - + // ydx自动制证 if (FbmPublicUtil.isAutoVoucher(pk_org)) { FBMPrivateServiceProxy.getGatherManageService().voucherGatherVO(aggvo); } } ((RegisterVO) aggvo.getParentVO()).setSfflag(UFBoolean.TRUE); - aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 1); + aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // begin_wusib_20190726_原有逻辑入池后才计费,不知道当时是什么原因加这个逻辑,与需求赵伟刚确认先注释。 + // begin_luxiong7_20181115_收票完成后自动生成占用费计算单据(centeroccupyct_config) +// insertCenterVO(aggvo); + // end_luxiong7_20181115_收票完成后自动生成占用费计算单据 + // end_wusib_20190726_原有逻辑入池后才计费,不知道当时是什么原因加这个逻辑,与需求赵伟刚确认先注释。 + // 更新数据库并返回VO + + // 202206版本 20211109 校验是否票据上收 如果是的话就做票据上收成功和下拨操作 processBillDeliveryAllocate(regvo, true); return aggvo; } + /** + * 收票登记收票完成,不进行状态控制以及集成判断等 + * + * @param registervo + * @return RegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO completeGatherWithOutControl(AggRegisterVO aggvo) throws BusinessException { + // modified by wangsh7 集成时已将票据的saga校验前移,回退时不需要saga校验 begin + // xuhrc 20191126 云原生后端saga异常校验 +// checkSagaStatus(aggvo); + // modified by wangsh7 集成时已将票据的saga校验前移,回退时不需要saga校验 end + // 登记票据帐 GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.writeBillAcc(aggvo); - + //回写签收人、签收日期 RegisterVO registerVO = aggvo.getparentVO(); registerVO.setSigner(AppContext.getInstance().getPkUser()); registerVO.setSigndate(AppContext.getInstance().getBusiDate()); - - aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 1); - + // 更新数据库并返回VO + aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // 202206版本 20211109 校验是否票据上收 如果是的话就做票据上收成功和下拨操作 processBillDeliveryAllocate(registerVO, true); return aggvo; } + /** + * 收票登记取消收票,不进行状态控制以及集成判断等 + * + * @param registervo + * @throws BusinessException + */ + @Override public AggRegisterVO cancleGatherWithOutControl(AggRegisterVO aggvo) throws BusinessException { + // modified by wangsh7 集成时已将票据的saga校验前移,回退时不需要saga校验 begin + // xuhrc 20191126 云原生后端saga异常校验 +// checkSagaStatus(aggvo); + // modified by wangsh7 集成时已将票据的saga校验前移,回退时不需要saga校验 end + // 删除票据帐 GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); RegisterVO registerVO = aggvo.getparentVO(); billAdapter.deleteBillAcc(aggvo, registerVO.getGatherdate()); - + //清空签收人、签收日期 registerVO.setSigner(null); registerVO.setSigndate(null); - - aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 1); - + // 更新数据库并返回VO + aggvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // 202206版本 20211109 校验是否票据上收 如果是的话就做票据上收成功和下拨操作 processBillDeliveryAllocate(registerVO, false); return aggvo; } + /** + * 收票登记取消制证 + * + * @param registervo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO cancelVoucherGatherVO(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO regvo = aggvo.getparentVO(); - if (regvo.getSelfendore() == null || !regvo.getSelfendore().booleanValue()) { - - IOuterQueryService outerqryservice = (IOuterQueryService) NCLocator.getInstance() - .lookup(IOuterQueryService.class); + if (regvo.getSelfendore() != null && regvo.getSelfendore().booleanValue()) { + // 同名背书不需要校验,可以直接制证 + } else { + IOuterQueryService outerqryservice = NCLocator.getInstance().lookup(IOuterQueryService.class); OuterVO[] vos = outerqryservice.queryOuterVOsByPk_busibill(regvo.getPk_register()); if (ArrayUtils.isNotEmpty(vos)) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1131")); + //该单据已被集成收款业务引用,不能取消制证 + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1131")); } } - + // begin 云原生取消凭证冻结业务单据修改人wangdengk GatherSagaInfoAdapter sagaAdapter = new GatherSagaInfoAdapter(); SagasFrozenProcessor.process(sagaAdapter, aggvo); - + // end + // 更新数据库并返回VO BaseVoucherUtil.sendDAPMessge_del(aggvo); return (AggRegisterVO) FbmPrivateUtil.queryAggvoByPK(aggvo); } + /** + * 收票登记制证 + * + * @param registervo + * @return AggRegisterVO + * @throws BusinessException + */ + @Override public AggRegisterVO voucherGatherVO(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO regvo = aggvo.getparentVO(); - if (regvo.getSelfendore() == null || !regvo.getSelfendore().booleanValue()) { - + if (regvo.getSelfendore() != null && regvo.getSelfendore().booleanValue()) { + // 同名背书不需要校验,可以直接制证 + } else if (null == regvo.getDef7() || !FbmBusConstant.SYSTEM_API.equals(regvo.getDef7())) {//api过来的数据不需要校验集成 + // 是否集成应用 String msg = FbmPublicUtil.isTogatherWithCmpArApFts(regvo.getPk_org()); if (StringUtil.isNotNull(msg)) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1124")); + // 集成使用时,收票登记不能独立制证,可在使用票据收款的业务制证 + throw new BusinessException( + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1124")); } - IOuterQueryService outerqryservice = (IOuterQueryService) NCLocator.getInstance() - .lookup(IOuterQueryService.class); + IOuterQueryService outerqryservice = NCLocator.getInstance().lookup(IOuterQueryService.class); OuterVO[] vos = outerqryservice.queryOuterVOsByPk_busibill(regvo.getPk_register()); if (ArrayUtils.isNotEmpty(vos)) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1125")); + // 该单据已被集成收款业务引用,不能制证 + throw new BusinessException( + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1125")); } } - + // begin 云原生取消凭证冻结业务单据修改人wangdengk GatherSagaInfoAdapter sagaAdapter = new GatherSagaInfoAdapter(); SagasFrozenProcessor.process(sagaAdapter, aggvo); - + // end + // 制证日期取右上角业务日期 regvo.setDvoucherdate(AppContext.getInstance().getBusiDate()); - + // 更新数据库并返回VO BaseVoucherUtil.sendDAPMessge(aggvo); return (AggRegisterVO) FbmPrivateUtil.queryAggvoByPK(aggvo); } + /** + * 新增并审批收票登记单 + */ + @Override public void insertAndApproveGather(AggRegisterVO[] aggvos) throws BusinessException { if (aggvos != null && aggvos.length != 0) { - IOrgUnitPubService_C oups = (IOrgUnitPubService_C) NCLocator.getInstance() - .lookup(IOrgUnitPubService_C.class); + IOrgUnitPubService_C oups = NCLocator.getInstance().lookup(IOrgUnitPubService_C.class); String initDateNY = null; RegisterVO registervo = null; String vbillno = null; for (AggRegisterVO aggvo : aggvos) { registervo = (RegisterVO) aggvo.getParentVO(); - initDateNY = oups.getOrgModulePeriodByOrgIDAndModuleID(registervo.getPk_org(), "3618"); - + initDateNY = oups.getOrgModulePeriodByOrgIDAndModuleID(registervo.getPk_org(), + FbmBusConstant.PRODUCT_FBM_FUNCODE); if (StringUtil.isNull(initDateNY)) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0719")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-0719")/* @res "收票单位的期初期间没有启用,请通知收票单位启用期初期间。" */); } - + // 期初日期格式有两种:2010-01-01和2010-01 if (initDateNY.length() == 7) { initDateNY = initDateNY + "-01"; } if (registervo.getGatherdate().before(new UFDate(initDateNY))) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0720")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-0720")/* @res "收票日期应晚于收票单位的期初期间" */); } - FbmHideFieldUtil.setHideField(registervo, new String[][] { { "hidepayunit", "payunit", "1" }, - { "hidepaybank", "paybank", "2" }, { "hidepaybankacc", "paybankacc", "3" }, - { "hidereceiveunit", "receiveunit", "1" }, { "hidereceivebank", "receivebank", "2" }, - { "hidereceivebankacc", "receivebankacc", "3" }, { "invoiceunit", "invoiceunitname", "1" } }); + // 将隐藏项值设置到对应字段 modify by aishm 2012-07-24 + FbmHideFieldUtil.setHideField(registervo, + new String[][] { { RegisterVO.HIDEPAYUNIT, RegisterVO.PAYUNIT, FbmHideFieldUtil.CUST }, + { RegisterVO.HIDEPAYBANK, RegisterVO.PAYBANK, FbmHideFieldUtil.BANKDOC }, + { RegisterVO.HIDEPAYBANKACC, RegisterVO.PAYBANKACC, FbmHideFieldUtil.BANKACC }, + { RegisterVO.HIDERECEIVEUNIT, RegisterVO.RECEIVEUNIT, FbmHideFieldUtil.CUST }, + { RegisterVO.HIDERECEIVEBANK, RegisterVO.RECEIVEBANK, FbmHideFieldUtil.BANKDOC }, + { RegisterVO.HIDERECEIVEBANKACC, RegisterVO.RECEIVEBANKACC, FbmHideFieldUtil.BANKACC }, + { RegisterVO.INVOICEUNIT, RegisterVO.INVOICEUNITNAME, FbmHideFieldUtil.CUST } }); + // 取单据编号并设置 vbillno = FBMPrivateServiceProxy.getBillcodeManage().getBillCode_RequiresNew( registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), aggvo); - registervo.setAttributeValue("vbillno", vbillno); - - FbmPrivateUtil.updateAggVO(aggvo, 2); - - FbmSignPubSecurityUtil.signDataAggVO(new AggregatedValueObject[] { aggvo }); - + registervo.setAttributeValue(FbmFieldConstant.VBILLNO, vbillno); + // 更新数据库 + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.NEW); + /** + * 数字签名 + */ + FbmSignPubSecurityUtil.signDataAggVO(aggvo); + // 新增时设置票据状态 IStatusControlStrategy insertgather = new SaveGather((RegisterVO) aggvo.getParentVO(), false); StatusControlProcess.getInstance().process(insertgather); - + // 审批时设置票据状态 IStatusControlStrategy approvegather = new AuditGather((RegisterVO) aggvo.getParentVO(), false); StatusControlProcess.getInstance().process(approvegather); + // 如果生成的是废票,则设置废票票据状态 for V6.1 modify by aishm 2012-02-22 if (aggvo.getparentVO().getDisableflag() != null && aggvo.getparentVO().getDisableflag().booleanValue()) { - AggRegisterVO aggregvo = FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(aggvo.getparentVO().getPk_register()); IStatusControlStrategy disablegather = new DisableGather(aggregvo.getparentVO(), false); StatusControlProcess.getInstance().process(disablegather); } + // 如果已收票,登记票据帐 if (registervo.getSfflag() != null && registervo.getSfflag().booleanValue()) { GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.writeBillAcc(aggvo); - + // ydx自动制证 if (FbmPublicUtil.isAutoVoucher(registervo.getPk_org())) { FBMPrivateServiceProxy.getGatherManageService().voucherGatherVO(aggvo); } + /** + * V6.1不再预算控制 modify by aishm 2012-04-11 + */ +// (aggvo).getParentVO().setAttributeValue("haspassedntbcheck", UFBoolean.TRUE); +// (aggvo).getParentVO().setAttributeValue("tbbmessage", FbmTbbCommonUtil.controlNtb(aggvo, false,new UFDate(), FbmTbbCommonUtil.UFIND)); } } } } + /** + * 弃审并删除收票登记单 + */ + @Override public void unapproveAndDeleteGather(AggRegisterVO[] aggvos) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvos); if (aggvos != null && aggvos.length != 0) { for (AggRegisterVO aggvo : aggvos) { RegisterVO registervo = aggvo.getparentVO(); - + // 删除票据帐 if (aggvo.getparentVO().getSfflag() != null && aggvo.getparentVO().getSfflag().booleanValue()) { GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.deleteBillAcc(aggvo, registervo.getGatherdate()); } + // 如果生成的是废票,则删除废票票据状态 for V6.1 modify by aishm 2012-02-22 if (aggvo.getparentVO().getDisableflag() != null && aggvo.getparentVO().getDisableflag().booleanValue()) { IStatusControlStrategy disablegather = new CancelDisableGather(aggvo.getparentVO(), false); StatusControlProcess.getInstance().process(disablegather); } + // 弃审状态控制 IStatusControlStrategy cancelaudit = new CancelAuditGather((RegisterVO) aggvo.getParentVO(), false); StatusControlProcess.getInstance().process(cancelaudit); - + // 删除状态控制 IStatusControlStrategy deletegather = new DeleteGather((RegisterVO) aggvo.getParentVO(), false); StatusControlProcess.getInstance().process(deletegather); + // 删除校验 if (registervo.getVoucher() != null && registervo.getVoucher().equals(UFBoolean.TRUE)) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1002")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-1002")/* @res "生成的收票登记单已制证,不能反操作" */); } + // 退单据号 FBMPrivateServiceProxy.getBillcodeManage().returnBillCodeOnDelete(registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), registervo.getVbillno(), aggvo); + // 删除收票登记单 FBMPrivateServiceProxy.getMDService().deleteBill(aggvo); } } } + /** + * 资金组织端确认内部托管单或者内部领用单时,如果是调剂托管,则生成资金组织端的收票登记单 + * + * @param aggvos + * @throws BusinessException + */ + @Override public void insertGatherFromFund(AggRegisterVO[] aggvos) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvos); if (aggvos != null && aggvos.length != 0) { insertAndApproveGather(aggvos); } } + /** + * 资金组织端取消确认内部托管单或者内部领用单时,如果是调剂托管,则删除资金组织端的收票登记单 + * + * @param pk_parent + * @throws BusinessException + */ + @Override public void deleteGatherFromFund(String pk_parent) throws BusinessException { if (!StringUtil.isNull(pk_parent)) { - try { AggRegisterVO[] aggvos = FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByWhereSql("pk_parent = '" + NCESAPI.sqlEncode(pk_parent) + "'"); @@ -857,85 +1187,97 @@ public class GatherManageServiceImpl implements IGatherManageService { } } catch (Exception e) { Logger.error(e.getMessage(), e); - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0721")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-0721")/* @res "删除资金组织端的收票登记单时异常!" */); } } else { return; } } + @Override public void cancelDisableGather(String pk_register) throws BusinessException { updateDisableFlag(pk_register, "N"); } + @Override public void disableGather(String pk_register) throws BusinessException { updateDisableFlag(pk_register, "Y"); } private void updateDisableFlag(String pk_register, String flag) throws DAOException { BaseDAO dao = new BaseDAO(); - String sql = "update fbm_register set disableflag='" + NCESAPI.sqlEncode(flag) + "' where pk_register='" + NCESAPI.sqlEncode(pk_register) + "'"; dao.executeUpdate(sql); } + /** + * 更新收票登记单的托管组织 + * + * @param pk_registers + * @param pk_keeporg + * @throws BusinessException + */ + @Override public void updateGatherKeepOrg(String[] pk_registers, String pk_keeporg) throws BusinessException { if (pk_registers != null && pk_registers.length != 0) { BaseDAO basedao = new BaseDAO(); - String wheresql = FbmSqlUtils.getInStr("pk_register", pk_registers, new boolean[] { true }); + String wheresql = FbmSqlUtils.getInStr("pk_register", pk_registers, true); String sql = "update fbm_register set pk_keeporg = '" + NCESAPI.sqlEncode(pk_keeporg) + "' where " + wheresql; - basedao.executeUpdate(sql); } } + @Override public void updateReturnRecord(String[] pk_registers, String returnrecord) throws BusinessException { if (pk_registers != null && pk_registers.length != 0) { BaseDAO dao = new BaseDAO(); - String wheresql = FbmSqlUtils.getInStr("pk_register", pk_registers, new boolean[] { true }); + String wheresql = FbmSqlUtils.getInStr("pk_register", pk_registers, true); String sql = "update fbm_register set returnrecord = '" + NCESAPI.sqlEncode(returnrecord) + "' where " + wheresql; - dao.executeUpdate(sql); } } + @Override public AggRegisterVO DestroyGather(String pk_register, UFDate desDate, String pk_desman) throws BusinessException { IGatherQueryService que = FBMPrivateServiceProxy.getGatherQueryService(); AggRegisterVO aggvo = que.queryGatherVOByPK(pk_register); RegisterVO revo = (RegisterVO) aggvo.getParent(); - + // 更新核销信息 revo.setVerifydate(desDate); revo.setVerifyman(pk_desman); revo.setIsverify(UFBoolean.TRUE); revo.setDisableflag(UFBoolean.TRUE); aggvo.setParent(revo); - FbmPrivateUtil.updateAggVO(aggvo, 1); + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // 设置收票票据状态 IStatusControlStrategy strategy = new DestroyGatherAction(revo); StatusControlProcess.getInstance().process(strategy); return FBMPrivateServiceProxy.getGatherQueryService().queryGatherVOByPK(pk_register); } + @Override public void updateFundorg(SuperVO[] bvos, String pk_fundorg, String pk_fundorg_v) throws BusinessException { if (bvos != null && bvos.length != 0) { String[] pk_registers = new String[bvos.length]; for (int i = 0; i < bvos.length; i++) { - pk_registers[i] = (String) bvos[i].getAttributeValue("pk_register"); + pk_registers[i] = (String) bvos[i].getAttributeValue(FbmFieldConstant.PK_REGISTER); } StringBuilder exeSql = new StringBuilder(); exeSql.append("update fbm_register set "); - exeSql.append("pk_fundorg"); + exeSql.append(FbmFieldConstant.PK_FUNDORG); if (StringUtil.isNull(pk_fundorg)) { exeSql.append("='~',"); } else { exeSql.append("='").append(NCESAPI.sqlEncode(pk_fundorg)).append("',"); } - exeSql.append("pk_fundorg_v"); + exeSql.append(FbmFieldConstant.PK_FUNDORG_V); if (StringUtil.isNull(pk_fundorg_v)) { exeSql.append("='~'"); } else { @@ -943,93 +1285,112 @@ public class GatherManageServiceImpl implements IGatherManageService { } exeSql.append("where "); - exeSql.append(FbmSqlUtils.getInStr("pk_register", pk_registers, new boolean[] { true })); + exeSql.append(FbmSqlUtils.getInStr(FbmFieldConstant.PK_REGISTER, pk_registers, true)); BaseDAO dao = new BaseDAO(); try { dao.executeUpdate(exeSql.toString()); } catch (DAOException e) { Logger.error(e.getMessage(), e); - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0722")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-0722")/* @res "更新受托资金组织时异常" */); } } } + @Override public void insertGatherWithReliefKeep(AggRegisterVO[] aggvos) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvos); if (aggvos != null && aggvos.length != 0) { for (AggRegisterVO aggvo : aggvos) { RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); - + // 取单据编号并设置 String vbillno = FBMPrivateServiceProxy.getBillcodeManage().getBillCode_RequiresNew( registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), aggvo); - registervo.setAttributeValue("vbillno", vbillno); + registervo.setAttributeValue(FbmFieldConstant.VBILLNO, vbillno); + // 组织停用校验 DefaultValidationService validateService = new DefaultValidationService(); - validateService.addValidator(new FinOrgUnUseValidator(new VOFieldDesc[] { new VOFieldDesc("pk_org") })); + validateService.addValidator(new FinOrgUnUseValidator(new VOFieldDesc(RegisterVO.PK_ORG))); validateService.validate(aggvo); if (aggvo.getparentVO().getOlcrate() == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1122")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-1122")/* @res "调入组织本币汇率为空,请设置调入组织汇率!" */); } - - FbmPrivateUtil.updateAggVO(aggvo, 2); - + // 更新数据库 + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.NEW); + // 设置票据状态为调剂托管态 IStatusControlStrategy reliefgather = new ReliefKeepGather((RegisterVO) aggvo.getParentVO(), false); StatusControlProcess.getInstance().process(reliefgather); + // 如果生成的是废票,则设置废票票据状态 for V6.1 modify by aishm 2012-02-22 if (aggvo.getparentVO().getDisableflag() != null && aggvo.getparentVO().getDisableflag().booleanValue()) { - AggRegisterVO aggreg = FBMPrivateServiceProxy.getGatherQueryService() .queryGatherVOByPK(aggvo.getparentVO().getPk_register()); IStatusControlStrategy disablegather = new DisableGather(aggreg.getparentVO(), false); StatusControlProcess.getInstance().process(disablegather); } + // 登记票据账 2012-7-5 票据日记账余额统计关联改动 GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.writeBillAcc(aggvo); } } } + @Override public void deleteGatherWithReliefKeep(AggRegisterVO[] aggvos) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvos); if (aggvos != null && aggvos.length != 0) { for (AggRegisterVO aggvo : aggvos) { RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); + // 删除票据帐 2012-7-5 票据日记账余额统计关联改动 GatherBillAccAdapter billAdapter = new GatherBillAccAdapter(); billAdapter.deleteBillAcc(aggvo, registervo.getGatherdate()); + // 如果生成的是废票,则删除废票票据状态 for V6.1 modify by aishm 2012-02-22 if (aggvo.getparentVO().getDisableflag() != null && aggvo.getparentVO().getDisableflag().booleanValue()) { IStatusControlStrategy disablegather = new CancelDisableGather(aggvo.getparentVO(), false); StatusControlProcess.getInstance().process(disablegather); } + // 取消调剂状态控制 IStatusControlStrategy cancelreliefgather = new CancelReliefGather(registervo, false); StatusControlProcess.getInstance().process(cancelreliefgather); + // 删除校验 if (registervo.getVoucher() != null && registervo.getVoucher().equals(UFBoolean.TRUE)) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-1002")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", + "03618fbm-1002")/* @res "生成的收票登记单已制证,不能反操作" */); } + // 退单据号 FBMPrivateServiceProxy.getBillcodeManage().returnBillCodeOnDelete(registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), registervo.getVbillno(), aggvo); + // 删除收票登记单 FBMPrivateServiceProxy.getMDService().deleteBill(aggvo); } } } + /** + * 快速导入收票登记后台接口 + * + * @param evos + * @throws BusinessException + */ + @Override public void quickImportGather(List origvos) throws BusinessException { List voList = new ArrayList(); - IBasicOrgUnitPubService_C orgSrv = (IBasicOrgUnitPubService_C) NCLocator.getInstance() - .lookup(IBasicOrgUnitPubService_C.class); + IBasicOrgUnitPubService_C orgSrv = NCLocator.getInstance().lookup(IBasicOrgUnitPubService_C.class); String pk_group = AppContext.getInstance().getPkGroup(); String pk_user = AppContext.getInstance().getPkUser(); - String[] pk_orgs = orgSrv.getOrgPKsByTypeIDsAndGroupID(pk_group, "BUSINESSUNIT00000000"); + String[] pk_orgs = orgSrv.getOrgPKsByTypeIDsAndGroupID(pk_group, IOrgConstBasic.BUSINESSUNITORGTYPE); Map mapOrg = new HashMap(); Map mapCustSup = new HashMap(); Map notetypeMap = getNoteTypeMap(); @@ -1039,238 +1400,253 @@ public class GatherManageServiceImpl implements IGatherManageService { Map bankaccsubMap = new HashMap(); Map bankdocMap = new HashMap(); - IGeneralAccessor cussupAccessor = GeneralAccessorFactory.getAccessor("8c6510dd-3b8a-4cfc-a5c5-323d53c6006f"); - - IGeneralAccessor fundPlanAccessor = GeneralAccessorFactory.getAccessor("edc7fbfe-4111-440e-93e0-a88664969dd4"); - + IGeneralAccessor cussupAccessor = GeneralAccessorFactory + .getAccessor(nc.itf.bd.pub.IBDMetaDataIDConst.CUSTSUPPLIER); + IGeneralAccessor fundPlanAccessor = GeneralAccessorFactory + .getAccessor(nc.itf.bd.pub.IBDMetaDataIDConst.FUNDPLAN); IGeneralAccessor bankaccsubAccessor = GeneralAccessorFactory - .getAccessor("cd1f9a1c-eb08-493f-88ff-bcd1c134dee1"); - IGeneralAccessor bankdocAccessor = GeneralAccessorFactory.getAccessor("bf5aeed4-6b35-4a2e-b750-b9aabce59e21"); - String pk_billtypecode = ((RegisterVO) origvos.get(0)).getPk_billtypecode(); + .getAccessor(nc.itf.bd.pub.IBDMetaDataIDConst.BANKACCSUB); + IGeneralAccessor bankdocAccessor = GeneralAccessorFactory.getAccessor(nc.itf.bd.pub.IBDMetaDataIDConst.BANKDOC); + String pk_billtypecode = origvos.get(0).getPk_billtypecode(); for (RegisterVO origvo : origvos) { RegisterVO regVO = new RegisterVO(); + // 处理主组织 String pk_org_name = origvo.getPk_org(); String pk_org = null; if (mapOrg.get(pk_org_name) != null) { - pk_org = (String) mapOrg.get(pk_org_name); - } else { - List orgList = OrgPubUtil.getVOListByClause(OrgVO.class, "pk_org", Arrays.asList(pk_orgs), + pk_org = mapOrg.get(pk_org_name); + } else {// pk_org_name为组织名称时 + List orgList = OrgPubUtil.getVOListByClause(OrgVO.class, OrgVO.PK_ORG, Arrays.asList(pk_orgs), "name='" + pk_org_name + "'"); - if (!ArrayUtil.isNull(orgList)) { - pk_org = ((OrgVO) orgList.get(0)).getPk_org(); + pk_org = orgList.get(0).getPk_org(); mapOrg.put(pk_org_name, pk_org); - } else { - List orgCodeList = OrgPubUtil.getVOListByClause(OrgVO.class, "pk_org", + } else {// pk_org_name是组织编码时 + List orgCodeList = OrgPubUtil.getVOListByClause(OrgVO.class, OrgVO.PK_ORG, Arrays.asList(pk_orgs), "code='" + pk_org_name + "'"); if (orgCodeList.size() > 0) { - pk_org = ((OrgVO) orgCodeList.get(0)).getPk_org(); + pk_org = orgCodeList.get(0).getPk_org(); mapOrg.put(pk_org_name, pk_org); } + } } - - checkOrgIsExist(pk_org); + checkOrgIsExist(pk_org);// 判断财务组织为空,表示导入的财务组织不存在 regVO.setPk_org(pk_org); + // 期初 regVO.setInitflag(origvo.getInitflag()); + // 处理收票日期 UFDate gatherdate = origvo.getGatherdate(); regVO.setGatherdate(gatherdate); + // 处理付票单位 String paybillunit_name = origvo.getPaybillunit(); String paybillunit = null; - if (mapCustSup.get(pk_org + pk_org) != null) { - paybillunit = (String) mapCustSup.get(pk_org + pk_org); + if (mapCustSup.get(pk_org + paybillunit_name) != null) { + paybillunit = mapCustSup.get(pk_org + paybillunit_name); } else { IBDData custBDData = cussupAccessor.getDocByNameWithMainLang(pk_org, paybillunit_name); if (custBDData != null) { paybillunit = custBDData.getPk(); } - mapCustSup.put(pk_org + pk_org, paybillunit); + mapCustSup.put(pk_org + paybillunit_name, paybillunit); } regVO.setPaybillunit(paybillunit); + // 处理票据编号 String fbmbillno = origvo.getFbmbillno(); regVO.setFbmbillno(fbmbillno); + // 处理票据类型 String fbmbilltypename = origvo.getFbmbilltype(); - - regVO.setFbmbilltype((String) notetypeMap.get(fbmbilltypename)); - + ; + regVO.setFbmbilltype(notetypeMap.get(fbmbilltypename)); + // 处理币种 String pk_curr_name = origvo.getPk_curr(); - if (!StringUtil.isNull((String) currtypeMap.get(pk_curr_name))) { - regVO.setPk_curr((String) currtypeMap.get(pk_curr_name)); + if (!StringUtil.isNull(currtypeMap.get(pk_curr_name))) { + regVO.setPk_curr(currtypeMap.get(pk_curr_name)); } else { - regVO.setPk_curr((String) currtypeCodeMap.get(pk_curr_name)); + regVO.setPk_curr(currtypeCodeMap.get(pk_curr_name)); } + // 处理票据金额 UFDouble money = origvo.getMoney(); regVO.setMoney(money); - regVO.setOlcrate(new UFDouble(1.0D)); - regVO.setGlcrate(new UFDouble(1.0D)); - regVO.setGllcrate(new UFDouble(1.0D)); + regVO.setOlcrate(new UFDouble(1.0000000)); + regVO.setGlcrate(new UFDouble(1.0000000)); + regVO.setGllcrate(new UFDouble(1.0000000)); regVO.setOlcmoney(money); regVO.setGlcmoney(money); regVO.setGllcmoney(money); + // 处理出票日期 UFDate invoicedate = origvo.getInvoicedate(); regVO.setInvoicedate(invoicedate); + // 处理到期日期 UFDate enddate = origvo.getEnddate(); regVO.setEnddate(enddate); + // 收票计划项目 if (origvo.getGatherplanitem() != null) { String gatherplanitem = null; String gahterplanitem_name = origvo.getGatherplanitem(); - if (fundPlanMap.get(pk_org + pk_org) != null) { - gatherplanitem = (String) fundPlanMap.get(pk_org + pk_org); + if (fundPlanMap.get(pk_org + gahterplanitem_name) != null) { + gatherplanitem = fundPlanMap.get(pk_org + gahterplanitem_name); } else { IBDData bdData = fundPlanAccessor.getDocByNameWithMainLang(pk_org, gahterplanitem_name); if (bdData != null) { gatherplanitem = bdData.getPk(); } - fundPlanMap.put(pk_org + pk_org, gatherplanitem); + fundPlanMap.put(pk_org + gahterplanitem_name, gatherplanitem); } regVO.setGatherplanitem(gatherplanitem); } - + // 备注 regVO.setNote(origvo.getNote()); + // 业务组织 String pk_entrusorg_name = origvo.getPk_entrustorg(); if (pk_entrusorg_name != null) { String pk_entrusorg = null; if (mapOrg.get(pk_entrusorg_name) != null) { - pk_entrusorg = (String) mapOrg.get(pk_entrusorg_name); + pk_entrusorg = mapOrg.get(pk_entrusorg_name); } else { - List orgList = OrgPubUtil.getVOListByClause(OrgVO.class, "pk_org", Arrays.asList(pk_orgs), - "name='" + NCESAPI.sqlEncode(pk_entrusorg_name) + "'"); + List orgList = OrgPubUtil.getVOListByClause(OrgVO.class, OrgVO.PK_ORG, + Arrays.asList(pk_orgs), "name='" + NCESAPI.sqlEncode(pk_entrusorg_name) + "'"); if (orgList.size() > 0) { - pk_entrusorg = ((OrgVO) orgList.get(0)).getPk_org(); + pk_entrusorg = orgList.get(0).getPk_org(); mapOrg.put(pk_entrusorg_name, pk_entrusorg); } - } + } regVO.setPk_entrustorg(pk_entrusorg); } - + // regVO.setContractno(origvo.getContractno()); regVO.setAcceptanceno(origvo.getAcceptanceno()); + // 出票单位 if (origvo.getInvoiceunit() != null) { String invoiceunitname = origvo.getInvoiceunit(); String invoiceunit = null; - if (mapCustSup.get(pk_org + pk_org) != null) { - invoiceunit = (String) mapCustSup.get(pk_org + pk_org); + if (mapCustSup.get(pk_org + invoiceunitname) != null) { + invoiceunit = mapCustSup.get(pk_org + invoiceunitname); } else { IBDData custBDData = cussupAccessor.getDocByNameWithMainLang(pk_org, invoiceunitname); if (custBDData != null) { invoiceunit = custBDData.getPk(); } - mapCustSup.put(pk_org + pk_org, invoiceunit); + mapCustSup.put(pk_org + invoiceunitname, invoiceunit); } regVO.setInvoiceunit(invoiceunit); regVO.setInvoiceunitname(invoiceunitname); } + // 付款单位 if (origvo.getHidepayunit() != null) { String hidepayunit = origvo.getHidepayunit(); String payunit = null; - if (mapCustSup.containsKey(pk_org + pk_org)) { - payunit = (String) mapCustSup.get(pk_org + pk_org); + if (mapCustSup.containsKey(pk_org + hidepayunit)) { + payunit = mapCustSup.get(pk_org + hidepayunit); } else { IBDData custBDData = cussupAccessor.getDocByNameWithMainLang(pk_org, hidepayunit); if (custBDData != null) { payunit = custBDData.getPk(); } - mapCustSup.put(pk_org + pk_org, payunit); + mapCustSup.put(pk_org + hidepayunit, payunit); } regVO.setPayunit(hidepayunit); regVO.setHidepayunit(payunit); } + // 收款单位 if (origvo.getHidereceiveunit() != null) { String hidereceiveunit = origvo.getHidereceiveunit(); String receiveunit = null; - if (mapCustSup.containsKey(pk_org + pk_org)) { - receiveunit = (String) mapCustSup.get(pk_org + pk_org); + if (mapCustSup.containsKey(pk_org + hidereceiveunit)) { + receiveunit = mapCustSup.get(pk_org + hidereceiveunit); } else { IBDData custBDData = cussupAccessor.getDocByNameWithMainLang(pk_org, hidereceiveunit); if (custBDData != null) { receiveunit = custBDData.getPk(); } - mapCustSup.put(pk_org + pk_org, receiveunit); + mapCustSup.put(pk_org + hidereceiveunit, receiveunit); } regVO.setReceiveunit(hidereceiveunit); regVO.setHidereceiveunit(receiveunit); } - + // 付款银行帐号 if (origvo.getHidepaybankacc() != null) { String hidepaybankacc = origvo.getHidepaybankacc(); String paybankacc = null; - if (bankaccsubMap.containsKey(pk_org + pk_org)) { - paybankacc = (String) bankaccsubMap.get(pk_org + pk_org); + if (bankaccsubMap.containsKey(pk_org + hidepaybankacc)) { + paybankacc = bankaccsubMap.get(pk_org + hidepaybankacc); } else { IBDData bankaccData = bankaccsubAccessor.getDocByCode(pk_org, hidepaybankacc); if (bankaccData != null) { paybankacc = bankaccData.getPk(); } - bankaccsubMap.put(pk_org + pk_org, hidepaybankacc); + bankaccsubMap.put(pk_org + hidepaybankacc, hidepaybankacc); } regVO.setHidepaybankacc(paybankacc); regVO.setPaybankacc(hidepaybankacc); } - - regVO.setSfflag((origvo.getSfflag() == null) ? UFBoolean.FALSE : origvo.getSfflag()); - + // 已收票 + regVO.setSfflag(origvo.getSfflag() == null ? UFBoolean.FALSE : origvo.getSfflag()); + // 收款银行帐号 if (origvo.getHidereceivebankacc() != null) { String hidereceivebankacc = origvo.getHidereceivebankacc(); String receivebankacc = null; - if (bankaccsubMap.containsKey(pk_org + pk_org)) { - receivebankacc = (String) bankaccsubMap.get(pk_org + pk_org); + if (bankaccsubMap.containsKey(pk_org + hidereceivebankacc)) { + receivebankacc = bankaccsubMap.get(pk_org + hidereceivebankacc); } else { IBDData bankaccData = bankaccsubAccessor.getDocByCode(pk_org, hidereceivebankacc); if (bankaccData != null) { receivebankacc = bankaccData.getPk(); } - bankaccsubMap.put(pk_org + pk_org, hidereceivebankacc); + bankaccsubMap.put(pk_org + hidereceivebankacc, hidereceivebankacc); } regVO.setHidereceivebankacc(receivebankacc); regVO.setReceivebankacc(hidereceivebankacc); } + // 付款银行 if (origvo.getHidepaybank() != null) { String hidepaybank = origvo.getHidepaybank(); String paybank = null; - if (bankdocMap.containsKey(pk_org + pk_org)) { - paybank = (String) bankdocMap.get(pk_org + pk_org); + if (bankdocMap.containsKey(pk_org + hidepaybank)) { + paybank = bankdocMap.get(pk_org + hidepaybank); } else { IBDData bankdocData = bankdocAccessor.getDocByNameWithMainLang(pk_org, hidepaybank); if (bankdocData != null) { paybank = bankdocData.getPk(); } - bankdocMap.put(pk_org + pk_org, paybank); + bankdocMap.put(pk_org + hidepaybank, paybank); } regVO.setHidepaybank(paybank); regVO.setPaybank(hidepaybank); } + // 收款银行 if (origvo.getHidereceivebank() != null) { String hidereceivebank = origvo.getHidereceivebank(); String receivebank = null; - if (bankdocMap.containsKey(pk_org + pk_org)) { - receivebank = (String) bankdocMap.get(pk_org + pk_org); + if (bankdocMap.containsKey(pk_org + hidereceivebank)) { + receivebank = bankdocMap.get(pk_org + hidereceivebank); } else { IBDData bankdocData = bankdocAccessor.getDocByNameWithMainLang(pk_org, hidereceivebank); if (bankdocData != null) { receivebank = bankdocData.getPk(); } - bankdocMap.put(pk_org + pk_org, receivebank); + bankdocMap.put(pk_org + hidereceivebank, receivebank); } regVO.setHidereceivebank(receivebank); regVO.setReceivebank(hidereceivebank); @@ -1278,49 +1654,51 @@ public class GatherManageServiceImpl implements IGatherManageService { regVO.setCyberbankflag(origvo.getCyberbankflag()); if (origvo.getCyberbankflag() != null && origvo.getCyberbankflag().booleanValue()) { - + // 登记银行 if (StringUtil.isNull(origvo.getPk_bankdoc())) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0326")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0326")/* @res "导入时网银为Y,登记银行不能为空!" */); } - + // 承兑银行 if (StringUtil.isNull(origvo.getSignagrbank())) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0327")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0327")/* @res "导入时网银为Y,承兑银行不能为空!" */); } + // 登记银行 if (StringUtil.isNull(origvo.getPk_bankdoc())) { String pk_bankdoc = origvo.getPk_bankdoc(); String bankdoc = null; - if (bankdocMap.containsKey(pk_org + pk_org)) { - bankdoc = (String) bankdocMap.get(pk_org + pk_org); + if (bankdocMap.containsKey(pk_org + pk_bankdoc)) { + bankdoc = bankdocMap.get(pk_org + pk_bankdoc); } else { IBDData bankdocData = bankdocAccessor.getDocByNameWithMainLang(pk_org, pk_bankdoc); if (bankdocData != null) { bankdoc = bankdocData.getPk(); } else { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0328")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618fbm_add02_0", "03618fbm_add02-0328")/* @res "导入的登记银行错误!" */); } - bankdocMap.put(pk_org + pk_org, bankdoc); + bankdocMap.put(pk_org + pk_bankdoc, bankdoc); } regVO.setPk_bankdoc(bankdoc); } + // 承兑银行 if (StringUtil.isNull(origvo.getSignagrbank())) { String signagrbank = origvo.getSignagrbank(); String pksignagrbank = null; - if (bankdocMap.containsKey(pk_org + pk_org)) { - pksignagrbank = (String) bankdocMap.get(pk_org + pk_org); + if (bankdocMap.containsKey(pk_org + signagrbank)) { + pksignagrbank = bankdocMap.get(pk_org + signagrbank); } else { IBDData bankdocData = bankdocAccessor.getDocByNameWithMainLang(pk_org, signagrbank); if (bankdocData != null) { pksignagrbank = bankdocData.getPk(); } else { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0329")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618fbm_add02_0", "03618fbm_add02-0329")/* @res "导入的承兑银行错误!" */); } - bankdocMap.put(pk_org + pk_org, pksignagrbank); + bankdocMap.put(pk_org + signagrbank, pksignagrbank); } regVO.setSignagrbank(pksignagrbank); if (!StringUtil.isNull(origvo.getAcceptorname())) { @@ -1330,28 +1708,33 @@ public class GatherManageServiceImpl implements IGatherManageService { } } + // 检验票据池登记银行承兑银行信息 checkBankDoc(regVO); } + // pk_group regVO.setPk_group(pk_group); + // billtype regVO.setPk_billtypecode(origvo.getPk_billtypecode()); regVO.setPk_billtypeid(origvo.getPk_billtypeid()); + // gathertype + regVO.setGathertype(FbmBusConstant.GATHER_TYPE_INPUT); - regVO.setGathertype("input"); - + // Billmaker regVO.setBillmaker(pk_user); - + // bookflag regVO.setBookflag(UFBoolean.FALSE); - - regVO.setBuyerinterest((origvo.getBuyerinterest() == null) ? UFBoolean.FALSE : origvo.getBuyerinterest()); - + // buyerinterest + regVO.setBuyerinterest(origvo.getBuyerinterest() == null ? UFBoolean.FALSE : origvo.getBuyerinterest()); + // disableflag regVO.setDisableflag(UFBoolean.FALSE); regVO.setPlanflag(UFBoolean.FALSE); + // 单据状态 + regVO.setVbillstatus(nc.vo.trade.pub.IBillStatus.FREE); - regVO.setVbillstatus(Integer.valueOf(-1)); - + // 制证 if (origvo.getVoucher() != null) { regVO.setVoucher(origvo.getVoucher()); } else { @@ -1366,10 +1749,9 @@ public class GatherManageServiceImpl implements IGatherManageService { voList.add(aggRegVO); } - AggRegisterVO[] vos = (AggRegisterVO[]) voList.toArray(new AggRegisterVO[0]); - - PfProcessBatchRetObject obj = (PfProcessBatchRetObject) ((IplatFormEntry) NCLocator.getInstance() - .lookup(IplatFormEntry.class)).processBatch("SAVEBASE", pk_billtypecode, null, vos, null, null); + AggRegisterVO[] vos = voList.toArray(new AggRegisterVO[0]); + PfProcessBatchRetObject obj = (PfProcessBatchRetObject) NCLocator.getInstance().lookup(IplatFormEntry.class) + .processBatch("SAVEBASE", pk_billtypecode, null, vos, null, null); if (!StringUtil.isNull(obj.getExceptionMsg())) { throw new BusinessException(obj.getExceptionMsg()); } @@ -1379,14 +1761,13 @@ public class GatherManageServiceImpl implements IGatherManageService { private void checkOrgIsExist(String pk_org) throws BusinessException { if (StringUtil.isNull(pk_org)) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0330")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0330")/* @res "财务组织不存在,请填写正确的财务组织" */); } } private Map getNoteTypeMap() throws BusinessException { - INotetypeQueryService notetypeSrv = (INotetypeQueryService) NCLocator.getInstance() - .lookup(INotetypeQueryService.class); + INotetypeQueryService notetypeSrv = NCLocator.getInstance().lookup(INotetypeQueryService.class); NotetypeVO[] notetypevos = notetypeSrv.queryAllNotetypeVOs(); Map notetypemap = new HashMap(); for (NotetypeVO vo : notetypevos) { @@ -1397,7 +1778,7 @@ public class GatherManageServiceImpl implements IGatherManageService { } private Map getCurrtypeMap() throws BusinessException { - ICurrtypeQuery srv = (ICurrtypeQuery) NCLocator.getInstance().lookup(ICurrtypeQuery.class); + ICurrtypeQuery srv = NCLocator.getInstance().lookup(ICurrtypeQuery.class); CurrtypeVO[] vos = srv.queryAllCurrtypeVO(); Map currtypeMap = new HashMap(); for (CurrtypeVO vo : vos) { @@ -1407,7 +1788,7 @@ public class GatherManageServiceImpl implements IGatherManageService { } private Map getCurrtypeCodeMap() throws BusinessException { - ICurrtypeQuery srv = (ICurrtypeQuery) NCLocator.getInstance().lookup(ICurrtypeQuery.class); + ICurrtypeQuery srv = NCLocator.getInstance().lookup(ICurrtypeQuery.class); CurrtypeVO[] vos = srv.queryAllCurrtypeVO(); Map currtypeMap = new HashMap(); for (CurrtypeVO vo : vos) { @@ -1416,465 +1797,621 @@ public class GatherManageServiceImpl implements IGatherManageService { return currtypeMap; } + @Override public void updateGatherByBillpool(AggRegisterVO[] aggvos) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvos); RegisterVO[] registerVOs = new RegisterVO[aggvos.length]; for (int i = 0; i < aggvos.length; i++) { - aggvos[i].getParentVO().setStatus(1); + aggvos[i].getParentVO().setStatus(VOStatus.UPDATED); registerVOs[i] = (RegisterVO) aggvos[i].getParentVO(); } - + // 更新数据库 FBMPrivateServiceProxy.getMDService().saveBillWithRealDelete(registerVOs); + } + @Override public void updateGatherByBillpoolWithoutSagaCheck(AggRegisterVO[] aggvos) throws BusinessException { RegisterVO[] registerVOs = new RegisterVO[aggvos.length]; for (int i = 0; i < aggvos.length; i++) { - aggvos[i].getParentVO().setStatus(1); + aggvos[i].getParentVO().setStatus(VOStatus.UPDATED); registerVOs[i] = (RegisterVO) aggvos[i].getParentVO(); } - + // 更新数据库 FBMPrivateServiceProxy.getMDService().saveBillWithRealDelete(registerVOs); } + /** + * 网银办理前业务校验 + * + * @param aggVOs + * @param pks + * @param cacheMap + * @return + * @throws BusinessException + */ private AggRegisterVO[] doNetBankBeforeValidate(AggRegisterVO[] aggVOs, List pks, Map cacheMap) throws BusinessException { if (aggVOs != null && aggVOs.length > 0) { boolean passFlag = false; - List result = new ArrayList(); + List result = new ArrayList();// 用于存储业务校验通过得数据 Map noteClassMap = new HashMap(); Map bankMap = new HashMap(); for (AggRegisterVO aggVO : aggVOs) { if (aggVO != null && aggVO.getParentVO() != null) { - - if ("register".equals(aggVO.getparentVO().getRegisterstatus())) { - + /** + * 判断票据状态,只有已登记得可以进行银行登记 + */ + if (RegisterStatusConstant.REGISTER.equals(aggVO.getparentVO().getRegisterstatus())) { + /** + * 判断当前票据是否已完成收票 + */ if (aggVO.getparentVO().getSfflag() != null && aggVO.getparentVO().getSfflag().booleanValue()) { - + /** + * 判断当前票据是否勾选网银 + */ if (aggVO.getparentVO().getCyberbankflag() != null && aggVO.getparentVO().getCyberbankflag().booleanValue()) { - + // begin-wangsh7-20190731-建行电票不能银行登记 + /** + * 山西正华建行电票登记问题:建行的电票不允许银行登记,经需求确认合并到1909 + */ +// passFlag = true; if (isJSYH(aggVO.getparentVO().getPk_bankdoc(), bankMap) && isEcdNoteClass(aggVO.getparentVO().getPk_register(), noteClassMap)) { passFlag = false; setNetBankError(aggVO, - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0034") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0034") - + ((RegisterVO) aggVO - - .getParentVO()).getVbillno()); - + /* @res "单据[" */ + ((RegisterVO) aggVO.getParentVO()).getVbillno() + + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID( + "3618fbm_add02_0", + "03618fbm_add02-0381")/* "],建设银行电票不能进行银行登记!" */); } else { - passFlag = true; } + // end-wangsh7-20190731 } else { - passFlag = false; setNetBankError(aggVO, - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0034") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0034") - + ((RegisterVO) aggVO - - .getParentVO()).getVbillno()); + /* @res "单据[" */ + ((RegisterVO) aggVO.getParentVO()).getVbillno() + + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID( + "3618fbm_add02_0", + "03618fbm_add02-0331")/* @res "]未勾选网银,不能进行网银办理!" */); } - } else { passFlag = false; setNetBankError(aggVO, - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0034") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0034") - + ((RegisterVO) aggVO - - .getParentVO()).getVbillno()); + /* @res "单据[" */ + ((RegisterVO) aggVO.getParentVO()).getVbillno() + + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0332")/* @res "]未完成收票登记,不能进行网银办理!" */); } - } else { - passFlag = false; setNetBankError(aggVO, - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0034") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0034") - + ((RegisterVO) aggVO - - .getParentVO()).getVbillno()); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0034") + /* @res "单据[" */ + ((RegisterVO) aggVO.getParentVO()).getVbillno() + + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0333")/* @res "]已被使用,不能进行银行登记!" */); } - pks.add(aggVO.getParentVO().getPrimaryKey()); + pks.add(aggVO.getParentVO().getPrimaryKey());// 记录单据主键,后续根据主键序列重现排序 } else { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0033")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0033")/* @res "数据为空!" */); } - if (!passFlag) { - cacheMap.put(aggVO.getparentVO().getPrimaryKey(), aggVO); + cacheMap.put(aggVO.getparentVO().getPrimaryKey(), aggVO);// 未通过业务校验得数据存入缓存 } else { - result.add(aggVO); + result.add(aggVO);// 存储通过业务校验得数据 } passFlag = false; } + /** + * 校验不通过的数据条数 + */ if (cacheMap.size() == aggVOs.length) { if (aggVOs.length == 1) { throw new BusinessException(((RegisterVO) aggVOs[0].getParentVO()).getBankreturninfo()); } - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0334")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0334")/* @res "所有数据都不符合业务需求,不能进行网银办理!" */); } - return (AggRegisterVO[]) result.toArray(new AggRegisterVO[result.size()]); + return result.toArray(new AggRegisterVO[result.size()]); + } else { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0033")/* @res "数据为空!" */); } - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0033")); } + /** + * 网银办理 + * + * @param aggVOs + * @return + * @throws BusinessException + */ private AggRegisterVO[] doNetBank(AggRegisterVO[] aggVOs) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggVOs); - return PFBMPrivateServiceProxy.getIEbankBillManageService().receiptRegis(aggVOs, "OBM"); + return PFBMPrivateServiceProxy.getIEbankBillManageService().receiptRegis(aggVOs, FbmBusConstant.MODEL_NAME_OBM); } + /** + * 网银办理后业务校验 + * + * @param aggVOs + * @param pks + * @param cacheMap + * @throws BusinssException + */ private AggRegisterVO[] doNetBankAfterValidate(AggRegisterVO[] aggVOs, List pks, Map cacheMap) throws BusinessException { if (aggVOs != null && aggVOs.length > 0) { - int reqNum = pks.size(); - int ebankRetNum = aggVOs.length; - int noPassNum = cacheMap.size(); + int reqNum = pks.size();// 后台总共需要处理的数据条数 + int ebankRetNum = aggVOs.length;// 网银返回的数据条数 + int noPassNum = cacheMap.size();// 网银办理前业务校验不通过的数据条数 + /** + * 校验网银办理返回的数据条数 + */ if (reqNum > ebankRetNum + noPassNum) { throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0266") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0266") - + (reqNum - ebankRetNum + noPassNum)); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0266") + /* @res "网银丢失数据[" */ + (reqNum - (ebankRetNum + noPassNum)) + + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0267")/* @res "]条!" */); } + /** + * 校验网银办理后的数据是否为空 + */ for (AggRegisterVO aggVO : aggVOs) { if (aggVO == null || aggVO.getParentVO() == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0268")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0268")/* @res "网银返回数据为空!" */); } - if (aggVO.getparentVO().getPaymentstatus() == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0269")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0269")/* @res "网银返回数据 指令状态为空!" */); } - - cacheMap.put(aggVO.getParentVO().getPrimaryKey(), aggVO); + cacheMap.put(aggVO.getParentVO().getPrimaryKey(), aggVO);// 将网银处理后的数据也放入缓存 } AggRegisterVO[] result = new AggRegisterVO[reqNum]; for (int i = 0; i < reqNum; i++) { - result[i] = (AggRegisterVO) cacheMap.get(pks.get(i)); + result[i] = cacheMap.get(pks.get(i)); } return result; + } else { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0268")/* @res "网银返回数据为空!" */); } - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0268")); } + /** + * 更新数据库 + * + * @param aggVOs + * @throws BusinssException + */ private void doUpdate2DB(AggRegisterVO[] aggVOs) throws BusinessException { if (aggVOs != null && aggVOs.length > 0) { for (AggRegisterVO aggVO : aggVOs) { if (aggVO != null && aggVO.getparentVO() != null) { RegisterVO registerVO = aggVO.getparentVO(); - - if (registerVO.getCyberbankflag() == null || !registerVO.getCyberbankflag().booleanValue()) { + /** + * 未勾选网银,发送银行登记指令情况 指令状态成功,则网银复选框赋值true + * + */ + if (!(registerVO.getCyberbankflag() != null && registerVO.getCyberbankflag().booleanValue())) { if (PaymentStatusEnum.TRADESUCCESS.value().equals(registerVO.getPaymentstatus())) { registerVO.setCyberbankflag(UFBoolean.TRUE); } else { registerVO.setCyberbankflag(UFBoolean.FALSE); } } - - aggVO = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggVO, 1); + // 更新票据信息 + aggVO = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggVO, VOStatus.UPDATED); } else { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0268")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0268")/* @res "网银返回数据为空!" */); } } } else { - - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0268")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0268")/* @res "网银返回数据为空!" */); } } + @Override public AggRegisterVO[] bankRegister(AggRegisterVO[] aggVOs) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggVOs); + // start_190722_wusib_NCC1909版本废弃票据池启用日期参数 +// String initdate = SysinitAccessor.getInstance().getParaString(InvocationInfoProxy.getInstance().getGroupId(), +// "PFBM0001"); +// if (initdate == null) { +// throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", +// "03618fbm_add02-0335")/* @res "登记银行失败,请先设置票据池启用日期参数!" */); +// } + // end_190722_wusib_NCC1909版本废弃票据池启用日期参数 + // 未勾选网银,补全银行信息,如:登记银行,承兑银行等 BankRegisterUtil.bankRegisterHelp(aggVOs); - - if (!FbmPublicUtil.isOBMEnable((String) aggVOs[0].getParentVO().getAttributeValue("pk_group"))) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0223")); + // 判断银企直联是否启用 + if (!FbmPublicUtil.isOBMEnable((String) aggVOs[0].getParentVO().getAttributeValue(FbmFieldConstant.PK_GROUP))) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0223")/* @res "未安装银企直联模块,请先安装后使用" */); } - List pks = new ArrayList(); - Map cacheMap = new HashMap(); + /** + * 强制ca验签 + */ +// PFBMcaVerityVO pfbmcavo = new PFBMcaVerityVO(); +// PfbmCASignatureVO pfbmca = pfbmcavo.getGatherCa(aggVOs[0]); +//// pfbmca.setCryptograph(discountvo.getCacode()); +// PfbmCAVerfier caVerifier = new PfbmCAVerfier(); +// caVerifier.verifyPayInfo(new PfbmCASignatureVO[]{pfbmca}, new ConsignCAInfoAccessor(), AppContext.getInstance().getPkUser(),aggVOs[0].getparentVO().getPk_billtypecode()); + + List pks = new ArrayList();// 主键序列 + Map cacheMap = new HashMap();// 缓存,用于存储业务校验不通过得数据 try { aggVOs = doNetBankBeforeValidate(aggVOs, pks, cacheMap); } catch (BusinessException e) { throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0336") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0336")); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0336") + /* @res "银行登记 网银办理前业务校验不通过。" */ + (e.getMessage() == null ? "" : e.getMessage())); } try { aggVOs = doNetBank(aggVOs); } catch (BusinessException e) { throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0337") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0337")); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0337") + /* @res "银行登记 网银办理过程中出现异常。" */ + (e.getMessage() == null ? "" : e.getMessage())); } try { aggVOs = doNetBankAfterValidate(aggVOs, pks, cacheMap); } catch (BusinessException e) { throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0338") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0338")); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0338") + /* @res "银行登记 网银办理后业务校验不通过。" */ + (e.getMessage() == null ? "" : e.getMessage())); } try { doUpdate2DB(aggVOs); } catch (BusinessException e) { throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0339") - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0339")); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0339") + /* @res "银行登记 更新数据库出现异常。" */ + (e.getMessage() == null ? "" : e.getMessage())); } - return aggVOs; } + @Override public void bankRegisterWriteBackRegister(AggRegisterVO[] aggVOs) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggVOs); if (aggVOs != null && aggVOs.length > 0) { List result = new ArrayList(); - + /** + * 过滤,去除指令状态为空得数据 + */ for (AggRegisterVO aggVO : aggVOs) { if (aggVO != null && aggVO.getparentVO() != null) { if (aggVO.getparentVO().getPaymentstatus() != null) { result.add(aggVO); } } else { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0033")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0033")/* @res "数据为空!" */); } } - doUpdate2DB((AggRegisterVO[]) result.toArray(new AggRegisterVO[result.size()])); + doUpdate2DB(result.toArray(new AggRegisterVO[result.size()]));// 更新数据库 } else { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0033")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0033")/* @res "数据为空!" */); } } + /** + * 将指令状态置为失败 + * + * @param aggVO + * @param errMess + */ private void setNetBankError(AggRegisterVO aggVO, String errMess) { - ((RegisterVO) aggVO.getParentVO()).setPaymentstatus(Integer.valueOf(PaymentStatusEnum.TRADEFAIL.toIntValue())); + ((RegisterVO) aggVO.getParentVO()).setPaymentstatus(PaymentStatusEnum.TRADEFAIL.toIntValue()); ((RegisterVO) aggVO.getParentVO()).setBankreturninfo(errMess); } + /** + * 生成审批态银行托管单 + * + * @param aggVOs + * @throws BusinessException + */ + @Override public void insertStorageVO(AggRegisterVO aggVO) throws BusinessException { - AggStorageVO aggstovo = RegisterToChangeVO.registerToChangeStorageVO(aggVO); - + // 创建要传递的数据 + AggStorageVO aggstovo = RegisterToChangeVO.registerToChangeStorageVO(aggVO);// 收票登记转化为银行托管VO + // 生成保存态的银行托管单 aggstovo = FBMPrivateServiceProxy.getBankKeepManageService().insertBankKeep(aggstovo); - aggstovo.getParentVO().setAttributeValue("vbillstatus", Integer.valueOf(1)); - aggstovo.getParentVO().setAttributeValue("approver", aggstovo.getParentVO().getAttributeValue("billmaker")); + aggstovo.getParentVO().setAttributeValue("vbillstatus", 1);// 单据状态=审批通过 + aggstovo.getParentVO().setAttributeValue("approver", aggstovo.getParentVO().getAttributeValue("billmaker"));// 审批人=制单人 aggstovo.getParentVO().setAttributeValue("approvetime", - aggstovo.getParentVO().getAttributeValue("creationtime")); + aggstovo.getParentVO().getAttributeValue("creationtime"));// 审批时间=创建时间 aggstovo.getParentVO().setAttributeValue("dapprovedate", - aggstovo.getParentVO().getAttributeValue("doperatedate")); + aggstovo.getParentVO().getAttributeValue("doperatedate"));// 审批日期=制单日期 + // 调用审批流 boolean isEndStep2 = FbmPrivateUtil.isEndStep4Audit(aggstovo); - + // 生成审批态的银行托管单 aggstovo = FBMPrivateServiceProxy.getBankKeepManageService().approveBankKeep(aggstovo, isEndStep2); } + /** + * 生成审批态银行托管单 + * + * @param aggVOs + * @throws BusinessException + */ + @Override public void insertStorageVOAndCenterVO(AggRegisterVO[] aggregisterVO) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggregisterVO); for (int i = 0; i < aggregisterVO.length; i++) { - + // 生成银行托款单 if (aggregisterVO[i].getparentVO().getNote().equals("92")) { insertStorageVO(aggregisterVO[i]); } + // 生成占用费计算 insertCenterVO(aggregisterVO[i]); } } + /** + * 生成占用费计算 + * + * @param aggVOs + * @throws BusinessException + */ + @Override public void insertCenterVO(AggRegisterVO aggVO) throws BusinessException { RegisterVO regvo = (RegisterVO) aggVO.getParentVO(); - - if (StringUtil.isNotNull(regvo.getPk_org()) && StringUtil.isNotNull(regvo.getPaybillunit())) { - +// if(StringUtil.isNotNull(regvo.getPk_occupyctmangage()) ){//占用费率不为空 +// // 组装占用费聚合VO +// AggCenteroccupyctVO[] aggCenteroccupyctVO = new AggCenteroccupyctVO[1]; +// aggCenteroccupyctVO[0]=RegisterToChangeVO.registerToChangeCenterVO(aggVO);//收票登记转化为占用费VO +// // 勾选计算费用,新增占用费计算记录 +// if( aggCenteroccupyctVO!=null ){ +// NCLocator.getInstance().lookup(ICenteroccupyctManageService.class).insert(aggCenteroccupyctVO); +// } +// } + if ((StringUtil.isNotNull(regvo.getPk_org())) && StringUtil.isNotNull(regvo.getPaybillunit())) { Map orgmap = FBMPrivateServiceProxy.getCustsupPubService() .queryOrgPkByCustsupPk(new String[] { regvo.getPaybillunit() }); - + // 如果是外部客商,直接返回null if (null == orgmap) { return; } - String paybillunit = (String) orgmap.get(regvo.getPaybillunit()); + String paybillunit = orgmap.get(regvo.getPaybillunit()); - boolean isFundOrgIDSByOrgID = ((IFundOrgPubService) NCLocator.getInstance() - .lookup(IFundOrgPubService.class)) + // 根据资金组织ID与财务组织ID查询是否存在委托关系 + boolean isFundOrgIDSByOrgID = NCLocator.getInstance().lookup(IFundOrgPubService.class) .isExistRelationByFundOrgIDAndFinanceOrgID(regvo.getPk_org(), paybillunit); - if (isFundOrgIDSByOrgID) { - + if (isFundOrgIDSByOrgID) {// 财务组织为中心,付票单位为成员单位 + // 组装占用费聚合VO AggCenteroccupyctVO[] aggCenteroccupyctVO = new AggCenteroccupyctVO[1]; - aggCenteroccupyctVO[0] = RegisterToChangeVO.registerToChangeCenterVO(aggVO); - + aggCenteroccupyctVO[0] = RegisterToChangeVO.registerToChangeCenterVO(aggVO);// 收票登记转化为占用费VO + // 勾选计算费用,新增占用费计算记录 if (aggCenteroccupyctVO != null) { - ((ICenteroccupyctManageService) NCLocator.getInstance().lookup(ICenteroccupyctManageService.class)) - .insert(aggCenteroccupyctVO); + NCLocator.getInstance().lookup(ICenteroccupyctManageService.class).insert(aggCenteroccupyctVO); } } } } + /** + * 删除占用费计算 + * + * @param aggVOs + * @throws BusinessException + */ + @Override public void deleteCenterVO(AggRegisterVO aggVO) throws BusinessException { RegisterVO regvo = (RegisterVO) aggVO.getParentVO(); - - AggCenteroccupyctVO[] aggCenteroccupyctVO = ((ICenteroccupyctManageService) NCLocator.getInstance() - .lookup(ICenteroccupyctManageService.class)).queryCenteroccupyctVOByPk_Srcbill(regvo.getPk_register()); - + // 根据来源单据主键查出占用费聚合VO + AggCenteroccupyctVO[] aggCenteroccupyctVO = NCLocator.getInstance().lookup(ICenteroccupyctManageService.class) + .queryCenteroccupyctVOByPk_Srcbill(regvo.getPk_register()); + // 勾选计算费用,新增占用费计算记录 if (aggCenteroccupyctVO != null) { - ((ICenteroccupyctManageService) NCLocator.getInstance().lookup(ICenteroccupyctManageService.class)) - .delete(aggCenteroccupyctVO); + NCLocator.getInstance().lookup(ICenteroccupyctManageService.class).delete(aggCenteroccupyctVO); } } + /** + * 作废 + * + * @param aggvo + * @throws BusinessException + */ + @Override public AggRegisterVO disableGatherbill(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); - - if ("signinput".equals(aggvo.getparentVO().getGathertype())) { - ((IBeforeRegisterManageService) NCLocator.getInstance().lookup(IBeforeRegisterManageService.class)) - .undoWhenDeleteGather(aggvo.getparentVO()); + // 如果是待签收生成的,需要将状态回退为未生成 + if(FbmBusConstant.GATHER_TYPE_SIGNINPUT.equals(aggvo.getparentVO().getGathertype())) { + NCLocator.getInstance().lookup(IBeforeRegisterManageService.class).undoWhenDeleteGather(aggvo.getparentVO()); } - - doBeforeDisableValidator(aggvo); + // 作废前校验 + this.doBeforeDisableValidator(aggvo); RegisterVO registerVO = aggvo.getparentVO(); - + // 更新作废标识及作废信息 registerVO.setDisuseflag(UFBoolean.TRUE); - FbmPrivateUtil.updateAggVO(aggvo, 1); - + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // 设置票据状态 作废后单据不可用,票据返回到已开票状态 IStatusControlStrategy strategy = new DisableGather(registerVO); StatusControlProcess.getInstance().process(strategy); return (AggRegisterVO) FbmPrivateUtil.queryAggvoByPK(aggvo); } + /** + * 作废前校验 + * + * @param aggvo + * @throws BusinessException + */ private void doBeforeDisableValidator(AggRegisterVO aggVO) throws BusinessException { if (aggVO == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0232")); - } - - RegisterVO payvo = (RegisterVO) aggVO.getParentVO(); - if (payvo == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0232")); - } - - if (payvo.getElcpaymentstatus() == null - || !payvo.getElcpaymentstatus().equals(Integer.valueOf(PaymentStatusEnum.TRADEFAIL.toIntValue()))) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0259")); - } - - if (payvo.getOnlinebankflag() == null || !payvo.getOnlinebankflag().booleanValue()) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0347")); - } - - if (payvo.getDisuseflag() != null && payvo.getDisuseflag().booleanValue()) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0239")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0232")/* @res "当前操作单据不能为空!" */); + } else { + RegisterVO payvo = (RegisterVO) aggVO.getParentVO(); + if (payvo == null) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0232")/* @res "当前操作单据不能为空!" */); + } else { + if (payvo.getElcpaymentstatus() == null + || !(payvo.getElcpaymentstatus().equals(PaymentStatusEnum.TRADEFAIL.toIntValue()))) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0259")/* + * @res "不能确认该单据交易失败,不能作废!" + */); + } else if (payvo.getOnlinebankflag() == null || !(payvo.getOnlinebankflag().booleanValue())) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0347")/* + * @res "该单据没有勾选网银,不能作废!" + */); + } + // 该单据已经被作废,不能重复作废! + else if (payvo.getDisuseflag() != null && payvo.getDisuseflag().booleanValue()) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0239")/* + * @res "该单据已经被作废,不能重复作废!" + */); + } + } } } + /** + * 取消作废 + * + * @param aggvo + * @throws BusinessException + */ + @Override public AggRegisterVO cancelDisableGatherbill(AggRegisterVO aggvo) throws BusinessException { + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); - - doBeforeCancelDisableValidator(aggvo); - - if ("signinput".equals(aggvo.getparentVO().getGathertype())) { - ((IBeforeRegisterManageService) NCLocator.getInstance().lookup(IBeforeRegisterManageService.class)) - .doWhenUnDisableGather(aggvo.getparentVO()); + // 取消作废前校验 + this.doBeforeCancelDisableValidator(aggvo); + // 如果是待签收生成的,需要将状态恢复为已生成 + if(FbmBusConstant.GATHER_TYPE_SIGNINPUT.equals(aggvo.getparentVO().getGathertype())) { + NCLocator.getInstance().lookup(IBeforeRegisterManageService.class).doWhenUnDisableGather(aggvo.getparentVO()); } RegisterVO registerVO = (RegisterVO) aggvo.getParentVO(); - + // 更新作废标识及作废信息 +// registerVO.setDisableflag(UFBoolean.FALSE); + // 作废 registerVO.setDisuseflag(UFBoolean.FALSE); - + // 清空作废原因 registerVO.setDisablenote(null); - + // 删除作废人 registerVO.setDisableuser(null); - + // 删除作废时间 registerVO.setDisabledate(null); - FbmPrivateUtil.updateAggVO(aggvo, 1); - + FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // 设置票据状态 票据已开票状态到在付票状态(添加票据台账记录信息) IStatusControlStrategy strategy = new CancelDisableGather(registerVO); StatusControlProcess.getInstance().process(strategy); return (AggRegisterVO) FbmPrivateUtil.queryAggvoByPK(aggvo); } + /** + * 取消作废前校验 + * + * @param aggvo + * @throws BusinessException + */ private void doBeforeCancelDisableValidator(AggRegisterVO aggVO) throws BusinessException { if (aggVO == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0232")); - } - - RegisterVO payvo = (RegisterVO) aggVO.getParentVO(); - if (payvo == null) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0232")); - } - - if (payvo.getDisuseflag() != null && !payvo.getDisuseflag().booleanValue()) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0027")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0232")/* @res "当前操作单据不能为空!" */); + } else { + RegisterVO payvo = (RegisterVO) aggVO.getParentVO(); + if (payvo == null) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0232")/* @res "当前操作单据不能为空!" */); + } else { + // 该单据没有被作废,不能取消作废! + if (payvo.getDisuseflag() != null && !(payvo.getDisuseflag().booleanValue())) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", + "03618ncc-0027")/* @res "该单据未被作废,不能取消作废!" */); + } + } } } + /** + * 判断是否是电票 + * + * @param pk_register + * @param noteClass + * @return + */ private boolean isEcdNoteClass(String pk_register, Map noteClassMap) { if (noteClassMap.containsKey(pk_register)) { - return ((Boolean) noteClassMap.get(pk_register)).booleanValue(); + return noteClassMap.get(pk_register); + } else { + Boolean isEcd = FbmPublicUtil.isEcdNoteClass(pk_register); + noteClassMap.put(pk_register, isEcd); + return isEcd; } - Boolean isEcd = Boolean.valueOf(FbmPublicUtil.isEcdNoteClass(pk_register)); - noteClassMap.put(pk_register, isEcd); - return isEcd.booleanValue(); } - private boolean isJSYH(String pk_bankdoc, Map bankMap) { + /** + * 判断是否是建设银行 + * + * @param pk_bankdoc + * @param bankMap + * @return + * @throws BusinessException + */ + private boolean isJSYH(String pk_bankdoc, Map bankMap) throws BusinessException { if (bankMap.containsKey(pk_bankdoc)) { - return ((Boolean) bankMap.get(pk_bankdoc)).booleanValue(); + return bankMap.get(pk_bankdoc); + } else { + Boolean isJSYH = EFbmBusConstant.JSYH.equals( + NCLocator.getInstance().lookup(IBankdocQueryService.class).queryBanktypePkByBankdocPk(pk_bankdoc)); + bankMap.put(pk_bankdoc, isJSYH); + return isJSYH; } - Boolean isJSYH = false; - try { - isJSYH = Boolean.valueOf("0001Z010000000000363" - .equals(((IBankdocQueryService) NCLocator.getInstance().lookup(IBankdocQueryService.class)) - .queryBanktypePkByBankdocPk(pk_bankdoc))); - } catch (BusinessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - bankMap.put(pk_bankdoc, isJSYH); - return isJSYH.booleanValue(); } private void checkSagaStatus(AggRegisterVO aggvo) throws BusinessException { if (aggvo != null && aggvo.getParentVO() != null) { CheckInfo info = new CheckInfo(); - info.setPkfieldName("pk_register"); + info.setPkfieldName(RegisterVO.PK_REGISTER); info.setTableName(RegisterVO.getDefaultTableName()); info.setPks(new String[] { aggvo.getPrimaryKey() }); FbmPubPublicServiceProxy.getSagaStatusCheckService().checkSagaStatus(new CheckInfo[] { info }); @@ -1884,7 +2421,7 @@ public class GatherManageServiceImpl implements IGatherManageService { private void checkSagaStatus(AggRegisterVO[] aggVOs) throws BusinessException { if (aggVOs != null && aggVOs.length > 0) { CheckInfo info = new CheckInfo(); - info.setPkfieldName("pk_register"); + info.setPkfieldName(RegisterVO.PK_REGISTER); info.setTableName(RegisterVO.getDefaultTableName()); List pkList = new ArrayList(); for (AggRegisterVO aggvo : aggVOs) { @@ -1892,17 +2429,18 @@ public class GatherManageServiceImpl implements IGatherManageService { String pk_register = parentvo.getPk_register(); pkList.add(pk_register); } - info.setPks((String[]) pkList.toArray(new String[pkList.size()])); + info.setPks(pkList.toArray(new String[pkList.size()])); FbmPubPublicServiceProxy.getSagaStatusCheckService().checkSagaStatus(new CheckInfo[] { info }); } } + @Override public AggregatedValueObject combinGatherbill(String[] pk_registers, String pk_billtypecode) throws BusinessException { - IGatherQueryService gatherService = (IGatherQueryService) NCLocator.getInstance() - .lookup(IGatherQueryService.class); + // 根据主键查询相关VO + IGatherQueryService gatherService = NCLocator.getInstance().lookup(IGatherQueryService.class); AggRegisterVO[] aggVOs = gatherService.getAggVOsByPKs(pk_registers); - + // 检验相关数据 if (ArrayUtils.isEmpty(aggVOs)) { throw new BusinessException("传入AggRegisterVO数组为空,请检查"); } @@ -1913,23 +2451,31 @@ public class GatherManageServiceImpl implements IGatherManageService { AggregatedValueObject aggVO = null; if ("36J7".equals(pk_billtypecode)) { - + // 组合委托收款单 aggVO = commissionBill(aggVOs, pk_billtypecode); } else if ("F2".equals(pk_billtypecode)) { - + // 组合收款单 aggVO = gatheringbill(aggVOs, pk_billtypecode); } else if ("F4".equals(pk_billtypecode)) { - + // 组合收款结算单 aggVO = recbill(aggVOs, pk_billtypecode); } return aggVO; } + /** + * 收票登记关联资金收款单,组装资金收款单VO + * @param aggVOs + * @param pk_billtypecode + * @return 收款结算单 + * @throws BusinessException + */ private AggregatedValueObject recbill(AggRegisterVO[] aggVOs, String pk_billtypecode) throws BusinessException { +// String funcode = "36070RBR";// 功能编码 String pk_desbilltype = "F4"; - - String billclass = "sj"; - +// String tradetype = "D4"; + String billclass = "sj";// 单据大类 + RegisterVO pvo = aggVOs[0].getparentVO(); String pk_org = pvo.getPk_org(); String pk_org_v = pvo.getPk_org_v(); @@ -1937,171 +2483,208 @@ public class GatherManageServiceImpl implements IGatherManageService { String pk_curr = pvo.getPk_curr(); String paybillunit = pvo.getPaybillunit(); String paybillunit_v = pvo.getPaybillunit_v(); + // begin_luxiong7_20181205_电票签收后才能关联,不需要此校验 + // NCC-178601 前端已经进行控制,这里不需要校验,另外这个校验不对 +// String fbmbilltype = pvo.getFbmbilltype(); +// if (fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BANK) || fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BUSI)) {// 非电票需要此校验 +// GatherCheckUtil.checkHasReceiveComplete(aggVOs); +// } + // bend_luxiong7_20181205_电票签收后才能关联,不需要此校验 if (!FbmPublicUtil.isCMPInitDateEnable(pk_group, pk_org)) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0107")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0107")/* @res "现金管理模块未启用" *//* @res "现金管理模块未启用!" */); } - if (!FbmPublicUtil.isTogatherWithOther(pk_org, "FBM2002")) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3637fbm_add_0", "03637fbm_add-0004")); + if (!FbmPublicUtil.isTogatherWithOther(pk_org, FBMSysParamConst.INTEGRATED_APPLY)) {// luxiong7 + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3637fbm_add_0", + "03637fbm_add-0004")/* @res "票据管理与现金管理或应收应付没有集成应用,不能执行此操作!" */); } +// UFDate busidate = TMBusiDateManager.getTMBusiDate(); UFDate busidate = AppContext.getInstance().getBusiDate(); + // 取得组织本币汇率 UFDouble orgcurrrate = TMCurrencyUtil.getOrgCurrRate(pk_org, pk_curr, busidate); - + // 取得集团本币汇率 UFDouble glcurrrate = TMCurrencyUtil.getGroupCurrRate(pk_group, pk_org, pk_curr, busidate); - + // 取得全局本币汇率 UFDouble gllcurrrate = TMCurrencyUtil.getGlobalCurrRate(pk_org, pk_curr, busidate); - + // 原币金额合计 UFDouble summoney_cr = new UFDouble(); - + // 组织本币金额合计 UFDouble sumolcmoney_cr = new UFDouble(); - + // 集团本币金额合计 UFDouble sumglcmoney_cr = new UFDouble(); - + // 全局本币金额合计 UFDouble sumgllcmoney_cr = new UFDouble(); - CustSupplierVO custSupplierVO = FBMPrivateServiceProxy.getCustSupQueryService() - .queryCustSupVOByPk(pvo.getPaybillunit()); + CustSupplierVO custSupplierVO = FBMPrivateServiceProxy.getCustSupQueryService().queryCustSupVOByPk(pvo.getPaybillunit()); RecBillAggVO recbillaggvo = new RecBillAggVO(); RecBillDetailVO[] childrenvos = new RecBillDetailVO[aggVOs.length]; AggRegisterVO aggvo = null; for (int i = 0; i < childrenvos.length; i++) { aggvo = aggVOs[i]; childrenvos[i] = new RecBillDetailVO(); - childrenvos[i].setPk_org(pk_org); + childrenvos[i].setPk_org(pk_org);// 主组织 childrenvos[i].setPk_org_v(pk_org_v); - childrenvos[i].setPk_fiorg(pk_org); + childrenvos[i].setPk_fiorg(pk_org);// 财务组织pk_fiorg为票据主组织 childrenvos[i].setPk_fiorg_v(pk_org_v); - childrenvos[i].setPk_group(pk_group); - - childrenvos[i].setNote_type(aggvo.getparentVO().getFbmbilltype()); - childrenvos[i].setNote_no(aggvo.getparentVO().getPk_register()); - childrenvos[i].setPk_currtype(pk_curr); - childrenvos[i].setDirection(Integer.valueOf(1)); - childrenvos[i].setRec_primal(aggvo.getparentVO().getMoney()); - childrenvos[i].setLocal_rate(orgcurrrate); - childrenvos[i].setGroup_rate(glcurrrate); - childrenvos[i].setGlobal_rate(gllcurrrate); - childrenvos[i].setBill_date(busidate); - childrenvos[i].setCreator(getUser()); - childrenvos[i].setCreationtime(AppContext.getInstance().getServerTime()); - - childrenvos[i].setBill_type(pk_desbilltype); - childrenvos[i].setBillclass(billclass); - + childrenvos[i].setPk_group(pk_group);// 集团 +// childrenvos[i].setPrepay(0);// 收款性质为应收款 + childrenvos[i].setNote_type(aggvo.getparentVO().getFbmbilltype());// 票据类型note_type + childrenvos[i].setNote_no(aggvo.getparentVO().getPk_register());// 票据主键 + childrenvos[i].setPk_currtype(pk_curr);// 币种 + childrenvos[i].setDirection(1);// 方向 1=收,-1=付 + childrenvos[i].setRec_primal(aggvo.getparentVO().getMoney());// 收款原币金额 rec_primal + childrenvos[i].setLocal_rate(orgcurrrate);// 组织本币汇率local_rate + childrenvos[i].setGroup_rate(glcurrrate);// 集团本币汇率group_rate + childrenvos[i].setGlobal_rate(gllcurrrate);// 全局本币汇率global_rate + childrenvos[i].setBill_date(busidate);// 单据日期bill_date为业务日期 + childrenvos[i].setCreator(getUser());// 创建人为当前登录用户 + childrenvos[i].setCreationtime(AppContext.getInstance().getServerTime());// 创建时间为系统时间 +// childrenvos[i].setBusidate(busidate);// 起算日期为业务日期 + childrenvos[i].setBill_type(pk_desbilltype);// 单据类型bill_type + childrenvos[i].setBillclass(billclass);// 单据大类为收款结算单 + //设置供应商和客户 if (custSupplierVO != null && custSupplierVO.getCustsuptype() != null) { if (custSupplierVO.getCustsuptype().intValue() == 2) { childrenvos[i].setPk_supplier(paybillunit); - childrenvos[i].setPkSupplierV(paybillunit_v); - childrenvos[i].setObjecttype(Integer.valueOf(1)); - } else { + childrenvos[i].setPkSupplierV(paybillunit_v); + childrenvos[i].setObjecttype(1);// 往来对象为供应商 + } else if (custSupplierVO.getCustsuptype().intValue() == 1) { childrenvos[i].setPk_customer(paybillunit); childrenvos[i].setPkCustomerV(paybillunit_v); - childrenvos[i].setObjecttype(Integer.valueOf(0)); + childrenvos[i].setObjecttype(0);// 往来对象为客户 + }else{ + childrenvos[i].setPk_customer(paybillunit); + childrenvos[i].setPkCustomerV(paybillunit_v); + //childrenvos[i].setPk_supplier(paybillunit); + //childrenvos[i].setPkSupplierV(paybillunit_v); + childrenvos[i].setObjecttype(0);// 往来对象为客户 } } - + + // 汇率三个字段传表体 childrenvos[i].setOlcratetype(pvo.getOlcratetype()); childrenvos[i].setOlcratecategory(pvo.getOlcratecategory()); childrenvos[i].setOlcratedate(pvo.getOlcratedate()); summoney_cr = summoney_cr.add(aggvo.getparentVO().getMoney()); + // 取得组织本币金额 UFDouble orgmoney = TMCurrencyUtil.getOrgLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), orgcurrrate, busidate, pvo.getOlcratetype()); - + // 设置组织本币金额精度 if (orgmoney != null) { orgmoney = FbmPublicUtil.getOrgDigitmoney(pk_org, pk_curr, orgmoney); sumolcmoney_cr = sumolcmoney_cr.add(orgmoney); } - childrenvos[i].setRec_local(orgmoney); + childrenvos[i].setRec_local(orgmoney);// 收款组织本币金额 rec_local + // 取得集团本币金额 UFDouble glmoney = TMCurrencyUtil.getGroupLocalMoney(pk_group, pk_org, pk_curr, aggvo.getparentVO().getMoney(), glcurrrate, orgcurrrate, busidate); - + // 设置集团本币金额精度 if (glmoney != null) { glmoney = FbmPublicUtil.getGroupDigitmoney(pk_group, pk_org, pk_curr, glmoney); sumglcmoney_cr = sumglcmoney_cr.add(glmoney); } - childrenvos[i].setGroup_local_rec(glmoney); + childrenvos[i].setGroup_local_rec(glmoney);// 收款集团本币金额 group_local_rec + // 取得全局本币金额 UFDouble gllmoney = TMCurrencyUtil.getGlobalLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), gllcurrrate, orgcurrrate, busidate); - + // 设置全局本币金额精度 if (gllmoney != null) { gllmoney = FbmPublicUtil.getGlobalDigitmoney(pk_org, pk_curr, gllmoney); sumgllcmoney_cr = sumgllcmoney_cr.add(gllmoney); } - childrenvos[i].setGlobal_local_rec(glmoney); - + childrenvos[i].setGlobal_local_rec(glmoney);// 收款全局本币金额 + // 2022.07需求:收票登记关联资金收款单带出业务员、业务组织(来自收票登记的业务组织字段)、部门 childrenvos[i].setPk_busiman(aggvo.getparentVO().getPsn()); childrenvos[i].setPk_busiorg(aggvo.getparentVO().getPk_entrustorg()); childrenvos[i].setPk_busiorg_v(aggvo.getparentVO().getPk_entrustorg_v()); childrenvos[i].setPk_dept(aggvo.getparentVO().getDept()); - + //设置区间信息 childrenvos[i].setBillrange(aggvo.getparentVO().getBillrange()); childrenvos[i].setBillrangestart(aggvo.getparentVO().getBillrangestart()); childrenvos[i].setBillrangeend(aggvo.getparentVO().getBillrangeend()); childrenvos[i].setPk_billtypecode(aggvo.getparentVO().getPk_billtypecode()); childrenvos[i].setSubcontractcirculation(aggvo.getparentVO().getSubcontractcirculation()); + } RecBillVO parentvo = new RecBillVO(); - parentvo.setPk_org(pk_org); + parentvo.setPk_org(pk_org);// 主组织 parentvo.setPk_org_v(pk_org_v); - parentvo.setPk_fiorg(pk_org); + parentvo.setPk_fiorg(pk_org);// 财务组织为票据主组织 parentvo.setPk_fiorg_v(pk_org_v); - parentvo.setPk_group(pk_group); - parentvo.setPk_currtype(pk_curr); - parentvo.setBillmaker(getUser()); - parentvo.setBill_date(busidate); - parentvo.setBillmaker_date(busidate); - - parentvo.setCreator(getUser()); - parentvo.setCreationtime(AppContext.getInstance().getServerTime()); - parentvo.setBill_type(pk_desbilltype); - parentvo.setBillclass(billclass); - - parentvo.setSource_flag("8"); - parentvo.setBill_status(Integer.valueOf(-10)); - parentvo.setPrimal_money(summoney_cr); - parentvo.setLocal_rate(orgcurrrate); - parentvo.setGroup_rate(glcurrrate); - parentvo.setGlobal_rate(gllcurrrate); - parentvo.setLocal_money(sumolcmoney_cr); - parentvo.setGroup_local(sumglcmoney_cr); - parentvo.setGlobal_local(sumgllcmoney_cr); - - parentvo.setNote_no(aggvo.getparentVO().getPk_register()); - + parentvo.setPk_group(pk_group);// 集团 + parentvo.setPk_currtype(pk_curr);// 币种 + parentvo.setBillmaker(getUser());// 制单人为当前登录用户 + parentvo.setBill_date(busidate);// 单据日期为业务日期billmaker_date + parentvo.setBillmaker_date(busidate);// 制单日期为业务日期billmaker_date +// parentvo.setBusidate(busidate);// 起算日期为业务日期 + parentvo.setCreator(getUser());// 创建人为当前登录用户 + parentvo.setCreationtime(AppContext.getInstance().getServerTime());// 创建时间为系统时间 + parentvo.setBill_type(pk_desbilltype);// 单据类型 + parentvo.setBillclass(billclass);// 单据大类为收款 +// parentvo.setTrade_type(tradetype);// 交易类型 +// parentvo.setPk_tradetypeid(PfDataCache.getBillType(tradetype) == null ? null +// : PfDataCache.getBillType(tradetype).getPk_billtypeid()); +// parentvo.setSyscode(0);// 所属系统 + parentvo.setSource_flag("8");// 来源系统source_flag (来源于:票据管理) + parentvo.setBill_status(-10);// 单据状态为自由态 + parentvo.setPrimal_money(summoney_cr);// 收款原币金额 + parentvo.setLocal_rate(orgcurrrate);// 组织本币汇率 + parentvo.setGroup_rate(glcurrrate);// 集团本币汇率 + parentvo.setGlobal_rate(gllcurrrate);// 全局本币汇率 + parentvo.setLocal_money(sumolcmoney_cr);// 收款组织本币金额 + parentvo.setGroup_local(sumglcmoney_cr);// 收款集团本币金额 + parentvo.setGlobal_local(sumgllcmoney_cr);// 收款全局本币金额 + // 票据号 + parentvo.setNote_no(aggvo.getparentVO().getPk_register());// 票据主键 + // 票据类型 parentvo.setNote_type(aggvo.getparentVO().getFbmbilltype()); - + //设置供应商和客户 if (custSupplierVO != null && custSupplierVO.getCustsuptype() != null) { if (custSupplierVO.getCustsuptype().intValue() == 2) { parentvo.setPk_supplier(paybillunit); - parentvo.setPkSupplierV(paybillunit_v); - parentvo.setObjecttype(Integer.valueOf(1)); - } else { + parentvo.setPkSupplierV(paybillunit_v); + parentvo.setObjecttype(1);// 往来对象为供应商 + } else if (custSupplierVO.getCustsuptype().intValue() == 1) { parentvo.setPk_customer(paybillunit); parentvo.setPkCustomerV(paybillunit_v); - parentvo.setObjecttype(Integer.valueOf(0)); + parentvo.setObjecttype(0);// 往来对象为客户 + }else{ + parentvo.setPk_customer(paybillunit); + parentvo.setPkCustomerV(paybillunit_v); + //parentvo.setPk_supplier(paybillunit); + //parentvo.setPkSupplierV(paybillunit_v); + parentvo.setObjecttype(0);// 往来对象为客户 } } recbillaggvo.setParent(parentvo); recbillaggvo.setChildrenVO(childrenvos); return recbillaggvo; + } + /** + * 收票登记关联收款单,组装收款单VO + * @param aggVOs + * @param pk_billtypecode + * @return 收款单的聚合VO + * @throws BusinessException + */ private AggregatedValueObject gatheringbill(AggRegisterVO[] aggVOs, String pk_billtypecode) throws BusinessException { +// String funcode = "20060GBR"; String pk_desbilltype = "F2"; - +// String tradetype = "D2"; String billclass = "sk"; - IDeptPubService deptSrv = (IDeptPubService) NCLocator.getInstance().lookup(IDeptPubService.class); + IDeptPubService deptSrv = NCLocator.getInstance().lookup(IDeptPubService.class); RegisterVO pvo = aggVOs[0].getparentVO(); String pk_org = pvo.getPk_org(); @@ -2111,163 +2694,197 @@ public class GatherManageServiceImpl implements IGatherManageService { String paybillunit = pvo.getPaybillunit(); String gatherplanitem = pvo.getGatherplanitem(); String paybillunit_v = pvo.getPaybillunit_v(); + + CustSupplierVO custSupplierVO = FBMPrivateServiceProxy.getCustSupQueryService().queryCustSupVOByPk(pvo.getPaybillunit()); - CustSupplierVO custSupplierVO = FBMPrivateServiceProxy.getCustSupQueryService() - .queryCustSupVOByPk(pvo.getPaybillunit()); - + // begin_luxiong7_20181205_电票签收后才能关联,不需要此校验 String fbmbilltype = pvo.getFbmbilltype(); - if (fbmbilltype.equals("FBMTZ6E0000000000001") || fbmbilltype.equals("FBMTZ6E0000000000002")) { + if (fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BANK) || fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BUSI)) {// 非电票需要此校验 GatherCheckUtil.checkHasReceiveComplete(aggVOs); } + // bend_luxiong7_20181205_电票签收后才能关联,不需要此校验 if (!FbmPublicUtil.isAREnable(pk_group)) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3637fbm_add_0", "03637fbm_add-0003")); + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3637fbm_add_0", + "03637fbm_add-0003")/* @res "应收模块未启用!" */); } - if (!FbmPublicUtil.isTogatherWithOther(pk_org, "FBM2002")) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3637fbm_add_0", "03637fbm_add-0004")); + if (!FbmPublicUtil.isTogatherWithOther(pk_org, FBMSysParamConst.INTEGRATED_APPLY)) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3637fbm_add_0", + "03637fbm_add-0004")/* @res "票据管理与现金管理或应收应付没有集成应用,不能执行此操作!" */); } +// UFDate busidate = TMBusiDateManager.getTMBusiDate(); UFDate busidate = AppContext.getInstance().getBusiDate(); + // 取得组织本币汇率 UFDouble orgcurrrate = TMCurrencyUtil.getOrgCurrRate(pk_org, pk_curr, busidate); - + // 取得集团本币汇率 UFDouble glcurrrate = TMCurrencyUtil.getGroupCurrRate(pk_group, pk_org, pk_curr, busidate); - + // 取得全局本币汇率 UFDouble gllcurrrate = TMCurrencyUtil.getGlobalCurrRate(pk_org, pk_curr, busidate); - + // 原币金额合计 UFDouble summoney_cr = new UFDouble(); - + // 组织本币金额合计 UFDouble sumolcmoney_cr = new UFDouble(); - + // 集团本币金额合计 UFDouble sumglcmoney_cr = new UFDouble(); - + // 全局本币金额合计 UFDouble sumgllcmoney_cr = new UFDouble(); AggGatheringBillVO araggvo = new AggGatheringBillVO(); GatheringBillItemVO[] childrenvos = new GatheringBillItemVO[aggVOs.length]; - + + // 收款单表体部分赋值 for (int i = 0; i < childrenvos.length; i++) { AggRegisterVO aggvo = aggVOs[i]; childrenvos[i] = new GatheringBillItemVO(); - childrenvos[i].setPk_org(pk_org); + childrenvos[i].setPk_org(pk_org);// 主组织 childrenvos[i].setPk_org_v(pk_org_v); - childrenvos[i].setSett_org(pk_org); + childrenvos[i].setSett_org(pk_org);// 结算财务组织为票据主组织 childrenvos[i].setSett_org_v(pk_org_v); - childrenvos[i].setPk_group(pk_group); - childrenvos[i].setChecktype(aggvo.getparentVO().getFbmbilltype()); - childrenvos[i].setCheckno(aggvo.getparentVO().getPk_register()); - childrenvos[i].setBillrangestart(aggvo.getparentVO().getBillrangestart()); - childrenvos[i].setBillrangeend(aggvo.getparentVO().getBillrangeend()); - childrenvos[i].setPk_currtype(pk_curr); - childrenvos[i].setDirection(Integer.valueOf(-1)); - childrenvos[i].setMoney_cr(aggvo.getparentVO().getMoney()); - childrenvos[i].setRate(orgcurrrate); - childrenvos[i].setGrouprate(glcurrrate); - childrenvos[i].setGlobalrate(gllcurrrate); - childrenvos[i].setBilldate(busidate); - childrenvos[i].setBusidate(busidate); - childrenvos[i].setPk_billtype(pk_desbilltype); - childrenvos[i].setBillclass(billclass); - + childrenvos[i].setPk_group(pk_group);// 集团childrenvos[i].setPrepay(0);// 收款性质为应收款 + childrenvos[i].setChecktype(aggvo.getparentVO().getFbmbilltype());// 票据类型 + childrenvos[i].setCheckno(aggvo.getparentVO().getPk_register());// 票据主键 + childrenvos[i].setPk_currtype(pk_curr);// 币种 + childrenvos[i].setDirection(-1); + childrenvos[i].setMoney_cr(aggvo.getparentVO().getMoney());// 原币金额 + childrenvos[i].setRate(orgcurrrate);// 组织本币汇率 + childrenvos[i].setGrouprate(glcurrrate);// 集团本币汇率 + childrenvos[i].setGlobalrate(gllcurrrate);// 全局本币汇率 + childrenvos[i].setBilldate(busidate);// 制单日期为业务日期 + childrenvos[i].setBusidate(busidate);// 起算日期为业务日期 + childrenvos[i].setPk_billtype(pk_desbilltype);// 单据类型 + childrenvos[i].setBillclass(billclass);// 单据大类为收款 + // 设置供应商和客户 if (custSupplierVO != null && custSupplierVO.getCustsuptype() != null) { if (custSupplierVO.getCustsuptype().intValue() == 2) { childrenvos[i].setSupplier(paybillunit); - childrenvos[i].setSupplier_v(paybillunit); - childrenvos[i].setObjtype(Integer.valueOf(1)); - } else { + childrenvos[i].setSupplier_v(paybillunit_v); + childrenvos[i].setObjtype(1);// 往来对象为供应商 + } else if (custSupplierVO.getCustsuptype().intValue() == 1){ childrenvos[i].setCustomer(paybillunit); childrenvos[i].setCustomer_v(paybillunit_v); - childrenvos[i].setObjtype(Integer.valueOf(0)); + childrenvos[i].setObjtype(0);// 往来对象为客户 + }else{ + childrenvos[i].setCustomer(paybillunit); + childrenvos[i].setCustomer_v(paybillunit_v); + //childrenvos[i].setSupplier(paybillunit); + //childrenvos[i].setSupplier_v(paybillunit_v); + childrenvos[i].setObjtype(0);// 往来对象为客户 } } summoney_cr = summoney_cr.add(aggvo.getparentVO().getMoney()); + // 取得组织本币金额 UFDouble orgmoney = TMCurrencyUtil.getOrgLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), orgcurrrate, busidate, pvo.getOlcratetype()); - + // 设置组织本币金额精度 if (orgmoney != null) { orgmoney = FbmPublicUtil.getOrgDigitmoney(pk_org, pk_curr, orgmoney); sumolcmoney_cr = sumolcmoney_cr.add(orgmoney); } childrenvos[i].setLocal_money_cr(orgmoney); + // 取得集团本币金额 UFDouble glmoney = TMCurrencyUtil.getGroupLocalMoney(pk_group, pk_org, pk_curr, aggvo.getparentVO().getMoney(), glcurrrate, orgcurrrate, busidate); - + // 设置集团本币金额精度 if (glmoney != null) { glmoney = FbmPublicUtil.getGroupDigitmoney(pk_group, pk_org, pk_curr, glmoney); sumglcmoney_cr = sumglcmoney_cr.add(glmoney); } childrenvos[i].setGroupcrebit(glmoney); + // 取得全局本币金额 UFDouble gllmoney = TMCurrencyUtil.getGlobalLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), gllcurrrate, orgcurrrate, busidate); - + // 设置全局本币金额精度 if (gllmoney != null) { gllmoney = FbmPublicUtil.getGlobalDigitmoney(pk_org, pk_curr, gllmoney); sumgllcmoney_cr = sumgllcmoney_cr.add(gllmoney); } childrenvos[i].setGlobalcrebit(gllmoney); + // 2022.07需求:收票登记关联收款单时带出业务员、业务组织(来自收票登记的业务组织字段)及业务部门 childrenvos[i].setPk_psndoc(aggvo.getparentVO().getPsn()); childrenvos[i].setSo_org(aggvo.getparentVO().getPk_entrustorg()); childrenvos[i].setSo_org_v(aggvo.getparentVO().getPk_entrustorg_v()); childrenvos[i].setSo_deptid(aggvo.getparentVO().getDept()); - + //设置区间信息 + //childrenvos[i].setBillrange(aggvo.getparentVO().getBillrange()); + childrenvos[i].setBillrangestart(aggvo.getparentVO().getBillrangestart()); + childrenvos[i].setBillrangeend(aggvo.getparentVO().getBillrangeend()); String[] deptv = deptSrv.queryPkVidByIdAndDateArea(aggvo.getparentVO().getDept(), busidate.toString()); if (ArrayUtils.isNotEmpty(deptv)) { childrenvos[i].setSo_deptid_v(deptv[0]); } } + // 收款单表头部分赋值 GatheringBillVO parentvo = new GatheringBillVO(); - parentvo.setPk_org(pk_org); + parentvo.setPk_org(pk_org);// 主组织 parentvo.setPk_org_v(pk_org_v); - parentvo.setSett_org(pk_org); + parentvo.setSett_org(pk_org);// 结算财务组织为票据主组织 parentvo.setSett_org_v(pk_org_v); - parentvo.setPk_group(pk_group); - parentvo.setBillmaker(getUser()); - parentvo.setBilldate(busidate); - parentvo.setBusidate(busidate); - parentvo.setCreator(getUser()); - parentvo.setCreationtime(AppContext.getInstance().getServerTime()); - parentvo.setPk_billtype(pk_desbilltype); - parentvo.setBillclass(billclass); - parentvo.setSyscode(Integer.valueOf(0)); - parentvo.setSrc_syscode(Integer.valueOf(0)); - parentvo.setBillstatus(Integer.valueOf(-1)); - parentvo.setMoney(summoney_cr); - parentvo.setRate(orgcurrrate); - parentvo.setGrouprate(glcurrrate); - parentvo.setGlobalrate(gllcurrrate); - parentvo.setLocal_money(sumolcmoney_cr); - parentvo.setGrouplocal(sumglcmoney_cr); - parentvo.setGloballocal(sumgllcmoney_cr); - parentvo.setBankrollprojet(gatherplanitem); - + parentvo.setPk_group(pk_group);// 集团parentvo.setPk_currtype(pk_curr);// 币种 + parentvo.setBillmaker(getUser());// 制单人为当前登录用户 + parentvo.setBilldate(busidate);// 制单日期为业务日期 + parentvo.setBusidate(busidate);// 起算日期为业务日期 + parentvo.setCreator(getUser());// 创建人为当前登录用户 + parentvo.setCreationtime(AppContext.getInstance().getServerTime());// 创建时间为系统时间 + parentvo.setPk_billtype(pk_desbilltype);// 单据类型 + parentvo.setBillclass(billclass);// 单据大类为收款 + parentvo.setSyscode(0);// 所属系统 + parentvo.setSrc_syscode(0);// 来源系统 + parentvo.setBillstatus(-1);// 单据状态为自由态 + parentvo.setMoney(summoney_cr);// 原币金额合计 + parentvo.setRate(orgcurrrate);// 组织本币汇率 + parentvo.setGrouprate(glcurrrate);// 集团本币汇率 + parentvo.setGlobalrate(gllcurrrate);// 全局本币汇率 + parentvo.setLocal_money(sumolcmoney_cr);// 组织本币金额合计 + parentvo.setGrouplocal(sumglcmoney_cr);// 集团本币金额合计 + parentvo.setGloballocal(sumgllcmoney_cr);// 全局本币金额合计 + parentvo.setBankrollprojet(gatherplanitem);// 资金计划项目 + // 设置供应商和客户 if (custSupplierVO != null && custSupplierVO.getCustsuptype() != null) { if (custSupplierVO.getCustsuptype().intValue() == 2) { + //供应商 parentvo.setSupplier(paybillunit); - parentvo.setSupplier_v(paybillunit); - parentvo.setObjtype(Integer.valueOf(1)); - } else { + parentvo.setSupplier_v(paybillunit_v); + parentvo.setObjtype(1);// 往来对象为供应商 + } else if (custSupplierVO.getCustsuptype().intValue() == 1){ + //客户 parentvo.setCustomer(paybillunit); parentvo.setCustomer_v(paybillunit_v); - parentvo.setObjtype(Integer.valueOf(0)); + parentvo.setObjtype(0);// 往来对象为客户 + }else{ + //客商 + parentvo.setCustomer(paybillunit); + parentvo.setCustomer_v(paybillunit_v); + //parentvo.setSupplier(paybillunit); + //parentvo.setSupplier_v(paybillunit_v); + parentvo.setObjtype(0);// 往来对象为客户 } } araggvo.setParentVO(parentvo); araggvo.setChildrenVO(childrenvos); return araggvo; + } + /** + * 收票登记关联委托收款单,组装委托收款单VO + * @param aggVOs + * @param pk_billtypecode + * @return 委托收款单的聚合VO + * @throws BusinessException + */ private AggregatedValueObject commissionBill(AggRegisterVO[] aggVOs, String pk_billtypecode) throws BusinessException { - String pk_vsourcebilltype = "36H1"; +// String funcode = "36300TG"; // 功能编码 + String pk_vsourcebilltype = "36H1"; // 来源单据类型 if (aggVOs != null && aggVOs.length > 0) { RegisterVO pvo = aggVOs[0].getparentVO(); String pk_org = pvo.getPk_org(); @@ -2275,368 +2892,480 @@ public class GatherManageServiceImpl implements IGatherManageService { String pk_group = pvo.getPk_group(); String pk_curr = pvo.getPk_curr(); - boolean isFundOrg = ((IFundOrgPubService) NCLocator.getInstance().lookup(IFundOrgPubService.class)) - .isFundOrg(pk_org); - if (!isFundOrg) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0089")); + // begin_luxiong7_20181214_只有资金组织才能关联委托收款 + boolean isFundOrg = NCLocator.getInstance().lookup(IFundOrgPubService.class).isFundOrg(pk_org); + if (!isFundOrg) {// 非资金组织不生成 + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0089")/* @res "当前财务组织不是资金组织,无法关联生成委托收款单!" */); } + // end_luxiong7_20181214_只有资金组织才能关联委托收款 + // begin_luxiong7_20181205_电票签收后才能关联,不需要此校验 String fbmbilltype = pvo.getFbmbilltype(); - if (fbmbilltype.equals("FBMTZ6E0000000000001") || fbmbilltype.equals("FBMTZ6E0000000000002")) { + if (fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BANK) + || fbmbilltype.equals(FbmBusConstant.PKNOTETYPE_BUSI)) {// 非电票需要此校验 GatherCheckUtil.checkHasReceiveComplete(aggVOs); } + // bend_luxiong7_20181205_电票签收后才能关联,不需要此校验 if (!FbmPublicUtil.isFTSEnable(pk_group)) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0090")/* @res "结算中心未启用" *//* @res "结算中心未启用!" */); + } + + if (!FbmPublicUtil.isTogatherWithOther(pk_org, FBMSysParamConst.INTEGRATED_APPLY)) {// luxiong7 + // 票据业务是否与结算中心集成应用 throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0090")); - } - - if (!FbmPublicUtil.isTogatherWithOther(pk_org, "FBM2002")) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", - "03618fbm_add02-0091") + "FBM2002" - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0091")); + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0091") + /* @res "当前组织业务参数:" */ + FBMSysParamConst.INTEGRATED_APPLY + + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0092")/* @res "没有启用,请检查" */); } +// UFDate busidate = TMBusiDateManager.getTMBusiDate(); UFDate busidate = AppContext.getInstance().getBusiDate(); + // 取得组织本币汇率 UFDouble orgcurrrate = TMCurrencyUtil.getOrgCurrRate(pk_org, pk_curr, busidate); - + // 取得集团本币汇率 UFDouble glcurrrate = TMCurrencyUtil.getGroupCurrRate(pk_group, pk_org, pk_curr, busidate); - + // 取得全局本币汇率 UFDouble gllcurrrate = TMCurrencyUtil.getGlobalCurrRate(pk_org, pk_curr, busidate); - + // 原币金额合计 UFDouble summoney_cr = new UFDouble(); - + // 组织本币金额合计 UFDouble sumolcmoney_cr = new UFDouble(); - + // 集团本币金额合计 UFDouble sumglcmoney_cr = new UFDouble(); - + // 全局本币金额合计 UFDouble sumgllcmoney_cr = new UFDouble(); AggGatheringVO aggVO = new AggGatheringVO(); - GatherFinanceVO[] childrenvos = new GatherFinanceVO[aggVOs.length]; - GatherFundVO[] fund_childrenvos = new GatherFundVO[aggVOs.length]; + GatherFinanceVO[] childrenvos = new GatherFinanceVO[aggVOs.length];// 委收财务信息实体 GatherFinanceVO + GatherFundVO[] fund_childrenvos = new GatherFundVO[aggVOs.length];// 委收资金信息实体 GatherFundVO AggRegisterVO aggvo = null; + // 委收财务信息实体 GatherFinanceVO for (int i = 0; i < childrenvos.length; i++) { aggvo = aggVOs[i]; childrenvos[i] = new GatherFinanceVO(); - childrenvos[i].setPk_org(pk_org); + childrenvos[i].setPk_org(pk_org);// 主组织 childrenvos[i].setPk_org_v(pk_org_v); - childrenvos[i].setPk_group(pk_group); - - childrenvos[i].setOlcrate(orgcurrrate); - childrenvos[i].setGlcrate(glcurrrate); - childrenvos[i].setGllcrate(gllcurrrate); - childrenvos[i].setFundtype(null); - childrenvos[i].setPk_balatype(null); - childrenvos[i].setVsourcecode(aggvo.getparentVO().getVbillno()); - childrenvos[i].setRecmodule("FBM"); - childrenvos[i].setPk_srcbill(aggvo.getparentVO().getPk_register()); - childrenvos[i].setAddress_p(null); - - childrenvos[i].setBankname_p(null); - - childrenvos[i].setPk_bankname_p(null); - childrenvos[i].setOrigetmode("note"); - childrenvos[i].setPk_company_p(pvo.getPaybillunit()); - childrenvos[i].setPk_company_p_v(pvo.getPaybillunit_v()); + childrenvos[i].setPk_group(pk_group);// 集团 +// childrenvos[i].setAmount(aggvo.getparentVO().getMoney());// 收款金额 amount + childrenvos[i].setOlcrate(orgcurrrate);// 组织本币汇率local_rate + childrenvos[i].setGlcrate(glcurrrate);// 集团本币汇率group_rate + childrenvos[i].setGllcrate(gllcurrrate);// 全局本币汇率global_rate + childrenvos[i].setFundtype(null);// 货币形态 + childrenvos[i].setPk_balatype(null);// 结算方式 + childrenvos[i].setVsourcecode(aggvo.getparentVO().getVbillno());// 来源单据号 + childrenvos[i].setRecmodule("FBM");// 来源模块 + childrenvos[i].setPk_srcbill(aggvo.getparentVO().getPk_register());// 来源单据标识 + childrenvos[i].setAddress_p(null);// 付款方单位地址 +// childrenvos[i].setBankaccount_p(aggvo.getparentVO().getPaybank());//付款方银行帐号 + childrenvos[i].setBankname_p(null);// 付款方开户银行名称 +// childrenvos[i].setCompany_p(aggvo.getparentVO().getPaybillunit());//付款方单位名称=付票单位 +// childrenvos[i].set+Pk_bankaccount_p(aggvo.getparentVO().getHidepaybankacc());//付款方银行帐号标识 + childrenvos[i].setPk_bankname_p(null);// 付款方开户银行标识 + childrenvos[i].setOrigetmode("note");// 约定收款方式 =票据收款 + childrenvos[i].setPk_company_p(pvo.getPaybillunit());// 付款客商标识 + childrenvos[i].setPk_company_p_v(pvo.getPaybillunit_v());// 付款客商标识 +// childrenvos[i].setPk_financeorg_r(pk_org);// 收款方财务组织 +// childrenvos[i].setPk_financeorg_v(pk_org_v);// 收款方财务组织版本 +// childrenvos[i].setPk_financeplan(aggvo.getparentVO().getGatherplanitem());// 单位收款计划项目 +// childrenvos[i].setPk_inneraccount_r(aggvo.getparentVO().getPk_inbalaacc());//收款方内部账户 pk_inbalaacc summoney_cr = summoney_cr.add(aggvo.getparentVO().getMoney()); + // 取得组织本币金额 UFDouble orgmoney = TMCurrencyUtil.getOrgLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), - orgcurrrate, busidate, pvo.getOlcratetype()); - + orgcurrrate, busidate,pvo.getOlcratetype()); + // 设置组织本币金额精度 if (orgmoney != null) { orgmoney = FbmPublicUtil.getOrgDigitmoney(pk_org, pk_curr, orgmoney); sumolcmoney_cr = sumolcmoney_cr.add(orgmoney); } - childrenvos[i].setOlcamount(orgmoney); + childrenvos[i].setOlcamount(orgmoney);// 收款组织本币金额 rec_local + // 取得集团本币金额 UFDouble glmoney = TMCurrencyUtil.getGroupLocalMoney(pk_group, pk_org, pk_curr, aggvo.getparentVO().getMoney(), glcurrrate, orgcurrrate, busidate); - + // 设置集团本币金额精度 if (glmoney != null) { glmoney = FbmPublicUtil.getGroupDigitmoney(pk_group, pk_org, pk_curr, glmoney); sumglcmoney_cr = sumglcmoney_cr.add(glmoney); } - childrenvos[i].setGlcamount(glmoney); + childrenvos[i].setGlcamount(glmoney);// 收款集团本币金额 group_local_rec + // 取得全局本币金额 UFDouble gllmoney = TMCurrencyUtil.getGlobalLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), gllcurrrate, orgcurrrate, busidate); - + // 设置全局本币金额精度 if (gllmoney != null) { gllmoney = FbmPublicUtil.getGlobalDigitmoney(pk_org, pk_curr, gllmoney); sumgllcmoney_cr = sumgllcmoney_cr.add(gllmoney); } - childrenvos[i].setGllcamount(glmoney); + childrenvos[i].setGllcamount(glmoney);// 收款全局本币金额 } + // 委收资金信息实体 GatherFundVO for (int i = 0; i < fund_childrenvos.length; i++) { aggvo = aggVOs[i]; fund_childrenvos[i] = new GatherFundVO(); - fund_childrenvos[i].setPk_org(pk_org); + fund_childrenvos[i].setPk_org(pk_org);// 主组织 fund_childrenvos[i].setPk_org_v(pk_org_v); - fund_childrenvos[i].setPk_group(pk_group); - fund_childrenvos[i].setBillno(aggvo.getparentVO().getFbmbillno()); - fund_childrenvos[i].setAmount(aggvo.getparentVO().getMoney()); - fund_childrenvos[i].setFeeamount(null); - fund_childrenvos[i].setFeedirection(null); - fund_childrenvos[i].setFundtype(null); - fund_childrenvos[i].setGetmode("note"); - fund_childrenvos[i].setOlcrate(orgcurrrate); - fund_childrenvos[i].setGlcrate(glcurrrate); - fund_childrenvos[i].setGllcrate(gllcurrrate); - fund_childrenvos[i].setGlcfeeamount(null); - fund_childrenvos[i].setGllcfeeamount(null); - fund_childrenvos[i].setOlcfeeamount(null); - fund_childrenvos[i].setIsfees(null); - fund_childrenvos[i].setMemo(null); - fund_childrenvos[i].setPk_balatype(null); - fund_childrenvos[i].setPk_bankaccount_r(null); - fund_childrenvos[i].setPk_billno(aggvo.getparentVO().getPk_register()); - fund_childrenvos[i].setPk_cashaccount_r(null); - fund_childrenvos[i].setPk_getplanitem(null); - fund_childrenvos[i].setPk_notetype(aggvo.getparentVO().getFbmbilltype()); - fund_childrenvos[i].setPurpose(null); - fund_childrenvos[i].setRelationindex(null); - fund_childrenvos[i].setRowno(Integer.valueOf(i)); + fund_childrenvos[i].setPk_group(pk_group);// 集团 + fund_childrenvos[i].setBillno(aggvo.getparentVO().getFbmbillno());// 收款票据号 + fund_childrenvos[i].setAmount(aggvo.getparentVO().getMoney());// 收款金额 amount + fund_childrenvos[i].setFeeamount(null);// 费用金额 feeamount + fund_childrenvos[i].setFeedirection(null);// 费用方向 + fund_childrenvos[i].setFundtype(null);// 货币形态 + fund_childrenvos[i].setGetmode("note");// 收款方式 =票据收款 + fund_childrenvos[i].setOlcrate(orgcurrrate);// 组织本币汇率local_rate + fund_childrenvos[i].setGlcrate(glcurrrate);// 集团本币汇率group_rate + fund_childrenvos[i].setGllcrate(gllcurrrate);// 全局本币汇率global_rate + fund_childrenvos[i].setGlcfeeamount(null);// 费用集团本币金额 + fund_childrenvos[i].setGllcfeeamount(null);// 费用全局本币金额 + fund_childrenvos[i].setOlcfeeamount(null);// 费用组织本币金额 + fund_childrenvos[i].setIsfees(null);// 是否费用 + fund_childrenvos[i].setMemo(null);// 备注 + fund_childrenvos[i].setPk_balatype(null);// 结算方式 + fund_childrenvos[i].setPk_bankaccount_r(null);// 收款银行账号 + fund_childrenvos[i].setPk_billno(aggvo.getparentVO().getPk_register());// 票据号标识=主键 + fund_childrenvos[i].setPk_cashaccount_r(null);// 收款现金账户 + fund_childrenvos[i].setPk_getplanitem(null);// 收款计划项目 + fund_childrenvos[i].setPk_notetype(aggvo.getparentVO().getFbmbilltype());// 收款票据类型 + fund_childrenvos[i].setPurpose(null);// 用途 + fund_childrenvos[i].setRelationindex(null);// 关联索引 + fund_childrenvos[i].setRowno(i);// 行号 + //设置区间信息 + //fund_childrenvos[i].setBillrange(aggvo.getparentVO().getBillrange()); + //fund_childrenvos[i].setBillrangestart(aggvo.getparentVO().getBillrangestart()); + //fund_childrenvos[i].setBillrangeend(aggvo.getparentVO().getBillrangeend()); +// summoney_cr = summoney_cr.add(aggvo.getparentVO().getMoney()); + + // 取得组织本币金额 UFDouble orgmoney = TMCurrencyUtil.getOrgLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), - orgcurrrate, busidate, pvo.getOlcratetype()); - + orgcurrrate, busidate,pvo.getOlcratetype()); + // 设置组织本币金额精度 if (orgmoney != null) { orgmoney = FbmPublicUtil.getOrgDigitmoney(pk_org, pk_curr, orgmoney); +// sumolcmoney_cr = sumolcmoney_cr.add(orgmoney); } + fund_childrenvos[i].setOlcamount(orgmoney);// 组织本币金额 - fund_childrenvos[i].setOlcamount(orgmoney); - + // 取得集团本币金额 UFDouble glmoney = TMCurrencyUtil.getGroupLocalMoney(pk_group, pk_org, pk_curr, aggvo.getparentVO().getMoney(), glcurrrate, orgcurrrate, busidate); - + // 设置集团本币金额精度 if (glmoney != null) { glmoney = FbmPublicUtil.getGroupDigitmoney(pk_group, pk_org, pk_curr, glmoney); +// sumglcmoney_cr = sumglcmoney_cr.add(glmoney); } + fund_childrenvos[i].setGlcamount(glmoney);// 集团本币金额 - fund_childrenvos[i].setGlcamount(glmoney); - + // 取得全局本币金额 UFDouble gllmoney = TMCurrencyUtil.getGlobalLocalMoney(pk_org, pk_curr, aggvo.getparentVO().getMoney(), gllcurrrate, orgcurrrate, busidate); - + // 设置全局本币金额精度 if (gllmoney != null) { gllmoney = FbmPublicUtil.getGlobalDigitmoney(pk_org, pk_curr, gllmoney); +// sumgllcmoney_cr = sumgllcmoney_cr.add(gllmoney); } - - fund_childrenvos[i].setGllcamount(glmoney); + fund_childrenvos[i].setGllcamount(glmoney);// 全局本币金额 } GatheringVO parentvo = new GatheringVO(); - parentvo.setPk_org(pk_org); + parentvo.setPk_org(pk_org);// 主组织 parentvo.setPk_org_v(pk_org_v); - parentvo.setPk_transactorg(pk_org); - parentvo.setPk_transactorg_v(pk_org_v); - parentvo.setPk_fundgetorg(pk_org); - parentvo.setPk_fundgetorg_v(pk_org_v); - parentvo.setPk_group(pk_group); - parentvo.setPk_currtype(pk_curr); - parentvo.setPk_gathercurr(pk_curr); - parentvo.setPk_billtype(pk_billtypecode); - parentvo.setPk_billtypeid((PfDataCache.getBillType(pk_billtypecode) == null) ? null - : PfDataCache.getBillType(pk_billtypecode).getPk_billtypeid()); - parentvo.setOlctotalamount(null); - parentvo.setGlctotalamount(null); - parentvo.setGllctotalamount(null); - parentvo.setRecmodul("FBM"); - parentvo.setVsourcebustype("billhand"); - parentvo.setVsourcecode(aggvo.getparentVO().getVbillno()); - parentvo.setPk_vsourcebilltypeid(aggvo.getparentVO().getPk_billtypeid()); - parentvo.setPk_vsourcebilltype(pk_vsourcebilltype); + parentvo.setPk_transactorg(pk_org);// 办理资金组织 + parentvo.setPk_transactorg_v(pk_org_v);// 办理资金组织版本 + parentvo.setPk_fundgetorg(pk_org);// 收款资金组织 pk_fundgetorg + parentvo.setPk_fundgetorg_v(pk_org_v);// 收款资金组织版本 + parentvo.setPk_group(pk_group);// 集团 + parentvo.setPk_currtype(pk_curr);// 委托币种 + parentvo.setPk_gathercurr(pk_curr);// 收款币种 + parentvo.setPk_billtype(pk_billtypecode);// 单据类型 委托收款 + parentvo.setPk_billtypeid(PfDataCache.getBillType(pk_billtypecode) == null ? null + : PfDataCache.getBillType(pk_billtypecode).getPk_billtypeid());// 单据类型编码 + parentvo.setOlctotalamount(null);// 委托组织本币总金额 + parentvo.setGlctotalamount(null);// 委托集团本币总金额 + parentvo.setGllctotalamount(null);// 委托全局本币总金额 + parentvo.setRecmodul("FBM");// 来源模块 + parentvo.setVsourcebustype("billhand");// 来源业务类型 + parentvo.setVsourcecode(aggvo.getparentVO().getVbillno());// 来源单据号 + parentvo.setPk_vsourcebilltypeid(aggvo.getparentVO().getPk_billtypeid());// 来源单据类型 + parentvo.setPk_vsourcebilltype(pk_vsourcebilltype);// 来源单据类型编码 + // isautorelation - parentvo.setAcceptdate(busidate); - parentvo.setBillmaker(getUser()); - parentvo.setBilldate(busidate); - parentvo.setBillstatus(Integer.valueOf(0)); - parentvo.setBilltime(AppContext.getInstance().getServerTime()); - parentvo.setBusidate(busidate); - parentvo.setBusinessno(null); - parentvo.setCleardate(null); - parentvo.setClearinacctype(null); - parentvo.setClearinszdirection(null); - parentvo.setClearoutacctype(null); - parentvo.setClearoutszdirection(null); - parentvo.setConsigndate(null); - parentvo.setConsigner(null); - parentvo.setConsigntime(null); - parentvo.setCreationtime(AppContext.getInstance().getServerTime()); - parentvo.setCreator(getUser()); - parentvo.setCurroperator(null); - parentvo.setDecidedate(null); - parentvo.setDecidetime(null); - parentvo.setDecideuser(null); - parentvo.setDecidewfstatus(null); - parentvo.setDeliverdate(null); - parentvo.setDelivertime(null); - parentvo.setDelivertype(null); - parentvo.setDeliveruser(null); - parentvo.setDeliverwfstatus(null); - parentvo.setDestdeliverdirection(null); - parentvo.setEncryptkey(null); - parentvo.setGatheringdate(null); - parentvo.setGatheringtime(null); - parentvo.setGatheringuser(null); - parentvo.setGatheringwfstatus(null); + parentvo.setAcceptdate(busidate);// 自动受理日期 + parentvo.setBillmaker(getUser());// 制单人为当前登录用户 + parentvo.setBilldate(busidate);// 制单日期为业务日期 + parentvo.setBillstatus(0);// 单据状态=待提交 + parentvo.setBilltime(AppContext.getInstance().getServerTime());// 制单时间系统时间 + parentvo.setBusidate(busidate);// 业务日期 + parentvo.setBusinessno(null);// 业务流水号 + parentvo.setCleardate(null);// 清算日期 + parentvo.setClearinacctype(null);// 清算传入账户类型 + parentvo.setClearinszdirection(null);// 清算传入收支类型 + parentvo.setClearoutacctype(null);// 清算传出账户类型 + parentvo.setClearoutszdirection(null);// 清算传出收支类型 + parentvo.setConsigndate(null);// 委托日期 + parentvo.setConsigner(null);// 委托人 + parentvo.setConsigntime(null);// 委托时间 + parentvo.setCreationtime(AppContext.getInstance().getServerTime());// 创建时间=系统时间 + parentvo.setCreator(getUser());// 创建人=当前登录用户 + parentvo.setCurroperator(null);// 当前处理人 + parentvo.setDecidedate(null);// 经办日期 + parentvo.setDecidetime(null);// 经办时间 + parentvo.setDecideuser(null);// 经办人 + parentvo.setDecidewfstatus(null);// 经办工作流状态 + parentvo.setDeliverdate(null);// 传递日期 + parentvo.setDelivertime(null);// 传递时间 + parentvo.setDelivertype(null);// 传递类型 + parentvo.setDeliveruser(null);// 传递人 + parentvo.setDeliverwfstatus(null);// 传递工作流状态 + parentvo.setDestdeliverdirection(null);// 去向传递方向 + parentvo.setEncryptkey(null);// 密文 + parentvo.setGatheringdate(null);// 收款日期 + parentvo.setGatheringtime(null);// 收款时间 + parentvo.setGatheringuser(null);// 收款人 + parentvo.setGatheringwfstatus(null);// 收款工作流状态 +// parentvo.setLocal_rate(orgcurrrate);// 组织本币汇率 +// parentvo.setGroup_rate(glcurrrate);// 集团本币汇率 +// parentvo.setGlobal_rate(gllcurrrate);// 全局本币汇率 +// //表头金额总和只需一个表体所有表体行金额之和 +// parentvo.setPrimal_money(summoney_cr);// 收款原币金额 +// parentvo.setLocal_money(sumolcmoney_cr);// 收款组织本币金额 +// parentvo.setGroup_local(sumglcmoney_cr);// 收款集团本币金额 +// parentvo.setGlobal_local(sumgllcmoney_cr);// 收款全局本币金额 aggVO.setParent(parentvo); aggVO.setChildrenVO(childrenvos); aggVO.setChildrenVO(fund_childrenvos); +// FuncletInitData initData = null; +// initData = new FuncletInitData(); +// initData.setInitType(ILinkType.LINK_TYPE_ADD); +// initData.setInitData(aggVO ); +// FuncRegisterVO funvo = WorkbenchEnvironment.getInstance().getFuncRegisterVO(funcode); +// FuncletWindowLauncher.openFuncNodeFrame((AbstractFunclet) getModel().getContext().getEntranceUI(), +// funvo, initData, null, false, DialogTool.getWindowOfScreenCenter()); return aggVO; } return null; } + /** + * 获取当前操作人员 + * + * @return + */ private String getUser() { return InvocationInfoProxy.getInstance().getUserId(); } + /** + * 新增 + * + * @param aggvo + * @return K + * @throws BusinessException + */ + @Override public AggRegisterVO pdfInsertGather(AggRegisterVO aggvo) throws BusinessException { + RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); + // 组织停用校验 modify by aishm 2013-03-26 DefaultValidationService validateService = new DefaultValidationService(); - validateService.addValidator(new FinOrgUnUseValidator(new VOFieldDesc[] { new VOFieldDesc("pk_org") })); + validateService.addValidator(new FinOrgUnUseValidator(new VOFieldDesc(RegisterVO.PK_ORG))); validateService.validate(aggvo); - FbmSignPubSecurityUtil.signDataAggVO(new AggregatedValueObject[] { aggvo }); + /** + * 数字签名 + */ + FbmSignPubSecurityUtil.signDataAggVO(aggvo); + // 取单据编号并设置 String vbillno = FBMPrivateServiceProxy.getBillcodeManage().getBillCode_RequiresNew( registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), aggvo); - registervo.setAttributeValue("vbillno", vbillno); + registervo.setAttributeValue(FbmFieldConstant.VBILLNO, vbillno); + + // 更新数据库 + AggRegisterVO retvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.NEW); + + return retvo; - return (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 2); } + /** + * 更新 + * + * @param aggvo + * @return K + * @throws BusinessException + */ + @Override public AggRegisterVO pdfUpdateGather(AggRegisterVO aggvo) throws BusinessException { + + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); + // 将来源置为手工录入 + registervo.setGathertype(FbmBusConstant.GATHER_TYPE_INPUT); - registervo.setGathertype("input"); - + // begin_luxiong7_20180921_山西正华票据池票据签发部分补丁FBM UFBoolean initFlag = registervo.getInitflag(); - - boolean isInitAccept = (initFlag != null && initFlag.booleanValue() - && "36HN".equals(registervo.getPk_billtypecode())); - boolean isEcd = false; - String fbmBillType = registervo.getFbmbilltype(); - - Integer billtypeclass = ((IFbmPubQueryService) NCLocator.getInstance().lookup(IFbmPubQueryService.class)) - .queryNoteclassByPk(fbmBillType); + boolean isInitAccept = initFlag != null && initFlag.booleanValue() + && FbmBusConstant.BILLTYPE_INITACCEPT.equals(registervo.getPk_billtypecode());// 是期初应收 + boolean isEcd = false;// 是否电票 + String fbmBillType = registervo.getFbmbilltype();// 票据类别 + Integer billtypeclass = NCLocator.getInstance().lookup(IFbmPubQueryService.class) + .queryNoteclassByPk(fbmBillType);// 票据大类 if (billtypeclass != null && FbmBusConstant.ECD_FBMBILLTYPE.equals(billtypeclass)) { isEcd = true; } - + // 如果是电票,且非期初 ,收票日期不能早于电票启用日期 if (!isInitAccept && isEcd) { - + // 轻量级票据保存校验 Validator gatherSaveValidator = new GatherSaveValidator(); - IValidationService vEcdService = ValidationFrameworkUtil - .createValidationService(new Validator[] { gatherSaveValidator }); + IValidationService vEcdService = ValidationFrameworkUtil.createValidationService(gatherSaveValidator); vEcdService.validate(registervo); } + // 校验业务单元期初期间 modify by aishm 2013-03-18 + CheckInitDateTool.checkInitData(RegisterVO.GATHERDATE, + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0461")/* @res "收票日期" */, + registervo.getGatherdate(), registervo.getPk_org(), registervo.getInitflag()); - CheckInitDateTool.checkInitData("gatherdate", - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0461"), registervo.getGatherdate(), - registervo.getPk_org(), registervo.getInitflag()); - + // 非法票据的校验 Validator saveIllegalGatherValidator = new SaveIllegalGatherValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { saveIllegalGatherValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(saveIllegalGatherValidator); vService.validate(aggvo.getParentVO()); + // begin_luxiong7_20180921_山西正华票据池票据签发部分补丁FBM if (registervo.getSignagrbank() != null && !registervo.getSignagrbank().trim().equals("")) { - - BankdocVO bankdocVOByPk = ((IBankdocQueryService) NCLocator.getInstance() - .lookup(IBankdocQueryService.class)).getBankdocVOByPk(registervo.getSignagrbank()); + BankdocVO bankdocVOByPk = NCLocator.getInstance().lookup(IBankdocQueryService.class) + .getBankdocVOByPk(registervo.getSignagrbank()); if (bankdocVOByPk != null) { if (bankdocVOByPk.getPcombinenum() != null && !bankdocVOByPk.getPcombinenum().trim().equals("")) { registervo.setSignagrbanknum(bankdocVOByPk.getPcombinenum()); + } else { +// throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0","03618fbm_add02-0324")/*@res "所选择的承兑银行没有设置人行联行行号"*/); } - if (bankdocVOByPk.getPcombinename() != null && !bankdocVOByPk.getPcombinename().trim().equals("")) { registervo.setSignagrbankname(bankdocVOByPk.getPcombinename()); - + } else { +// throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0","03618fbm_add02-0325")/*@res "所选择的承兑银行没有设置人行联行名称"*/); } - } else { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", "03618fbm_add02-0323")); + } else { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_add02_0", + "03618fbm_add02-0323")/* @res "根据所选择的承兑银行找不到相关银行档案" */); } } - FbmSignPubSecurityUtil.signDataAggVO(new AggregatedValueObject[] { aggvo }); + /** + * 数字签名 + */ + FbmSignPubSecurityUtil.signDataAggVO(aggvo); if (billtypeclass != null && FbmBusConstant.ECD_FBMBILLTYPE.equals(billtypeclass)) { isEcd = true; } + // 检验票据池登记银行承兑银行信息 checkBankDoc(registervo); - AggRegisterVO retvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, 1); + // 更新数据库 + AggRegisterVO retvo = (AggRegisterVO) FbmPrivateUtil.updateAggVO(aggvo, VOStatus.UPDATED); + // 设置票据状态 IStatusControlStrategy strategy = new SaveGather((RegisterVO) aggvo.getParentVO()); StatusControlProcess.getInstance().process(strategy); return retvo; + } + /** + * 删除 + * + * @param aggvo + * @return + * @throws BusinessException + */ + @Override public AggRegisterVO pdfDeleteGather(AggRegisterVO aggvo) throws BusinessException { + + // xuhrc 20191126 云原生后端saga异常校验 checkSagaStatus(aggvo); RegisterVO registervo = (RegisterVO) aggvo.getParentVO(); + // 删除校验(非自由态单据不能删除) Validator deleteValidator = new FbmBaseDeleteValidator(); - IValidationService vService = ValidationFrameworkUtil - .createValidationService(new Validator[] { deleteValidator }); + IValidationService vService = ValidationFrameworkUtil.createValidationService(deleteValidator); vService.validate(aggvo.getParentVO()); + // 有关联关系的单据不能删除 Validator outerValidator = new GatherOuterValidator(); - IValidationService outerService = ValidationFrameworkUtil - .createValidationService(new Validator[] { outerValidator }); + IValidationService outerService = ValidationFrameworkUtil.createValidationService(outerValidator); outerService.validate(aggvo.getParentVO()); + // 退单据号 FBMPrivateServiceProxy.getBillcodeManage().returnBillCodeOnDelete(registervo.getPk_billtypecode(), registervo.getPk_group(), registervo.getPk_org(), registervo.getVbillno(), aggvo); FBMPrivateServiceProxy.getMDService().deleteBillFromDB(aggvo); return aggvo; + } + /** + * 处理票据上收和票据下拨 签收和取消签收 + * + * @param aggvo 收票登记 + * @param isSign 是否签收 true 签收 false 取消签收 + * @return void 返回类型 + * @throws BusinessException + * + */ private void processBillDeliveryAllocate(RegisterVO regvo, boolean isSign) throws BusinessException { + // 真正实现逻辑需要修改 根据收票类型进行判断是否需要调用票据上收相关方法 + // 如果是电票才会调用票据上收和票据下拨 if (FbmCommonTools.isEBill(regvo.getFbmbilltype())) { String fbmbillno = regvo.getFbmbillno(); String pk_org = regvo.getPk_org(); String pk_register = regvo.getPk_register(); String gatherType = regvo.getGathertype(); if (isSign) { - if ("billdelivery".equals(gatherType)) { - - FBMPrivateServiceProxy.getBillDeliveryManageService().signBillByFbmbillno(pk_org, + if(FbmBusConstant.GATHER_TYPE_DELIVERY.equals(gatherType)) { + // 真正实现逻辑需要修改 根据收票类型进行判断是否需要调用票据上收相关方法 + FBMPrivateServiceProxy.getBillDeliveryManageService().signBillByFbmbillno( + pk_org, new String[] { fbmbillno }, pk_register); - - } else if ("billallocate".equals(gatherType)) { + }else if(FbmBusConstant.GATHER_TYPE_ALLOCATE.equals(gatherType)) { FBMPrivateServiceProxy.getBillAllocateManageService().signBillByFbmbillno(pk_org, new String[] { fbmbillno }, pk_register); - } - - } else if ("billdelivery".equals(gatherType)) { - - FBMPrivateServiceProxy.getBillDeliveryManageService().unSignBillByFbmbillno(pk_org, - new String[] { fbmbillno }, pk_register); - - } else if ("billallocate".equals(gatherType)) { - FBMPrivateServiceProxy.getBillAllocateManageService().unSignBillByFbmbillno(pk_org, - new String[] { fbmbillno }, pk_register); + } else { + // 取消签收 + if(FbmBusConstant.GATHER_TYPE_DELIVERY.equals(gatherType)) { + // 真正实现逻辑需要修改 根据收票类型进行判断是否需要调用票据上收相关方法 + FBMPrivateServiceProxy.getBillDeliveryManageService().unSignBillByFbmbillno( + pk_org, + new String[] { fbmbillno }, pk_register); + } else if (FbmBusConstant.GATHER_TYPE_ALLOCATE.equals(gatherType)) { + FBMPrivateServiceProxy.getBillAllocateManageService().unSignBillByFbmbillno( + pk_org, + new String[] { fbmbillno }, pk_register); + } } } + } + + } diff --git a/fbm/src/private/nccloud/impl/fbm/gather/excel/GatherExcelImport4NCCImpl.java b/fbm/src/private/nccloud/impl/fbm/gather/excel/GatherExcelImport4NCCImpl.java index 86f4b3b5..ca927794 100644 --- a/fbm/src/private/nccloud/impl/fbm/gather/excel/GatherExcelImport4NCCImpl.java +++ b/fbm/src/private/nccloud/impl/fbm/gather/excel/GatherExcelImport4NCCImpl.java @@ -1,16 +1,13 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - package nccloud.impl.fbm.gather.excel; import java.util.Collection; import java.util.HashMap; + import nc.bs.framework.common.InvocationInfoProxy; import nc.bs.framework.common.NCLocator; import nc.bs.sec.esapi.NCESAPI; import nc.itf.bd.bankdoc.IBankdocQueryService; +import nc.itf.bd.pub.IBDMetaDataIDConst; import nc.md.persist.framework.IMDPersistenceQueryService; import nc.pubitf.bd.accessor.GeneralAccessorFactory; import nc.pubitf.bd.accessor.IGeneralAccessor; @@ -21,11 +18,12 @@ import nc.vo.bd.bankaccount.BankAccbasVO; import nc.vo.bd.bankdoc.BankdocVO; import nc.vo.bd.cust.CustSupplierVersionVO; import nc.vo.fbm.pub.action.ActionVO; +import nc.vo.fbm.pub.constant.ActionConstant; +import nc.vo.fbm.pub.constant.RegisterStatusConstant; import nc.vo.fbm.pub.util.FbmCommonTools; import nc.vo.fbm.pub.util.FbmPublicUtil; import nc.vo.fbm.register.AggRegisterVO; import nc.vo.fbm.register.RegisterVO; -import nc.vo.ml.NCLangRes4VoTransl; import nc.vo.pub.BusinessException; import nc.vo.pub.CircularlyAccessibleValueObject; import nc.vo.pub.lang.UFBoolean; @@ -40,270 +38,354 @@ import nc.vo.uap.pf.PFBatchExceptionInfo; import nc.vo.uap.pf.PfProcessBatchRetObject; import nccloud.bs.excel.IXChangeContext; import nccloud.bs.excel.plugin.AbstractImportProceeWithContext; +import nccloud.itf.fbm.gather.GatherConstant; import nccloud.pubitf.riart.pflow.CloudPFlowContext; import nccloud.pubitf.riart.pflow.ICloudScriptPFlowService; +/** + * 收票登记 导入 + * + * @author zhangjp6 2019年5月21日 + * + */ public class GatherExcelImport4NCCImpl extends AbstractImportProceeWithContext { - public GatherExcelImport4NCCImpl() { - } + @Override protected void processBillWithContext(Object vo, IXChangeContext changcontext) throws BusinessException { CircularlyAccessibleValueObject regvo = ((HYBillVO) vo).getParentVO(); AggRegisterVO aggvo = new AggRegisterVO(); aggvo.setParentVO(regvo); - this.check(aggvo); - Object[] results = this.doSave(aggvo); - Object[] var6 = results; - int var7 = results.length; - - for (int var8 = 0; var8 < var7; ++var8) { - Object obj = var6[var8]; - if (obj instanceof PfProcessBatchRetObject batchObj) { + // 保存前处理 + check(aggvo); + // 执行保存逻辑 + Object[] results = doSave(aggvo); + for (Object obj : results) { + if (obj instanceof PfProcessBatchRetObject) { + PfProcessBatchRetObject batchObj = (PfProcessBatchRetObject) obj; PFBatchExceptionInfo exceptionInfo = batchObj.getExceptionInfo(); throw new BusinessException(exceptionInfo.getErrorMessage()); } } } - + + /** + * 调用动作脚本 执行保存 + * + * @param aggVO + * @return + * @throws BusinessException + */ private Object[] doSave(AggRegisterVO aggVO) throws BusinessException { - this.doBeforeSave(aggVO); + + doBeforeSave(aggVO); + CloudPFlowContext context = new CloudPFlowContext(); - context.setActionName("SAVEBASE"); - context.setBillType("36H1"); + context.setActionName(ActionConstant.SAVEBASE); + context.setBillType(GatherConstant.BILL_TYPE); context.setBillVos(new AggRegisterVO[] { aggVO }); - Object[] objects = ((ICloudScriptPFlowService) NCLocator.getInstance().lookup(ICloudScriptPFlowService.class)) - .exeScriptPFlow(context); + Object[] objects = NCLocator.getInstance().lookup(ICloudScriptPFlowService.class).exeScriptPFlow(context); + return objects; } + /** + * 保存前事件 + * + * @param aggvo + * @throws BusinessException + */ private void doBeforeSave(AggRegisterVO aggvo) throws BusinessException { + RegisterVO pvo = aggvo.getparentVO(); UFDateTime businessTime = new UFDateTime(InvocationInfoProxy.getInstance().getBizDateTime()); + // 集团 pvo.setPk_group(InvocationInfoProxy.getInstance().getGroupId()); + // 制单人 pvo.setBillmaker(InvocationInfoProxy.getInstance().getUserId()); + // 创建日期 pvo.setCreationtime(businessTime); + // 制单日期 pvo.setDoperatedate(new UFDate(InvocationInfoProxy.getInstance().getBizDateTime())); + // 创建时间 pvo.setCreationtime(businessTime); + // 创建人 pvo.setCreator(InvocationInfoProxy.getInstance().getUserId()); - pvo.setPk_billtypecode("36H1"); + // 单据类型 + pvo.setPk_billtypecode(GatherConstant.BILL_TYPE); + // 来源类型= 收票录入 pvo.setGathertype("input"); + // 期初 UFBoolean initflag = pvo.getInitflag(); if (StringUtil.isNull(initflag)) { pvo.setInitflag(UFBoolean.FALSE); } - + // 已收付票标识 pvo.setSfflag(UFBoolean.FALSE); - pvo.setRegisterstatus("on_gather"); + // 票据状态 = 在收票 + pvo.setRegisterstatus(RegisterStatusConstant.ON_GATHER); + // 单据状态 = 自由 pvo.setVbillstatus(-1); + // NCC-172798 默认赋值为N,否则会为null pvo.setRelatedrecbill(UFBoolean.FALSE); + // 废票字段设置默认值N,否则导入的数据页签查询会有问题 UFBoolean disableflag = pvo.getDisableflag(); - if (disableflag == null || !disableflag.booleanValue()) { + if (disableflag != null && disableflag.booleanValue()) { + // 说明前台传的废票字段有值,是废票 + } else { pvo.setDisableflag(UFBoolean.FALSE); } - pvo.setBookflag(UFBoolean.FALSE); pvo.setPlanflag(UFBoolean.FALSE); String pk_org = pvo.getPk_org(); - if (StringUtil.isNotNull(pvo.getReceiveaccount())) { - BankAccbasVO accbasVO = this.getBankAccbasVOByReceiveaccount(pvo); - String var10002; - if (accbasVO.getEnablestate() != 2) { - var10002 = pvo.getFbmbillno(); - throw new BusinessException( - var10002 + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0078")); + + //电票签约账户不是空,设置签约账号开户行和银行类别 + if(StringUtil.isNotNull(pvo.getReceiveaccount())) { + BankAccbasVO accbasVO = getBankAccbasVOByReceiveaccount(pvo); + if(accbasVO.getEnablestate() != 2) { + throw new BusinessException(pvo.getFbmbillno() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0078")/* @res ":电票签约账号未启用!" */); } -//zhangxinah 去掉银行账户是否电票签约账户的校验 -// if (!accbasVO.getIsenableelecbill().booleanValue()) { -// var10002 = pvo.getFbmbillno(); -// throw new BusinessException( -// var10002 + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0079")); + //zhangxinah 去掉银行账户是否电票签约账户的校验 +// if (accbasVO.getIsenableelecbill() == null || !accbasVO.getIsenableelecbill().booleanValue()) { +// throw new BusinessException(pvo.getFbmbillno() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() +// .getStrByID("3618ncc_0", "03618ncc-0079")/* @res ":电票签约账号电票不可用!" */); // } - - BankdocVO bankdoc = this.getBanktypeByReceiveaccount(pvo.getReceiveaccount()); + BankdocVO bankdoc = getBanktypeByReceiveaccount(pvo.getReceiveaccount()); pvo.setPk_banktype(bankdoc.getPk_banktype()); pvo.setReceiveaccountname(bankdoc.getName()); } - IGeneralAccessor bankdocAccessor = GeneralAccessorFactory.getAccessor("bf5aeed4-6b35-4a2e-b750-b9aabce59e21"); - BankaccSubGeneralAccessor bankaccsubAccessor = (BankaccSubGeneralAccessor) (new BankaccSubAccessorFactory()) - .getAccessor("9e10ef4a-0be9-482b-880f-871e5b0504b7"); - IGeneralAccessor assLineNumAccessor = GeneralAccessorFactory - .getAccessor("7b6c7dc0-db78-4bef-9cca-f5af4008f893"); - TMCustSupUtil.setCustSupPk(aggvo, "paybillunit_v", "paybillunit", "hidepaybillunit"); - CustSupplierVersionVO custSupVO; + IGeneralAccessor bankdocAccessor = GeneralAccessorFactory.getAccessor(IBDMetaDataIDConst.BANKDOC); + BankaccSubGeneralAccessor bankaccsubAccessor = (BankaccSubGeneralAccessor) new BankaccSubAccessorFactory() + .getAccessor(IBDMetaDataIDConst.CUSTBANKACCSUB); + IGeneralAccessor assLineNumAccessor = GeneralAccessorFactory.getAccessor(IBDMetaDataIDConst.ASSLINENUM); + // 付票单位 vid会自动导入,需要根据vid查oid和文本赋值 + TMCustSupUtil.setCustSupPk(aggvo, RegisterVO.PAYBILLUNIT_V, RegisterVO.PAYBILLUNIT, RegisterVO.HIDEPAYBILLUNIT); + // 出票人 根据出票人文本和收票日期赋值vid和oid if (StringUtil.isNotNull(pvo.getPayunit())) { - custSupVO = TMCustSupUtil.getCustSupplierVersionVOByNameAndDate(pvo.getPayunit(), pvo.getGatherdate()); - if (custSupVO != null) { + CustSupplierVersionVO custSupVO = TMCustSupUtil.getCustSupplierVersionVOByNameAndDate(pvo.getPayunit(), pvo.getGatherdate()); + if(custSupVO!=null) { pvo.setHidepayunit(custSupVO.getPk_cust_sup()); pvo.setHidepayunit_v(custSupVO.getPk_cust_sup_v()); } } - + // 收款人 根据收款人文本和收票日期赋值vid和oid if (StringUtil.isNotNull(pvo.getReceiveunit())) { - custSupVO = TMCustSupUtil.getCustSupplierVersionVOByNameAndDate(pvo.getReceiveunit(), pvo.getGatherdate()); - if (custSupVO != null) { + CustSupplierVersionVO custSupVO = TMCustSupUtil.getCustSupplierVersionVOByNameAndDate(pvo.getReceiveunit(), pvo.getGatherdate()); + if(custSupVO!=null) { pvo.setHidereceiveunit(custSupVO.getPk_cust_sup()); pvo.setHidereceiveunit_v(custSupVO.getPk_cust_sup_v()); } } - + // 收款人账户 if (StringUtil.isNotNull(pvo.getReceivebankacc())) { IBDData cussup = bankaccsubAccessor.getDocByAccnum(pvo.getReceivebankacc(), pvo.getPk_curr()); if (cussup != null) { pvo.setHidereceivebankacc(cussup.getPk()); } } - + // 收款人银行 if (StringUtil.isNotNull(pvo.getReceivebank())) { IBDData cussup = bankdocAccessor.getDocByNameWithMainLang(pk_org, pvo.getReceivebank()); if (cussup != null) { pvo.setHidereceivebank(cussup.getPk()); } } - boolean busType = FbmPublicUtil.isBusType(pvo.getFbmbilltype()); - IBDData cussup = null; + // 承兑人 1银承:银行档案; 银行参照:signagrbank;2商承:客商档案客商参照:pk_signagrbank;3文本:acceptorname if (busType) { if (StringUtil.isNotNull(pvo.getAcceptorname())) { - custSupVO = TMCustSupUtil.getCustSupplierVersionVOByNameAndDate(pvo.getAcceptorname(), - pvo.getGatherdate()); - if (custSupVO != null) { + CustSupplierVersionVO custSupVO = TMCustSupUtil.getCustSupplierVersionVOByNameAndDate(pvo.getAcceptorname(), pvo.getGatherdate()); + if(custSupVO!=null) { pvo.setPk_signagrbank(custSupVO.getPk_cust_sup()); pvo.setPk_signagrbank_v(custSupVO.getPk_cust_sup_v()); } } - } else if (StringUtil.isNotNull(pvo.getAcceptorname())) { - cussup = bankdocAccessor.getDocByNameWithMainLang(pk_org, pvo.getAcceptorname()); - if (cussup != null) { - pvo.setSignagrbank(cussup.getPk()); + } else { + // 承兑人账户是否同行 银承勾选 + if (StringUtil.isNotNull(pvo.getAcceptorname())) { + IBDData cussup = bankdocAccessor.getDocByNameWithMainLang(pk_org, pvo.getAcceptorname()); + if (cussup != null) { + pvo.setSignagrbank(cussup.getPk()); + } } } - + // 承兑人开户行号: 手输+参照 人行联行信息 人行联行信息:acceptorbankaccount;文本:signagrbanknum if (StringUtil.isNotNull(pvo.getSignagrbanknum())) { - cussup = assLineNumAccessor.getDocByCode(pk_org, pvo.getSignagrbanknum()); + IBDData cussup = assLineNumAccessor.getDocByCode(pk_org, pvo.getSignagrbanknum()); if (cussup != null) { pvo.setAcceptorbankaccount(cussup.getPk()); } } - + // 承兑人开户行名: 手输+参照 银行档案 银行档案:acceptorbank;文本:signagrbankname if (StringUtil.isNotNull(pvo.getSignagrbankname())) { - cussup = bankdocAccessor.getDocByNameWithMainLang(pk_org, pvo.getSignagrbankname()); + IBDData cussup = bankdocAccessor.getDocByNameWithMainLang(pk_org, pvo.getSignagrbankname()); if (cussup != null) { pvo.setAcceptorbank(cussup.getPk()); } } - + + //能否分包流转 UFBoolean subcontractCirculation = pvo.getSubcontractcirculation(); boolean ifBelongNewbillSys = FbmCommonTools.ifBelongNewBillSystem(pvo.getFbmbillno()); if (ifBelongNewbillSys && subcontractCirculation != null && subcontractCirculation.booleanValue()) { - String var10001 = pvo.getBillrangestart(); - pvo.setBillrange(var10001 + "-" + pvo.getBillrangeend()); - } else if (ifBelongNewbillSys) { - if (!"0".equals(pvo.getBillrangestart()) || !"0".equals(pvo.getBillrangeend())) { + pvo.setBillrange(pvo.getBillrangestart() + "-" + pvo.getBillrangeend()); + } else if(ifBelongNewbillSys){ + if(!"0".equals(pvo.getBillrangestart()) || !"0".equals(pvo.getBillrangeend())) { throw new BusinessException("票据[" + pvo.getFbmbillno() + "]为新一代票且不可分包流转,子票区间开始和结束应为0!"); } - pvo.setBillrange(String.valueOf("0")); } else { - pvo.setBillrange((String) null); + pvo.setBillrange(null); } - + + // 设置票据所属系统 pvo.setBillsystype(FbmCommonTools.getBillSysTypeByFbmBillNo(pvo.getFbmbillno())); + + //如果可用金额为空,则将可用金额默认设置为票据金额 UFDouble availablemoney = pvo.getAvailablemoney(); - if (availablemoney == null) { + if(availablemoney == null) { pvo.setAvailablemoney(pvo.getMoney()); } - HashMap voFieldsMap = new HashMap(); - voFieldsMap.put("groupField", "pk_group"); - voFieldsMap.put("orgField", "pk_org"); - voFieldsMap.put("currField", "pk_curr"); - voFieldsMap.put("rateField", "olcrate"); - voFieldsMap.put("custsupField", "paybillunit"); - voFieldsMap.put("dateField", "gatherdate"); + HashMap voFieldsMap = new HashMap(); + voFieldsMap.put(FbmPublicUtil.GROUP_FIELD, RegisterVO.PK_GROUP); + voFieldsMap.put(FbmPublicUtil.ORG_FIELD, RegisterVO.PK_ORG); + voFieldsMap.put(FbmPublicUtil.CURR_FIELD, RegisterVO.PK_CURR); + voFieldsMap.put(FbmPublicUtil.RATE_FIELD, RegisterVO.OLCRATE); + voFieldsMap.put(FbmPublicUtil.CUST_SUP_FIELD, RegisterVO.PAYBILLUNIT); + voFieldsMap.put(FbmPublicUtil.DATE_FIELD, RegisterVO.GATHERDATE); FbmPublicUtil.setOlcRate4Import(aggvo, voFieldsMap); - voFieldsMap.put("rateField", "glcrate"); + voFieldsMap.put(FbmPublicUtil.RATE_FIELD, RegisterVO.GLCRATE); FbmPublicUtil.setGlcRate4Import(aggvo, voFieldsMap); - voFieldsMap.put("rateField", "gllcrate"); + voFieldsMap.put(FbmPublicUtil.RATE_FIELD, RegisterVO.GLLCRATE); FbmPublicUtil.setGllcRate4Import(aggvo, voFieldsMap); + + // 重算 GatherReCaculateMnyUtil.recaculate(false, new AggRegisterVO[] { aggvo }); - ExcelImportUtil.validateOlcratetype(pvo.getOlcratetype(), pvo.getOlcratecategory()); + // 单据导入时校验汇率类型不能为期间、平均、计算汇率 + ExcelImportUtil.validateOlcratetype(pvo.getOlcratetype(),pvo.getOlcratecategory()); } + /** + * 保存前校验 + * + * @param aggVO + * @throws BusinessException + */ private void check(AggRegisterVO aggvo) throws BusinessException { RegisterVO registerVO = aggvo.getparentVO(); String fbmbillno = registerVO.getFbmbillno(); - UFBoolean cyberbankflag = registerVO.getCyberbankflag(); + // 票据池网银校验 + UFBoolean cyberbankflag = registerVO.getCyberbankflag();// 票据池网银 if (cyberbankflag != null && !cyberbankflag.booleanValue()) { String pk_bankdoc = registerVO.getPk_bankdoc(); if (!StringUtil.isNull(pk_bankdoc)) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0042")); + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0042")/* @res ":未勾选票据池网银,登记银行必须为空!" */); } } + // 收票日期和出票日期校验 UFDate gatherdate = registerVO.getGatherdate(); UFDate invoicedate = registerVO.getInvoicedate(); - if (gatherdate != null && invoicedate != null - && gatherdate.toStdString().compareTo(invoicedate.toStdString()) < 0) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0043")); - } else { - UFDouble money = registerVO.getMoney(); - if (money != null && money.doubleValue() < 0.0) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0080")); - } else { - UFDate enddate = registerVO.getEnddate(); - if (enddate != null && invoicedate != null - && enddate.toStdString().compareTo(invoicedate.toStdString()) < 0) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0046")); - } else { - String fbmbilltype = registerVO.getFbmbilltype(); - String receiveaccount = registerVO.getReceiveaccount(); - boolean isEbill = FbmCommonTools.isEBill(fbmbilltype); - if (isEbill) { - if (StringUtil.isNull(receiveaccount)) { - throw new BusinessException(fbmbillno - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0051")); - } - } else { - UFBoolean onlinebankflag = registerVO.getOnlinebankflag(); - if (onlinebankflag != null && onlinebankflag.booleanValue()) { - throw new BusinessException(fbmbillno - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0072")); - } - } - - FbmCommonTools.validBillRange(registerVO, isEbill); - FbmCommonTools.billNoValication(fbmbillno); - this.checkIsReturnedBill(registerVO); - } + if (gatherdate != null && invoicedate != null) { + if (gatherdate.toStdString().compareTo(invoicedate.toStdString()) < 0) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0043")/* @res ":收票日期必须大于等于出票日期!" */); } } + //校验金额 + UFDouble money = registerVO.getMoney(); + if(money!=null&&money.doubleValue()<0) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0080")/* @res ":票据金额必须大于零!" */); + } + + // 到期日期和出票日期校验 + UFDate enddate = registerVO.getEnddate(); + if (enddate != null && invoicedate != null) { + if (enddate.toStdString().compareTo(invoicedate.toStdString()) < 0) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0046")/* @res ":到期日期应大于出票日期!" */); + } + } + + // 收款和付款单位不能相同 +// String payunit = registerVO.getHidepayunit(); +// String receiveunit = registerVO.getHidereceiveunit(); +// if (!StringUtil.isNull(payunit) && !StringUtil.isNull(receiveunit) +// && payunit.equals(receiveunit)) { +// throw new BusinessException(fbmbillno+nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0","03618ncc-0044")/*@res ":票据基本信息的收款单位和付款单位不能相同!"*/); +// } + + // 如果是电票的话 电票签约账号必须有值 + String fbmbilltype = registerVO.getFbmbilltype(); + String receiveaccount = registerVO.getReceiveaccount(); + // 判断是否为电票 + boolean isEbill = FbmCommonTools.isEBill(fbmbilltype); + // 票据号码长度校验 +// FbmCommonTools.checkFbmbillnoByIsEbill(fbmbillno, isEbill); + if (isEbill) { + /*if (StringUtil.isNull(receiveaccount)) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0051")*//* @res ":票据类型为电票,电票签约账号不能为空!" *//*); + }*/ + } else { + // 非电票,网银不可勾选,如果导入的时候网银勾选了,弹出提示 + UFBoolean onlinebankflag = registerVO.getOnlinebankflag(); + if (onlinebankflag != null && onlinebankflag.booleanValue()) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0072")/* @res ":非电票不允许勾选网银,请确认数据!" */); + } + } + if (StringUtil.isNotNull(registerVO.getBillrangestart()) && StringUtil.isNotNull(registerVO.getBillrangeend())) { + // 子票区间取消了长度校验,自动补齐 + registerVO.setBillrangestart(FbmCommonTools.autoFillRange(registerVO.getBillrangestart())); + registerVO.setBillrangeend(FbmCommonTools.autoFillRange(registerVO.getBillrangeend())); + } + + + //校验子票区间信息 + FbmCommonTools.validBillRange(registerVO, isEbill); + + //检查票号 + FbmCommonTools.billNoValication(fbmbillno); + + // 校验是否是回头票 + checkIsReturnedBill(registerVO); } + /** + * + * 校验票据是否为回头票 场景一:对方开票,背书给企业 + * 根据财务组织、票据号码、已收票字段在票据综合台账节点查询该组织是否已经存在相同号码且已收票为“是”的票,如果存在,则“回头票”字段自动标识为“Y”。 + * 场景二:企业开出的票据,经过流转后又回到企业 + * 根据财务组织、票据号码、票据状态在票据综合台账节点查询该组织是否已经存在相同号码且票据状态为“已付票”的票,如果存在,则“回头票”字段自动标识为“Y”。 + * + * @param registerVO 参数 + * @throws BusinessException + * + */ private void checkIsReturnedBill(RegisterVO registerVO) throws BusinessException { StringBuffer whereSql = new StringBuffer(); whereSql.append(" pk_org = '").append(registerVO.getPk_org()).append("' "); whereSql.append(" and fbmbillno = '").append(registerVO.getFbmbillno()).append("' "); - if (StringUtil.isNull(registerVO.getBillrangestart())) { + if(StringUtil.isNull(registerVO.getBillrangestart())) { whereSql.append(" and isnull(billrangestart, '0') = '0' "); - } else { + }else { whereSql.append(" and billrangestart <= '").append(registerVO.getBillrangestart()).append("' "); } - - if (StringUtil.isNull(registerVO.getBillrangeend())) { + + if(StringUtil.isNull(registerVO.getBillrangeend())) { whereSql.append(" and isnull(billrangeend, '0') = '0' "); - } else { + }else { whereSql.append(" and billrangeend >= '").append(registerVO.getBillrangeend()).append("' "); } - whereSql.append(" and ( endstatus = 'register' or endstatus = 'has_paybill' ) "); - Collection actionVOs = ((IMDPersistenceQueryService) NCLocator.getInstance() - .lookup(IMDPersistenceQueryService.class)) + @SuppressWarnings("unchecked") + Collection actionVOs = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class) .queryBillOfVOByCond(ActionVO.class, whereSql.toString(), false); boolean returnedBill = false; if (null != actionVOs && actionVOs.size() > 0) { @@ -311,34 +393,43 @@ public class GatherExcelImport4NCCImpl extends AbstractImportProceeWithContext { } registerVO.setReturnedbill(UFBoolean.valueOf(returnedBill)); } - + + /** + * 根据电票签约账号查询客商银行账户信息 + */ private BankAccbasVO getBankAccbasVOByReceiveaccount(RegisterVO pvo) throws BusinessException { StringBuffer whereSql = new StringBuffer(); whereSql.append(" pk_bankaccbas = (select pk_bankaccbas from bd_bankaccsub where pk_bankaccsub = '"); whereSql.append(NCESAPI.sqlEncode(pvo.getReceiveaccount())); whereSql.append("' ) "); - IMDPersistenceQueryService service = (IMDPersistenceQueryService) NCLocator.getInstance() - .lookup(IMDPersistenceQueryService.class); - Collection accbasVOs = service.queryBillOfVOByCond(BankAccbasVO.class, whereSql.toString(), - false); - if (accbasVOs != null && accbasVOs.size() > 0 - && ((BankAccbasVO[]) accbasVOs.toArray(new BankAccbasVO[0]))[0] != null) { - return ((BankAccbasVO[]) accbasVOs.toArray(new BankAccbasVO[0]))[0]; + IMDPersistenceQueryService service = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class); + @SuppressWarnings("unchecked") + Collection accbasVOs = service.queryBillOfVOByCond(BankAccbasVO.class, whereSql.toString(), false); + if (accbasVOs != null && accbasVOs.size() > 0 && accbasVOs.toArray(new BankAccbasVO[0])[0] != null) { + return accbasVOs.toArray(new BankAccbasVO[0])[0]; } else { - String var10002 = pvo.getFbmbillno(); - throw new BusinessException( - var10002 + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618ncc_0", "03618ncc-0077")); + throw new BusinessException(pvo.getFbmbillno() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("3618ncc_0", "03618ncc-0077")/* @res "查询电票签约账号对应账户信息异常!" */); + } } - + + /** + * 根据电票签约账号查询银行类别 + */ private BankdocVO getBanktypeByReceiveaccount(String receiveaccount) throws BusinessException { StringBuffer whereSql = new StringBuffer(); whereSql.append(" pk_bankdoc = (select pk_bankdoc from bd_bankaccbas where pk_bankaccbas = "); whereSql.append("(select pk_bankaccbas from bd_bankaccsub where pk_bankaccsub = '"); whereSql.append(NCESAPI.sqlEncode(receiveaccount)); whereSql.append("') ) "); - BankdocVO[] bankdocVO = ((IBankdocQueryService) NCLocator.getInstance().lookup(IBankdocQueryService.class)) + // 调银行档案接口根据收票账号(子户)查询对应的开户银行VO + BankdocVO[] bankdocVO = NCLocator.getInstance().lookup(IBankdocQueryService.class) .queryBankdocVOsByCon(whereSql.toString()); - return bankdocVO != null && bankdocVO.length != 0 ? bankdocVO[0] : null; + if (bankdocVO != null && bankdocVO.length != 0) { + return bankdocVO[0]; + } + return null; } + } diff --git a/fbm/src/public/nc/vo/fbm/pub/util/FbmCommonTools.java b/fbm/src/public/nc/vo/fbm/pub/util/FbmCommonTools.java index 888b82af..09b29c1f 100644 --- a/fbm/src/public/nc/vo/fbm/pub/util/FbmCommonTools.java +++ b/fbm/src/public/nc/vo/fbm/pub/util/FbmCommonTools.java @@ -1,17 +1,17 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - package nc.vo.fbm.pub.util; import java.util.Arrays; import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import nc.bs.sec.esapi.NCESAPI; +import org.apache.commons.codec.binary.StringUtils; + +import nc.bs.dao.DAOException; import nc.bs.framework.common.NCLocator; import nc.itf.fbm.gather.IGatherQueryService; import nc.md.model.MetaDataException; @@ -20,10 +20,13 @@ import nc.pub.templet.converter.util.helper.ExceptionUtils; import nc.pubitf.uapbd.IRateTypePubService; import nc.vo.bd.notetype.NotetypeVO; import nc.vo.bd.ratetype.RateTypeVO; +import nc.vo.fbm.impawn.ImpawnVO; +import nc.vo.fbm.pub.constant.FbmBusConstant; +import nc.vo.fbm.pub.constant.FbmFieldConstant; +import nc.vo.fbm.pub.constant.FbmPubConst; import nc.vo.fbm.register.AggRegisterVO; import nc.vo.fbm.register.RegisterVO; import nc.vo.fbm.util.BillRangeTools; -import nc.vo.ml.NCLangRes4VoTransl; import nc.vo.pub.AggregatedValueObject; import nc.vo.pub.BusinessException; import nc.vo.pub.CircularlyAccessibleValueObject; @@ -38,37 +41,69 @@ import nccloud.itf.fbm.gather.GatherConstant; import nccloud.itf.fbm.pub.IFBMCommonService4NCC; import nccloud.pubitf.tmpub.pub.ITMPrecisionServiceForNCC; import nccloud.vo.tmpub.precison.PrecisionField; -import org.apache.commons.codec.binary.StringUtils; +/** + * @author zhangjp6 + * + * + * 2019-3-13 + * + */ public class FbmCommonTools { - private static final IFBMCommonService4NCC commonService = (IFBMCommonService4NCC) NCLocator.getInstance() + private static final IFBMCommonService4NCC commonService = NCLocator.getInstance() .lookup(IFBMCommonService4NCC.class); - public FbmCommonTools() { - } - + /** + * 根据票据类型主键判断是否是电子票据 + * + * @param pk_fbmBilltype + * @return + */ public static boolean isEBill(String pk_fbmBilltype) { return commonService.isEBill(pk_fbmBilltype); } + /** + * 根据票据pk判断是否是电票大类 + * + * @param pk_register + * @return + */ public static boolean isEBillByPk_register(String pk_register) { try { return commonService.isEcdNoteClass(pk_register); - } catch (BusinessException var2) { - BusinessException e = var2; + } catch (BusinessException e) { ExceptionUtils.wrapException(e); - return false; } + return false; } + /** + * 根据票据类型主键,判断是不是银行承兑票据 + * + * @param pk_fbmBilltype + * @return + */ public static boolean isBankType(String pk_fbmBilltype) { return commonService.isBankType(pk_fbmBilltype); } + /** + * 根据票据类型主键,判断是不是商业承兑票据 + * + * @param pk_fbmBilltype + * @return + */ public static boolean isBusType(String pk_fbmBilltype) { return commonService.isBusType(pk_fbmBilltype); } + /** + * 根据票据编号获取票据类型主键 + * + * @param fbmbillno + * @throws BusinessException + */ public static String getfbmbilltypeByNo(String fbmbillno) throws BusinessException { String flag = null; String type = null; @@ -78,35 +113,62 @@ public class FbmCommonTools { isEbill = false; } else if (fbmbillno.length() == 30) { flag = String.valueOf(fbmbillno.charAt(0)); + } else { + // FbmCommonTools.checkFbmbillnoLength(fbmbillno); + flag = "5"; } - - Objects.requireNonNull(flag); if (isEbill) { switch (flag) { - case "5" -> type = "FBMTZ6E0000000000003"; - case "6" -> type = "FBMTZ6E0000000000004"; - case "1" -> type = "FBMTZ6E0000000000003"; - case "2" -> type = "FBMTZ6E0000000000004"; + case "5": + type = FbmBusConstant.PKNOTETYPE_EBANK; + break; + case "6": + type = FbmBusConstant.PKNOTETYPE_EBUSI; + break; + case "1": + type = FbmBusConstant.PKNOTETYPE_EBANK; + break; + case "2": + type = FbmBusConstant.PKNOTETYPE_EBUSI; + break; + default: + break; } } else { switch (flag) { - case "5" -> type = "FBMTZ6E0000000000001"; - case "6" -> type = "FBMTZ6E0000000000002"; + case "5": + type = FbmBusConstant.PKNOTETYPE_BANK; + break; + case "6": + type = FbmBusConstant.PKNOTETYPE_BUSI; + break; + default: + break; } } return type; } + /** + * @description: 根据单据主键判断分包标志的值 + * @author: baifyun + * @date: 2022/10/27 14:45 + * @param: [registerVO] + * @return: void + **/ + @SuppressWarnings("unchecked") public static void setSubcontractcirculation(RegisterVO registerVO, String fbmbilltype) throws MetaDataException { if (!StringUtil.isNull(fbmbilltype)) { String condtion = "PK_NOTETYPE = '" + fbmbilltype + "'"; - Collection collection = ((IMDPersistenceQueryService) NCLocator.getInstance() - .lookup(IMDPersistenceQueryService.class)).queryBillOfVOByCond(NotetypeVO.class, condtion, false); + Collection collection = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class) + .queryBillOfVOByCond(NotetypeVO.class, condtion, false); if (collection != null && collection.size() > 0) { - NotetypeVO notetypeVO = (NotetypeVO) collection.iterator().next(); + NotetypeVO notetypeVO = collection.iterator().next(); + // 电子商业汇票 为 9 商业汇票为2 if (notetypeVO.getNoteclass() == 9) { registerVO.setSubcontractcirculation(UFBoolean.TRUE); + // 当切换为true时设置对应的默认值 registerVO.setBillrangestart("000000000000"); registerVO.setBillrangeend("000000000000"); } else if (notetypeVO.getNoteclass() == 2) { @@ -114,266 +176,376 @@ public class FbmCommonTools { } } } - } + /** + * 根据票据类型编码 获取票据类型主键 + * + * @param billtypeCode + * @return + * @throws Exception + */ public static String getPKBilltypeByCode(String billtypeCode) throws Exception { return commonService.getPKBilltypeByCode(billtypeCode); } + /** + * 根据票据类型主键 获取票据编码 + * + * @param billtypeCode + * @return + * @throws DAOException + * @throws Exception + */ public static String getCodeByPKBilltype(String pk_billtype) throws BusinessException { + return commonService.getCodeByPKBilltype(pk_billtype); + } + /** + * 票据号校验 + * + * @param fbmbillno + * @throws BusinessException + */ public static void billNoValication(String fbmbillno) throws BusinessException { - if (fbmbillno != null && fbmbillno.length() != 0) { - Pattern blankCheck = Pattern.compile("\\s*|\t|\r|\n"); - if (blankCheck.matcher(fbmbillno) == null) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--186")); - } else { - // zhangxinah 去掉收票登记导入时票据长度校验 - // checkFbmbillnoLength(fbmbillno); - if (fbmbillno.length() > 16) { - eBillNoCheck(fbmbillno); - } else { - paperBillCheck(fbmbillno); - } - - } - } else { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--187")); + if (fbmbillno == null || fbmbillno.length() == 0) { + throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--187")/* @res "票据编号不为空!" */); } + + Pattern blankCheck = Pattern.compile("\\s*|\t|\r|\n"); + if (blankCheck.matcher(fbmbillno) == null) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--186")/* @res "票据编号中有空格!" */); + } + // zhangxinah 去掉收票登记导入时票据长度校验 + // checkFbmbillnoLength(fbmbillno); + + // 电子票据号 + if (fbmbillno.length() == 30) { + eBillNoCheck(fbmbillno); + } + // 纸质票据号 + /* + * else { paperBillCheck(fbmbillno); } + */ + } + /** + * 统一使用的票据号长度校验 + * + * @param fbmbillno 票据号码 + * @throws BusinessException + */ public static void checkFbmbillnoLength(String fbmbillno) throws BusinessException { - if (fbmbillno.length() != 30 && fbmbillno.length() != 16) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--185")); - } + /* + * if (fbmbillno.length() != 30 && fbmbillno.length() != 16) { throw new + * BusinessException(fbmbillno + + * nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + * "03618nccd--185") + *//* @res "票据编号长度不合要求!" *//* + * ); } + */ } + /** + * 统一使用的票据号长度校验 + * + * @param fbmbillno 票据号码 + * @param isEbill 是否电票 + * @throws BusinessException + */ public static void checkFbmbillnoByIsEbill(String fbmbillno, boolean isEbill) throws BusinessException { - if (isEbill) { - if (fbmbillno != null && fbmbillno.length() != 30) { - throw new BusinessException( - NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--185")); - } - } else if (fbmbillno != null && fbmbillno.length() != 16) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--185")); - } - + /* + * if (isEbill) { // 电票 if (fbmbillno != null && fbmbillno.length() != 30) { + * throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + * .getStrByID("3618nccd_0", "03618nccd--185") + *//* @res "票据号码长度有误,正确输入应为电票30位长度,纸票16位长度!" *//* + * ); } } else { // 纸票 if (fbmbillno != null && + * fbmbillno.length() != 16) { throw new + * BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + * .getStrByID("3618nccd_0", "03618nccd--185") + *//* @res "票据号码长度有误,正确输入应为电票30位长度,纸票16位长度!" *//* + * ); } } + */ } + /** + * 纸质票据号校验 + * + * @param fbmbillno + * @throws BusinessException + */ private static void paperBillCheck(String fbmbillno) throws BusinessException { + // 30位数字 Pattern pattern = Pattern.compile("\\d{16}"); Boolean ismatch = pattern.matcher(fbmbillno).matches(); if (!ismatch) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--184")/* @res "票据编号长度应为16位数字!" */); + } + + String bankCode = fbmbillno.substring(0, 3); + String provinceCode = fbmbillno.substring(4, 6); + String billtypeCode = fbmbillno.substring(6, 7); + String printCode = fbmbillno.substring(7, 8); + + // 省别码统一使用全国代码00 + if (!"00".equals(provinceCode)) {// 票据号第5,6位表示省别码,此省别码不符合标准! throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--184")); - } else { - String bankCode = fbmbillno.substring(0, 3); - String provinceCode = fbmbillno.substring(4, 6); - String billtypeCode = fbmbillno.substring(6, 7); - String printCode = fbmbillno.substring(7, 8); - if (!"00".equals(provinceCode)) { - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--183", - (String) null, new String[] { String.valueOf(fbmbillno) })); - } else if (!"5".equals(billtypeCode) && !"6".equals(billtypeCode)) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--182")); - } else if ("6".equals(billtypeCode) && !"001".equals(bankCode)) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--181")); - } else if ("7".equals(printCode) || "8".equals(printCode) || "9".equals(printCode)) { - throw new BusinessException( - fbmbillno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--180")); - } + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--183", null, + new String[] { String.valueOf(fbmbillno) })/* @res "票据号第5,6位表示省别码,票据号{0}对应的省别码不符合标准!" */); + } + + // 5位银行承兑汇票;6为商业承兑汇票 + if (!"5".equals(billtypeCode) && !"6".equals(billtypeCode)) {// 票据号第7位表示票据种类码,此票据种类码不符合标准! + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--182")/* @res "票据号第7位表示票据种类码,此票据种类码不符合标准!" */); + } + + // 商业承兑汇票不分行别,银行机构代码 统一使用人行代码001 + if ("6".equals(billtypeCode) && !("001".equals(bankCode))) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--181")/* @res "纸票商业承兑汇票第1~3位为银行机构代码,不分行别统一使用人行代码001!" */); + } + + // 编码从0到6,其中1至6代表其中六家印刷厂,0代表其他的十家印刷厂,第八位不可能出现数字7、8、9。 + if ("7".equals(printCode) || "8".equals(printCode) || "9".equals(printCode)) { + throw new BusinessException(fbmbillno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--180")/* @res "纸票票据号码第8位表示印制识别码,此印制识别码不符合标准!" */); } } + /** + * 电子票据号检验 + * + * @param fbmno + * @throws BusinessException + */ private static void eBillNoCheck(String fbmno) throws BusinessException { + + // 30位数字 Pattern pattern = Pattern.compile("\\d{30}"); Boolean ismatch = pattern.matcher(fbmno).matches(); // 电票不校验票据号长度 ismatch = true; if (!ismatch) { - throw new BusinessException( - fbmno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--179")); - } else { - String firstNum = fbmno.substring(0, 1); - if (!"2".equals(firstNum) && !"1".equals(firstNum) && !"5".equals(firstNum) && !"6".equals(firstNum)) { - throw new BusinessException( - fbmno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd--178")); - } else { - int year = Integer.parseInt(fbmno.substring(13, 17)); - int month = Integer.parseInt(fbmno.substring(17, 19)); - int day = Integer.parseInt(fbmno.substring(19, 21)); - if (month > 0 && month <= 12) { - if (year % 4 == 0 && month == 2 && (day <= 0 || day > 29)) { - throw new BusinessException( - fbmno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd-0243")); - } else if (year % 4 == 0 || month != 2 || day > 0 && day <= 28) { - Integer[] bigMonthArray = new Integer[] { 1, 3, 5, 7, 8, 10, 12 }; - Integer[] smallMonthArray = new Integer[] { 4, 6, 9, 11 }; - List bigMonth = Arrays.asList(bigMonthArray); - List smallMonth = Arrays.asList(smallMonthArray); - if (!bigMonth.contains(month) || day > 0 && day <= 31) { - if (smallMonth.contains(month) && (day <= 0 || day > 30)) { - throw new BusinessException(fbmno - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd-0243")); - } - } else { - throw new BusinessException(fbmno - + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd-0243")); - } - } else { - throw new BusinessException( - fbmno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd-0243")); - } - } else { - throw new BusinessException( - fbmno + NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", "03618nccd-0243")); - } - } + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--179")/* @res "电票票据号码长度应为30位数字!" */); + } + + String firstNum = fbmno.substring(0, 1); + if (!"2".equals(firstNum) && !"1".equals(firstNum) && !"5".equals(firstNum) && !"6".equals(firstNum)) { + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd--178")/* @res "电票票据号码第1位表示票据种类码,此票据种类码不符合标准!" */); + } + + int year = Integer.parseInt(fbmno.substring(13, 17)); + int month = Integer.parseInt(fbmno.substring(17, 19)); + int day = Integer.parseInt(fbmno.substring(19, 21)); + + if (!(month > 0 && month <= 12)) {// 票据号第14~22(包含14和22)位数字表示出票日期对应年月日,此段日期格式不符合标准! + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd-0243")/* @res "票据号第14~21(包含14和21)位数字表示出票日期对应年月日,此段日期格式不符合日期输入标准!" */); + } + + // 闰年(日校验) + if ((year % 4 == 0) && (month == 2) && !(day > 0 && day <= 29)) { + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd-0243")/* @res "票据号第14~21(包含14和21)位数字表示出票日期对应年月日,此段日期格式不符合日期输入标准!" */); + } + // 平年(日校验) + if (!(year % 4 == 0) && (month == 2) && !(day > 0 && day <= 28)) { + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd-0243")/* @res "票据号第14~21(包含14和21)位数字表示出票日期对应年月日,此段日期格式不符合日期输入标准!" */); + } + + Integer[] bigMonthArray = { 1, 3, 5, 7, 8, 10, 12 }; + Integer[] smallMonthArray = { 4, 6, 9, 11 }; + + List bigMonth = Arrays.asList(bigMonthArray); + List smallMonth = Arrays.asList(smallMonthArray); + + // 日校验 + if (bigMonth.contains(month) && !(day > 0 && day <= 31)) { + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd-0243")/* @res "票据号第14~22(包含14和22)位数字表示出票日期对应年月日,此段日期格式不符合日期输入标准!" */); + } else if (smallMonth.contains(month) && !(day > 0 && day <= 30)) { + throw new BusinessException(fbmno + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("3618nccd_0", + "03618nccd-0243")/* @res "票据号第14~22(包含14和22)位数字表示出票日期对应年月日,此段日期格式不符合日期输入标准!" */); } } + /** + * 银行档案缓存查询 接口 + */ public String getBankdocPkByAccessorAndName(String pk_org, String name) throws BusinessException { return commonService.getBankdocPkByAccessorAndName(pk_org, name); + } + /** + * 人行联行缓存查询 接口 + */ public String getAssLineNumPkByAccessorAndName(String pk_org, String name) throws BusinessException { return commonService.getAssLineNumPkByAccessorAndName(pk_org, name); + } + /** + * 客商银行账户子户 接口 + */ public String getBankaccsubPkByAccessorAndName(String name, String pk_curr) throws BusinessException { return commonService.getBankaccsubPkByAccessorAndName(name, pk_curr); + } + /** + * 上游推单下游重算汇率方法:如果没有上游 可以为空 那么需要在调用此方法之前将上游的三个多汇率方案字段复制到下游的aggvo中 + * + * @param aggregvo 上游单据 + * @param destAggvo 下游单据 + * @param headPrecisionFields 下游单据表头重算汇率字段 + * @param bodyPrecisionFields 下游单据表体重算汇率字段 + * @param errmsg 推单重算汇率后 组织本币汇率为空的时候的提示语 + * @return + * @throws BusinessException + */ public static AbstractBill resetProcessAmounts(AggregatedValueObject aggregvo, AbstractBill destAggvo, List headPrecisionFields, Map, List> bodyPrecisionFields, String errmsg) throws BusinessException { if (destAggvo == null) { return null; + } + Object olcratecategoryObj = new Object(); + Object olcratedate = new Object(); + Object olcratetype = new Object(); + Object olcrate = new Object(); + SuperVO destHeadVO = (SuperVO) destAggvo.getParentVO(); + if (aggregvo != null) { + SuperVO srcHeadVO = (SuperVO) aggregvo.getParentVO(); + olcratecategoryObj = srcHeadVO.getAttributeValue(FbmFieldConstant.OLCRATECATEGORY); + olcratedate = srcHeadVO.getAttributeValue(FbmFieldConstant.OLCRATEDATE); + olcratetype = srcHeadVO.getAttributeValue(FbmFieldConstant.OLCRATETYPE); + olcrate = srcHeadVO.getAttributeValue(FbmFieldConstant.OLCRATE); } else { - new Object(); - new Object(); - new Object(); - new Object(); - SuperVO destHeadVO = (SuperVO) destAggvo.getParentVO(); - Object olcratecategoryObj; - Object olcratedate; - Object olcratetype; - Object olcrate; - if (aggregvo != null) { - SuperVO srcHeadVO = (SuperVO) aggregvo.getParentVO(); - olcratecategoryObj = srcHeadVO.getAttributeValue("olcratecategory"); - olcratedate = srcHeadVO.getAttributeValue("olcratedate"); - olcratetype = srcHeadVO.getAttributeValue("olcratetype"); - olcrate = srcHeadVO.getAttributeValue("olcrate"); - } else { - olcratecategoryObj = destHeadVO.getAttributeValue("olcratecategory"); - olcratedate = destHeadVO.getAttributeValue("olcratedate"); - olcratetype = destHeadVO.getAttributeValue("olcratetype"); - olcrate = destHeadVO.getAttributeValue("olcrate"); + olcratecategoryObj = destHeadVO.getAttributeValue(FbmFieldConstant.OLCRATECATEGORY); + olcratedate = destHeadVO.getAttributeValue(FbmFieldConstant.OLCRATEDATE); + olcratetype = destHeadVO.getAttributeValue(FbmFieldConstant.OLCRATETYPE); + olcrate = destHeadVO.getAttributeValue(FbmFieldConstant.OLCRATE); + } + + String billtype = (String) destHeadVO.getAttributeValue(FbmFieldConstant.PK_BILLTYPECODE); + Integer olcratecategory = null; + if (olcratecategoryObj != null) { + olcratecategory = (Integer) olcratecategoryObj; + } else if (olcratecategoryObj == null && olcratetype != null) {// 应收应付的付款单没有类别这个字段 为什么财务这么棒 + IRateTypePubService service = NCLocator.getInstance().lookup(IRateTypePubService.class); + RateTypeVO[] rateTypeVOs = service.queryRateTypeByPKs(new String[] { (String) olcratetype }); + if (rateTypeVOs != null && rateTypeVOs.length != 0) { + olcratecategory = rateTypeVOs[0].getRate_category(); } - - String billtype = (String) destHeadVO.getAttributeValue("pk_billtypecode"); - Integer olcratecategory = null; - if (olcratecategoryObj != null) { - olcratecategory = (Integer) olcratecategoryObj; - } else if (olcratecategoryObj == null && olcratetype != null) { - IRateTypePubService service = (IRateTypePubService) NCLocator.getInstance() - .lookup(IRateTypePubService.class); - RateTypeVO[] rateTypeVOs = service.queryRateTypeByPKs(new String[] { (String) olcratetype }); - if (rateTypeVOs != null && rateTypeVOs.length != 0) { - olcratecategory = rateTypeVOs[0].getRate_category(); - } + } + // 1.上游单据的组织汇率类型不是固定汇率、自定义汇率时,下游单据的组织汇率类型的默认优先级是:上游单据的组织汇率类型—>下游单据自身的默认组织汇率类型的优先级 + // 2.上游单据的组织汇率类型是固定汇率、自定义汇率时,下游单据默认显示上游单据的组织汇率类型、组织本币汇率、组织汇率来源日期。 + destHeadVO.setAttributeValue(FbmFieldConstant.OLCRATETYPE, olcratetype); + // 组织本币主键 + boolean isResetRate = true; + if (olcratecategory != null && TMCurrencyUtil.judgeRatecategory(olcratecategory)) { + destHeadVO.setAttributeValue(FbmFieldConstant.OLCRATEDATE, olcratedate); + destHeadVO.setAttributeValue(FbmFieldConstant.OLCRATECATEGORY, olcratecategoryObj); + destHeadVO.setAttributeValue(FbmFieldConstant.OLCRATE, olcrate); + if (!StringUtil.isNull(billtype) && (billtype.equals(FbmPubConst.CONST_BILLTYPE_IMPAWN) + || billtype.equals(FbmPubConst.CONST_BILLTYPE_IMPAWNPOOL))) { + destHeadVO.setAttributeValue(ImpawnVO.OLCBRATE, olcrate); } - - destHeadVO.setAttributeValue("olcratetype", olcratetype); - boolean isResetRate = true; - if (olcratecategory != null && TMCurrencyUtil.judgeRatecategory(olcratecategory)) { - destHeadVO.setAttributeValue("olcratedate", olcratedate); - destHeadVO.setAttributeValue("olcratecategory", olcratecategoryObj); - destHeadVO.setAttributeValue("olcrate", olcrate); - if (!StringUtil.isNull(billtype) && (billtype.equals("36HA") || billtype.equals("36HK"))) { - destHeadVO.setAttributeValue("olcbrate", olcrate); - } - - FbmPublicUtil.copyRateTyefieldsHead2Body(destAggvo); - isResetRate = false; - } - - AbstractBill[] returnAggvos = ((ITMPrecisionServiceForNCC) NCLocator.getInstance() - .lookup(ITMPrecisionServiceForNCC.class)).processAggVOPrecision(new AbstractBill[] { destAggvo }, - headPrecisionFields, bodyPrecisionFields, isResetRate, true); - boolean notHasOlcrate = false; - if (!StringUtil.isNull(billtype) && (billtype.equals("36HA") || billtype.equals("36HK"))) { - if (StringUtil.isNull(destAggvo.getParent().getAttributeValue("olcbrate"))) { - notHasOlcrate = true; - } - } else if (StringUtil.isNull(destAggvo.getParent().getAttributeValue("olcrate"))) { + FbmPublicUtil.copyRateTyefieldsHead2Body(destAggvo); + isResetRate = false; + } + AbstractBill[] returnAggvos = NCLocator.getInstance().lookup(ITMPrecisionServiceForNCC.class) + .processAggVOPrecision(new AbstractBill[] { destAggvo }, headPrecisionFields, bodyPrecisionFields, + isResetRate, true); + boolean notHasOlcrate = false; + if (!StringUtil.isNull(billtype) && (billtype.equals(FbmPubConst.CONST_BILLTYPE_IMPAWN) + || billtype.equals(FbmPubConst.CONST_BILLTYPE_IMPAWNPOOL))) { + if (StringUtil.isNull(destAggvo.getParent().getAttributeValue(ImpawnVO.OLCBRATE))) { notHasOlcrate = true; } - - if (notHasOlcrate) { - throw new BusinessException(errmsg); - } else { - return returnAggvos[0]; - } + } else if (StringUtil.isNull(destAggvo.getParent().getAttributeValue(FbmFieldConstant.OLCRATE))) { + notHasOlcrate = true; } + if (notHasOlcrate) { + throw new BusinessException(errmsg); + } + return returnAggvos[0]; + } + /** + * @description: 判断票据号码是否有重叠 + * @author: baifyun + * @date: 2022/10/24 15:29 + * @param: [registerVO] + * @return: void + **/ + @SuppressWarnings("unchecked") public static void validRepeatBill(RegisterVO registerVO) throws BusinessException { + // 当时是否分包标志为是的时候校验子区间是否重叠 String fbmBillNo = registerVO.getFbmbillno(); - if (registerVO.getSubcontractcirculation() != null - && !registerVO.getSubcontractcirculation().equals(UFBoolean.FALSE) - && registerVO.getPk_register() == null) { - Integer billrangestart = BillRangeTools.handleBillRange(registerVO.getBillrangestart()); - Integer billrangeend = BillRangeTools.handleBillRange(registerVO.getBillrangeend()); - String condition = "FBMBILLNO = '" + fbmBillNo + "'"; - Collection collections = ((IMDPersistenceQueryService) NCLocator.getInstance() - .lookup(IMDPersistenceQueryService.class)) - .queryBillOfVOByCond(AggRegisterVO.class, condition, false); - if (collections != null && collections.size() > 0) { - Iterator var6 = collections.iterator(); - - while (var6.hasNext()) { - AggRegisterVO aggAllocateAgreeVO = (AggRegisterVO) var6.next(); - RegisterVO register = aggAllocateAgreeVO.getparentVO(); - if (billrangestart != null && billrangeend != null && register.getBillrangeend() != null - && register.getBillrangestart() != null - && (BillRangeTools.handleBillRange(register.getBillrangeend()) <= billrangeend - && BillRangeTools.handleBillRange(register.getBillrangeend()) >= billrangestart - || BillRangeTools.handleBillRange(register.getBillrangestart()) >= billrangestart - && BillRangeTools - .handleBillRange(register.getBillrangestart()) <= billrangeend)) { - throw new BusinessException( - "票据号码" + fbmBillNo + "子票区间" + billrangestart + "-" + billrangeend + "已存在"); - } - } - } + if (registerVO.getSubcontractcirculation() == null + || registerVO.getSubcontractcirculation().equals(UFBoolean.FALSE) + || registerVO.getPk_register() != null) { + return; + } + Long billrangestart = BillRangeTools.handleBillRange(registerVO.getBillrangestart()); + Long billrangeend = BillRangeTools.handleBillRange(registerVO.getBillrangeend()); + StringBuffer condition = new StringBuffer(); + condition.append(" fbmbillno = '" + NCESAPI.sqlEncode(registerVO.getFbmbillno()) + "' "); + condition.append(" and pk_org = '" + NCESAPI.sqlEncode(registerVO.getPk_org()) + "' "); + condition.append(" and (pk_billtypecode = '" + FbmBusConstant.BILLTYPE_SIGN + "' or pk_billtypecode='" + + FbmBusConstant.BILLTYPE_INITPAYBILL + "') "); + condition.append(" and dr = 0 "); + condition.append(" and registerstatus <> 'has_disable' "); + Collection collections = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class) + .queryBillOfVOByCond(AggRegisterVO.class, condition.toString(), false); + // 当数据库中有对应的票据时,判断子票区间是否有重复的,有重复则报错 + if (collections != null && collections.size() > 0) { + throw new BusinessException("应付票据票据号码" + fbmBillNo + "已存在"); } } - + + + /** + * @description: 计算金额是否与子票区间的金额相等 + * @author: baifyun + * @date: 2022/10/24 19:47 + * @param: [] + * @return: + **/ public static void validateAmount(RegisterVO registerVO) throws BusinessException { - if (registerVO.getSubcontractcirculation() != null - && !registerVO.getSubcontractcirculation().equals(UFBoolean.FALSE)) { - Integer billrangestart = BillRangeTools.handleBillRange(registerVO.getBillrangestart()); - Integer billrangeend = BillRangeTools.handleBillRange(registerVO.getBillrangeend()); - UFDouble money = registerVO.getMoney(); - if (billrangestart != null && billrangeend != null) { - Integer total = billrangeend - billrangestart + 1; - UFDouble count = (new UFDouble("0.01")).multiply((double) total); - if (count.compareTo(money) != 0) { - throw new BusinessException("票据号码" + registerVO.getFbmbillno() + "子票区间" + billrangestart + "-" - + billrangeend + "的金额" + count.toString() + "与票据金额不相等,请修改"); - } + if (registerVO.getSubcontractcirculation() == null + || registerVO.getSubcontractcirculation().equals(UFBoolean.FALSE)) { + return; + } + Long billrangestart = BillRangeTools.handleBillRange(registerVO.getBillrangestart()); + Long billrangeend = BillRangeTools.handleBillRange(registerVO.getBillrangeend()); + + UFDouble money = registerVO.getMoney(); + + if (billrangestart != null && billrangeend != null) { + // 票据金额=(子票区间最大序号-子票区间最小序号+1)*标准金额0.01 + Long total = billrangeend - billrangestart + 1; + UFDouble count = new UFDouble("0.01").multiply(total); + // 金额不一致报错 + if (count.compareTo(money) != 0) { + throw new BusinessException("票据号码" + registerVO.getFbmbillno() + "子票区间" + billrangestart + "-" + + billrangeend + "的金额" + count.toString() + "与票据金额不相等,请修改"); } } @@ -383,18 +555,33 @@ public class FbmCommonTools { Boolean isSplitAllowed = registerVO.getSubcontractcirculation() != null && registerVO.getSubcontractcirculation().booleanValue(); if (isSplitAllowed) { - String var10001 = registerVO.getBillrangestart(); - registerVO.setBillrange(var10001 + "-" + registerVO.getBillrangeend()); - } else if (ifBelongNewBillSystem(registerVO.getFbmbillno())) { - registerVO.setBillrange("0"); + // 允许分包流转时. + registerVO.setBillrange(registerVO.getBillrangestart() + "-" + registerVO.getBillrangeend()); + } else { + // 不允许分包流转时. + if (ifBelongNewBillSystem(registerVO.getFbmbillno())) { + // 新一代票据. + registerVO.setBillrange("0"); + } else { + // 旧系统票据. DO NOTHING. + } } - } + /** + * 获取精度服务 + * + * @return + */ private static ITMPrecisionServiceForNCC getPrecisionService() { - return (ITMPrecisionServiceForNCC) NCLocator.getInstance().lookup(ITMPrecisionServiceForNCC.class); + return NCLocator.getInstance().lookup(ITMPrecisionServiceForNCC.class); } + /** + * 获取金额精度 + * + * @throws BusinessException + */ private static RegisterVO calcMoneyPrecision(RegisterVO registerVO, UFDouble money) throws BusinessException { RegisterVO newRegisterVO = new RegisterVO(); newRegisterVO.setOlcmoney(registerVO.getOlcmoney()); @@ -412,178 +599,136 @@ public class FbmCommonTools { return newRegisterVO; } + /** + * 子票区间校验 + * + * @param registerVO + * @param isEbill + * @throws BusinessException + */ public static void validBillRange(RegisterVO registerVO, boolean isEbill) throws BusinessException { + // 能否分包流转 UFBoolean subcontractCirculation = registerVO.getSubcontractcirculation(); if (subcontractCirculation != null && subcontractCirculation.booleanValue()) { - label101: { - String billRangeStart = registerVO.getBillrangestart(); - String billRangeEnd = registerVO.getBillrangeend(); - String firstNum = registerVO.getFbmbillno().substring(0, 1); - if (isEbill && !"5".equals(firstNum) && !"6".equals(firstNum)) { - throw new BusinessException("票据" + registerVO.getFbmbillno() + "非新一代票据,不可进行分包流转!"); - } + String billRangeStart = registerVO.getBillrangestart(); + String billRangeEnd = registerVO.getBillrangeend(); + String firstNum = registerVO.getFbmbillno().substring(0, 1); + if (isEbill && !"5".equals(firstNum) && !"6".equals(firstNum)) { + throw new BusinessException("票据" + registerVO.getFbmbillno() + "非新一代票据,不可进行分包流转!"); + } - if (StringUtil.isNull(billRangeStart) || StringUtil.isNull(billRangeEnd)) { - throw new BusinessException("票据可分包流转状态下,票据子票区间开始和截止值不能为空!"); - } - - if (Long.valueOf(billRangeStart) > 0L && Long.valueOf(billRangeEnd) > 0L) { - if (billRangeStart.length() >= 12 && billRangeEnd.length() >= 12) { - if (Long.parseLong(billRangeEnd) < Long.parseLong(billRangeStart)) { - throw new BusinessException("子票区间截止值不能小于开始值!"); - } - - checkMoneyFormatCorrect(registerVO.getMoney()); - Long rangeDiff = Long.parseLong(registerVO.getBillrangeend()) - - Long.parseLong(registerVO.getBillrangestart()); - UFDouble diffMoney = (new UFDouble(rangeDiff)).add(1.0).multiply(0.01); - RegisterVO newRegisterVO = calcMoneyPrecision(registerVO, diffMoney); - if (newRegisterVO.getMoney().doubleValue() != registerVO.getMoney().doubleValue()) { - throw new BusinessException("票据号码" + registerVO.getFbmbillno() + ",子票区间" + billRangeStart - + "-" + billRangeEnd + "的金额" + newRegisterVO.getMoney().toString() - + "(根据公式自动计算出的金额)与票据金额不相等,请修改!"); - } - - if (!isEbill) { - throw new BusinessException("纸票不能进行分包流转!"); - } - - if (Long.parseLong(billRangeEnd) < Long.parseLong(billRangeStart)) { - throw new BusinessException("子票区间截止值不能小于开始值!"); - } - break label101; - } - - throw new BusinessException("子票区间开始值和截止值长度都必须为12位!"); - } + if (StringUtil.isNull(billRangeStart) || StringUtil.isNull(billRangeEnd)) { + throw new BusinessException("票据可分包流转状态下,票据子票区间开始和截止值不能为空!"); + } + if (Long.valueOf(billRangeStart) <= 0 || Long.valueOf(billRangeEnd) <= 0) { throw new BusinessException("子票区间开始值和截止值都必须大于0!"); } + + // 检查子票区间开始和截止值的长度 + if (billRangeStart.length() < 12 || billRangeEnd.length() < 12) { + throw new BusinessException("子票区间开始值和截止值长度都必须为12位!"); + } + + // 检查截止值不能小于开始值 + if (Long.parseLong(billRangeEnd) < Long.parseLong(billRangeStart)) { + throw new BusinessException("子票区间截止值不能小于开始值!"); + } + // 校验金额格式 + checkMoneyFormatCorrect(registerVO.getMoney()); + + // 计算子票区间的金额和修改的金额是否相等,不相等给出提示 + Long rangeDiff = Long.parseLong(registerVO.getBillrangeend()) + - Long.parseLong(registerVO.getBillrangestart()); + UFDouble diffMoney = new UFDouble(rangeDiff).add(1).multiply(0.01); + // 1.重算金额2.处理精度 + RegisterVO newRegisterVO = calcMoneyPrecision(registerVO, diffMoney); + if (newRegisterVO.getMoney().doubleValue() != registerVO.getMoney().doubleValue()) { + throw new BusinessException( + "票据号码" + registerVO.getFbmbillno() + ",子票区间" + (billRangeStart + "-" + billRangeEnd) + "的金额" + + newRegisterVO.getMoney().toString() + "(根据公式自动计算出的金额)与票据金额不相等,请修改!"); + } + + // 如果是纸票,不能拆分子票区间 + if (!isEbill) { + throw new BusinessException("纸票不能进行分包流转!"); + } + + // 检查截止值不能小于开始值 + if (Long.parseLong(billRangeEnd) < Long.parseLong(billRangeStart)) { + throw new BusinessException("子票区间截止值不能小于开始值!"); + } } + // 票据是否属于新一代票据 boolean isBelongNewBillSys = ifBelongNewBillSystem(registerVO.getFbmbillno()); - if (!isBelongNewBillSys || subcontractCirculation != null && subcontractCirculation.booleanValue() - || "0".equals(registerVO.getBillrangestart()) && "0".equals(registerVO.getBillrangeend())) { - if (isBelongNewBillSys || !StringUtil.isNotNull(registerVO.getBillrangestart()) - && !StringUtil.isNotNull(registerVO.getBillrangeend())) { - AggRegisterVO[] registers = ((IGatherQueryService) NCLocator.getInstance() - .lookup(IGatherQueryService.class)) - .queryRegisterByFbmBillnoAndPkorg(registerVO.getFbmbillno(), registerVO.getPk_org()); - if (null != registers && registers.length > 0) { - checkBillRangeRepeat(registers, registerVO); - } - - } else { - throw new BusinessException("非新一代票据不可进行分包流转,不可输入子票区间!"); - } - } else { + // 新一代票据系统,且不可分包流转的情况下,子票区间开始和结束值应该为0 + if (isBelongNewBillSys && (subcontractCirculation == null || !subcontractCirculation.booleanValue()) + && (!"0".equals(registerVO.getBillrangestart()) || !"0".equals(registerVO.getBillrangeend()))) { throw new BusinessException("票据[" + registerVO.getFbmbillno() + "]为新一代票且不可分包流转,子票区间开始和结束应为0!"); } + // 为勾选“能否分包流转”的情况下,传了子票区间的值 + if (!isBelongNewBillSys && (StringUtil.isNotNull(registerVO.getBillrangestart()) + || StringUtil.isNotNull(registerVO.getBillrangeend()))) { + throw new BusinessException("非新一代票据不可进行分包流转,不可输入子票区间!"); + } + } - public static String checkBillRangeRepeat(AggRegisterVO[] registers, RegisterVO newRegisterVO) - throws BusinessException { - int var4; - String var10002; - if (StringUtil.isNull(newRegisterVO.getPrimaryKey())) { - if (registers != null && registers.length == 1) { - AggRegisterVO register = registers[0]; - RegisterVO vo = register.getparentVO(); - if (!StringUtil.isNull(vo.getBillrangestart()) && !StringUtil.isNull(vo.getBillrangeend())) { - if (!StringUtil.isNull(newRegisterVO.getBillrangestart()) - && !StringUtil.isNull(newRegisterVO.getBillrangeend())) { - if (ifIncludesInterval(register, newRegisterVO)) { - var10002 = register.getparentVO().getFbmbillno(); - throw new BusinessException( - "票据号码" + var10002 + ",子票区间" + register.getparentVO().getBillrangestart() + "-" - + register.getparentVO().getBillrangeend() - + "已存在,请勿重复录入,请在票据台账节点查询该票据号对应单据是否处理完成!"); - } - - return null; - } - - throw new BusinessException("票据号[" + newRegisterVO.getFbmbillno() + "]已存在,且为等分票据,不可再登记非等分票据信息!"); - } - - if (!StringUtil.isNull(newRegisterVO.getBillrangestart()) - && !StringUtil.isNull(newRegisterVO.getBillrangeend())) { - return "票据号[" + newRegisterVO.getFbmbillno() + "]已存在,且为非等分票据,不可再登记等分票据信息!"; - } - - throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("3618fbm_0", "03618fbm-0598", - (String) null, new String[] { newRegisterVO.getFbmbillno() })); - } else if (registers != null && registers.length > 1) { - if (StringUtil.isNull(newRegisterVO.getBillrangestart()) - || StringUtil.isNull(newRegisterVO.getBillrangeend())) { - throw new BusinessException("票据号[" + newRegisterVO.getFbmbillno() + "]已存在,且为等分票据,不可再登记非等分票据信息!"); - } - - AggRegisterVO[] var7 = registers; - int var9 = registers.length; - - for (var4 = 0; var4 < var9; ++var4) { - AggRegisterVO vo = var7[var4]; - if (ifIncludesInterval(vo, newRegisterVO)) { - var10002 = vo.getparentVO().getFbmbillno(); - throw new BusinessException("票据号码" + var10002 + ",子票区间" + vo.getparentVO().getBillrangestart() - + "-" + vo.getparentVO().getBillrangeend() + "已存在,请勿重复录入,请在票据台账节点查询该票据号对应单据是否处理完成!"); - } + /** + * 检查子票区间或剩余子票区间是否有重复的,用于判断是回头票还是录入重复的票据 + * + * @param aggRegisterVO + * @param newRegisterVO + * @return + */ + private static boolean checkBillRangeOrAvailableBillRangesRepeat(AggRegisterVO aggRegisterVO, + RegisterVO newRegisterVO) { + // 如果ref_pk_register为空,则说明是原始票新一代 + if (StringUtil.isNull(aggRegisterVO.getparentVO().getRef_pk_register())) { + String avaliableRanges = aggRegisterVO.getparentVO().getAvailablebillranges(); + if (StringUtil.isNull(avaliableRanges)) { + return false; + } + String[] billrangeArr = null; + if (avaliableRanges.indexOf(",") > 0) { + billrangeArr = avaliableRanges.split(","); + } else { + billrangeArr = new String[] { avaliableRanges }; + } + AggRegisterVO curAggRegisterVO = new AggRegisterVO(); + for (String curBillrange : billrangeArr) { + RegisterVO vo = new RegisterVO(); + String[] splitRangeArr = curBillrange.split("-"); + vo.setBillrangestart(splitRangeArr[0]); + vo.setBillrangeend(splitRangeArr[1]); + curAggRegisterVO.setParentVO(vo); + if (ifIncludesInterval(curAggRegisterVO, newRegisterVO)) { + return true; } } } else { - if (registers == null || registers.length == 0) { - throw new BusinessException("修改失败,票据" + newRegisterVO.getFbmbillno() + "数据不存在!"); - } - - if (registers != null && registers.length > 1) { - if (newRegisterVO.getSubcontractcirculation() != null - && !newRegisterVO.getSubcontractcirculation().booleanValue()) { - throw new BusinessException("票据号码 " + newRegisterVO.getFbmbillno() + "作为等分票据已拆包,无法再变更为非等分票据!"); - } - - boolean intervalRepeat = false; - AggRegisterVO[] var3 = registers; - var4 = registers.length; - - for (int var5 = 0; var5 < var4; ++var5) { - AggRegisterVO vo = var3[var5]; - if (StringUtil.isNull(vo.getparentVO().getBillrangestart()) - || StringUtil.isNull(vo.getparentVO().getBillrangeend())) { - throw new BusinessException( - "修改失败,票据 " + newRegisterVO.getFbmbillno() + "既存在等分票据数据,又存在非等分票据数据!"); - } - - if (vo.getparentVO().getPk_register().equals(newRegisterVO.getPk_register())) { - if (vo.getparentVO().getBillrangestart().equals(newRegisterVO.getBillrangestart()) - && vo.getparentVO().getBillrangeend().equals(newRegisterVO.getBillrangeend())) { - intervalRepeat = false; - } - } else if (ifIncludesInterval(vo, newRegisterVO)) { - intervalRepeat = true; - } - } - - if (intervalRepeat) { - var10002 = newRegisterVO.getFbmbillno(); - throw new BusinessException("票据号码" + var10002 + ",子票区间" + newRegisterVO.getBillrangestart() + "-" - + newRegisterVO.getBillrangeend() + "已存在,请勿重复录入,请在票据台账节点查询该票据号对应单据是否处理完成!"); - } - } + return ifIncludesInterval(aggRegisterVO, newRegisterVO); } - - return null; + return false; } + /** + * 检查新数据是否跨越前、后子票区间 + * + * @param actionVO + * @return + */ private static boolean ifIncludesInterval(AggRegisterVO aggRegisterVO, RegisterVO newRegisterVO) { + boolean flag = false; + if (Long.parseLong(aggRegisterVO.getparentVO().getBillrangestart()) <= Long .parseLong(newRegisterVO.getBillrangeend()) && Long.parseLong(aggRegisterVO.getparentVO().getBillrangeend()) >= Long .parseLong(newRegisterVO.getBillrangeend())) { flag = true; } - if (Long.parseLong(aggRegisterVO.getparentVO().getBillrangestart()) <= Long .parseLong(newRegisterVO.getBillrangestart()) && Long.parseLong(aggRegisterVO.getparentVO().getBillrangeend()) >= Long @@ -622,58 +767,107 @@ public class FbmCommonTools { return flag; } + /** + * 校验金额是否为标准金额(0.01)的整数倍 并返回整数倍的数值 + * + * @param money + * @return + * @throws BusinessException + */ public static Long checkMoneyFormatCorrect(UFDouble money) throws BusinessException { if (money == null) { return 0L; - } else { - UFDouble standardAmountMultiplier = money.multiply(100.0); - long roundmum = standardAmountMultiplier.longValue(); - if (!(standardAmountMultiplier.sub(new UFDouble(roundmum)).doubleValue() > 0.0) - && !(standardAmountMultiplier.sub(new UFDouble(roundmum)).doubleValue() < 0.0)) { - return roundmum; - } else { - throw new BusinessException("等分票据的票据金额要等于标准金额的整数倍,请修改!"); - } } + // 金额 除以 标准金额(0.01) 除以.0.01=乘以100 + UFDouble standardAmountMultiplier = money.multiply(100); + // 保存到额金额是否为标准金额(0.01)的整数倍 + long roundmum = standardAmountMultiplier.longValue(); + // 是否大于0,如果大于0标识 + if (standardAmountMultiplier.sub(new UFDouble(roundmum)).doubleValue() > 0 + || standardAmountMultiplier.sub(new UFDouble(roundmum)).doubleValue() < 0) { + throw new BusinessException("等分票据的票据金额要等于标准金额的整数倍,请修改!"); + } + return roundmum; } + /** + * 格式化子票区间的值,固定为12为长度字符串 + * + * @param rangeValue + * @return + */ public static String formatBillRangeValue(String rangeValue) { if (StringUtil.isNull(rangeValue)) { - return "000000000001"; - } else if (rangeValue.length() != 12 && rangeValue.length() <= 12) { - long needSupplyCharacterLeng = (long) (12 - rangeValue.length()); - - StringBuilder builder; - for (builder = new StringBuilder(); needSupplyCharacterLeng > 0L; --needSupplyCharacterLeng) { - builder.append("0"); - } - - builder.append(rangeValue); - return builder.toString(); - } else { + return FbmBusConstant.DEFAULT_BILL_RANGESTART_INIT_VALUE; + } + if (rangeValue.length() == 12 || rangeValue.length() > 12) { return rangeValue; } + // 需要补充0的字符长度 + long needSupplyCharacterLeng = (12 - rangeValue.length()); + StringBuilder builder = new StringBuilder(); + while (needSupplyCharacterLeng > 0) { + builder.append("0"); + needSupplyCharacterLeng--; + } + builder.append(rangeValue); + return builder.toString(); } + /** + * 根据票号判断票据是否为新一代 + * + * @param fbmBillNo + * @return + */ public static String getBillSysTypeByFbmBillNo(String fbmBillNo) { if (StringUtil.isNull(fbmBillNo)) { return null; - } else { - String firstNum = fbmBillNo.substring(0, 1); - return ("5".equals(firstNum) || "6".equals(firstNum)) && fbmBillNo.length() == 30 ? "CS02" : "CS01"; } + String firstNum = fbmBillNo.substring(0, 1); + if (("5".equals(firstNum) || "6".equals(firstNum)) && fbmBillNo.length() == 30) { + // 标识为新一代电票 + return FbmBusConstant.CS02; + } + return FbmBusConstant.CS01; } + /** + * 票据是否属于新一代票据 + * + * @param fbmBillNo + * @return + */ public static boolean ifBelongNewBillSystem(String fbmBillNo) { String billsystype = getBillSysTypeByFbmBillNo(fbmBillNo); - return "CS02".equals(billsystype); + if (FbmBusConstant.CS02.equals(billsystype)) { + return true; + } + return false; } + /** + * 检查区间是否完整匹配. + */ public static boolean ifRangeMatched(CircularlyAccessibleValueObject one, CircularlyAccessibleValueObject other) { - String oneStart = (String) one.getAttributeValue("billrangestart"); - String oneEnd = (String) one.getAttributeValue("billrangeend"); - String otherStart = (String) other.getAttributeValue("billrangestart"); - String otherEnd = (String) other.getAttributeValue("billrangeend"); + String oneStart = (String) one.getAttributeValue(FbmPubConst.BILLRANGESTART); + String oneEnd = (String) one.getAttributeValue(FbmPubConst.BILLRANGEEND); + String otherStart = (String) other.getAttributeValue(FbmPubConst.BILLRANGESTART); + String otherEnd = (String) other.getAttributeValue(FbmPubConst.BILLRANGEEND); return StringUtils.equals(oneStart, otherStart) && StringUtils.equals(oneEnd, otherEnd); } -} + + /** + * 子票区间自动补齐12位 + * + * @param billRange + * @return + */ + public static String autoFillRange(String billRange) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(billRange) && !"0".equals(billRange)) { + Long number = Long.valueOf(billRange); + billRange = String.format("%012d", number); + } + return billRange; + } +} \ No newline at end of file diff --git a/gl/src/private/nc/bs/gl/glvoucher/processor/fip/NVoucherSumInDBProcessor.java b/gl/src/private/nc/bs/gl/glvoucher/processor/fip/NVoucherSumInDBProcessor.java new file mode 100644 index 00000000..9b15b2d5 --- /dev/null +++ b/gl/src/private/nc/bs/gl/glvoucher/processor/fip/NVoucherSumInDBProcessor.java @@ -0,0 +1,839 @@ +package nc.bs.gl.glvoucher.processor.fip; + +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.framework.common.NCLocator; +import nc.bs.gl.dao.GLBaseDAO; +import nc.bs.gl.voucher.service.TempTableUtils; +import nc.gl.utils.GLNumUtils; +import nc.impl.gl.pub.TempTableCreater; +import nc.itf.gl.pub.ICashFlowCase; +import nc.jdbc.framework.processor.BeanListProcessor; +import nc.vo.fi.pub.SqlUtils; +import nc.vo.fip.external.FipBillSumRSVO; +import nc.vo.fip.service.FipRelationInfoVO; +import nc.vo.fipub.freevalue.GlAssVO; +import nc.vo.fipub.freevalue.Module; +import nc.vo.fipub.utils.StrTools; +import nc.vo.gateway60.itfs.AssByPkThreadCache; +import nc.vo.gl.cashflowcase.CashflowcaseVO; +import nc.vo.gl.glvoucher.AggNVoucherVO; +import nc.vo.gl.glvoucher.NDetailVO; +import nc.vo.gl.glvoucher.NVoucherVO; +import nc.vo.glcom.ass.AssVO; +import nc.vo.glcom.constant.GLVoucherKindConst; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.pub.MapList; +import nc.vo.voucher.fip.SchemeConst; + +import java.sql.SQLException; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class NVoucherSumInDBProcessor extends NVoucherSumProcessor { + public NVoucherSumInDBProcessor(String pk_sumrule) { + super(pk_sumrule); + } + + private Map mergedHead = new HashMap<>(); + + private MapList detailContainer = new MapList<>(); + + private MapList groupedRelationIdMap = new MapList<>(); + + private MapList groupedRelationVOMap = new MapList<>(); + + private Map assVOMap = new HashMap<>(); + + private String groupTempTableName; + + @Override + public List processSumData(List sumRSVOs) throws BusinessException { + fillGroupedRelationMap(sumRSVOs); + createGroupTempTable(); + prepareGroupTempTableData(); + generateMergedHead(); + loadSchemeInfo(); + sumDetail(); + List aggVouchers = constructVouchers(); + + List results = new ArrayList<>(); + for(AggNVoucherVO aggVoucher : aggVouchers) { + NVoucherSupply4FipProcessor supplyProcessor = new NVoucherSupply4FipProcessor(aggVoucher); + supplyProcessor.process(); + FipBillSumRSVO sumRSVO = new FipBillSumRSVO(); + sumRSVO.setBillVO(aggVoucher); + NVoucherVO voucher = aggVoucher.getParentVO(); + String groupId = (String)voucher.getAttributeValue("groupid"); + sumRSVO.setRelationvos(groupedRelationVOMap.get(groupId).toArray(new FipRelationInfoVO[0])); + sumRSVO.setMessageinfo(generateMsgInfo(aggVoucher)); + results.add(sumRSVO); + } + return results; + } + + private void fillGroupedRelationMap(Collection sumRsVOs) { + int groupIndex = 0; //分组号 + for(FipBillSumRSVO sumRSVO : sumRsVOs) { + FipRelationInfoVO[] relationInfos = sumRSVO.getRelationvos(); + if(relationInfos == null || relationInfos.length == 0) { + continue; + } + + String groupNO = generateGroupNO(++groupIndex); + for(FipRelationInfoVO relationInfo : relationInfos) { + groupedRelationIdMap.put(groupNO, relationInfo.getRelationID()); + groupedRelationVOMap.put(groupNO, relationInfo); + } + } + } + + private String generateGroupNO(int groupIndex) { + int maxLength = 8; + String groupNO = StrTools.supplementStr(groupIndex, maxLength, '0', true); + return groupNO; + } + + private void createGroupTempTable() throws BusinessException { + String[] columns = new String[]{"pk_voucher", "pk_detail", "groupid"}; + int[] coltype = new int[] {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR}; + try { + groupTempTableName = TempTableCreater.createTempTable("tmp_gl_fipsum", columns, coltype); + } catch (SQLException e) { + throw new BusinessException(e); + } + } + + /** + * 准备分组临时表数据 + * @throws BusinessException + */ + private void prepareGroupTempTableData() throws BusinessException { + String[] columns = new String[] {"pk_voucher", "groupid"}; + List datas = new ArrayList<>(); + for(String groupId : groupedRelationIdMap.keySet()) { + List pk_vouchers = groupedRelationIdMap.get(groupId); + for(String pk_voucher : pk_vouchers) { + Object[] data = new Object[] {pk_voucher, groupId}; + datas.add(data); + } + } + new GLBaseDAO().excuteInsertBatch(groupTempTableName, columns, datas); + } + + /** + * 生成主表合并后数据 + * @throws BusinessException + */ + + private void generateMergedHead() throws BusinessException { + String sql = generateMergeHeadSql(); + List vouchers = new GLBaseDAO().excuteQuery(sql, NVoucherVO.class); + if(vouchers==null || vouchers.size()==0) { + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("glnvoucher_0", + "0glnvoucher-0114")/* "查询不到临时凭证,可能是冻结状态" */); + } + //针对合并凭证,需要用的制单人转换模板制单人设置公式,其余单据不设置,用min取设置公式的制单人 sunfj + if(StrTools.isEmptyStr((vouchers.get(0)).getPk_prepared())) { + String sql2 = sql.replace("max(pk_prepared) as pk_prepared","min(pk_prepared) as pk_prepared " ); + List vouchers2 = new GLBaseDAO().excuteQuery(sql2, NVoucherVO.class); + if(vouchers2 != null && !vouchers2.isEmpty()) { + vouchers = vouchers2; + } + } + + + for(NVoucherVO voucher : vouchers) { + //补充制单人 + if(StrTools.isEmptyStr(voucher.getPk_prepared())) { + voucher.setPk_prepared(InvocationInfoProxy.getInstance().getUserId()); + } + + if(voucher.getVoucherkind() == null) { + voucher.setVoucherkind(GLVoucherKindConst.NORMAL); + } + + if(voucher.getPk_exratetype2() == null) { +// RateTypeVO rateTypeVO = new RateTypeThreadCache().getRateTypeByPk_Accountingbook(voucher.getPk_accountingbook()); +// String pk_exratetype2 = RateUtil.getInstance(voucher.getPk_accountingbook()).getDefaultPk_exratetype();//TODO 添加缓存缓存 +// voucher.setPk_exratetype2(rateTypeVO.getPk_ratetype()); + } + + //FIXME 重置adjustperiod,测试提问题:前台生成列表页面 期间都是空的受不了了 + if(voucher.getAdjustperiod() == null && voucher.getPeriod()!=null) { + voucher.setAdjustperiod(voucher.getPeriod()); + } + + String groupid = (String)voucher.getAttributeValue("groupid"); + if(mergedHead.get(groupid) != null) { + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("glnvoucher_0","0glnvoucher-0014")/*@res "数据中因为有些字段不同,有不能合并成一张凭证的情况,请检查下面的字段是否相同:集团,组织,财务核算账簿,凭证类别,交易类型,自定义项。"*/); + } + mergedHead.put(groupid, voucher); + } + + combinSystem(); + } + + private void loadSchemeInfo() throws BusinessException { + NVoucherVO voucher = mergedHead.values().toArray(new NVoucherVO[0])[0]; + String pk_accountingbook = voucher.getPk_accountingbook(); + String versionDate = voucher.getPrepareddate().toStdString(); + loadSchemeInfo(pk_accountingbook, versionDate); + } + + private void sumDetail() throws BusinessException { + String[] sumSqls = getSumSql(); + String[] normalSqls = getNormalSql(); + + String[] sumConditions = getSumConditions(); + String unSumCondition = getUnSumCondition(); + + if(sumConditions != null && sumConditions.length > 0) { + for(String sumCondition : sumConditions) { + String sql = sumSqls[0] + sumSqls[1] + sumSqls[2] + sumCondition + sumSqls[3] + sumSqls[4]; + MapList results = queryDetailsBySql(sql); + //cat 现金流量 + catCashFlowCaseForSum(results, sumSqls[3].substring(6), sumSqls[1], sumCondition); + mixDetail(detailContainer, results); + } + } + + if(isCombinSameAccount()) { + if(unSumCondition != null && unSumCondition.length() > 0) { + String sql = normalSqls[0] + normalSqls[1] + normalSqls[2] + unSumCondition + normalSqls[3] + normalSqls[4]; + MapList results = queryDetailsBySql(sql); + //cat 现金流量 + catCashFlowCase(results); + mixDetail(detailContainer, results); + } + }else { + String sql = normalSqls[0] + normalSqls[1] + normalSqls[2] + unSumCondition + normalSqls[3] + normalSqls[4]; + MapList results = queryDetailsBySql(sql); + //cat 现金流量 + catCashFlowCase(results); + mixDetail(detailContainer, results); + } + } + + /** + * 构造凭证 + * modify 2022-02-23 没有分录返回主表信息 + * @return + * @throws BusinessException + */ + private List constructVouchers() throws BusinessException{ + List results= new ArrayList<>(); + //加载辅助核算信息 + loadAssInfo(); + //TODO 加载科目信息 + + String[] groupIds = groupedRelationIdMap.keySet().toArray(new String[0]); + Arrays.sort(groupIds);//分组id排序 + + for(String groupid : groupIds) { + + NVoucherVO voucher = mergedHead.get(groupid); + List details = detailContainer.get(groupid); + + if(details == null) { + details = new ArrayList<>(); + } + //补充ASSVO + for(NDetailVO detail : details) { + if(StrTools.isEmptyStr(detail.getAssid())) { + continue; + } + if(detail.getAssvos() == null) { + AssVO[] assVOs = assVOMap.get(detail.getAssid()); + detail.setAssvos(assVOs); + } + } + AggNVoucherVO aggVoucher = combinAggVoucher(voucher, details); + results.add(aggVoucher); + + } + return results; + } + + /** + * 生成合并表头的sql + * TODO 交易类型 + * @return + */ + private String generateMergeHeadSql() { + StringBuilder sql = new StringBuilder(); + sql.append("select b.groupid as groupid,pk_group, pk_org,pk_accountingbook,pk_vouchertype, pk_tradetype, 'C0' as pk_billtype, ") + .append("max(year) as year, max(period) as period, 0 as no, max(prepareddate) as prepareddate, null as pk_system,") + .append(" null as tallydate, sum(attachment) as attachment, max(pk_prepared) as pk_prepared, null as checker, null as casher, ") + .append(" null as manager, min(signflag) as signflag, min(modifyflag) as modifyflag, 'N' as discardflag, max(addclass) as addclass,") + .append(" max(deleteclass) as deleteclass, min(DETAILMODFLAG) as detailModflag, ") + .append(" null as pk_billtype, "); + for(int i = 1; i<= 30; i++) { + sql.append(" vdef").append(i).append(","); + } + sql.append(" null as pk_voucher, max(pk_exratetype2) as pk_exratetype2 "); + + sql.append("from gl_rtvoucher a inner join ").append(groupTempTableName).append(" b on a.pk_voucher = b.pk_voucher "); + sql.append("group by groupid,pk_group,pk_org,pk_accountingbook,pk_vouchertype,pk_tradetype,"); + for(int i = 1; i<= 30; i++) { + sql.append(" vdef").append(i).append(","); + } + sql.deleteCharAt(sql.length() - 1); + return sql.toString(); + } + + + /** + * 合并制单系统 + * @throws DAOException + */ + private void combinSystem() throws DAOException { + Map combinSystemMap = queryCombinSystem(); + for(String groupid : mergedHead.keySet()) { + NVoucherVO voucher = mergedHead.get(groupid); + voucher.setPk_system(combinSystemMap.get(groupid)); + } + } + + /** + * 查询制单系统 + * @return + * @throws DAOException + */ + private Map queryCombinSystem() throws DAOException{ + String sql = "select distinct groupid,pk_system from gl_rtvoucher a inner join " + + groupTempTableName + " b on a.pk_voucher = b.pk_voucher where isnull(groupid, '~') <> '~'"; + List> groupSystemList = new GLBaseDAO().excuteQuery(sql); + + MapList groupedSystem = new MapList<>(); + for(Map groupSystem : groupSystemList) { + String pk_system = (String)groupSystem.get("pk_system"); + if(pk_system != null) { + groupedSystem.put((String)groupSystem.get("groupid"), pk_system.trim()); + } + } + + Map result = new HashMap<>(); + for(String groupid : groupedSystem.keySet()) { + List systems = groupedSystem.get(groupid); + if(systems != null && systems.size() > 0) { + //去重 + Set systemSet = new LinkedHashSet(); + systemSet.addAll(systems); + + result.put(groupid, StrTools.join(systemSet.iterator(), ",")); + } + } + return result; + } + + + + + /** + * 0 select + * 1 from + * 2 where + * 3 group + * 4 order + * @return + */ + private String[] getSumSql() { + String[] results = new String[5]; + results[0] = generateSumSelectSql(); + results[1] = " from gl_rtdetail a inner join " + groupTempTableName + " b on a.pk_voucher = b.pk_voucher "; + results[2] = " where a.dr = 0 "; + results[3] = generateSumGroupSql(); + results[4] = " order by groupid "; + + if(isCombinExplan()) { + results[0] = results[0].replaceFirst("a.explanation", "max(a.explanation)"); + results[3] = results[3].replaceFirst(",a.explanation,", ","); + } + + if(isCombinPrice()) { + results[0] = results[0].replaceFirst("a.price", "sum(a.price)"); + results[3] = results[3].replaceFirst(", a.price,", ","); + } + + if(isCombinExrateInfo()) { + results[0] = results[0].replaceFirst("a." + NDetailVO.PK_EXRATETYPE2, "max(a." + NDetailVO.PK_EXRATETYPE2 + ")"); + results[0] = results[0].replaceFirst("a." + NDetailVO.EXRATEDATE2, "max(a." + NDetailVO.EXRATEDATE2 + ")"); + results[3] = results[3].replaceFirst(", " + NDetailVO.PK_EXRATETYPE2 + ",", ","); + results[3] = results[3].replaceFirst(", " + NDetailVO.EXRATEDATE2 + ",", ","); + } + + return results; + } + + /** + * 0 select + * 1 from + * 2 where + * 3 group + * 4 order + * @return + */ + private String[] getNormalSql() { + String[] results = new String[5]; + results[0] = generateNormalSelectSql(); + results[1] = " from gl_rtdetail a inner join " + groupTempTableName + " b on a.pk_voucher = b.pk_voucher "; + results[2] = " where a.dr = 0 "; + results[3] = ""; + results[4] = " order by groupid "; + + return results; + } + + private List generateDetailFields() { + /** + * 第一个字段 为 a + * 第二个字段 + * "null" => null as a + * null => a as a + * min => min(a) as a + * max => max(a) as a + * sum => sum(a) as a + */ + List fields = new ArrayList<>(); + fields.add(new String[] {NDetailVO.PK_DETAIL, "min"}); + fields.add(new String[] {NDetailVO.NOV, "null"}); + fields.add(new String[] {NDetailVO.OPPOSITESUBJ, "null"}); + fields.add(new String[] {NDetailVO.BANKACCOUNT, null}); + fields.add(new String[] {NDetailVO.PK_VOUCHER, "null"}); + fields.add(new String[] {NDetailVO.PK_ORG, "min"}); + fields.add(new String[] {NDetailVO.MODIFYFLAG, "min"}); + fields.add(new String[] {NDetailVO.RECIEPTCLASS, "min"}); + fields.add(new String[] {NDetailVO.DEBITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.DEBITQUANTITY, "sum"}); + fields.add(new String[] {NDetailVO.LOCALDEBITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.GROUPDEBITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.GLOBALDEBITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.CREDITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.CREDITQUANTITY, "sum"}); + fields.add(new String[] {NDetailVO.LOCALCREDITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.GROUPCREDITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.GLOBALCREDITAMOUNT, "sum"}); + fields.add(new String[] {NDetailVO.PK_ACCOUNTINGBOOK, null}); + fields.add(new String[] {NDetailVO.PK_UNIT, null}); + fields.add(new String[] {NDetailVO.PK_UNIT_V, null}); + fields.add(new String[] {NDetailVO.PK_VOUCHERTYPEV, null}); + fields.add(new String[] {NDetailVO.YEARV, null}); + fields.add(new String[] {NDetailVO.PERIODV, null}); + fields.add(new String[] {NDetailVO.EXPLANATION, null}); + fields.add(new String[] {NDetailVO.PK_ACCASOA, null}); + fields.add(new String[] {NDetailVO.ASSID, null}); + fields.add(new String[] {NDetailVO.PK_CURRTYPE, null}); + fields.add(new String[] {NDetailVO.PRICE, null}); + fields.add(new String[] {NDetailVO.EXCRATE2, null}); + fields.add(new String[] {NDetailVO.EXCRATE3, null}); + fields.add(new String[] {NDetailVO.EXCRATE4, null}); + fields.add(new String[] {NDetailVO.CHECKSTYLE, null}); + fields.add(new String[] {NDetailVO.CHECKNO, null}); + fields.add(new String[] {NDetailVO.CHECKDATE, null}); + fields.add(new String[] {NDetailVO.BILLTYPE, null}); + fields.add(new String[] {NDetailVO.BUSIRECONNO, null}); + fields.add(new String[] {NDetailVO.NETBANKFLAG, null}); + fields.add(new String[] {NDetailVO.VERIFYDATE, null}); + fields.add(new String[] {NDetailVO.VERIFYNO, null}); + fields.add(new String[] {NDetailVO.PK_LIABILITYCENTER, null}); + fields.add(new String[] {NDetailVO.PK_LIABILITYCENTER_V, null}); + fields.add(new String[] {NDetailVO.PK_EXRATETYPE2, null}); + fields.add(new String[] {NDetailVO.EXRATEDATE2, null}); + fields.add(new String[] {NDetailVO.DUEDATE, null}); + fields.add(new String[] {NDetailVO.ORDERSTR, "max"}); + for(int i = 1; i <= 80 ;i ++) { + fields.add(new String[] {"vbdef" + i, null}); + } + return fields; + } + + private String generateSumColumnStr(String tableAlias, String[] field) { + StringBuilder columnStr = new StringBuilder(" "); + String fieldName = field[0]; + String oper = field[1]; + if(oper == null) { + columnStr.append(tableAlias).append(".").append(fieldName); + }else if(oper.equals("null")) { + columnStr.append("null"); + }else if(oper.equals("sum")) { + columnStr.append("sum(").append(tableAlias).append(".").append(fieldName).append(")"); + }else if(oper.equals("min")) { + columnStr.append("min(").append(tableAlias).append(".").append(fieldName).append(")"); + }else if(oper.equals("max")){ + columnStr.append("max(").append(tableAlias).append(".").append(fieldName).append(")"); + } + + columnStr.append(" as ").append(fieldName); + return columnStr.toString(); + } + + private String generateSumSelectSql() { + StringBuilder selectSql = new StringBuilder("select "); + List fields = generateDetailFields(); + for(String[] field : fields) { + selectSql.append(generateSumColumnStr("a", field)); + selectSql.append(", "); + } + selectSql.append("b.groupid as groupid "); + return selectSql.toString(); + } + + private String generateSumGroupSql() { + StringBuilder groupSql = new StringBuilder(); + groupSql.append(" group by b.groupid,a.pk_accountingbook,a.pk_unit,a.pk_unit_v,pk_vouchertypev,yearv,periodv,a.explanation,"); + groupSql.append(" a.pk_accasoa, assid, pk_currtype, a.price, excrate2, excrate3,excrate4,bankaccount,checkstyle, checkno,"); + groupSql.append(" checkdate, billtype, innerbusno, innerbusdate, busireconno,netbankflag, verifydate, verifyno, "); + groupSql.append(" pk_liabilitycenter, pk_liabilitycenter_v, duedate, "); + + for(int i = 1; i <= 80; i++) { + groupSql.append("vbdef").append(i).append(","); + } + groupSql.append(" pk_exratetype2, exratedate2 "); + return groupSql.toString(); + } + + private String generateNormalSelectSql() { + StringBuilder selectSql = new StringBuilder(); + selectSql.append("select "); + List fields = generateDetailFields(); + for(String[] field : fields) { + selectSql.append(" a.").append(field[0]).append(" as ").append(field[0]); + selectSql.append(", "); + } + selectSql.append(" b.groupid as groupid "); + return selectSql.toString(); + } + + /** + * 构造需要合并的查询条件 + * @return + * @throws BusinessException + */ + private String[] getSumConditions() throws BusinessException { + List conditions = new ArrayList<>(); + + boolean isCombinAccount = isCombinSameAccount(); + + StringBuilder condition = new StringBuilder(); + if(isCombinAccount) {//合并科目,排除例外科目 + //科目条件 + if(getExAccountPks() != null && getExAccountPks().length > 0) { + String inAccountSql = SqlUtils.getInStr("a.pk_accasoa", getExAccountPks(),Boolean.TRUE); + String notInAccountSql = inAccountSql.replaceFirst("in", "not in"); + condition.append(" and ").append(notInAccountSql); + } + }else {//不合并科目,则只合并例外科目 + if(getExAccountPks() == null || getExAccountPks().length == 0) { + return null; + }else { + String inAccountSql = SqlUtils.getInStr("a.pk_accasoa", getExAccountPks(),Boolean.TRUE); + condition.append(" and ").append(inAccountSql); + } + } + + //借贷条件 + if(SchemeConst.COMBINTYPE_D.equals(getCominType())){ + condition.append(" and ").append("(debitquantity<>0 or localdebitamount<>0 or groupdebitamount<>0 or globaldebitamount<>0) "); + conditions.add(condition.toString()); + }else if(SchemeConst.COMBINTYPE_C.equals(getCominType())) { + condition.append(" and ").append("(creditquantity<>0 or localcreditamount<>0 or groupcreditamount<>0 or globalcreditamount<>0) "); + conditions.add(condition.toString()); + }else { + if(isCombinDiffDirection()) { + conditions.add(condition.toString()); + }else { + //借方条件 + String conditionDebit = condition.toString() + " and (debitquantity<>0 or localdebitamount<>0 or groupdebitamount<>0 or globaldebitamount<>0) "; + conditions.add(conditionDebit); + //贷方条件 + String conditionCredit = condition.toString() + " and (creditquantity<>0 or localcreditamount<>0 or groupcreditamount<>0 or globalcreditamount<>0) "; + conditions.add(conditionCredit); + } + } + + return conditions.toArray(new String[0]); + + } + + /** + * 构造不需要合并的查询条件 + * @return null 说明 不合并科目且没有例外科目,全部采用不合并逻辑处理 + * @throws BusinessException + */ + private String getUnSumCondition() throws BusinessException { + StringBuilder condition = new StringBuilder(); + + if(isCombinSameAccount()) { + if(getExAccountPks() != null && getExAccountPks().length > 0) { + String inAccountSql = SqlUtils.getInStr("a.pk_accasoa", getExAccountPks(),Boolean.TRUE); + condition.append(inAccountSql); + } + }else { + if(getExAccountPks() != null && getExAccountPks().length > 0) { + String inAccountSql = SqlUtils.getInStr("a.pk_accasoa", getExAccountPks(),Boolean.TRUE); + String notInAccountSql = inAccountSql.replaceFirst("in", "not in"); + condition.append(notInAccountSql); + }else { + return ""; + } + } + + if(SchemeConst.COMBINTYPE_D.equals(getCominType())) { + if(condition.length() > 0){ + condition.append(" or "); + } + condition.append("(creditquantity<>0 or localcreditamount<>0 or groupcreditamount<>0 or globalcreditamount<>0) "); + }else if(SchemeConst.COMBINTYPE_C.equals(getCominType())) { + if(condition.length() > 0){ + condition.append(" or "); + } + condition.append(" (debitquantity<>0 or localdebitamount<>0 or groupdebitamount<>0 or globaldebitamount<>0) "); + } + + if(condition.length() > 0) { + condition.insert(0, " and ("); + condition.append(") "); + } + + return condition.toString(); + } + + private MapList queryDetailsBySql(String sql) throws DAOException{ + MapList results = new MapList<>(); + @SuppressWarnings("unchecked") + List details = (List)new BaseDAO().executeQuery(sql, new BeanListProcessor(NDetailVO.class)); + if(details != null && details.size() > 0) { + for(NDetailVO detail : details) { + results.put((String)detail.getAttributeValue("groupid"), detail); + } + } + return results; + } + + private void mixDetail(MapList container, MapList queryResults) { + if(queryResults != null) { + for(String key : queryResults.keySet()) { + container.putAll(key, queryResults.get(key)); + } + } + } + + private boolean isAllZero(NDetailVO detail) { + return GLNumUtils.allZero( + detail.getCreditquantity(), detail.getDebitquantity(), + detail.getCreditamount(), detail.getDebitamount(), + detail.getLocalcreditamount(), detail.getLocaldebitamount(), + detail.getGroupcreditamount(), detail.getGroupdebitamount(), + detail.getGlobalcreditamount(), detail.getGlobaldebitamount() + ); + } + + /** + * 参数顺序决定优先级 + * + * result > 0 借 + * result < 0 贷 + * result == 0 平 + * @return + */ + private int detailDirection(UFDouble... amounts) { + for(UFDouble amount : amounts) { + if(amount.compareTo(UFDouble.ZERO_DBL) != 0) { + return amount.compareTo(UFDouble.ZERO_DBL); + } + } + return 0; + } + + private int detailDirection(NDetailVO detail) { + UFDouble amount = GLNumUtils.sub(detail.getDebitamount(), detail.getCreditamount()); + UFDouble quantity = GLNumUtils.sub(detail.getDebitquantity(), detail.getCreditquantity()); + UFDouble localAmount = GLNumUtils.sub(detail.getLocaldebitamount(), detail.getLocalcreditamount()); + UFDouble groupAmount = GLNumUtils.sub(detail.getGroupdebitamount(), detail.getGroupcreditamount()); + UFDouble globalAmount = GLNumUtils.sub(detail.getGlobaldebitamount(), detail.getGlobalcreditamount()); + return detailDirection(localAmount, groupAmount, globalAmount, amount, quantity); + } + + private void clearAmount(NDetailVO detail, boolean isDebit) { + if(isDebit) { + detail.setDebitquantity(UFDouble.ZERO_DBL); + detail.setDebitamount(UFDouble.ZERO_DBL); + detail.setLocaldebitamount(UFDouble.ZERO_DBL); + detail.setGroupdebitamount(UFDouble.ZERO_DBL); + detail.setGlobaldebitamount(UFDouble.ZERO_DBL); + }else { + detail.setCreditquantity(UFDouble.ZERO_DBL); + detail.setCreditamount(UFDouble.ZERO_DBL); + detail.setLocalcreditamount(UFDouble.ZERO_DBL); + detail.setGroupcreditamount(UFDouble.ZERO_DBL); + detail.setGlobalcreditamount(UFDouble.ZERO_DBL); + } + } + + private void loadAssInfo() throws BusinessException { + Set assidSet = new HashSet<>(); + for(String groupid : detailContainer.keySet()) { + List details = detailContainer.get(groupid); + if(details == null || details.size() == 0) { + continue; + } + for(NDetailVO detail : details) { + if(detail == null) { + continue; + } + if(!StrTools.isEmptyStr(detail.getAssid())) { + assidSet.add(detail.getAssid()); + } + } + } + + if(assidSet.size() == 0) { + return; + } +// IFreevaluePub freevalue = (IFreevaluePub) NCLocator.getInstance().lookup(IFreevaluePub.class.getName()); +// GlAssVO[] glAssVOs = freevalue.queryAllByIDs(assidSet.toArray(new String[0]),null,Module.GL); + GlAssVO[] glAssVOs = AssByPkThreadCache.getInstance().getAssVO(assidSet.toArray(new String[0]), Module.GL); + if(glAssVOs != null && glAssVOs.length>0) { + for(int i=0;i details, String groupByStr, String fromStr, String sumSqlWherePart) throws BusinessException { + if(details == null || details.size() == 0) { + return; + } + + String querysql = "select a.pk_detail,min(a.pk_detail) over(partition " + groupByStr + ") as groupid " + fromStr + "" + (sumSqlWherePart == null ? "" : sumSqlWherePart); + + String tablename = "T_DETAILGROUP"; + String pkfield = "pk_detail"; + String groupfield = "groupid"; + try { + tablename = TempTableUtils.createTempTable(tablename, " " + pkfield + " varchar(40), " + groupfield + " varchar(40) ", null); + } catch (SQLException e) { + throw new BusinessException(e); + } + String insertsql = "insert into " + tablename + " (" + pkfield + "," + groupfield + ") (" + querysql + ")"; + new GLBaseDAO().excuteUpdate(insertsql); + + // 获得现金流量信息 + String[] tableinfo = new String[] { + tablename, pkfield, groupfield + }; + + ICashFlowCase cashflowproxy = (ICashFlowCase) NCLocator.getInstance().lookup(ICashFlowCase.class.getName()); + CashflowcaseVO[] cashvo = cashflowproxy.querySumCashflow4Fip(tableinfo); + + if(cashvo == null || cashvo.length == 0) { + return; + } + + //补充币种信息 + + MapList cashflowCaseMapList = new MapList<>(); + for (CashflowcaseVO cashflowcaseVO : cashvo) { + cashflowCaseMapList.put(cashflowcaseVO.getPk_detail(), cashflowcaseVO); + } + + ArrayList extGroup = new ArrayList();// 需要展开不汇总的分组,这是由于该组分录合计为0可是又有现金流量造成的 + + for(String groupId : details.keySet()) { + List detailList = details.get(groupId); + List newDetails = new ArrayList<>(); + for(NDetailVO detail : detailList) { + List cashflowList = cashflowCaseMapList.get(detail.getPk_detail()); + if(cashflowList == null || cashflowList.isEmpty()) { + continue; + } + cashFlowCaseFillCurrtype(cashflowList, detail.getPk_currtype()); + + if(isAllZero(detail)) { + extGroup.add(detail.getPk_detail()); + }else { + // 金额的校验,有现金流量的分录不允许出现借贷合计为0的情况,因为借贷合计为0的分录可能被删除,会缺失部分现金流量数据 + if(detailDirection(detail) == 0) { + NDetailVO newDetail = (NDetailVO) detail.clone(); + clearAmount(detail, false); + clearAmount(newDetail, true); + newDetails.add(newDetail); + } + detail.setCashflow(cashflowList.toArray(new CashflowcaseVO[0])); + } + cashflowCaseMapList.remove(detail.getPk_detail()); + } + } + if (cashflowCaseMapList.size() > 0) { + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("glnvoucher_0","0glnvoucher-0015")/*@res "补现金流量出错,分录和现金流量表的分组不一致造成部分现金流量没有归属。"*//*-=notranslate=-*/); + } + + //FIXME 原有逻辑在这里将合并后借贷为0,现金流量不为0的分录补充了回来,但是后续并没有使用,这里先不补充 + + } + + + private void catCashFlowCase(MapList details) throws BusinessException { + if(details == null || details.size() == 0) { + return; + } + + List pk_details = new ArrayList<>(); + Map detailCurrTypeMap = new HashMap<>(); + for(String groupid : details.keySet()) { + for(NDetailVO detail : details.get(groupid)) { + pk_details.add(detail.getPk_detail()); + detailCurrTypeMap.put(detail.getPk_detail(), detail.getPk_currtype()); + } + } + + ICashFlowCase cashflowproxy = (ICashFlowCase) NCLocator.getInstance().lookup(ICashFlowCase.class.getName()); + CashflowcaseVO[] cashflowcasevos = cashflowproxy.queryByPKRtDetails(pk_details.toArray(new String[0])); + if(cashflowcasevos == null || cashflowcasevos.length == 0) { + return; + } + + // 如果不是总帐凭证,那么这个接口读出来的CashflowcaseVO里有可能没有币种信息,需要补上 + for(CashflowcaseVO caseVO : cashflowcasevos) { + if(caseVO != null && StrTools.isEmptyStr(caseVO.getM_pk_currtype())) { + caseVO.setM_pk_currtype(detailCurrTypeMap.get(caseVO.getPk_detail())); + } + } + + MapList caseMapList = new MapList<>(); + for(CashflowcaseVO caseVO : cashflowcasevos) { + caseMapList.put(caseVO.getPk_detail(), caseVO); + } + + for(String groupid : details.keySet()) { + for(NDetailVO detail : details.get(groupid)) { + List caseVOs = caseMapList.get(detail.getPk_detail()); + if(caseVOs == null || caseVOs.isEmpty()) { + continue; + } + detail.setCashflow(caseVOs.toArray(new CashflowcaseVO[0])); + } + } + } + + private void cashFlowCaseFillCurrtype(List cashflowCases, String defaultCurrtype) { + for(CashflowcaseVO caseVO : cashflowCases) { + if(caseVO != null && StrTools.isEmptyStr(caseVO.getM_pk_currtype())) { + caseVO.setM_pk_currtype(defaultCurrtype); + } + } + } +} \ No newline at end of file diff --git a/ic/META-INF/OpenAPI_SCM_IC_INBOUND_EJB60.upm b/ic/META-INF/OpenAPI_SCM_IC_INBOUND_EJB60.upm index 94a2918b..7525bcc9 100644 --- a/ic/META-INF/OpenAPI_SCM_IC_INBOUND_EJB60.upm +++ b/ic/META-INF/OpenAPI_SCM_IC_INBOUND_EJB60.upm @@ -141,12 +141,12 @@ nccloud.api.impl.ic.atp.ATPQueryIpml - + nccloud.api.ic.m47.IAPISubcontInMaintain nccloud.api.impl.ic.m47.APISubcontInMaintainImpl - + diff --git a/ic/src/client/nccloud/web/ic/outbound/materialout/action/QueryMaterialOutCardInfoAction.java b/ic/src/client/nccloud/web/ic/outbound/materialout/action/QueryMaterialOutCardInfoAction.java new file mode 100644 index 00000000..48df6c2c --- /dev/null +++ b/ic/src/client/nccloud/web/ic/outbound/materialout/action/QueryMaterialOutCardInfoAction.java @@ -0,0 +1,84 @@ +package nccloud.web.ic.outbound.materialout.action; + +import nc.itf.scmpub.reference.uap.bd.currency.CurrencyInfo; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.scmpub.res.billtype.ICBillType; +import nc.vo.scmpub.util.BillBodySortUtils; +import nccloud.commons.lang.StringUtils; +import nccloud.dto.ic.pub.entity.BillVOWithExtendInfo; +import nccloud.framework.core.json.IJson; +import nccloud.framework.service.ServiceLocator; +import nccloud.framework.web.action.itf.ICommonAction; +import nccloud.framework.web.container.IRequest; +import nccloud.framework.web.json.JsonFactory; +import nccloud.framework.web.ui.model.row.Cell; +import nccloud.framework.web.ui.pattern.billcard.BillCard; +import nccloud.pubitf.ic.pub.service.IICBillVOQueryService; +import nccloud.web.ic.pub.precision.ICBaseBillcardPrecisionHandler; +import nccloud.web.ic.pub.utils.DealDisplayIsNullUtil; +import nccloud.web.ic.ui.pattern.billcard.ICBillCardOperator; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Classname QueryMaterialOutCardInfoAction + * @Description TODO + * @Version 1.0.0 + * @Date 2025/6/25 16:48 + * @Created by ame + */ +public class QueryMaterialOutCardInfoAction implements ICommonAction { + @Override + public Object doAction(IRequest request) { + String read = request.read(); + IJson json = JsonFactory.create(); + Map info = json.fromJson(read, Map.class); + List pks = (List) info.get("pks"); + String pageid = (String) info.get("pageid"); + String pagecodechi = (String) info.get("pagecodechi"); + Map retmap = new HashMap(); + BillVOWithExtendInfo[] billVOWithExtendInfos = ((IICBillVOQueryService) ServiceLocator.find(IICBillVOQueryService.class)).queryBillDev(ICBillType.MaterialOut, pks.toArray(new String[0])); + if(billVOWithExtendInfos!=null && billVOWithExtendInfos.length>0){ + List billCardList=new ArrayList<>(); + for(BillVOWithExtendInfo extendInfo : billVOWithExtendInfos){ + BillBodySortUtils.sort(new ICBillVO[]{extendInfo.getBillvo()}); + BillCard retcard = this.afterProcess(pagecodechi, pageid, extendInfo.getBillvo()); + billCardList.add(retcard); +// retmap.put("isLocationManaged", extendInfo.isLocationManaged()); +// retmap.put("materialSerialMap", extendInfo.getMaterialSerialMap()); +// retmap.put("materialSnunitMap", extendInfo.getMaterialSnunitMap()); + } + + retmap.put("billcard", billCardList); + return retmap; + }else{ + throw new RuntimeException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0180")); + } + } + public BillCard afterProcess(String pagecodechi, String pageid, ICBillVO vo) { + ICBillCardOperator operator = new ICBillCardOperator((String)null, pageid, pagecodechi); + BillCard retcard = operator.toCard(vo); + String ccurrencyid = (String)vo.getBody(0).getAttributeValue("ccurrencyid"); + if (!StringUtils.isEmpty(ccurrencyid)) { + String name = CurrencyInfo.getName(ccurrencyid); + retcard.getBody().getModel().getListRows().forEach((row) -> { + Cell cell = new Cell(); + cell.setValue(ccurrencyid); + cell.setDisplay(name); + row.addCell("ccurrencyid", cell); + }); + } + + ICBaseBillcardPrecisionHandler handler = this.getPrecisionHandler(retcard); + handler.process(); + DealDisplayIsNullUtil.dealBillCardDisPlayIsNull(new String[]{"ccorrespondcode", "vexigencycode"}, retcard); + return retcard; + } + protected ICBaseBillcardPrecisionHandler getPrecisionHandler(BillCard card) { + return new ICBaseBillcardPrecisionHandler(card); + } +} diff --git a/ic/src/client/nccloud/web/ic/pub/action/GeneralSumPrintAction.java b/ic/src/client/nccloud/web/ic/pub/action/GeneralSumPrintAction.java new file mode 100644 index 00000000..f3cd20a2 --- /dev/null +++ b/ic/src/client/nccloud/web/ic/pub/action/GeneralSumPrintAction.java @@ -0,0 +1,65 @@ +package nccloud.web.ic.pub.action; + +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.pubapp.res.NCModule; +import nccloud.base.reflect.NCClass; +import nccloud.dto.ic.pub.entity.GeneralSumPrintInfo; +import nccloud.framework.core.json.IJson; +import nccloud.framework.web.container.SessionContext; +import nccloud.framework.web.json.JsonFactory; +import nccloud.framework.web.processor.template.BillCardConvertProcessor; +import nccloud.framework.web.ui.pattern.billcard.BillCard; +import nccloud.pubitf.platform.print.IPrintInfo; +import nccloud.pubitf.uap.print.vo.ExtendsBatchPrintVO; +import nccloud.uap.print.action.AbstractNoPreviewPrintAction; +/** + * @description 出入库汇总打印 + * @author zhegnxinm + * @date 2018-12-16 上午10:48:39 + * @version ncc1.0 + */ +public class GeneralSumPrintAction extends AbstractNoPreviewPrintAction { + + @Override + public IPrintInfo convertPrintInfo(ExtendsBatchPrintVO info) { + IJson json = JsonFactory.create(); + GeneralSumPrintInfo newinfo = json.fromJson(info.getUserjson(), GeneralSumPrintInfo.class); + newinfo.setFilename((info.getFilename() == null) ? "download-" + + String.valueOf(System.currentTimeMillis()) : info + .getFilename()); + + String appcode = info.getAppcode(); + String billcardStr = newinfo.getBillcard(); + //注释此代码,如需放开请修改前端"./src/ic/ic/components/sumPrintModal/index.js"里扩展的列表汇总billcard传值 +// BillCard billcard = json.fromJson(billcardStr,BillCard.class); + + if (appcode == null) { + appcode = SessionContext.getInstance().getAppcode(); + } +// BillCardConvertProcessor processor = new BillCardConvertProcessor(); +// ICBillVO bill = processor.fromBillCard(billcard); + newinfo.setAppcode(appcode); + newinfo.setIds(info.getOids()); + newinfo.setNodeKey(info.getNodekey()); + NCClass printServiceClazz = new NCClass(); + printServiceClazz.setModule(getPrintServiceModule()); + printServiceClazz.setName(getPrintServiceName()); + newinfo.setPrintServiceClazz(printServiceClazz); + newinfo.setPrintTemplateID(info.getPrintTemplateID()); +// newinfo.setData(new Object[] { bill }); + newinfo.setRealData("true"); + newinfo.setTotalPage(info.getTotalPage()); + return newinfo; + } + + @Override + public String getPrintServiceModule() { + return NCModule.IC.getName(); + } + + @Override + public String getPrintServiceName() { + return "nccloud.pubimpl.ic.inbound.generalin.operator.GeneralSumPrintOperator"; + } + +} diff --git a/ic/src/client/yyconfig/modules/ic/outbound/config/action/materialout.xml b/ic/src/client/yyconfig/modules/ic/outbound/config/action/materialout.xml new file mode 100644 index 00000000..c816078b --- /dev/null +++ b/ic/src/client/yyconfig/modules/ic/outbound/config/action/materialout.xml @@ -0,0 +1,173 @@ + + + + ic.materialout.query + + nccloud.web.ic.outbound.materialout.action.MaterialOutQueryAction + + + ic.materialout.queryPage + + nccloud.web.ic.outbound.materialout.action.MaterialOutPageQueryAction + + + ic.materialout.maintain + + nccloud.web.ic.outbound.materialout.action.MaterialOutMaintainAction + Delete,UnSign,Sign + + + ic.materialout.save + + nccloud.web.ic.outbound.materialout.action.MaterialOutSaveAction + Save + + + ic.materialout.canbecopy + + nccloud.web.ic.outbound.materialout.action.MaterialOutBeforeCopyAction + + + ic.materialout.copy + + nccloud.web.ic.outbound.materialout.action.MaterialOutCopyAction + Copy + + + ic.materialout.importSrcBillSN + + nccloud.web.ic.outbound.materialout.action.MaterialOutImportSrcSNAction + ImportSrcBillSN + + + ic.materialout.cardquery + + nccloud.web.ic.outbound.materialout.action.MaterialOutQueryCardAction + + + ic.materialout.query422x + + nccloud.web.ic.outbound.materialout.action.Query422xFor4DAction + + + ic.materialout.query4B36 + + nccloud.web.ic.outbound.materialout.action.Query4B36For4DAction + + + ic.materialout.query4455 + + nccloud.web.ic.outbound.materialout.action.Query4455For4DAction + + + ic.materialout.queryall + + nccloud.web.ic.outbound.materialout.action.QueryAllFor4DAction + + + ic.materialout.transfervo + + nccloud.web.ic.outbound.materialout.action.TransToMaterialOutAction + + + ic.materialout.pickauto + + nccloud.web.ic.outbound.materialout.action.MaterialOutPickAutoAction + PickAuto + + + ic.materialout.print + + nccloud.web.ic.outbound.materialout.action.MaterialOutPrintAction + Print,output,Print_list + + + ic.materialout.printloc + + nccloud.web.ic.outbound.materialout.action.MaterialOutPrintLocAction + PrintLoc + + + ic.materialout.combine + + nccloud.web.ic.outbound.materialout.action.MaterialOutCombineAction + CombinePrint + + + ic.materialout.checkprem + + nccloud.web.ic.outbound.materialout.action.MaterialOutDataPermissionAction + Edit,Print + + + ic.materialout.headAfterEdit + + nccloud.web.ic.outbound.materialout.events.MaterialOutHeadAfterEventAction + + + ic.materialout.bodyAfterEdit + + nccloud.web.ic.outbound.materialout.events.MaterialOutBodyAfterEditAction + + + ic.materialout.locationquery + + nccloud.web.ic.outbound.materialout.action.MaterialOutLocationQueryAction + + + ic.materialout.queryMMbill + + nccloud.web.ic.outbound.materialout.action.QueryMMbillAction + + + ic.materialout.generateCard + + nccloud.web.ic.outbound.materialout.action.MaterialOutGenerateEquipCardAction + Generate4A00,Cancel4A00 + + + ic.materialout.frominvcount + + nccloud.web.ic.outbound.materialout.action.MaterialOutFromInvcountAdjustAction + + + ic.materialout.frompurchasein + + nccloud.web.ic.outbound.materialout.action.PurchaseIn2MaterialOutAction + + + ic.materialout.dealratio + + nccloud.web.ic.outbound.materialout.action.MaterialOutDealRatioDataAction + + + ic.materialout.delRowCheck + + nccloud.web.ic.outbound.materialout.action.MaterialOutDelRowCheckAction + + + ic.generalout.query4A + + nccloud.web.ic.outbound.materialout.action.Query4A60for4DAction + + + ic.materialout.generatehj + + nccloud.web.ic.outbound.materialout.action.MaterialOutFixedAssetAction + + + ic.materialout.delMaterialOutAssetbill + + nccloud.web.ic.outbound.materialout.action.MaterialOutDelFixedAssetAction + + + ic.materialout.onhandOut + + nccloud.web.ic.outbound.materialout.action.OnhandToMaterialOutAction + + + ic.materialout.queryCardByPKs + + nccloud.web.ic.outbound.materialout.action.QueryMaterialOutCardInfoAction + + diff --git a/ic/src/client/yyconfig/modules/ic/outbound/config/authorize/materialout_authorize.xml b/ic/src/client/yyconfig/modules/ic/outbound/config/authorize/materialout_authorize.xml new file mode 100644 index 00000000..83680851 --- /dev/null +++ b/ic/src/client/yyconfig/modules/ic/outbound/config/authorize/materialout_authorize.xml @@ -0,0 +1,46 @@ + + + 400801214,400802200 + + ic.materialout.query + ic.materialout.queryPage + ic.saleout.queryAddBtn + ic.materialout.maintain + ic.materialout.save + ic.materialout.canbecopy + ic.materialout.copy + ic.materialout.importSrcBillSN + ic.materialout.cardquery + ic.materialout.query422x + ic.materialout.query4455 + ic.materialout.query4B36 + ic.materialout.queryall + ic.generalout.queryin + ic.materialout.transfervo + ic.materialout.pickauto + ic.materialout.print + ic.materialout.printloc + ic.materialout.combine + ic.materialout.checkprem + ic.materialout.headAfterEdit + ic.materialout.bodyAfterEdit + ic.materialout.locationquery + ic.materialout.queryMMbill + ic.materialout.generateCard + ic.materialout.frominvcount + ic.materialout.frompurchasein + ic.materialout.dealratio + ic.materialout.delRowCheck + ic.materialout.generatehj + ic.materialout.delMaterialOutAssetbill + ic.materialout.onhandOut + ic.materialout.queryCardByPKs + + + + 400802000,400802004,400800808,400800816 + + ic.materialout.queryMMbill + + + diff --git a/ic/src/private/nc/bs/ic/m4c/insert/InsertBP.java b/ic/src/private/nc/bs/ic/m4c/insert/InsertBP.java index e5f6e41e..30d65047 100644 --- a/ic/src/private/nc/bs/ic/m4c/insert/InsertBP.java +++ b/ic/src/private/nc/bs/ic/m4c/insert/InsertBP.java @@ -95,7 +95,7 @@ public class InsertBP implements IInsertBP, // 2020年3月2日 新增保存移动业务消息 processor.addAfterRule(new MobAfterSaveMessageRule()); - //2025年5月27日 新增保存推送锐制 + //2025年5月27日新增保存推送锐制 processor.addAfterFinalRule(new AfterSigningSynchronizeRuleRZ()); } diff --git a/ic/src/private/nc/bs/ic/m4c/sign/SignBP.java b/ic/src/private/nc/bs/ic/m4c/sign/SignBP.java index 6a067ff3..0a9f9cea 100644 --- a/ic/src/private/nc/bs/ic/m4c/sign/SignBP.java +++ b/ic/src/private/nc/bs/ic/m4c/sign/SignBP.java @@ -50,10 +50,10 @@ public class SignBP implements ISignBP, ISignRuleProvider processor.addAfterRule(new ArsubToVoucherRule()); processor.addAfterRule(new SaleOutProceedsRuleCG()); processor.addAfterRule(new MobAfterSignMessageRule()); - // 销售出库 多一个步骤 先提交销售交货单 与同步销售出库单的orderNo一致 - processor.addAfterRule(new SalesDeliveryOrderRuleMES()); + // 销售出库 多一个步骤先提交销售交货单 与同步销售出库单的orderNo一致 +// processor.addAfterRule(new SalesDeliveryOrderRuleMES()); // 销售出库 签字后 同步到MES金思维系统 - processor.addAfterRule(new AfterSigningSynchronizeRuleMES()); +// processor.addAfterRule(new AfterSigningSynchronizeRuleMES()); // 盘点(审批后传MES) } diff --git a/ic/src/private/nc/bs/ic/m4c/sign/rule/AfterSigningSynchronizeRuleRZ.java b/ic/src/private/nc/bs/ic/m4c/sign/rule/AfterSigningSynchronizeRuleRZ.java index d66feb9d..925fafd3 100644 --- a/ic/src/private/nc/bs/ic/m4c/sign/rule/AfterSigningSynchronizeRuleRZ.java +++ b/ic/src/private/nc/bs/ic/m4c/sign/rule/AfterSigningSynchronizeRuleRZ.java @@ -32,7 +32,7 @@ import java.util.List; * @Description TODO * @Version 1.0.0 * @Date 2025/5/16 9:01 - * @Created by ame + * @Created by sdlizheng */ public class AfterSigningSynchronizeRuleRZ implements IRule { private static Log log = Log.getInstance("rzmomlog"); diff --git a/ic/src/private/nccloud/api/impl/ic/m47/APISubcontInMaintainImpl.java b/ic/src/private/nccloud/api/impl/ic/m47/APISubcontInMaintainImpl.java index ee042bef..7b38c140 100644 --- a/ic/src/private/nccloud/api/impl/ic/m47/APISubcontInMaintainImpl.java +++ b/ic/src/private/nccloud/api/impl/ic/m47/APISubcontInMaintainImpl.java @@ -35,7 +35,7 @@ public class APISubcontInMaintainImpl implements IAPISubcontInMaintain { checker.check(vos); // 2、编码翻译成pk aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList); - // 翻译货位 + // 3、翻译货位 ICAPILocationVOUtils.translate(vos); new SubcontInSaveFillValue().setDefaultValue(vos); diff --git a/ic/src/private/nccloud/api/impl/ic/m47/check/CheckSubcontInSaveValidator.java b/ic/src/private/nccloud/api/impl/ic/m47/check/CheckSubcontInSaveValidator.java index bf589862..e6d096ce 100644 --- a/ic/src/private/nccloud/api/impl/ic/m47/check/CheckSubcontInSaveValidator.java +++ b/ic/src/private/nccloud/api/impl/ic/m47/check/CheckSubcontInSaveValidator.java @@ -25,10 +25,7 @@ public class CheckSubcontInSaveValidator extends VONullValidate { public String[] getHeadNotNullFields() { // TODO Auto-generated method stub //组织,仓库,出入库类型编码 - String[] headnames = - { - ICPubMetaNameConst.PK_ORG, ICPubMetaNameConst.CWAREHOUSEID, ICPubMetaNameConst.VTRANTYPECODE - }; + String[] headnames ={ICPubMetaNameConst.PK_ORG, ICPubMetaNameConst.CWAREHOUSEID, ICPubMetaNameConst.VTRANTYPECODE}; return headnames; } diff --git a/ic/src/private/nccloud/api/impl/ic/m47/fill/SubcontInSaveFillValue.java b/ic/src/private/nccloud/api/impl/ic/m47/fill/SubcontInSaveFillValue.java index 35b277f3..2aea95a1 100644 --- a/ic/src/private/nccloud/api/impl/ic/m47/fill/SubcontInSaveFillValue.java +++ b/ic/src/private/nccloud/api/impl/ic/m47/fill/SubcontInSaveFillValue.java @@ -19,7 +19,7 @@ import nccloud.api.impl.ic.m47.rule.Choose47DefaultFillRule; * @Description TODO * @Version 1.0.0 * @Date 2025/5/15 10:10 - * @Created by ame + * @Created by sdlizheng */ public class SubcontInSaveFillValue { public void setDefaultValue(SubcontInVO[] vos) { @@ -61,7 +61,7 @@ public class SubcontInSaveFillValue { // 数量,金额,汇率,税率处理 rule = new ICBodyNshouldassistnumCal(); processer.addFillvalueRule(rule); - + //执行 processer.fillvalue(vos); } diff --git a/ic/src/private/nccloud/api/impl/ic/m47/rule/Choose47DefaultFillRule.java b/ic/src/private/nccloud/api/impl/ic/m47/rule/Choose47DefaultFillRule.java index feaac168..f51883f0 100644 --- a/ic/src/private/nccloud/api/impl/ic/m47/rule/Choose47DefaultFillRule.java +++ b/ic/src/private/nccloud/api/impl/ic/m47/rule/Choose47DefaultFillRule.java @@ -25,9 +25,9 @@ public class Choose47DefaultFillRule extends ICRule { @Override public void process(E[] vos) { for (E billvo : vos) { - // 填充默认值 + //填充默认值 setDefultInfo(billvo); - // 设置财务组织,币种 + //设置财务组织,币种 setFanaceorgValue(billvo); } } diff --git a/ic/src/private/nccloud/api/impl/ic/m4c/APISaleOutMaintainImpl.java b/ic/src/private/nccloud/api/impl/ic/m4c/APISaleOutMaintainImpl.java index 5b2246b5..47d29bfa 100644 --- a/ic/src/private/nccloud/api/impl/ic/m4c/APISaleOutMaintainImpl.java +++ b/ic/src/private/nccloud/api/impl/ic/m4c/APISaleOutMaintainImpl.java @@ -63,7 +63,7 @@ public class APISaleOutMaintainImpl implements IAPISaleOutMaintain { aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList); // 翻译货位 ICAPILocationVOUtils.translate(vos); - // 其他数据填充 + //其他数据填充 new SaleOutSaveFillValue().setDefaultValue(vos); return (SaleOutVO[]) PfServiceScmUtil.processBatch("WRITE", "4C", vos, null, diff --git a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java index 2c1455a8..6cc454de 100644 --- a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java +++ b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java @@ -79,7 +79,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain{ new MaterialOutSaveFillValue().setDefaultValue(vos); IMaterialOutMaintainAPI materialOut = NCLocator.getInstance().lookup(IMaterialOutMaintainAPI.class); - //设置每行行号 + // 设置每行行号 setMaterialOutRowNum(vos); return materialOut.insertBills(vos); } diff --git a/ic/src/private/nccloud/api/impl/ic/onhand/APIOnhandQueryIpml.java b/ic/src/private/nccloud/api/impl/ic/onhand/APIOnhandQueryIpml.java index d89ad721..2319f05c 100644 --- a/ic/src/private/nccloud/api/impl/ic/onhand/APIOnhandQueryIpml.java +++ b/ic/src/private/nccloud/api/impl/ic/onhand/APIOnhandQueryIpml.java @@ -78,7 +78,7 @@ public class APIOnhandQueryIpml implements IAPIOnhandQuery { } } - //必输项校验 + // 必输项校验 private void requiredFieldCheck(String[] requiredField, Map paramMap) { for (String field : requiredField) { Object keyValue = paramMap.get(field); diff --git a/ic/src/private/nccloud/pubimpl/ic/inbound/generalin/operator/GeneralSumPrintOperator.java b/ic/src/private/nccloud/pubimpl/ic/inbound/generalin/operator/GeneralSumPrintOperator.java new file mode 100644 index 00000000..da0267fd --- /dev/null +++ b/ic/src/private/nccloud/pubimpl/ic/inbound/generalin/operator/GeneralSumPrintOperator.java @@ -0,0 +1,369 @@ +package nccloud.pubimpl.ic.inbound.generalin.operator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.TimeZone; + +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.framework.common.NCLocator; +import nc.impl.pubapp.pattern.data.bill.BillQuery; +import nc.ui.pub.print.IDataSource; +import nc.ui.pub.print.IMetaDataDataSource; +import nc.vo.ic.general.define.ICBillBodyVO; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ic.general.define.MetaNameConst; +import nc.vo.ic.m45.entity.PurchaseInVO; +import nc.vo.ic.m4d.entity.MaterialOutVO; +import nc.vo.ic.pub.define.ICPubMetaNameConst; +import nc.vo.pub.BusinessException; +import nc.vo.pub.CircularlyAccessibleValueObject; +import nc.vo.pub.SuperVO; +import nc.vo.pub.lang.UFDate; +import nc.vo.pub.lang.UFDateTime; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pub.lang.UFTime; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill; +import nc.vo.pubapp.pattern.model.entity.view.AbstractDataView; +import nc.vo.pubapp.scale.BillVOScaleProcessor; +import nc.vo.pubapp.scale.TotalValueVOScaleProcessor; +import nc.vo.pubapp.util.DefaultVOMerger; +import nc.vo.scmpub.res.billtype.ICBillType; +import nc.vo.scmpub.util.BillBodySortUtils; +import nc.vo.scmpub.util.ValueCheckUtil; +import nccloud.dto.ic.pub.entity.GeneralSumPrintInfo; +import nccloud.framework.core.json.IJson; +import nccloud.framework.web.json.JsonFactory; +import nccloud.pubitf.ic.pub.service.IICBillVOQueryService; +import nccloud.pubitf.platform.print.AbstractPrintService; +import nccloud.pubitf.platform.print.IPrintInfo; +import nccloud.pubitf.scmpub.pub.print.BaseMetaPrintTimesService; +import nccloud.pubitf.scmpub.pub.print.CombinePrintInfo; +import nccloud.pubitf.scmpub.pub.print.BaseMetaPrintTimesService.MetaDataSource; +import nccloud.pubitf.uap.print.vo.NoPreviewPrintInfo; +import nccloud.pubimpl.ic.inbound.purchasein.operator.PurchaseInVOPrecisionHandler; +import nccloud.pubimpl.ic.outbound.materialout.operator.MaterialOutVOPrecisionHandler; +import nccloud.pubimpl.ic.outbound.saleout.operator.SaleOutVOPrecisionHandler; +import nccloud.pubimpl.ic.pub.print.ICBasePrintVOPrecisionHandler; + +/** + * @author zhegnxinm + * @version ncc1.0 + * @description 出入库汇总打印 + * @date 2018-12-16 上午10:48:39 + */ + +public class GeneralSumPrintOperator extends BaseMetaPrintTimesService { + + @Override + public IDataSource[] getDataSources(IPrintInfo info) { + GeneralSumPrintInfo printInfo = (GeneralSumPrintInfo) info; + // 获取数据 + Object[] datas = this.getDatas(printInfo.getIds()); + if (ValueCheckUtil.isNullORZeroLength(datas)) { + return null; + } + // 获取分组数据 + List alGroupBy = printInfo.getAlGroupBy(); + // 得到分组字段 + ICBillVO cvo = (ICBillVO) datas[0]; + String[] Fields = getGroupFields(); + String[] saGroupField = getSelGroupFields(alGroupBy, Fields); + saGroupField = processSaGroupField(saGroupField); + DefaultVOMerger dvomerger = new DefaultVOMerger(); + dvomerger.setGroupingAttr(saGroupField); + // 得到Summing字段 + String[] saSummingField = null; + if (cvo.getHead().getBillType().getCode().equals(ICBillType.MaterialOut.getCode())) { + saSummingField = getSummingField((Boolean) alGroupBy.get(2)); + } else { + saSummingField = getSummingField((Boolean) alGroupBy.get(2), printInfo.getInOutType()); + } + dvomerger.setSummingAttr(saSummingField); + //2025年6月27日11点22分 --扩展材料出库列表添加汇总合并 + if (cvo.getHead().getBillType().getCode().equals(ICBillType.MaterialOut.getCode())) { + this.dealSumInfoDev(dvomerger, datas); + } else { + // 对表体分组 + try { + ICBillBodyVO[] itemvosnew = (ICBillBodyVO[]) dvomerger.mergeByGroup(cvo + .getBodys()); + reSetPrice(itemvosnew, cvo.getHead().getBillType().getCode()); + cvo.setChildrenVO(itemvosnew); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + //精度处理 + this.processData(cvo); + } + //是否敏感时区 + boolean isSensitive = InvocationInfoProxy.getInstance().getSensitiveTimeZone(); + if (isSensitive) { + datas = this.processTimeZone(datas); + } + // 组装数据源 + IDataSource[] ds = this.getDataSource(datas); + return ds; + } + + private void dealSumInfoDev(DefaultVOMerger dvomerger, Object[] datas) { + // 对表体分组 + try { + for (Object data : datas) { + ICBillVO cvo = (ICBillVO) data; + + ICBillBodyVO[] itemvosnew = (ICBillBodyVO[]) dvomerger.mergeByGroup(cvo + .getBodys()); + reSetPrice(itemvosnew, cvo.getHead().getBillType().getCode()); + cvo.setChildrenVO(itemvosnew); + //精度处理 + this.processData(cvo); + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + @Override + public Object[] getDatas(String[] ids) { + BillQuery query45 = new BillQuery(PurchaseInVO.class); + PurchaseInVO[] vos = query45.query(ids); + if (vos.length != 0) { + BillBodySortUtils.sort(vos); + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + BillVOScaleProcessor scale = new BillVOScaleProcessor(pk_group, vos); + TotalValueVOScaleProcessor totalScale = new TotalValueVOScaleProcessor(vos); + + PurchaseInVOPrecisionHandler handler = new PurchaseInVOPrecisionHandler(vos); + handler.processVos(scale, totalScale); + return vos; + } else { + BillQuery query4D = new BillQuery(MaterialOutVO.class); + MaterialOutVO[] mvos = query4D.query(ids); + BillBodySortUtils.sort(mvos); + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + BillVOScaleProcessor scale = new BillVOScaleProcessor(pk_group, mvos); + TotalValueVOScaleProcessor totalScale = new TotalValueVOScaleProcessor(mvos); + + PurchaseInVOPrecisionHandler handler = new PurchaseInVOPrecisionHandler(mvos); + handler.processVos(scale, totalScale); + return mvos; + } + } + + /** + * 获取分组字段 方法功能描述: + *

+ * 参数说明 + * + * @return

+ * @author zhangsui + * @time 2011-7-19 上午08:37:31 + * @since 6.0 + */ + protected String[] getGroupFields() { + return new String[]{ICPubMetaNameConst.CMATERIALVID, + ICPubMetaNameConst.VBATCHCODE, ICPubMetaNameConst.CASTUNITID, + "vfree0", ICPubMetaNameConst.CLOCATIONID, + ICPubMetaNameConst.CVENDORID}; + } + + /** + * 通过选择框最终确定的分组字段 方法功能描述: + *

+ * 参数说明 + * + * @param alGroupBy + * @param Fields + * @return

+ * @author zhangsui + * @time 2011-7-19 上午08:41:30 + * @since 6.0 + */ + @SuppressWarnings("unchecked") + protected String[] getSelGroupFields(List alGroupBy, String[] Fields) { + ArrayList alChooseGroup = new ArrayList(); + for (int i = 0; i < alGroupBy.size() - 1; i++) { + if (((Boolean) alGroupBy.get(i)).booleanValue()) { + alChooseGroup.add(Fields[i]); + } + } + String[] saGroupField = null; + if (alChooseGroup.size() > 0) { + saGroupField = new String[alChooseGroup.size()]; + alChooseGroup.toArray(saGroupField); + } + return saGroupField; + } + + /** + * 对分组字段做特殊处理 方法功能描述: + *

+ * 参数说明 + * + * @param saGroupField + * @return

+ * @author zhangsui + * @time 2011-7-19 下午03:13:03 + * @since 6.0 + */ + protected String[] processSaGroupField(String[] saGroupField) { + List fields = Arrays.asList(saGroupField); + List newfields = new ArrayList(); + if (fields.contains("vfree0")) { + for (int i = 0; i < saGroupField.length; i++) { + if (!"vfree0".equals(saGroupField[i])) { + newfields.add(saGroupField[i]); + } + } + for (int i = 1; i < 11; i++) { + newfields.add("vfree" + i); + } + return newfields.toArray(new String[0]); + } + return saGroupField; + } + + /** + * 获取汇总字段 方法功能描述: + *

+ * 参数说明 + * 材料出库调用 + * + * @param isselected + * @return

+ * @author zhangsui + * @time 2011-7-19 上午08:35:12 + * @since 6.0 + */ + + protected String[] getSummingField(Boolean isselected) { + String[] saSummingField = null; + if ((isselected).booleanValue() == true) { + saSummingField = new String[]{ICPubMetaNameConst.NSHOULDNUM, + ICPubMetaNameConst.NNUM, ICPubMetaNameConst.NASSISTNUM, + ICPubMetaNameConst.NSHOULDASSISTNUM, MetaNameConst.NCOSTMNY}; + } else { + saSummingField = new String[]{ICPubMetaNameConst.NSHOULDNUM, + ICPubMetaNameConst.NNUM, MetaNameConst.NCOSTMNY}; + } + return saSummingField; + } + + /** + * 获取汇总字段 方法功能描述:采购入库调用 + *

+ * 参数说明 + * + * @param isselected + * @return

+ * @author zhangsui + * @time 2011-7-19 上午08:35:12 + * @since 6.0 + */ + protected String[] getSummingField(Boolean isselected, String type) { + String[] saSummingField = null; + if ("in".equals(type)) { + if ((isselected).booleanValue() == true) { + saSummingField = new String[]{ICPubMetaNameConst.NSHOULDNUM, + ICPubMetaNameConst.NNUM, ICPubMetaNameConst.NASSISTNUM, + ICPubMetaNameConst.NSHOULDASSISTNUM, + MetaNameConst.NMNY, + /** + * 杭州锦江集团有限公司:采购入库汇总打印时部分字段没汇总 + */ + MetaNameConst.NORIGMNY, MetaNameConst.NCALCOSTMNY, + MetaNameConst.NTAXMNY, MetaNameConst.NORIGTAXMNY}; + } else { + saSummingField = new String[]{ICPubMetaNameConst.NSHOULDNUM, + ICPubMetaNameConst.NNUM, MetaNameConst.NMNY}; + } + } else if ("out".equals(type)) { + if ((isselected).booleanValue() == true) { + saSummingField = new String[]{ICPubMetaNameConst.NSHOULDNUM, + ICPubMetaNameConst.NNUM, ICPubMetaNameConst.NASSISTNUM, + ICPubMetaNameConst.NSHOULDASSISTNUM, MetaNameConst.NMNY}; + } else { + saSummingField = new String[]{ICPubMetaNameConst.NSHOULDNUM, + ICPubMetaNameConst.NNUM, MetaNameConst.NMNY + /* + * 返回:打印模板中可合并计算的字段 + * 现客户合并计算norigtaxmny(原币价税合计)的和,需要添加该字段的返回 + */ + , MetaNameConst.NORIGMNY, MetaNameConst.NTAXMNY, + MetaNameConst.NORIGTAXMNY}; + } + } + return saSummingField; + } + + private void processData(ICBillVO cvo) { + ICBillVO[] vos = new ICBillVO[]{cvo}; + //精度处理 + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + BillVOScaleProcessor scale = new BillVOScaleProcessor(pk_group, vos); + TotalValueVOScaleProcessor totalScale = new TotalValueVOScaleProcessor(vos); + ICBasePrintVOPrecisionHandler handler = null; + if (vos[0].getHead().getBillType().getCode().equals(ICBillType.SaleOut.getCode())) {//销售出库 + ICBillVO[] aggvos = NCLocator.getInstance().lookup(IICBillVOQueryService.class).query( + ICBillType.SaleOut, new String[]{vos[0].getHead().getCgeneralhid()}); + if (aggvos == null || aggvos.length == 0) { + ExceptionUtils.wrappBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0180")/*@res "当前数据已被删除,请到列表页面刷新!"*/); + } + handler = new SaleOutVOPrecisionHandler(vos); + handler.processVos(scale, totalScale); + } else if (vos[0].getHead().getBillType().getCode().equals(ICBillType.MaterialOut.getCode())) {//材料出库 + ICBillVO[] aggvos = NCLocator.getInstance().lookup(IICBillVOQueryService.class).query( + ICBillType.MaterialOut, new String[]{vos[0].getHead().getCgeneralhid()}); + if (aggvos == null || aggvos.length == 0) { + ExceptionUtils.wrappBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0180")/*@res "当前数据已被删除,请到列表页面刷新!"*/); + } + handler = new MaterialOutVOPrecisionHandler(vos); + handler.processVos(scale, totalScale); + } else {//采购入库 + ICBillVO[] aggvos = NCLocator.getInstance().lookup(IICBillVOQueryService.class).query( + ICBillType.PurchaseIn, new String[]{vos[0].getHead().getCgeneralhid()}); + if (aggvos == null || aggvos.length == 0) { + ExceptionUtils.wrappBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0180")/*@res "当前数据已被删除,请到列表页面刷新!"*/); + } + handler = new PurchaseInVOPrecisionHandler(vos); + handler.processVos(scale, totalScale); + } + } + + /** + * 汇总以后重置价格 方法功能描述: + *

+ * 参数说明 + * + * @param itemvosnew

+ * @author zhangsui + * @time 2011-7-19 上午08:35:43 + * @since 6.0 + */ + protected void reSetPrice(ICBillBodyVO[] itemvosnew, String type) { + if (itemvosnew != null) { + UFDouble udNum = null; + UFDouble udMny = null; + for (int k = 0; k < itemvosnew.length; k++) { + udNum = itemvosnew[k].getNnum(); + udMny = (UFDouble) itemvosnew[k] + .getAttributeValue(MetaNameConst.NMNY); + if (type.equals(ICBillType.MaterialOut.getCode())) { + udMny = (UFDouble) itemvosnew[k] + .getAttributeValue(MetaNameConst.NCOSTMNY); + + } else { + udMny = (UFDouble) itemvosnew[k] + .getAttributeValue(MetaNameConst.NMNY); + } + if (udNum != null && udMny != null) { + itemvosnew[k].setAttributeValue(MetaNameConst.NPRICE, + (udMny.div(udNum))); + } + } + } + } + +} diff --git a/ic/src/private/nccloud/pubimpl/ic/pub/service/ICBillVOQueryServiceImpl.java b/ic/src/private/nccloud/pubimpl/ic/pub/service/ICBillVOQueryServiceImpl.java new file mode 100644 index 00000000..306cf946 --- /dev/null +++ b/ic/src/private/nccloud/pubimpl/ic/pub/service/ICBillVOQueryServiceImpl.java @@ -0,0 +1,196 @@ +package nccloud.pubimpl.ic.pub.service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import nc.bs.framework.common.NCLocator; +import nc.bs.ic.pub.util.ICBillVOQuery; +import nc.impl.pubapp.pattern.data.vo.VOQuery; +import nc.pubitf.uapbd.CurrencyRateUtilHelper; +import nc.vo.ic.general.define.ICBillBodyVO; +import nc.vo.ic.general.define.ICBillFlag; +import nc.vo.ic.general.define.ICBillHeadVO; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ic.general.define.MetaNameConst; +import nc.vo.ic.general.util.ICLocationUtil; +import nc.vo.ic.m45.entity.PurchaseInVO; +import nc.vo.ic.org.OrgInfoQuery; +import nc.vo.ic.transtype.TransTypeExtendVO; +import nc.vo.pub.ISuperVO; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.scmpub.res.billtype.ICBillType; +import nc.vo.scmpub.util.BillBodySortUtils; +import nc.vo.ic.m45.utils.BillQuery; +import nccloud.dto.ic.pub.entity.BillVOWithExtendInfo; +import nccloud.dto.ic.pub.entity.ICBillstatusForWeb; +import nccloud.pubimpl.ic.pub.utils.ICBillExtendInfoHelper; +import nccloud.pubitf.ic.pub.service.IICBillVOQueryService; + +/** + * 库存单据查询实现类 + * + * @author hujieh + * + */ +public class ICBillVOQueryServiceImpl implements IICBillVOQueryService { + + @Override + public ICBillVO[] query(ICBillType billtype, String[] hids) { + ICBillVO[] vos = new ICBillVOQuery(billtype).query(hids); + if(billtype.equals(ICBillType.PurchaseIn)){ + try { + vos = new BillQuery(PurchaseInVO.class).queryGrandsons((PurchaseInVO[]) vos); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + return vos; + } + + @SuppressWarnings("unchecked") + @Override + public ICBillHeadVO[] query(Class T, String[] hids) { + return (ICBillHeadVO[]) new VOQuery(T).query(hids); + } + + @Override + public BillVOWithExtendInfo queryBillExtByVO(ICBillVO vo) { + BillVOWithExtendInfo info = new ICBillExtendInfoHelper() + .getExtendInfoByBillVO(vo); + return info; + } + + @Override + public BillVOWithExtendInfo queryBillExt(ICBillType billtype, String hid) { + ICBillVO[] vos = new ICBillVOQuery(billtype).query(new String[] { hid }); + if(billtype.equals(ICBillType.PurchaseIn)){ + try { + vos = new BillQuery(PurchaseInVO.class).queryGrandsons((PurchaseInVO[]) vos); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + if (billtype.equals(ICBillType.LocAdjust)) { + vos = ICLocationUtil.loadLocationVOsFilterNeg(vos); + } else { + vos = ICLocationUtil.loadLocationVOs(vos); + } + if (vos != null && vos.length == 1) { + BillBodySortUtils.sort(vos); + // 本位币 + String cfinanceoid = new OrgInfoQuery().getFinanceOrgIDByCalBodyID(vos[0].getHead().getPk_org()); + String ccurrencyid = CurrencyRateUtilHelper.getInstance().getLocalCurrtypeByOrgID(cfinanceoid); + Arrays.asList(vos[0].getBodys()).stream().forEach(body -> {body.setAttributeValue(MetaNameConst.CCURRENCYID, ccurrencyid);}); + BillVOWithExtendInfo info = new ICBillExtendInfoHelper() + .getExtendInfoByBillVO(vos[0]); + return info; + } + + return null; + } + + @Override + public BillVOWithExtendInfo[] queryBillDev(ICBillType billtype, String[] hids) { + ICBillVO[] vos = new ICBillVOQuery(billtype).query(hids); + if(billtype.equals(ICBillType.PurchaseIn)){ + try { + vos = new BillQuery(PurchaseInVO.class).queryGrandsons((PurchaseInVO[]) vos); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + if (billtype.equals(ICBillType.LocAdjust)) { + vos = ICLocationUtil.loadLocationVOsFilterNeg(vos); + } else { + vos = ICLocationUtil.loadLocationVOs(vos); + } + List resultList=new ArrayList<>(); + if (vos != null && vos.length >0) { + BillBodySortUtils.sort(vos); + + for(ICBillVO vo:vos){ + // 本位币 + String cfinanceoid = new OrgInfoQuery().getFinanceOrgIDByCalBodyID(vo.getHead().getPk_org()); + String ccurrencyid = CurrencyRateUtilHelper.getInstance().getLocalCurrtypeByOrgID(cfinanceoid); + Arrays.asList(vo.getBodys()).stream().forEach(body -> {body.setAttributeValue(MetaNameConst.CCURRENCYID, ccurrencyid);}); + BillVOWithExtendInfo info = new ICBillExtendInfoHelper() + .getExtendInfoByBillVO(vo); + resultList.add(info); + } + } + return resultList.toArray(new BillVOWithExtendInfo[resultList.size()]); + } + @Override + public TransTypeExtendVO qryTransTypeExtendVOByPK(String pk) { + TransTypeExtendVO[] retvo = (TransTypeExtendVO[]) new VOQuery( + TransTypeExtendVO.class).queryWithWhereKeyWord( + " where CTRANTYPEID= '" + pk + "'", ""); + return retvo[0]; + } + + @Override + public ICBillHeadVO[] queryHeadWithInfo(ICBillType billtype, + ISuperVO[] headvos) { + ICBillVO[] billvos = queryBillByHead(billtype, headvos); + if (billvos == null || billvos.length == 0) { + return null; + } + return filterHeadVO(billvos); + } + + private ICBillHeadVO[] filterHeadVO(ICBillVO[] billvos) { + List headvos = new ArrayList(); + for (ICBillVO billvo : billvos) { + ICBillHeadVO head = billvo.getHead(); + // 处理中和待签字的单据都是自由态 + if (head.getFbillflag() == ICBillFlag.getFreeFlag()) { + boolean isProcessing = false; + ICBillBodyVO[] bodys = billvo.getBodys(); + // 存在一行表体没有实收或实发的单据认为是处理中 + // 数量为0认为是有数量 + for (ICBillBodyVO body : bodys) { + if (null == body.getNnum()) { + isProcessing = true; + break; + } + } + // 不是处理中的单据认为是待签字 + if (!isProcessing) { + head.setAttributeValue(ICBillstatusForWeb.ICBILLSTATUS, + ICBillstatusForWeb.TOSIGN); + } else { + head.setAttributeValue(ICBillstatusForWeb.ICBILLSTATUS, + ICBillstatusForWeb.TOPROCESS); + } + } else { + head.setAttributeValue(ICBillstatusForWeb.ICBILLSTATUS, + ICBillstatusForWeb.SIGNED); + } + headvos.add(head); + } + return headvos.toArray(new ICBillHeadVO[0]); + } + + private ICBillVO[] queryBillByHead(ICBillType billtype, ISuperVO[] headvos) { + Set ids = new HashSet(); + for (ISuperVO headvo : headvos) { + ids.add((String) headvo + .getAttributeValue(MetaNameConst.CGENERALHID)); + } + ICBillVO[] billvos = NCLocator.getInstance() + .lookup(IICBillVOQueryService.class) + .query(billtype, ids.toArray(new String[0])); + return billvos; + } + + // @Override + // public TransTypeExtendVO qryTransTypeExtendVOByPK(String pk) { + // TransTypeExtendVO[] retvo = (TransTypeExtendVO[]) new VOQuery( + // TransTypeExtendVO.class).queryWithWhereKeyWord(" where pk_group =" + // + "'" + InvocationInfoProxy.getInstance().getGroupId() + "'" + // + " and transtypecode = " + "'" + pk + "'", null); + // return retvo[0]; + // } +} diff --git a/ic/src/public/nc/vo/ic/m4n/entity/deal/TransformVOChecker.java b/ic/src/public/nc/vo/ic/m4n/entity/deal/TransformVOChecker.java new file mode 100644 index 00000000..ca51ff6e --- /dev/null +++ b/ic/src/public/nc/vo/ic/m4n/entity/deal/TransformVOChecker.java @@ -0,0 +1,429 @@ +package nc.vo.ic.m4n.entity.deal; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.bs.ic.general.util.RuleUtils; +import nc.bs.ic.pub.env.ICBSContext; +import nc.vo.bd.material.stock.MaterialStockVO; +import nc.vo.ic.invadjust.lang.InvAdjustRes; +import nc.vo.ic.m4n.entity.TransformBodyVO; +import nc.vo.ic.m4n.entity.TransformRowFlag; +import nc.vo.ic.m4n.entity.TransformVO; +import nc.vo.ic.pub.define.ICPubMetaNameConst; +import nc.vo.ic.pub.util.CollectionUtils; +import nc.vo.ic.pub.util.StringUtil; +import nc.vo.ic.pub.util.VOEntityUtil; +import nc.vo.ic.special.check.SpecialBillEntityCheck; +import nc.vo.pub.BusinessException; +import nc.vo.pub.VOStatus; +import nc.vo.pub.lang.UFBoolean; + +/** + *

+ * 本类主要完成以下功能: 形态转换数据校验 1.行类型校验 2.转换前后的物料维度校验 3.必输项及数量、主数量非空校验 限BS端调用 + * + *

    + *
  • + *
+ *

+ *

+ * + * @version 6.0 + * @since 6.0 + * @author chennn + * @time 2010-5-31 下午04:35:35 + */ +public class TransformVOChecker { + + public void checkNullItem(TransformVO bill) throws BusinessException { + + new SpecialBillEntityCheck().checkNullItem(bill); + List errVendorRows = new ArrayList();// 供应商 + List errProductRows = new ArrayList();// 生产厂商 + List errProjectRows = new ArrayList();// 项目 + List errCffileidRows = new ArrayList();// 特征码 + List errStateRows = new ArrayList(); + List errNumRows = new ArrayList();// 数量和主数量 + List errCasscustRows = new ArrayList(); + ICBSContext context = new ICBSContext(); + for (TransformBodyVO body : bill.getBodys()) { + // 过滤已经删除或者没有修改的表体行 + if (body.getStatus() == VOStatus.DELETED || body.getStatus() == VOStatus.UNCHANGED) { + continue; + } + String cmaterialvid = body.getCmaterialvid(); + if (!StringUtil.isSEmptyOrNull(cmaterialvid) && (body.getNnum() == null || body.getNassistnum() == null)) { + errNumRows.add(body.getCrowno()); + } + if (this.isVendorChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCvendorid())) { + errVendorRows.add(body.getCrowno()); + } + // 泰开项目客开 + + // 项目字段根据库存信息页签-可用量按辅助属性检查是否勾选进行判断 + String pk_org = bill.getHead().getPk_org(); + Boolean needCheckProd = checkProdect(cmaterialvid, pk_org); + if (needCheckProd&&this.isProductorChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCproductorid())) { + errProductRows.add(body.getCrowno()); + } + // 项目字段根据库存信息页签-可用量按辅助属性检查是否勾选进行判断 + Boolean needCheckProject = checkProject(cmaterialvid, pk_org); + if (needCheckProject&&this.isProjectChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCprojectid())) { + errProjectRows.add(body.getCrowno()); + } + if (this.isInvStateManage(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCstateid())) { + errStateRows.add(body.getCrowno()); + } + if (this.isCasscustChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCasscustid())) { + errCasscustRows.add(body.getCrowno()); + } + if (this.isCffileidChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCffileid())) { + errCffileidRows.add(body.getCrowno()); + } + + } + RuleUtils util = new RuleUtils(); + util.showErrByRows(errVendorRows, InvAdjustRes.getVendorNullErr()); + util.showErrByRows(errProductRows, InvAdjustRes.getProductorNullErr()); + util.showErrByRows(errProjectRows, InvAdjustRes.getProjectNullErr()); + util.showErrByRows(errStateRows, InvAdjustRes.getStateNullErr()); + util.showErrByRows(errNumRows, InvAdjustRes.getNumNullErr()); + util.showErrByRows(errCasscustRows, InvAdjustRes.getCasscustNullErr()); + util.showErrByRows(errCffileidRows, InvAdjustRes.getCffileidNullErr()); + + } + + /** + * 根据物料查询物料库存信息页签-可用量按辅助属性检查是否勾选进行判断 + * + * @param cmaterialvid + * @param pk_org + * @return + */ + private Boolean checkProject(String cmaterialvid, String pk_org) { + String whereSql = " pk_material='" + cmaterialvid + "' and pk_org='" + pk_org + "' and nvl(dr,0)=0 "; + List list = null; + try { + list = (List) new BaseDAO().retrieveByClause(MaterialStockVO.class, whereSql); + } catch (DAOException e) { + e.printStackTrace(); + } + if (list != null && list.size() > 0) { + return list.get(0).getFixasst2()==null?false:list.get(0).getFixasst2().booleanValue(); + } + return true; + } + + /** + * 根据物料查询物料库存信息页签-可用量按辅助属性检查是否勾选进行判断 + * + * @param cmaterialvid + * @param pk_org + * @return + */ + private Boolean checkProdect(String cmaterialvid, String pk_org) { + String whereSql = " pk_material='" + cmaterialvid + "' and pk_org='" + pk_org + "' and nvl(dr,0)=0 "; + List list = null; + try { + list = (List) new BaseDAO().retrieveByClause(MaterialStockVO.class, whereSql); + } catch (DAOException e) { + e.printStackTrace(); + } + if (list != null && list.size() > 0) { + return list.get(0).getFixasst4() == null ? false : list.get(0).getFixasst4().booleanValue(); + } + return true; + } + + public List checkRowType(TransformVO bill) throws BusinessException { + TransformBodyVO[] bodyvos = bill.getBodys(); + int bodyLength = bodyvos.length; + if (bodyLength <= 0) { + return null; + } + if (bodyLength < 2) { + throw new BusinessException(InvAdjustRes.getRowLengErr()); + } + List beforeIndex = new ArrayList(); + for (int i = 0; i < bodyLength; i++) { + if (null == bodyvos[i].getFbillrowflag()) { + throw new BusinessException(InvAdjustRes.getRowTypeNullErr()); + } + if (bodyvos[i].getFbillrowflag().equals(TransformRowFlag.BEFORECONVERT.value()) + && VOStatus.DELETED != bodyvos[i].getStatus()) { + beforeIndex.add(i); + } + } + if (!bodyvos[0].getFbillrowflag().equals(TransformRowFlag.BEFORECONVERT.value()) + || !bodyvos[bodyLength - 1].getFbillrowflag().equals(TransformRowFlag.AFTERCONVERT.value())) { + throw new BusinessException(InvAdjustRes.getFirstAndLastRowTypeErr()); + } + if (beforeIndex.size() > bodyLength / 2) { + throw new BusinessException(InvAdjustRes.getTransformRowTypeErr()); + } + for (int i = 0, j = i + 1; j < beforeIndex.size(); i++, j++) { + int currentindex = beforeIndex.get(i); + int nextindex = beforeIndex.get(j); + if (nextindex == currentindex + 1) { + throw new BusinessException(InvAdjustRes.getTransformRowTypeErr()); + } + } + return beforeIndex; + + } + + private List getBodysButDelete(TransformBodyVO[] bodyVOs) { + List aftertempRows = new ArrayList(); + for (TransformBodyVO bodyVO : bodyVOs) { + if (VOStatus.DELETED == bodyVO.getStatus()) { + continue; + } + aftertempRows.add(bodyVO); + } + return aftertempRows; + } + + /** + * 方法功能描述: + *

+ * 检查转换前后的行内容是否存在转换前行等于转换后的行 参数说明 + * + * @param bill + * @throws BusinessException + *

+ * @since 6.0 + * @author chennn + * @time 2010-6-1 下午03:06:04 + */ + public void checkTranformItem(TransformVO bill, List beforeIndex) throws BusinessException { + TransformBodyVO[] bodyVOs = bill.getBodys(); + Map> errInfo = new HashMap>(); + List aftertempRows = this.getBodysButDelete(bodyVOs); + if (beforeIndex.size() == 1) { + TransformBodyVO beforeRow = bodyVOs[beforeIndex.get(0)]; + List afterRows = aftertempRows.subList(1, aftertempRows.size()); + List errRows = this.isBeforeSameWithAfter(beforeRow, afterRows); + if (errRows.size() > 0) { + errInfo.put(beforeRow, errRows); + this.showItemSameErr(errInfo); + } + } else { + List errBeforeRow = new ArrayList(); + for (int i = 0, j = i + 1; j < beforeIndex.size(); i++, j++) { + int currentIndex = beforeIndex.get(i); + int nextIndex = beforeIndex.get(j); + TransformBodyVO beforeRow = bodyVOs[currentIndex]; + List afterRows = new ArrayList(); + for (int k = currentIndex + 1; k < nextIndex; k++) { + // 过滤已删除表体行 + if (VOStatus.DELETED == bodyVOs[k].getStatus()) { + continue; + } + afterRows.add(bodyVOs[k]); + } + List errAfters = this.isBeforeSameWithAfter(beforeRow, afterRows); + if (errAfters.size() > 0) { + errBeforeRow.add(beforeRow); + errInfo.put(beforeRow, errAfters); + } + } + int lastBeforeIndex = beforeIndex.get(beforeIndex.size() - 1); + TransformBodyVO beforeRow = bodyVOs[lastBeforeIndex]; +// List afterBodyRows = aftertempRows.subList( +// lastBeforeIndex + 1, aftertempRows.size()); + + // begin --调整最后一次校验表体行取值方式 lihui13 20180915 + List afterBodyRows = new ArrayList(); + int k = lastBeforeIndex + 1; + while (k != bodyVOs.length) { + if (k > bodyVOs.length) { + break; + } + if (VOStatus.DELETED == bodyVOs[k].getStatus()) { + k++; + continue; + } + afterBodyRows.add(bodyVOs[k]); + k++; + } + // end + List errAfters = this.isBeforeSameWithAfter(beforeRow, afterBodyRows); + if (errAfters.size() > 0) { + errBeforeRow.add(beforeRow); + errInfo.put(beforeRow, errAfters); + } + this.showItemSameErr(errInfo); + } + } + + private String[] getKeys(TransformBodyVO beforeRow, String[] initFields) { + + List keys = new ArrayList(); + CollectionUtils.addArrayToList(keys, initFields); + if (keys.contains(TransformBodyVO.VFREE_PREFIX)) { + for (int i = 1; i <= TransformBodyVO.VREE_NUM; i++) { + String vfree_i = TransformBodyVO.VFREE_PREFIX + i; + keys.add(vfree_i); + } + } + String cmaterialvid = beforeRow.getCmaterialvid(); + ICBSContext context = new ICBSContext(); + if (this.isVendorChosen(cmaterialvid, context)) { + keys.add(TransformBodyVO.CVENDORID); + } + if (this.isProductorChosen(cmaterialvid, context)) { + keys.add(TransformBodyVO.CPRODUCTORID); + } + if (this.isProjectChosen(cmaterialvid, context)) { + keys.add(TransformBodyVO.CPROJECTID); + } + if (this.isInvStateManage(cmaterialvid, context)) { + keys.add(TransformBodyVO.CSTATEID); + } + if (this.isCffileidChosen(cmaterialvid, context)) { + keys.add(ICPubMetaNameConst.CFFILEID); + } + return keys.toArray(new String[keys.size()]); + } + + private List isBeforeSameWithAfter(TransformBodyVO beforeRow, List afterRows) { + + String[] fields = new String[] { TransformBodyVO.CMATERIALVID, TransformBodyVO.CASTUNITID, + TransformBodyVO.VBATCHCODE, TransformBodyVO.VFREE_PREFIX, TransformBodyVO.CASSCUSTID }; + + String[] keys = this.getKeys(beforeRow, fields); + Object[] values = VOEntityUtil.getVOValues(beforeRow, keys); + String key = StringUtil.mergeString(values, null, null); + List errRows = new ArrayList(); + for (TransformBodyVO vo : afterRows) { + Object[] afterValues = VOEntityUtil.getVOValues(vo, keys); + String afterKey = StringUtil.mergeString(afterValues, null, null); + if (StringUtil.isStringEqual(key, afterKey)) { + errRows.add(vo.getCrowno()); + } + } + return errRows; + + } + + /** + * 方法功能描述: + *

+ * 物料是否库存状态管理 参数说明 + * + * @param cmaterialvid + * @return + *

+ * @since 6.0 + * @author chennn + * @time 2010-6-1 下午04:21:39 + */ + private boolean isInvStateManage(String cmaterialvid, ICBSContext context) { + UFBoolean fix1 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix1(); + return fix1 == null ? false : fix1.booleanValue(); + + } + + /** + * 方法功能描述: + *

+ * 物料是否勾选项目辅助属性 参数说明 + * + * @param cmaterialvid + * @return + *

+ * @since 6.0 + * @author chennn + * @time 2010-6-1 下午02:24:29 + */ + private boolean isProjectChosen(String cmaterialvid, ICBSContext context) { + UFBoolean fix2 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix2(); + return fix2 == null ? false : fix2.booleanValue(); + } + + /** + * 方法功能描述: + *

+ * 物料是否勾选特征码辅助属性 参数说明 + * + * @param cmaterialvid + * @return + *

+ * @since 6.36 + * @author xuxq3 + * @time 2015-04-06 + */ + private boolean isCffileidChosen(String cmaterialvid, ICBSContext context) { + UFBoolean fix100 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix100(); + return fix100 == null ? false : fix100.booleanValue(); + } + + /** + * 是否勾选客户辅助属性 + * + * @param cmaterialvid + * @param context + * @return + */ + private boolean isCasscustChosen(String cmaterialvid, ICBSContext context) { + UFBoolean fix5 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix5(); + return fix5 == null ? false : fix5.booleanValue(); + } + + /** + * 方法功能描述: + *

+ * 物料是否勾选供应商辅助属性 参数说明 + * + * @param cmaterialvid + * @return + *

+ * @since 6.0 + * @author chennn + * @time 2010-6-1 上午10:46:09 + */ + private boolean isVendorChosen(String cmaterialvid, ICBSContext context) { + UFBoolean fix3 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix3(); + return fix3 == null ? false : fix3.booleanValue(); + } + + /** + * 方法功能描述: + *

+ * 物料是否勾选生产厂商辅助属性 参数说明 + * + * @param cmaterialvid + * @return + *

+ * @since 6.0 + * @author chennn + * @time 2010-6-1 下午02:24:11 + */ + private boolean isProductorChosen(String cmaterialvid, ICBSContext context) { + UFBoolean fix4 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix4(); + return fix4 == null ? false : fix4.booleanValue(); + } + + private void showItemSameErr(Map> errInfo) throws BusinessException { + if (errInfo.size() <= 0) { + return; + } + StringBuilder errMsg = new StringBuilder(); + errMsg.append(InvAdjustRes.getBeforeSameAfterErr()).append("\n"); + for (Map.Entry> err : errInfo.entrySet()) { + String beforeRowNo = err.getKey().getCrowno(); + errMsg.append(InvAdjustRes.getBeforeRow() + beforeRowNo).append(" "); + for (String afterRow : err.getValue()) { + errMsg.append(InvAdjustRes.getAfterRow()).append(afterRow).append(","); + } + } + + throw new BusinessException(errMsg.toString()); + } + +} diff --git a/ic/src/public/nccloud/api/ic/m47/IAPISubcontInMaintain.java b/ic/src/public/nccloud/api/ic/m47/IAPISubcontInMaintain.java index b6a5d739..2786e193 100644 --- a/ic/src/public/nccloud/api/ic/m47/IAPISubcontInMaintain.java +++ b/ic/src/public/nccloud/api/ic/m47/IAPISubcontInMaintain.java @@ -14,5 +14,11 @@ import java.util.Map; */ public interface IAPISubcontInMaintain { + /** + * + * @param subcontInVOList + * @return + * @throws Exception + */ SubcontInVO[] save(List> subcontInVOList) throws Exception; } diff --git a/ic/src/public/nccloud/api/ic/m4c/IAPISaleOutMaintain.java b/ic/src/public/nccloud/api/ic/m4c/IAPISaleOutMaintain.java index 35e9c509..aa16729b 100644 --- a/ic/src/public/nccloud/api/ic/m4c/IAPISaleOutMaintain.java +++ b/ic/src/public/nccloud/api/ic/m4c/IAPISaleOutMaintain.java @@ -74,7 +74,7 @@ public interface IAPISaleOutMaintain { public SaleOutVO[] saveRefSaleOrder(List> paramMapList) throws BusinessException; /** - * 根据发货单生成销售出库单 + * 根据发货单生成销售出库单 * @param vos * @return * @throws BusinessException diff --git a/ic/src/public/nccloud/api/ic/onhand/IAPIOnhandQuery.java b/ic/src/public/nccloud/api/ic/onhand/IAPIOnhandQuery.java index 727c564c..c5c935e8 100644 --- a/ic/src/public/nccloud/api/ic/onhand/IAPIOnhandQuery.java +++ b/ic/src/public/nccloud/api/ic/onhand/IAPIOnhandQuery.java @@ -16,7 +16,23 @@ import nc.vo.pub.BusinessException; */ public interface IAPIOnhandQuery { + /** + * 根据维度查询现存量信息 + * 此方法接收一个参数映射,用于指定查询条件,如仓库、物料等 + * + * @param paramMap 参数映射,包含查询条件 + * @return OnhandVO[] 查询到的现存量信息数组 + * @throws BusinessException 当查询操作失败时抛出的业务异常 + */ OnhandVO[] queryOnhandVOByDims(Map paramMap) throws BusinessException; - OnhandVO[] queryOnhandVOByDims(List> paramMap)throws Exception; + /** + * 根据多个维度查询现存量信息 + * 此方法接收一个参数映射列表,每个映射包含一组查询条件,用于批量查询 + * + * @param paramMap 参数映射列表,每个映射包含一组查询条件 + * @return OnhandVO[] 查询到的现存量信息数组 + * @throws Exception 当查询操作失败时抛出的异常 + */ + OnhandVO[] queryOnhandVOByDims(List> paramMap) throws Exception; } diff --git a/ic/src/public/nccloud/dto/ic/pub/entity/GeneralSumPrintInfo.java b/ic/src/public/nccloud/dto/ic/pub/entity/GeneralSumPrintInfo.java new file mode 100644 index 00000000..c6c4738f --- /dev/null +++ b/ic/src/public/nccloud/dto/ic/pub/entity/GeneralSumPrintInfo.java @@ -0,0 +1,63 @@ +package nccloud.dto.ic.pub.entity; + +import java.util.List; + +import nccloud.pubitf.platform.print.vo.PrintInfo; +import nccloud.pubitf.uap.print.vo.NoPreviewPrintInfo; +/** + * @description 出入库汇总打印信息 + * @author zhegnxinm + * @date 2018-12-16 上午10:48:39 + * @version ncc1.0 + */ +public class GeneralSumPrintInfo extends NoPreviewPrintInfo{ + //打印数据 + private Object[] data; + //前段传过来的数据 + private String billcard; + //汇总类型 + private List alGroupBy ; + //出入库类型 + private String inOutType; + public String getInOutType() { + return inOutType; + } + + public void setInOutType(String inOutType) { + this.inOutType = inOutType; + } + + public List getAlGroupBy() { + return alGroupBy; + } + + public void setAlGroupBy(List alGroupBy) { + this.alGroupBy = alGroupBy; + } + + public Object[] getSelect() { + return select; + } + + public void setSelect(Object[] select) { + this.select = select; + } + + private Object[] select; + public String getBillcard() { + return billcard; + } + + public void setBillcard(String billcard) { + this.billcard = billcard; + } + + public Object[] getData() { + return data; + } + + public void setData(Object[] data) { + this.data = data; + } + +} diff --git a/ic/src/public/nccloud/openapi/ic/m47/SubcontInResource.java b/ic/src/public/nccloud/openapi/ic/m47/SubcontInResource.java index c24fd957..f836de0f 100644 --- a/ic/src/public/nccloud/openapi/ic/m47/SubcontInResource.java +++ b/ic/src/public/nccloud/openapi/ic/m47/SubcontInResource.java @@ -2,13 +2,10 @@ package nccloud.openapi.ic.m47; import nc.bs.framework.common.NCLocator; import nc.vo.ic.m47.entity.SubcontInVO; -import nc.vo.scmpub.res.billtype.ICBillType; import nc.ws.opm.pub.utils.result.APIErrCodeEnum; import nccloud.api.ic.m47.IAPISubcontInMaintain; import nccloud.api.rest.utils.ResultMessageUtil; -import nccloud.openapi.ic.util.ICAPILocationVOUtils; import nccloud.openapi.scmpub.pub.NCCPubRestResource; -import nccloud.openapi.scmpub.pub.TransferMapToVOTool; import org.json.JSONString; import javax.ws.rs.Consumes; @@ -32,32 +29,57 @@ public class SubcontInResource extends NCCPubRestResource { private static String HEADTABLE = "ic_subcontin_h"; private static String BODYTABLE = "ic_subcontin_b"; + /** + *保存操作信息 + * + * 该方法通过POST请求接收JSON格式的参数,处理后返回JSON格式的结果 + * 主要用于保存单个操作的信息,将接收到的参数封装成列表的形式, + * 调用另一个save方法进行实际的保存操作 + * + * @param param 包含操作信息的键值对参数 + * @return 返回保存操作的结果,格式为JSON字符串 + */ @POST @Path("operation/save") @Consumes({"application/json"}) @Produces({"application/json"}) public JSONString save(Map param) { + // 将接收到的参数封装成列表,以便调用实际的保存方法 List> paramList = new ArrayList(); paramList.add(param); + + // 调用实际的保存方法,并返回保存结果 JSONString result = this.save(paramList); return result; } + /** + * 保存数据接口 + * 该方法接收一个包含表头和表体信息的JSON数组,尝试将其保存到数据库中 + * 如果传入的数据格式不正确(不包含表头或表体信息),则返回错误信息 + * 如果保存过程中发生异常,则返回异常信息 + * + * @param paramList 一个包含多个数据项的列表,每个数据项是一个Map对象,必须包含表头和表体信息 + * @return 返回一个JSON字符串,包含保存结果或错误信息 + */ @POST @Path("save") @Consumes({"application/json"}) @Produces({"application/json"}) public JSONString save(List> paramList){ try { + // 遍历传入的参数列表,检查每个Map对象是否包含表头和表体信息 for (Map map : paramList) { if (!map.containsKey(HEADTABLE) || !map.containsKey(BODYTABLE)) { + // 如果任一数据项不包含表头或表体信息,返回错误信息 return ResultMessageUtil.exceptionToJSON("传入数据异常,参数要包含表头信息和表体信息", APIErrCodeEnum.BUSINESSEXCCODE.getCode()); } } + // 调用服务接口保存数据,并返回保存结果 SubcontInVO[] save = NCLocator.getInstance().lookup(IAPISubcontInMaintain.class).save(paramList); return ResultMessageUtil.toJSON(save, "保存成功"); - }catch (Exception e){ + } catch (Exception e) { + // 如果保存过程中发生异常,返回异常信息 return ResultMessageUtil.exceptionToJSON(e); } - } } diff --git a/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java b/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java index 7ebf9c53..e6d9d1f8 100644 --- a/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java +++ b/ic/src/public/nccloud/openapi/ic/m4c/SaleOutResource.java @@ -84,7 +84,7 @@ public class SaleOutResource extends NCCPubRestResource { return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode()); } try { - // 调用查询接口 + //调用查询接口 IAPISaleOutQuery query = NCLocator.getInstance().lookup(IAPISaleOutQuery.class); SaleOutVO[] saleOutVOs = query.queryVOByScheme(paramMap); @@ -143,7 +143,7 @@ public class SaleOutResource extends NCCPubRestResource { nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0464")/* @res "销售出库单修改签字成功" */); }else{ - // 修改 + //修改 SaleOutVO[] updateVO = NCLocator.getInstance().lookup(IAPISaleOutMaintain.class) .update(paramMapList); diff --git a/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java b/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java index 3ed56e36..2d4cd802 100644 --- a/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java +++ b/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java @@ -136,7 +136,7 @@ public class OnhandResource { if (remain == null || remain.isEmpty()) { return null; } - // 转换为 pk 和 code 的映射 + // 转换为 pk和 code 的映射 Map pkCodeMap = new HashMap<>(); for (Map row : remain) { if (row != null) { diff --git a/ic/src/public/nccloud/pubitf/ic/pub/service/IICBillVOQueryService.java b/ic/src/public/nccloud/pubitf/ic/pub/service/IICBillVOQueryService.java new file mode 100644 index 00000000..f4256138 --- /dev/null +++ b/ic/src/public/nccloud/pubitf/ic/pub/service/IICBillVOQueryService.java @@ -0,0 +1,61 @@ +package nccloud.pubitf.ic.pub.service; + +import nc.vo.ic.general.define.ICBillHeadVO; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ic.transtype.TransTypeExtendVO; +import nc.vo.pub.ISuperVO; +import nc.vo.scmpub.res.billtype.ICBillType; +import nccloud.dto.ic.pub.entity.BillVOWithExtendInfo; + +/** + * 库存单据查询接口 + * @author hujieh + * + */ +public interface IICBillVOQueryService { + + /** + * 根据父类主键,查询聚合VO + * @param hids + * @return + */ + public ICBillVO[] query(ICBillType billtype, String[] hids); + /** + * 根据主键查询表头信息 + * @param T + * @param hids + * @return + * + */ + public ICBillHeadVO[] query(Class T,String[] hids); + + /** + * 查询库存单据,并且包含扩展信息 + * @param billtype + * @param hid + * @return + */ + public BillVOWithExtendInfo queryBillExt(ICBillType billtype, String hid); + public BillVOWithExtendInfo[] queryBillDev(ICBillType billtype, String[] hids); + /** + *查询交易类型扩展属性vo + * @param pk + * @return + * + */ + public TransTypeExtendVO qryTransTypeExtendVOByPK(String pk); + + /** + * 库存出入库单据根据表头vo,补充toSign(是否可以签字)标志并返回 + * @param headvos + * @return + */ + public ICBillHeadVO[] queryHeadWithInfo(ICBillType billtype, ISuperVO[] headvos); + + /** + * 查询库存单据,并且包含扩展信息 + * @param vo + * @return + */ + public BillVOWithExtendInfo queryBillExtByVO(ICBillVO vo); +} diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java index 6475bb43..1641bbf0 100644 --- a/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/PickmApproveBP.java @@ -21,6 +21,7 @@ import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum; public class PickmApproveBP { private void addAfterRule(CompareAroundProcesser processer) { + //备料计划审批推送锐制 IRule pickmstatusFilterRule = new AfterApproveRuleSyncRZWMS(); processer.addAfterRule(pickmstatusFilterRule); } diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java index b65ae8ec..2c70608d 100644 --- a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleSyncRZWMS.java @@ -9,6 +9,7 @@ import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.impl.pubapp.pattern.rule.IRule; import nc.jdbc.framework.processor.ColumnProcessor; import nc.pubitf.para.SysInitQuery; +import nc.vo.bd.defdoc.DefdocVO; import nc.vo.bd.material.MaterialVO; import nc.vo.bd.rt.rt0004.entity.RcVO; import nc.vo.bd.stordoc.StordocVO; @@ -19,6 +20,7 @@ import nc.vo.mmpac.pickm.entity.PickmItemVO; import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; import nc.vo.pub.lang.UFBoolean; +import nc.vo.pub.lang.UFDouble; import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.pub.SqlBuilder; import nc.vo.scmpub.util.ArrayUtil; @@ -154,31 +156,31 @@ public class AfterApproveRuleSyncRZWMS implements IRule { singleObj.put("djxh", body.getVrowno()); //djrq datetime 单据日期 必填 - singleObj.put("djrq", head.getDmakedate()); + singleObj.put("djrq", head.getDmakedate().toString()); //wlbm_wbid varchar(100) 第三方系统物料名称id 必填 物料编码的后台ID singleObj.put("wlbm_wbid", wlbm_wbid); - //scjh_wbid varchar(100) 第三方系统生产计划ID 必填 生产计划号外部ID,一般ERP系统的生产订单号。 - singleObj.put("scjh_wbid", head.getCsourcebillid()); - - //jhxh numeric(5) 计划序号 -生产订单行号 - singleObj.put("jhxh", head.getVsourcebillrowno()); - //djsl numeric(18,3) 单据数量 必填 - singleObj.put("djsl", body.getNpscnum().getDouble()); + UFDouble djsl = body.getNplanoutastnum() == null ? UFDouble.ZERO_DBL : body.getNplanoutastnum(); + singleObj.put("djsl", djsl.getDouble()); - //sddd varchar(510) 送达地点 必填 传仓库名称,要求上位ERP仓库名称不重复。 - singleObj.put("sddd", transferCodeByPk(StordocVO.getDefaultTableName(), StordocVO.NAME, StordocVO.PK_STORDOC, body.getCoutstockid())); + //sddd varchar(510)送达地点 必填 传仓库名称,要求上位ERP仓库名称不重复。 +// singleObj.put("sddd", transferCodeByPk(StordocVO.getDefaultTableName(), StordocVO.NAME, StordocVO.PK_STORDOC, body.getCoutstockid())); //ckbh_wbid varchar(100) 第三方系统仓库id 必填 储区根据仓库默认,同仓库多储区时,两者必填; - singleObj.put("ckbh_wbid",transferCodeByPk(StordocVO.getDefaultTableName(), StordocVO.CODE, StordocVO.PK_STORDOC, body.getCoutstockid())); +// singleObj.put("ckbh_wbid",body.getCoutstockid()); //qfbj int 签发标记 必填 默认1;上位系统审核传至MOM 1 singleObj.put("qfbj", 1); - //cght_wbid varchar(100) 第三方系统合同id 必填 委外订单 - singleObj.put("cght_wbid", head.getVfirstbillcode()); + //cght_wbid varchar(100) 第三方系统合同id 必填 委外订单主键ID + singleObj.put("cght_wbid",head.getCfirstbillid()); + //htbh varchar(100) 合同号 委外订单单据号 + singleObj.put("htbh",head.getVfirstbillcode()); + + //cght_wbid varchar(100) 第三方系统合同id 必填 +// singleObj.put("cght_wbid", transferCodeByPk("bd_defdoc", DefdocVO.CODE, DefdocVO.PK_DEFDOC, body.getVbdef5())); details.add(singleObj); } diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOApproveBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOApproveBP.java index 97eb00a1..67674177 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOApproveBP.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOApproveBP.java @@ -51,10 +51,10 @@ public class PMOApproveBP { processer.addAfterRule(new PMOCreatePSCPlanRule()); ICompareRule auditSupplyRule = new PMOApproveAuditSupplyRule(); processer.addAfterRule(auditSupplyRule); - // 审批后推送到RZ系统 + // 审批后推送到锐制系统 processer.addAfterRule(new AfterApprovingSynchronizeRuleRZ(true)); // 审批后推送流程生产订单到MES - processer.addAfterRule(new AfterApproveRuleSyncMes()); +// processer.addAfterRule(new AfterApproveRuleSyncMes()); } diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApprovingSynchronizeRuleRZ.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApprovingSynchronizeRuleRZ.java index 16f608bb..58448c29 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApprovingSynchronizeRuleRZ.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApprovingSynchronizeRuleRZ.java @@ -52,7 +52,7 @@ public class AfterApprovingSynchronizeRuleRZ implements IRule { return; } - // 推送到RZ系统 + // 推送到锐制系统 pushToRZMOM(filteredOrders.toArray(new PMOAggVO[0])); } catch (Exception e) { log.error("同步生产订单到RZ系统失败: " + e.getMessage()); diff --git a/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java index 95d9f8fb..95c0f72c 100644 --- a/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java +++ b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrAutoProdInFilterBP.java @@ -30,7 +30,7 @@ public class WrAutoProdInFilterBP { public AggWrVO[] filter(AggWrVO[] aggWrVOs) { - // 过滤交易类型是否勾选了自动入库 + //过滤交易类型是否勾选了自动入库 List transIDs = new ArrayList(); for (AggWrVO aggvo : aggWrVOs) { if (!WrBillStatusEnum.COMMITE.equalsValue(aggvo.getParentVO().getFbillstatus())) { @@ -96,7 +96,7 @@ public class WrAutoProdInFilterBP { // 设置库存组织和仓库 IRule wrProdInSetInStockOrgRule = new WrProdInSetInStockOrgRule(); wrProdInSetInStockOrgRule.process(filterVOs); - //2025年5月30日08点45分 --外部系统推送接口时填了仓库,此处不清空 + //2025年5月30日08点45分 -- 外部系统推送接口时填了仓库,此处不清空 String userCode = InvocationInfoProxy.getInstance().getUserCode(); if("rzmes".equals(userCode)||"MES".equals(userCode)){ diff --git a/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java b/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java index f0b1255d..db7a9196 100644 --- a/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java +++ b/mmpac/src/private/nc/bs/mmpac/wr/rule/prodin/WrProdInSetInStockOrgRule.java @@ -21,7 +21,7 @@ public class WrProdInSetInStockOrgRule implements IRule { @Override public void process(AggWrVO[] vos) { - // 判空 + //判空 if (MMValueCheck.isEmpty(vos)) { return; } @@ -122,7 +122,7 @@ public class WrProdInSetInStockOrgRule implements IRule { } - //2025年5月30日08点45分 --外部系统推送接口时填了仓库,此处不清空 + //2025年5月30日08点45分 --外部系统推送接口时填了仓库, 此处不清空 if("rzmes".equals(userCode)||"MES".equals(userCode)){ }else{ diff --git a/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java b/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java index 7e640e90..2730eb61 100644 --- a/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java +++ b/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java @@ -130,7 +130,7 @@ public class WrResource extends AbstractNCCRestResource { voList.add(vo); IAPIWrMaintain server = NCLocator.getInstance().lookup(IAPIWrMaintain.class); List aggWrVOS = TransferCodeToPKTool.transferAggVO(voList); - //翻译报告类型 + // 翻译报告类型 BaseDAO baseDAO = new BaseDAO(); for (AggWrVO aggWrVO : aggWrVOS) { List collection = (List) baseDAO.retrieveByClause(BilltypeVO.class, " pk_billtypecode='" + aggWrVO.getParentVO().getVtrantypecode() + "'"); @@ -609,7 +609,7 @@ public class WrResource extends AbstractNCCRestResource { */ private void processMESFields(Map itemMap, BaseDAO baseDAO) throws BusinessException { - // 检查是否需要处理MES字段 + //检查是否需要处理MES字段 // 这里可以通过上下文、用户信息或其他标识来判断 // 暂时通过检查是否存在特定字段来判断是MES用户 boolean isMESUser = isMESUser(itemMap); @@ -619,7 +619,7 @@ public class WrResource extends AbstractNCCRestResource { } try { - // 设置cbmoid保持和vbsrcid一致 + //设置cbmoid保持和vbsrcid一致 if (itemMap.containsKey("vbsrcid") && MMValueCheck.isNotEmpty(itemMap.get("vbsrcid"))) { itemMap.put("cbmoid", itemMap.get("vbsrcid")); } diff --git a/pu/src/private/nc/bs/pu/m21/action/rule/approve/AfterApprovingSynchronizeRuleRZ.java b/pu/src/private/nc/bs/pu/m21/action/rule/approve/AfterApprovingSynchronizeRuleRZ.java index 379de08f..8bef2c0d 100644 --- a/pu/src/private/nc/bs/pu/m21/action/rule/approve/AfterApprovingSynchronizeRuleRZ.java +++ b/pu/src/private/nc/bs/pu/m21/action/rule/approve/AfterApprovingSynchronizeRuleRZ.java @@ -52,7 +52,7 @@ public class AfterApprovingSynchronizeRuleRZ implements IRule { if (newOrderVOS.isEmpty()) { return; } - // 推送到睿智系统 + //推送到锐制系统 pushToRZMOM(newOrderVOS.toArray(new OrderVO[0])); } catch (Exception e) { log.error("同步采购订单到锐制系统失败: " + e.getMessage()); diff --git a/pu/src/private/nc/impl/pu/m21/action/OrderApproveAction.java b/pu/src/private/nc/impl/pu/m21/action/OrderApproveAction.java index dafa0511..06f5369e 100644 --- a/pu/src/private/nc/impl/pu/m21/action/OrderApproveAction.java +++ b/pu/src/private/nc/impl/pu/m21/action/OrderApproveAction.java @@ -111,7 +111,7 @@ public class OrderApproveAction { processer.addAfterRule(new OrderRewritePMStartDateRule(true)); processer.addAfterRule(new OrderApprovePMSupplyRule()); - // 采购订单审批后同步到锐制MES系统 + // 采购订单审批后同步到锐制系统 processer.addAfterRule(new AfterApprovingSynchronizeRuleRZ()); } diff --git a/pu/src/private/nc/impl/pu/m21/action/OrderReviseApproveAction.java b/pu/src/private/nc/impl/pu/m21/action/OrderReviseApproveAction.java new file mode 100644 index 00000000..6b6b21a7 --- /dev/null +++ b/pu/src/private/nc/impl/pu/m21/action/OrderReviseApproveAction.java @@ -0,0 +1,985 @@ +package nc.impl.pu.m21.action; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nc.bs.pu.m21.action.rule.approve.AfterApprovingSynchronizeRuleRZ; +import nc.bs.pu.m21.maintain.OrderReviseUpdateBP; +import nc.bs.pu.m21.maintain.rule.save.SaveTransferMsgRule; +import nc.bs.pu.m21.plugin.OrderPluginPoint; +import nc.bs.scmpub.rule.VOSagaFrozenValidateRule; +import nc.impl.pu.m21.action.rule.approve.ApproveM21AndRewriteCTPayPlan; +import nc.impl.pu.m21.action.rule.approve.FilterOrderByStatusRule; +import nc.impl.pu.m21.action.rule.approve.OrderPriceMaintainRule; +import nc.impl.pu.m21.action.rule.revise.ArrivalOpenCheckRule; +import nc.impl.pu.m21.action.rule.revise.BrefwhenreturnCheckRule; +import nc.impl.pu.m21.action.rule.revise.CheckBfinalcloseRule; +import nc.impl.pu.m21.action.rule.revise.CheckOverPay; +import nc.impl.pu.m21.action.rule.revise.InvoiceOpenCkeckRule; +import nc.impl.pu.m21.action.rule.revise.ItemChangeCheckRule; +import nc.impl.pu.m21.action.rule.revise.ItemRule; +import nc.impl.pu.m21.action.rule.revise.ModifyStatusOnWayRule; +import nc.impl.pu.m21.action.rule.revise.ModifySupplyRule; +import nc.impl.pu.m21.action.rule.revise.NnumCheckRule; +import nc.impl.pu.m21.action.rule.revise.OneContractCheckRule; +import nc.impl.pu.m21.action.rule.revise.OpenCheckRule; +import nc.impl.pu.m21.action.rule.revise.OrderPayPlanVOReviseRule; +import nc.impl.pu.m21.action.rule.revise.ReviseBudgetCtrlRule; +import nc.impl.pu.m21.action.rule.revise.ReviseNumCheckRule; +import nc.impl.pubapp.pattern.data.bill.tool.BillConcurrentTool; +import nc.impl.pubapp.pattern.database.DataAccessUtils; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.itf.pu.reference.ic.ATPServices; +import nc.vo.pu.m21.context.OrderContext; +import nc.vo.pu.m21.entity.OrderFeeVO; +import nc.vo.pu.m21.entity.OrderHeaderVO; +import nc.vo.pu.m21.entity.OrderItemVO; +import nc.vo.pu.m21.entity.OrderMatFeeVO; +import nc.vo.pu.m21.entity.OrderVO; +import nc.vo.pu.m21.enumeration.EnumActive; +import nc.vo.pu.m21.enumeration.EnumRevise; +import nc.vo.pu.m21.utils.ExtBillHasGrandsonDataUtils; +import nc.vo.pu.pub.constant.PUEntity; +import nc.vo.pu.pub.enumeration.POEnumBillStatus; +import nc.vo.pu.pub.rule.ApprovingEditCheckRule; +import nc.vo.pu.pub.rule.ApprovingEditSendMsgRule; +import nc.vo.pu.pub.util.BillQuery; +import nc.vo.pu.pub.util.BillUpdate; +import nc.vo.pub.BusinessException; +import nc.vo.pub.JavaType; +import nc.vo.pub.VOStatus; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pub.lang.UFDate; +import nc.vo.pub.lang.UFDateTime; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.AppContext; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.tool.performance.DeepCloneTool; +import nc.vo.scmpub.res.billtype.POBillType; +import nc.vo.scmpub.util.ArrayUtil; +import nc.vo.scmpub.util.TimeUtils; +import nccloud.commons.lang.ArrayUtils; +import nccloud.pubimpl.pu.mobile.service.order.MobAfterReviseForPoOrderImpl; + +public class OrderReviseApproveAction { + /** + * 采购订单修订,审批通过后的交换主键执行更新的操作 + */ + public OrderVO[] approve(OrderVO[] orderVos, OrderContext ctx) { + if (ArrayUtils.isEmpty(orderVos)) { + return null; + } + // 取到client端vo +// OrderVO[] cliVOs = orderVos; +// BillTransferTool tool = new BillTransferTool(orderVos); + ExtBillHasGrandsonDataUtils tool = new ExtBillHasGrandsonDataUtils(orderVos); + DeepCloneTool clone = new DeepCloneTool(); + // BillTransferTool tool = new BillTransferTool(orderVos); + OrderVO[] cliVOs = (OrderVO[])clone.deepClone(orderVos);; + String approver = cliVOs[0].getHVO().getApprover(); + UFDate taudittime =cliVOs[0].getHVO().getTaudittime(); + Integer forderstatus = cliVOs[0].getHVO().getForderstatus(); + OrderVO[] voOrginal = tool.getOriginBills(); + // 通过pk_src查询出原始vo + OrderVO[] oldOrgVos = this.queryOldVosByNewVos(cliVOs); + if (ArrayUtils.isEmpty(oldOrgVos)) { + return null; + } + String creator = oldOrgVos[0].getHVO().getCreator(); // 创建人 + UFDateTime creationtime =oldOrgVos[0].getHVO().getCreationtime(); // 创建时间 + // 可用量更新前处理 + this.atpBeforeUpdate(oldOrgVos); + // 先查询原始版本vos,对vos加锁,再查询一遍,这时能保证完全锁住vos,获得的数据库vos是正确的 + BillConcurrentTool utilBill = new BillConcurrentTool(); + utilBill.lockBill(oldOrgVos); + oldOrgVos = this.queryOldVosByNewVos(cliVOs); + //获取原始版本的付款协议直接给最新版本使用 +// OrderPaymentVO[] paymentItem = oldOrgVos[0].getPaymentVO(); + cliVOs = this.setWriteBackNums(cliVOs, oldOrgVos); +// cliVOs = new BillUpdate().update(cliVOs, voOrginal); + // 提交时补充孙表 +// new FeeDetailVOUtils().setOrderMatFeeVO(cliVOs); +// new FeeDetailVOUtils().setOrderMatFeeVO(oldOrgVos); +// new FeeDetailVOUtils().setOrderMatFeeVO(voOrginal); + try{ + cliVOs = (OrderVO[])new BillUpdate().update(cliVOs,voOrginal,OrderHeaderVO.PK_ORDER); + }catch (BusinessException e){ + ExceptionUtils.wrappException(e); + } + Map hmap = new HashMap(); + Map bmap = new HashMap(); + OrderVO[] CliVOClone = new OrderVO[cliVOs.length]; + for (int i = 0; i < CliVOClone.length; i++) { + CliVOClone[i] = (OrderVO) cliVOs[i].clone(); + } + OrderVO[] OrgVoClone = new OrderVO[oldOrgVos.length]; + for (int i = 0; i < OrgVoClone.length; i++) { + OrgVoClone[i] = (OrderVO) oldOrgVos[i].clone(); + } + this.changePK(cliVOs,oldOrgVos, hmap,bmap); + OrderVO[] hisVOs =this.queryNewVosByOldVos(cliVOs); + OrderVO[] lastestVOs =this.queryNewVosByOldVos(oldOrgVos); +// // 提交时补充孙表 +// new FeeDetailVOUtils().setOrderMatFeeVO(lastestVOs); +// // 提交时补充孙表 +// new FeeDetailVOUtils().setOrderMatFeeVO(hisVOs); + OrgVoClone[0].getHVO().setForderstatus(lastestVOs[0].getHVO().getForderstatus()); + + // 交换cliVOs主键 + OrderVO[] newCliVO = this.changeClientVoWithPK(oldOrgVos, lastestVOs, hmap, + bmap,forderstatus,approver,taudittime,creator,creationtime); + // 交换oldOrgVos主键 此方法返回变量无用,先注掉 + OrderVO[] newOrgVos = this.changeoldOrgVosWithPK(hisVOs, cliVOs, hmap, + bmap); + // 更新OrgVO +// this.updateOrgVO(newOrgVos, CliVOClone); + // 更新clientVO + OrderVO[] retVOs = this.updateClientVO(newCliVO, OrgVoClone, ctx); + return retVOs; + } + + /** + * 方法功能描述:可用量更新前处理。后续会更新主键导致可用量数据不正确,在此提前处理 + *

+ * 参数说明 + *

+ * + * @since 6.0 + * @author wuxla + * @time 2010-7-2 下午01:24:05 + */ + private void atpBeforeUpdate(OrderVO[] vos) { + ATPServices.modifyATPBefore(POBillType.Order.getCode(), vos); + } + + private void changePK(OrderVO[] cliVOs,OrderVO[] oldOrgVos, Map hmap, Map bmap) { + DataAccessUtils d = new DataAccessUtils(); + List> datas = new ArrayList>(); + List> srcdatas = new ArrayList>(); + List> bdatas = new ArrayList>(); + List> srcbdatas = new ArrayList>(); + Map newkeyhmap = new HashMap(); + Map newkeybmap = new HashMap(); + // 费用项 + List> feeBdatas = new ArrayList>(); + List> feesrcBdatas = new ArrayList>(); + // 费用明细 + List> feeDetailBdatas = new ArrayList>(); + List> feeDetailsrcBdatas = new ArrayList>(); + + //简单记录 原始订单 表头主键 A-~ ,修订订单 表头主键B-A + //过程如下 三步 + //A-~, B-A + //A-~, C-A + //B-A, C-A + //B-A, A-A + //第一步 B-A,C-A + for (int i = 0; i < cliVOs.length; i++) { + // 头 + OrderHeaderVO voHead = cliVOs[i].getHVO(); + String pk_srcorder = voHead.getPk_Srcorder();// 获取原始版本表头pk + String newhpk ="1ZH" + pk_srcorder.substring(3); + hmap.put(pk_srcorder, voHead.getPk_order()); + newkeyhmap.put(pk_srcorder, newhpk); + datas = this.getForeignAddParam(datas, newhpk, voHead.getPk_order()); + + // 体 + OrderItemVO[] voBody = cliVOs[i].getBVO(); + for (OrderItemVO body : voBody) { + if (body.getPk_srcorder_b() != null) { + bmap.put(body.getPk_srcorder_b(), body.getPk_order_b()); +// body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下 + String newbpk = "1ZH" + body.getPk_srcorder_b().substring(3); + newkeybmap.put(body.getPk_srcorder_b(), newbpk); + bdatas = this.getForeignAddParam(bdatas, newbpk, body.getPk_order_b()); + } + // 物料行对应费用明细 + OrderMatFeeVO[] matFeeVOs = body.getGrandSonVOS(); + if(!ArrayUtil.isEmpty(matFeeVOs)){ + for (OrderMatFeeVO matFee : matFeeVOs) { + if (matFee.getPk_srcorder_bf() != null) { + bmap.put(matFee.getPk_srcorder_bf(), matFee.getPk_order_bf()); +// body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下 + String newbpk = "1ZH" + matFee.getPk_order_bf().substring(3); + newkeybmap.put(matFee.getPk_srcorder_bf(), newbpk); + feeDetailBdatas = this.getForeignAddParam(feeDetailBdatas, newbpk, matFee.getPk_order_bf()); + } + } + } + } + // 费用项 + OrderFeeVO[] feeVos = cliVOs[i].getOrderFeeVO(); + if(!ArrayUtil.isEmpty(feeVos)){ + for (OrderFeeVO fee : feeVos) { + if (fee.getPk_srcorder_f() != null) { + bmap.put(fee.getPk_srcorder_f(), fee.getPk_order_f()); +// body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下 + String newbpk = "1ZH" + fee.getPk_srcorder_f().substring(3); + newkeybmap.put(fee.getPk_srcorder_f(), newbpk); + feeBdatas = this.getForeignAddParam(feeBdatas, newbpk, fee.getPk_order_f()); + } + } + } + } + d.update(this.getSql(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas); + d.update(this.getSql(PUEntity.M21_B_TABLE, OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, bdatas); + d.update(this.getSql(PUEntity.M21_B_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas); +// if(feeBdatas.size() != 0){ + // 费用项 + d.update(this.getSql(PUEntity.M21_F_TABLE, OrderFeeVO.PK_ORDER_F), + new JavaType[] { + JavaType.String, JavaType.String + }, feeBdatas); + d.update(this.getSql(PUEntity.M21_F_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas); +// } +// if(feeBdatas.size() != 0){ + // 费用明细 + d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_ORDER_BF), + new JavaType[] { + JavaType.String, JavaType.String + }, feeDetailBdatas); + d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas); + d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, bdatas); +// } + //第二步(1)A-~,A-A (2)A-A,B-A bmap key:A value:B newkeybmap:key:A value :C + List> datas2 = new ArrayList>(); + List> bdatas2 = new ArrayList>(); + List> feeDetailBdatas2 = new ArrayList>(); + List> feeBdatas2 = new ArrayList>(); + for (int i = 0; i < oldOrgVos.length; i++) { + // 头 + OrderHeaderVO voHead = oldOrgVos[i].getHVO(); + String pk_order = voHead.getPk_order(); + if (hmap.containsKey(pk_order)) { + srcdatas = this.getForeignAddParam(srcdatas, pk_order, pk_order); + + } + // 体 + OrderItemVO[] voBody = oldOrgVos[i].getBVO(); + for (OrderItemVO body : voBody) { + if (body.getPk_order_b() != null) { + if (bmap.containsKey(body.getPk_order_b())) { + srcbdatas= this.getForeignAddParam(srcbdatas, body.getPk_order_b(), body.getPk_order_b()); + } + } + // 费用明细 + OrderMatFeeVO[] matFeeVOs = body.getGrandSonVOS(); + if(!ArrayUtil.isEmpty(matFeeVOs)){ + for(OrderMatFeeVO matFeeVO : matFeeVOs){ + if (matFeeVO.getPk_order_bf() != null) { + if (bmap.containsKey(matFeeVO.getPk_order_bf())) { + feeDetailsrcBdatas= this.getForeignAddParam(feeDetailsrcBdatas, matFeeVO.getPk_order_bf(), matFeeVO.getPk_order_bf()); + } + } + } + } + } + // 费用项 + OrderFeeVO[] feeVOS = oldOrgVos[i].getOrderFeeVO(); + if(!ArrayUtil.isEmpty(feeVOS)){ + for(OrderFeeVO feeVO : feeVOS){ + if (feeVO.getPk_order_f() != null) { + if (bmap.containsKey(feeVO.getPk_order_f())) { + feesrcBdatas= this.getForeignAddParam(feesrcBdatas, feeVO.getPk_order_f(), feeVO.getPk_order_f()); + } + } + } + } + } + d.update(this.getSqlForHisVO(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_SRCORDER,OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, srcdatas); + d.update(this.getSqlForHisVO(PUEntity.M21_B_TABLE, OrderItemVO.PK_SRCORDER_B,OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, srcbdatas); +// if(feesrcBdatas.size() != 0){ + // 费用项 + d.update(this.getSqlForHisVO(PUEntity.M21_F_TABLE, OrderFeeVO.PK_SRCORDER_F,OrderFeeVO.PK_ORDER_F), + new JavaType[] { + JavaType.String, JavaType.String + }, feesrcBdatas); +// } +// if(feeDetailsrcBdatas.size() != 0){ + // 费用明细 + d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_SRCORDER_BF,OrderMatFeeVO.PK_ORDER_BF), + new JavaType[] { + JavaType.String, JavaType.String + }, feeDetailsrcBdatas); +// } + // A-A ,B-A + for (int i = 0; i < oldOrgVos.length; i++) { + // 头 + OrderHeaderVO voHead = oldOrgVos[i].getHVO(); + String pk_order = voHead.getPk_order(); + String pk_src_order = null; + if (hmap.containsKey(pk_order)) { + pk_src_order = hmap.get(pk_order); + datas2 = this.getForeignAddParam(datas2, pk_src_order, pk_order); + } + // 体 + OrderItemVO[] voBody = oldOrgVos[i].getBVO(); + for (OrderItemVO body : voBody) { + if (body.getPk_order_b() != null) { + if (bmap.containsKey(body.getPk_order_b())) { + String pk_src_order_b = bmap.get(body.getPk_order_b()); + bdatas2 = this.getForeignAddParam(bdatas2, pk_src_order_b, body.getPk_order_b()); + } + } + // 费用明细 + OrderMatFeeVO[] matFeeVOs = body.getGrandSonVOS(); + if(!ArrayUtil.isEmpty(matFeeVOs)) { + for(OrderMatFeeVO matFeeVO : matFeeVOs){ + if (matFeeVO.getPk_order_bf() != null) { + if (bmap.containsKey(matFeeVO.getPk_order_bf())) { + String pk_src_order_bf = bmap.get(matFeeVO.getPk_order_bf()); + feeDetailBdatas2 = this.getForeignAddParam(feeDetailBdatas2, pk_src_order_bf, matFeeVO.getPk_order_bf()); + } + } + } + } + } + // 费用项 + OrderFeeVO[] feeVOS = oldOrgVos[i].getOrderFeeVO(); + if(!ArrayUtil.isEmpty(feeVOS)) { + for(OrderFeeVO fee : feeVOS){ + if (fee.getPk_order_f() != null) { + if (bmap.containsKey(fee.getPk_order_f())) { + String pk_src_order_bf = bmap.get(fee.getPk_order_f()); + feeBdatas2 = this.getForeignAddParam(feeBdatas2, pk_src_order_bf, fee.getPk_order_f()); + } + } + } + } + } + d.update(this.getSqlForHisVO(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas2); + d.update(this.getSqlForHisVO(PUEntity.M21_B_TABLE, OrderItemVO.PK_ORDER_B,OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, bdatas2); + d.update(this.getSqlForHisVO(PUEntity.M21_B_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas2); + +// if(feeBdatas2.size() != 0){ + // 费用项 + d.update(this.getSqlForHisVO(PUEntity.M21_F_TABLE, OrderFeeVO.PK_ORDER_F,OrderFeeVO.PK_ORDER_F), + new JavaType[] { + JavaType.String, JavaType.String + }, feeBdatas2); + d.update(this.getSqlForHisVO(PUEntity.M21_F_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas2); +// } +// if(feeDetailBdatas2.size() != 0){ + // 费用明细 + d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_ORDER_BF,OrderMatFeeVO.PK_ORDER_BF), + new JavaType[] { + JavaType.String, JavaType.String + }, feeDetailBdatas2); + d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas2); + d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderItemVO.PK_ORDER_B,OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, bdatas2); +// } + //第三步C-A,A-A + List> datas3 = new ArrayList>(); + List> bdatas3 = new ArrayList>(); + List> feeDetailBdatas3 = new ArrayList>(); + List> feeBdatas3 = new ArrayList>(); + for (int i = 0; i < cliVOs.length; i++) { + // 头 + OrderHeaderVO voHead = cliVOs[i].getHVO(); + String pk_srcorder = voHead.getPk_Srcorder();// 获取原始版本表头pk + String needchangedhkey = newkeyhmap.get(pk_srcorder); + datas3 = this.getForeignAddParam(datas3, pk_srcorder, needchangedhkey); + // 体 + OrderItemVO[] voBody = cliVOs[i].getBVO(); + for (OrderItemVO body : voBody) { + if (body.getPk_srcorder_b() != null) { + bmap.put(body.getPk_srcorder_b(), body.getPk_order_b()); +// body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下 + String needchangedbkey = newkeybmap.get(body.getPk_srcorder_b()); + bdatas3 = this.getForeignAddParam(bdatas3, body.getPk_srcorder_b(), needchangedbkey); + + } + // 费用明细 + OrderMatFeeVO[] matFeeVOS = body.getGrandSonVOS(); + if(!ArrayUtil.isEmpty(matFeeVOS)){ + for(OrderMatFeeVO matFee : matFeeVOS){ + if (matFee.getPk_srcorder_bf() != null) { + bmap.put(matFee.getPk_srcorder_bf(), matFee.getPk_order_bf()); +// body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下 + String needchangedbfeekey = newkeybmap.get(matFee.getPk_srcorder_bf()); + feeDetailBdatas3 = this.getForeignAddParam(feeDetailBdatas3, matFee.getPk_srcorder_bf(), needchangedbfeekey); + } + } + } + } + // 费用项 + OrderFeeVO[] feeVOS = cliVOs[i].getOrderFeeVO(); + if(!ArrayUtil.isEmpty(feeVOS)){ + for(OrderFeeVO fee : feeVOS){ + if (fee.getPk_srcorder_f() != null) { + bmap.put(fee.getPk_srcorder_f(), fee.getPk_order_f()); +// body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下 + String needchangedbfeedetailkey = newkeybmap.get(fee.getPk_srcorder_f()); + feeBdatas3 = this.getForeignAddParam(feeBdatas3, fee.getPk_srcorder_f(), needchangedbfeedetailkey); + } + } + } + } + d.update(this.getSql(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas3); + d.update(this.getSql(PUEntity.M21_B_TABLE, OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, bdatas3); + d.update(this.getSql(PUEntity.M21_B_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas3); +// if(feeBdatas3.size() != 0){ + // 费用项 + d.update(this.getSql(PUEntity.M21_F_TABLE, OrderFeeVO.PK_ORDER_F), + new JavaType[] { + JavaType.String, JavaType.String + }, feeBdatas3); + d.update(this.getSql(PUEntity.M21_F_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas3); +// } +// if(feeDetailBdatas3.size() != 0){ + // 费用明细 + d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_ORDER_BF), + new JavaType[] { + JavaType.String, JavaType.String + }, feeDetailBdatas3); + d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderHeaderVO.PK_ORDER), + new JavaType[] { + JavaType.String, JavaType.String + }, datas3); + d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderItemVO.PK_ORDER_B), + new JavaType[] { + JavaType.String, JavaType.String + }, bdatas3); +// } +// return cliVOs; + } + + /** + * 更新OrgVO + * @param newOrgVos + * @param cliVOs + */ + private OrderVO[] updateOrgVO(OrderVO[] newOrgVos, OrderVO[] cliVOs) { + OrderVO[] retVOs = null; + try{ + retVOs = (OrderVO[])new BillUpdate().update(newOrgVos,cliVOs,OrderHeaderVO.PK_ORDER); + }catch (BusinessException e){ + ExceptionUtils.wrappException(e); + } + return retVOs; + } + + /** + * 更新clientVO + * @param newCliVO + * @param oldOrgVos + * @param ctx + */ + private OrderVO[] updateClientVO(OrderVO[] newCliVO, OrderVO[] oldOrgVos, + OrderContext ctx) { + if (ArrayUtils.isEmpty(newCliVO)) { + return null; + } + // 特殊处理 + // 前台差异处理时,因为界面没有付款计划,所以将其设置为删除 + // 设置成不变 +// this.setPayPlanStatus(newCliVO); + // 规则 + CompareAroundProcesser processer = new CompareAroundProcesser( + OrderPluginPoint.REVISE); + this.addBeforeRule(processer); + this.addAfterRule(processer, ctx); + + // 执行最新版的采购订单保存 + processer.before(newCliVO, oldOrgVos); + OrderVO[] retVOs = new OrderReviseUpdateBP(ctx).update(newCliVO, oldOrgVos); + + processer.after(retVOs, oldOrgVos); + return retVOs; + + } + +// private void setPayPlanStatus(OrderVO[] voSaved) { +// +// for (OrderVO vo : voSaved) { +// ISuperVO[] vos = vo.getChildren(PayPlanVO.class); +// if (ArrayUtils.isEmpty(vos)) { +// continue; +// } +// PayPlanVO[] payplanVOs = ArrayUtil.convertArrayType(vos); +// for (PayPlanVO payplanVO : payplanVOs) { +// payplanVO.setStatus(VOStatus.UNCHANGED); +// } +// } +// } + + /** + * 方法功能描述:保存前规则 + *

+ * 参数说明 + * + * @param processer + *

+ * @since 6.0 + * @author wuxla + * @time 2010-3-26 下午06:41:24 + */ + private void addBeforeRule(CompareAroundProcesser processer) { + // 冻结状态校验 add by CONGKE for NCCNATIVE 2019-11-21 + processer.addBeforeRule(new VOSagaFrozenValidateRule(true)); + //新增加一个前规则,用来判断订单是否最终关闭,如果已经最终关闭,不允许修订add by zhanghrh 2021.9.22 + processer.addBeforeRule(new CheckBfinalcloseRule()); + // 参数合法性检查 + processer.addBeforeRule(new ItemRule()); + processer.addBeforeRule(new NnumCheckRule()); + + // 表头退货(库)基于原订单补货检查,有后续单据不允许修改退货/库基于原订单补货字段 + processer.addBeforeRule(new BrefwhenreturnCheckRule()); + + // 表体不能改变项检查有后续单据,表体批次号、需求部门、项目、收货仓库、收货地址、赠品不能修改 + processer.addBeforeRule(new ItemChangeCheckRule()); + + // 合同检查,修订前单据来自同一个合同,则不能将订单改为来自多个合同的订单 + processer.addBeforeRule(new OneContractCheckRule()); + + // 支持审批中修改(修订)的单据,检查是否应该由当前审批人修改(修订) + processer.addBeforeFinalRule( + new ApprovingEditCheckRule(POBillType.Order)); + + // 支持审批中修改(修订)的单据,后台向所有已经处理过审批任务的人发送消息 + processer.addBeforeFinalRule(new ApprovingEditSendMsgRule()); + + // 移动端修订数量合法性检查 add by hanxqm 2019年6月22日 16点06分 + //processer.addBeforeFinalRule(new MobBeforeReviseForPoOrderImpl()); + + // 校验修订后金额是否超过累计付款金额 + processer.addBeforeFinalRule(new CheckOverPay()); + + } + + /** + * 方法功能描述:保存后规则 + *

+ * 参数说明 + * + * @param processer + *

+ * @since 6.0 + * @author wuxla + * @time 2010-3-26 下午06:41:30 + */ + private void addAfterRule(CompareAroundProcesser processer, + OrderContext ctx) { + // 修订数量合法性检查,修订后的数量与原数量同正负,且不能小于后续数量 + processer.addAfterRule( + new ReviseNumCheckRule(ctx.getReviseToleranceConfirm().booleanValue())); + // 只处理审批后的数据(因审批中修订会有未审批通过的数据过来) + processer.addAfterRule( + new FilterOrderByStatusRule(POEnumBillStatus.APPROVE.toInt())); + processer.addAfterRule(new ModifySupplyRule()); + processer.addAfterRule(new ReviseBudgetCtrlRule()); + // 修改在途状态表中数据 + processer.addAfterRule(new ModifyStatusOnWayRule()); + // 更新价格表 + processer.addAfterRule(new OrderPriceMaintainRule()); + + // ncm add by zhangllb 20170519 采购订单修订时更新订单付款计划 + // processer.addAfterRule(new OrderPayPlanReviseRule()); + // 采购订单修订更新采购订单付款计划 add by yinliangc 20220312 + processer.addAfterRule(new OrderPayPlanVOReviseRule()); + // 移动端向供应商发送通知消息 zhaofengt 2019/7/30 + processer.addAfterRule(new MobAfterReviseForPoOrderImpl()); + // 判断是否自动到货打开 + processer.addAfterRule(new ArrivalOpenCheckRule()); + // 判断是否自动入库打开 + processer.addAfterRule(new OpenCheckRule()); + // 判断是否自动开票打开 + processer.addAfterRule(new InvoiceOpenCkeckRule()); + // 采购订单修订审批回写采购合同付款计划 + processer.addAfterFinalRule(new ApproveM21AndRewriteCTPayPlan()); + // 调用内部交易信息 + processer.addAfterRule(new SaveTransferMsgRule()); + + // 采购订单审批后同步到锐制系统 + processer.addAfterFinalRule(new AfterApprovingSynchronizeRuleRZ()); + + } + + /** + * 得到交换主键最新oldOrgVos + * + * @param oldOrgVos + * @return + */ + private OrderVO[] changeoldOrgVosWithPK(OrderVO[] oldOrgVos, OrderVO[] cliVOs, + Map hmap, Map bmap) { + UFDate correctdate = TimeUtils.getsrvBaseDate(); + OrderVO[] cloneVos = new OrderVO[oldOrgVos.length]; + // 交换oldOrgVos的pk + for (int i = 0; i < oldOrgVos.length; i++) { + cloneVos[i] = (OrderVO) oldOrgVos[i].clone(); + // 头 + OrderHeaderVO voHead = oldOrgVos[i].getHVO(); + voHead.setStatus(VOStatus.UPDATED); + voHead.setBislatest(UFBoolean.FALSE); + voHead.setBisReviseLatest(UFBoolean.FALSE); + voHead.setRevisionStatus(Integer.valueOf(EnumRevise.REVISE.toIntValue())); + // 体 + OrderItemVO[] voItems = oldOrgVos[i].getBVO(); + for (int j = 0; j < voItems.length; ++j) { + //设置修订人员和日期 + voItems[j].setDcorrectdate(correctdate); + voItems[j].setChandler(cliVOs[i].getHVO().getCrevisepsn()); + //设置历史数据 + voItems[j].setFisactive((Integer) EnumActive.REVISEHISTORY.value()); + voItems[j].setStatus(VOStatus.UPDATED); + // 费用明细 + OrderMatFeeVO[] matFeeVO = voItems[j].getGrandSonVOS(); + if(!ArrayUtil.isEmpty(matFeeVO)){ + for(OrderMatFeeVO matFee : matFeeVO){ + matFee.setStatus(VOStatus.UPDATED); + } + } + } + // 费用项 + OrderFeeVO[] feeVO = oldOrgVos[i].getOrderFeeVO(); + if(!ArrayUtil.isEmpty(feeVO)){ + for(OrderFeeVO fee : feeVO){ + fee.setStatus(VOStatus.UPDATED); + } + } + /* + * add by wandl 清空付款协议,付款计划主键,修订含有付款协议的订单会报违反唯一约束! + */ +// OrderPaymentVO[] paymentItem = newOrgVos[i].getPaymentVO(); +// for (OrderPaymentVO payment : paymentItem) { +//// payment.setPk_payment(null); +// payment.setStatus(VOStatus.DELETED); +// } + +// PayPlanVO[] payplanItem = (PayPlanVO[])newOrgVos[i].getChildren(PayPlanVO.class); +// for (PayPlanVO payplan : payplanItem) { +//// payplan.setPk_order_payplan(null); +// payplan.setStatus(VOStatus.DELETED); +// } + } + OrderVO[] retVO =this.updateOrgVO(oldOrgVos, cloneVos); + /** + * 注意付款协议表体 + */ + return retVO; + + } + + /** + * 得到交换主键最新cliVOs + * + * @param cliVOs + * @param forderstatus + * @param taudittime + * @param approver + */ + private OrderVO[] changeClientVoWithPK(OrderVO[] oldOrgVos, OrderVO[] cliVOs, + Map hmap, Map bmap, Integer forderstatus, + String approver, UFDate taudittime, String creator,UFDateTime creationtime) { + OrderVO[] cloneVos =new OrderVO[cliVOs.length]; + // 交换newCliVO的pk + for (int i = 0; i < cliVOs.length; i++) { + cloneVos[i] = (OrderVO) cliVOs[i].clone(); + // 头 + OrderHeaderVO voHead = cliVOs[i].getHVO(); + voHead.setStatus(VOStatus.UPDATED); + voHead.setForderstatus(forderstatus); + voHead.setApprover(approver); + voHead.setTaudittime(taudittime); + voHead.setCreator(creator); + voHead.setCreationtime(creationtime); + voHead.setModifier(AppContext.getInstance().getPkUser()); + voHead.setModifiedtime(AppContext.getInstance().getServerTime()); +// String pk_srcorder = voHead.getPk_Srcorder();// 获取原始版本表头pk +// hmap.put(pk_srcorder, voHead.getPk_order()); +// voHead.setPk_order(pk_srcorder);// 将原始版本pk赋值给表头主键 + voHead.setBislatest(UFBoolean.TRUE);// 设置为最新版本 + voHead.setBisReviseLatest(UFBoolean.TRUE);//设置修订可见最新版本 + voHead.setRevisionStatus(Integer.valueOf(EnumRevise.SIMPLE.toIntValue()));// 将修订状态置为普通,避免在采购订单维护节点收回的单据,还会走采购订单修订的审批流 + // 体 + OrderItemVO[] voBody = cliVOs[i].getBVO(); + for (OrderItemVO body : voBody) { +// body.setPk_order(pk_srcorder);// 将表体存放的表头主键也替换为原始版本pk + body.setStatus(VOStatus.UPDATED); + // 费用明细 + OrderMatFeeVO[] matFeeVO = body.getGrandSonVOS(); + if(!ArrayUtil.isEmpty(matFeeVO)){ + for(OrderMatFeeVO matFee : matFeeVO){ + matFee.setStatus(VOStatus.UPDATED); + } + } + } + // 费用项 + OrderFeeVO[] feeVO = cliVOs[i].getOrderFeeVO(); + if(!ArrayUtil.isEmpty(feeVO)){ + for(OrderFeeVO fee : feeVO){ + fee.setStatus(VOStatus.UPDATED); + } + } + /* + * clintVO在修订保存的时候清空了付款协议,和付款计划。在这补回来 + */ + //付款协议 +// OrderPaymentVO[] paymentItemcliVOs = newCliVO[i].getPaymentVO(); +// OrderPaymentVO[] paymentItemOrgVos = oldOrgVos[i].getPaymentVO(); +// for (int j = 0; j < paymentItemcliVOs.length; j++) { +// paymentItemcliVOs[j] +// .setPk_payment(paymentItemOrgVos[j].getPk_payment()); +// paymentItemcliVOs[j].setStatus(VOStatus.UPDATED); +// } + //付款计划 +// PayPlanVO[] payplanItemcliVOs = (PayPlanVO[]) newCliVO[i].getChildren(PayPlanVO.class); +// PayPlanVO[] payplanItemOrgVos = (PayPlanVO[]) oldOrgVos[i].getChildren(PayPlanVO.class); +// for(int k =0 ; k(OrderVO.class).query(ids); + return hisVos; + } + + /** + * 根据新版本VO数组查询原始版本VO数组 + * + * @param newVos + * @since dev1.0 + * @author zhanghrh + * @time 2021-6-9 下午04:39:00 + */ + private OrderVO[] queryNewVosByOldVos(OrderVO[] newVos) { + String[] ids = new String[newVos.length]; + for (int i = 0; i < newVos.length; i++) { + ids[i] = newVos[i].getHVO().getPk_order(); + } + OrderVO[] hisVos = new BillQuery(OrderVO.class).query(ids); + return hisVos; + } + + + /** + * 记录初始VO上所有下游回写订单的字段 + * + * @param newVos + * @since dev1.0 + * @author zhanghrh + * @time 2021-6-9 下午04:39:00 + */ + private OrderVO[] setWriteBackNums(OrderVO[] newVos,OrderVO[] oldVos) { + Map hmap = new HashMap(); + Map bmap = new HashMap(); + Map hmapString = new HashMap(); + Map bmapString = new HashMap(); + Map bmapUFDate = new HashMap(); + + //遍历原始VO记录累计回写字段 + for(OrderVO oldVo: oldVos) { + UFDouble[] hfiles = new UFDouble[3]; + String[] hfilesString =new String[1]; + OrderHeaderVO hvo =oldVo.getHVO(); + //UFDouble类型 + hfiles[0]=hvo.getNaccpayreqmny();//累计付款申请金额 + hfiles[1]=hvo.getNaccpaymny();//累计付款金额 + hfiles[2]=hvo.getNinvoicemny();//累计开票金额 + hmap.put(hvo.getPk_order(), hfiles); + //String类型 + hfilesString[0] = hvo.getVcoopordercode();//对方订单号 + hmapString.put(hvo.getPk_order(), hfilesString); + OrderItemVO bvos[] = oldVo.getBVO(); + for(OrderItemVO bvo: bvos) { + UFDouble[] bfiles = new UFDouble[17]; + String[] bfilesString =new String[2]; + UFDate[] bfilesUFDate =new UFDate[2]; + //UFDouble类型 + bfiles[0] = bvo.getNacccancelinvmny();//累计已核销开票金额 + bfiles[1] = bvo.getNaccumarrvnum();//累计到货主数量 + bfiles[2] = bvo.getNaccumdevnum();//累计运输主数量 + bfiles[3] = bvo.getNaccuminvoicemny();//累计本币开票金额 + bfiles[4] = bvo.getNaccuminvoicenum();//累计开票主数量 + bfiles[5] = bvo.getNaccumpickupnum();//累计拣货主数量 + bfiles[6] = bvo.getNaccumrpnum();//累计到货计划主数量 + bfiles[7] = bvo.getNaccumstorenum();//累计入库主数量 + bfiles[8] = bvo.getNaccumwastnum();//累计途耗主数量 + bfiles[9] = bvo.getNbackarrvnum();//累计退货主数量 + bfiles[10] = bvo.getNbackstorenum();//累计退库主数量 + bfiles[11] = bvo.getNfeemny();//费用累计开票金额 + bfiles[12] = bvo.getNconfirmnum();//确认数量 + bfiles[13] = bvo.getNsuprsnum();//被预留数量 + bfiles[14] = bvo.getNsendplannum();//送货计划数量 + bfiles[15] = bvo.getNaccpaymny();//累计付款金额 + bfiles[16] = bvo.getNaccpayreqmny();//累计付款申请金额 + + bmap.put(bvo.getPk_order_b(), bfiles); + //String类型 + bfilesString[0] = bvo.getVvendorordercode();//对方订单号 + bfilesString[1] = bvo.getVvendororderrow();//对方订单行号 +// bfilesString[2] = bvo.getPk_schedule();//排程计划 +// bfilesString[3] = bvo.getPk_schedule_b();//排程计划明细 + bmapString.put(bvo.getPk_order_b(), bfilesString); + //UFDate类型 + bfilesUFDate[0] = bvo.getDconfirmdate();//确认日期 + bfilesUFDate[1] = bvo.getDcorrectdate();//修正日期 + bmapUFDate.put(bvo.getPk_order_b(), bfilesUFDate); + } + } + //遍历前端传来的VO,把累计回写字段按pk_src=pk 设置到前端VO中 + for(OrderVO newVo :newVos) { + OrderHeaderVO newHVO =newVo.getHVO(); + String pk_src_order = newHVO.getPk_Srcorder(); + if(hmap.containsKey(pk_src_order)) { + newHVO.setStatus(VOStatus.UPDATED); + //UFDouble类型 + newHVO.setNaccpayreqmny(hmap.get(pk_src_order)[0]);//累计付款申请金额 + newHVO.setNaccpaymny(hmap.get(pk_src_order)[1]);//累计付款金额 + newHVO.setNinvoicemny(hmap.get(pk_src_order)[2]);//累计开票金额 + //String类型 + newHVO.setVcoopordercode(hmapString.get(pk_src_order)[0]);//对方订单号 + } + OrderItemVO newBVOs[] = newVo.getBVO(); + for(OrderItemVO newBVO : newBVOs) { + String pk_src_order_b = newBVO.getPk_srcorder_b(); + if(bmap.containsKey(pk_src_order_b)) { + newBVO.setStatus(VOStatus.UPDATED); + //UFDouble类型 + newBVO.setNacccancelinvmny(bmap.get(pk_src_order_b)[0]);//累计已核销开票金额 + newBVO.setNaccumarrvnum(bmap.get(pk_src_order_b)[1]);//累计到货主数量 + newBVO.setNaccumdevnum(bmap.get(pk_src_order_b)[2]);//累计运输主数量 + newBVO.setNaccuminvoicemny(bmap.get(pk_src_order_b)[3]);//累计本币开票金额 + newBVO.setNaccuminvoicenum(bmap.get(pk_src_order_b)[4]);//累计开票主数量 + newBVO.setNaccumpickupnum(bmap.get(pk_src_order_b)[5]);//累计拣货主数量 + newBVO.setNaccumrpnum(bmap.get(pk_src_order_b)[6]);//累计到货计划主数量 + newBVO.setNaccumstorenum(bmap.get(pk_src_order_b)[7]);//累计入库主数量 + newBVO.setNaccumwastnum(bmap.get(pk_src_order_b)[8]);//累计途耗主数量 + newBVO.setNbackarrvnum(bmap.get(pk_src_order_b)[9]);//累计退货主数量 + newBVO.setNbackstorenum(bmap.get(pk_src_order_b)[10]);//累计退库主数量 + newBVO.setNfeemny(bmap.get(pk_src_order_b)[11]);//费用累计开票金额 + newBVO.setNconfirmnum(bmap.get(pk_src_order_b)[12]);//确认数量 + newBVO.setNsuprsnum(bmap.get(pk_src_order_b)[13]);//被预留数量 + newBVO.setNsendplannum(bmap.get(pk_src_order_b)[14]);//送货计划数量 + + newBVO.setNaccpaymny(bmap.get(pk_src_order_b)[15]);//累计付款金额 + newBVO.setNaccpayreqmny(bmap.get(pk_src_order_b)[16]);//累计付款申请金额 + + //String类型 + newBVO.setVvendorordercode(bmapString.get(pk_src_order_b)[0]);//对方订单号 + newBVO.setVvendororderrow(bmapString.get(pk_src_order_b)[1]);//对方订单行号 + //UFDate类型 + newBVO.setDconfirmdate(bmapUFDate.get(pk_src_order_b)[0]);//确认日期 + newBVO.setDcorrectdate(bmapUFDate.get(pk_src_order_b)[1]);//修正日期 + } + } + } + return newVos; + } + + private String getSql(String tableName, String fieldName) { + StringBuilder builder = new StringBuilder(); + builder.append("update "); + builder.append(tableName); + builder.append(" set "); + builder.append(fieldName); + builder.append(" = ? where "); + builder.append(fieldName); + builder.append(" = ? "); + return builder.toString(); + } + + private String getSqlForHisVO(String tableName, String fieldName, String fieldName2) { + StringBuilder builder = new StringBuilder(); + builder.append("update "); + builder.append(tableName); + builder.append(" set "); + builder.append(fieldName); + builder.append(" = ? where "); + builder.append(fieldName2); + builder.append(" = ? "); +// builder.append(" and "); +// builder.append(fieldName2+"=" + ""); + return builder.toString(); + } + + private List> getForeignAddParam(List> datas, + String pk_ct_pu, String pk_origct) { + List list = new ArrayList(); + list.add(pk_ct_pu); + list.add(pk_origct); + datas.add(list); + return datas; + } + +} diff --git a/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java b/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java index c0fc7323..a91a946f 100644 --- a/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java +++ b/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java @@ -91,7 +91,7 @@ public class AfterApproceRuleSyncRZWMSProcess implements IRule { // 第三方系统厂商id singleObj.put("zbxx_gycs_wbid", head.getPk_supplier()); - //zbxx_cgy_wbid varchar(100) 第三方系统采购员id + //zbxx_cgy_wbid varchar(100)第三方系统采购员id singleObj.put("zbxx_cgy_wbid", head.getCemployeeid()); // 交货日期 diff --git a/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleMES.java b/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleMES.java index 2c8c32b4..40c946b6 100644 --- a/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleMES.java +++ b/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleMES.java @@ -192,9 +192,9 @@ public class AfterApprovingSynchronizeRuleMES implements IRule { // 销售订单新增两个字段 vbdef22-->MES客户订单号 vbdef13-->MES客户订单序号 detailItem.put("customNo", body.getVbdef22()); // 客户订单号 detailItem.put("customSN", body.getVbdef13()); // 客户订单序号 + detailItem.put("remarks", body.getVrownote()); // 添加是否定制 detailItem.put("customized", body.getVbdef18()); - detailItem.put("remarks", null); // 添加自定义行号 JSONArray properties = new JSONArray(); JSONObject property = new JSONObject(); @@ -285,3 +285,4 @@ public class AfterApprovingSynchronizeRuleMES implements IRule { return o.toString(); } } + diff --git a/uapbd/META-INF/querySync.rest b/uapbd/META-INF/querySync.rest index 558ec97c..0bf26b5b 100644 --- a/uapbd/META-INF/querySync.rest +++ b/uapbd/META-INF/querySync.rest @@ -3,4 +3,5 @@ + \ No newline at end of file diff --git a/uapbd/src/private/nccloud/api/uapbd/customer/listener/CusttaxUpdateListener.java b/uapbd/src/private/nccloud/api/uapbd/customer/listener/CusttaxUpdateListener.java new file mode 100644 index 00000000..a43bd903 --- /dev/null +++ b/uapbd/src/private/nccloud/api/uapbd/customer/listener/CusttaxUpdateListener.java @@ -0,0 +1,38 @@ +package nccloud.api.uapbd.customer.listener; + +import nc.bs.businessevent.IBusinessEvent; +import nc.bs.businessevent.IBusinessListener; +import nc.bs.businessevent.bd.BDCommonEvent; +import nc.bs.trade.business.HYPubBO; +import nc.vo.bd.cust.CustomerVO; +import nc.vo.bd.cust.custtax.CusttaxVO; +import nc.vo.pub.BusinessException; + +public class CusttaxUpdateListener implements IBusinessListener{ + + @Override + public void doAction(IBusinessEvent event) throws BusinessException { + HYPubBO bo = new HYPubBO(); + BDCommonEvent e = (BDCommonEvent) event; + if(e.getObjs().length>1) { + return; + } + CustomerVO newobjs = (CustomerVO) e.getObjs()[0]; + CustomerVO oldobjs = (CustomerVO) e.getOldObjs()[0]; + + String newname = newobjs.getName(); + String oldname = oldobjs.getName(); + if(oldname!=null && !oldname.equals(newname)) { + CusttaxVO[] vos = (CusttaxVO[])bo.queryByCondition(CusttaxVO.class, "pk_customer = '"+oldobjs.getPrimaryKey()+"'"); + if(vos.length>0) { + for(CusttaxVO vo: vos) { + vo.setBuyername(newname); + vo.setStatus(1); + } + bo.updateAry(vos); + } + + } + } + +} diff --git a/uapbd/src/public/nc/bs/uapbd/util/CustomerAssginBackgroundPlugin.java b/uapbd/src/public/nc/bs/uapbd/util/CustomerAssginBackgroundPlugin.java new file mode 100644 index 00000000..c72c95d8 --- /dev/null +++ b/uapbd/src/public/nc/bs/uapbd/util/CustomerAssginBackgroundPlugin.java @@ -0,0 +1,66 @@ +package nc.bs.uapbd.util; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.function.Function; +import com.google.common.collect.Lists; +import nc.bs.dao.BaseDAO; +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.framework.common.NCLocator; +import nc.bs.pub.pa.PreAlertObject; +import nc.bs.pub.taskcenter.BgWorkingContext; +import nc.bs.pub.taskcenter.IBackgroundWorkPlugin; +import nc.itf.bd.cust.assign.ICustAssignService; +import nc.vo.bd.cust.CustomerVO; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; + +public class CustomerAssginBackgroundPlugin implements IBackgroundWorkPlugin { + + @Override + public PreAlertObject executeTask(BgWorkingContext context) throws BusinessException { + // 查询客户 + String whereSql = " ts>'2025-05-01 00:00:00' order by ts desc"; + + List list = (List) new BaseDAO().retrieveByClause(CustomerVO.class, whereSql); + if (list == null || list.size() == 0) { + return null; + } + // 查询需要分配的业务单元 + OrgVO[] virtulaOrg = getVirtulaOrg(); + String[] orgPks = Arrays.stream(virtulaOrg).map(OrgVO::getPk_org).toArray(String[]::new); + // 将客户按照100条进行拆分 + List> batches = Lists.partition(list, 50); + for (int i = 0; i < batches.size(); i++) { + List custList = batches.get(i); + // 拿到客户编码 + String[] custPks = toPropertyArray(custList, CustomerVO::getPk_customer, String.class); + ((ICustAssignService) NCLocator.getInstance().lookup(ICustAssignService.class)).assignCustomerByPks(custPks, + orgPks, (String[]) null); + } + // 调用接口进行分配 + return null; + } + + public static R[] toPropertyArray(List list, Function propertyExtractor, Class clazz) { + return list.stream().map(propertyExtractor) + .toArray(size -> (R[]) java.lang.reflect.Array.newInstance(clazz, size)); + } + + /** + * 查询组织信息 + * + * @author mzr + * @date 2025/05/29 + */ + public OrgVO[] getVirtulaOrg() throws BusinessException { + String groupID = InvocationInfoProxy.getInstance().getGroupId(); + // NCCForUAPLogger.debug("groupID = " + groupID); + // enablestate 启用状态 isbusinessunit 是否业务单元数据 + String condition = "pk_group = '" + groupID + "' and ENABLESTATE = '2' and isbusinessunit='Y'"; + Collection collection = (new BaseDAO()).retrieveByClause(OrgVO.class, condition, "code"); + return collection.toArray(new OrgVO[0]); + } + +} diff --git a/uapbd/src/public/nc/bs/uapbd/util/ThirdPartyPostRequestUtil.java b/uapbd/src/public/nc/bs/uapbd/util/ThirdPartyPostRequestUtil.java index bb3db583..fbf16dd8 100644 --- a/uapbd/src/public/nc/bs/uapbd/util/ThirdPartyPostRequestUtil.java +++ b/uapbd/src/public/nc/bs/uapbd/util/ThirdPartyPostRequestUtil.java @@ -39,7 +39,7 @@ public class ThirdPartyPostRequestUtil { connection.setReadTimeout(DEFAULT_READ_TIMEOUT); // 设置读取超时时间 connection.setRequestProperty("Content-Type", "application/json"); // 设置请求头 - // 发送请求体 + //发送请求体 try (OutputStream os = connection.getOutputStream()) { byte[] input = requestBody.getBytes("utf-8"); os.write(input, 0, input.length); diff --git a/uapbd/src/public/nccloud/api/uapbd/QuerySync.java b/uapbd/src/public/nccloud/api/uapbd/QuerySync.java index cd34e693..6d57800a 100644 --- a/uapbd/src/public/nccloud/api/uapbd/QuerySync.java +++ b/uapbd/src/public/nccloud/api/uapbd/QuerySync.java @@ -39,7 +39,7 @@ public class QuerySync extends AbstractNCCRestResource { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, -3); // 减去 3 小时 - //提前三小时,防止ts与现实时间差别 + //提前三小时防止ts与现实时间差别 UFDate adjustedUfDate = new UFDate(calendar.getTimeInMillis()); if (!ts.contains(",")) { // 单个时间戳 tsCondition = "ts >= '" + adjustedUfDate + "' AND ts <= '" + new UFDate(new Date()) + "'"; diff --git a/uapbd/src/public/nccloud/api/uapbd/QuerySyncSqlUtils.java b/uapbd/src/public/nccloud/api/uapbd/QuerySyncSqlUtils.java index b914dad3..d0292140 100644 --- a/uapbd/src/public/nccloud/api/uapbd/QuerySyncSqlUtils.java +++ b/uapbd/src/public/nccloud/api/uapbd/QuerySyncSqlUtils.java @@ -15,7 +15,7 @@ public class QuerySyncSqlUtils { * 此方法假定传入的 `values` 列表是非空的(由调用方 `buildUniversalCondition` 保证)。 * * @param fieldName 字段名 - * @param values 值的列表 (来自非空数组或List) + * @param values 值的列表 (来自非空数组或List) * @return 构建好的IN子句字符串 */ private static String buildInClause(String fieldName, List values) {