diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java index a221699..ce32a49 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java @@ -3,6 +3,7 @@ package shkd.sys.sys.plugin.report; import com.alibaba.fastjson.JSONObject; import kd.bos.bill.BillShowParameter; import kd.bos.bill.OperationStatus; +import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.LocaleString; @@ -25,9 +26,11 @@ import kd.bos.mvc.form.FormView; import kd.bos.mvc.report.ReportView; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.permission.api.HasPermOrgResult; import kd.bos.report.ReportList; import kd.bos.report.ReportShowParameter; import kd.bos.report.events.CreateColumnEvent; +import kd.bos.report.events.CreateFilterInfoEvent; import kd.bos.report.events.SortAndFilterEvent; import kd.bos.report.filter.ReportFilter; import kd.bos.report.plugin.AbstractReportFormPlugin; @@ -35,18 +38,27 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.org.OrgUnitServiceHelper; import kd.bos.servicehelper.org.OrgViewType; +import kd.bos.servicehelper.permission.PermissionServiceHelper; +import org.apache.commons.lang3.time.DateUtils; import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; public class FinanceReportFormPlugin extends AbstractReportFormPlugin implements HyperLinkClickListener { + + @Override public void packageData(PackageDataEvent evt) { if ("shkd_org".equals(((ReportColumn)evt.getSource()).getFieldKey())){ String formatValue = (String)evt.getFormatValue(); DynamicObject selorg = QueryServiceHelper.queryOne("bos_org", "id,name,number", (new QFilter("name", QCP.equals, formatValue)).toArray()); + if (selorg==null){ + evt.getNoLinkKey().add(((ReportColumn)evt.getSource()).getFieldKey()); + return; + } Long pkValue = selorg.getLong("id"); List orgIds = new ArrayList<>(1); orgIds.add(pkValue); @@ -106,6 +118,8 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement ReportShowParameter parameter = new ReportShowParameter(); parameter.setCustomParam("shkd_selorg",single.getLong("id")); parameter.setCustomParam("shkd_seldate",this.getModel().getValue("shkd_seldate")); + parameter.setCustomParam("shkd_selmoney",this.getModel().getValue("shkd_selmoney")); + parameter.setCustomParam("shkd_isone",false); parameter.setFormId("shkd_financereport"); parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage); this.getView().showForm(parameter); @@ -113,9 +127,45 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement } + @Override + public void beforeCreateFilterInfo(CreateFilterInfoEvent event) { + super.beforeCreateFilterInfo(event); + System.out.println(666); + } + +// @Override +// protected void filterContainerInit(FilterContainerInitEvent contInitEvent, ReportQueryParam queryParam) { +// FilterColumn orgFilter = contInitEvent.getFilterColumn("shkd_seluserpower"); +// } + + @Override protected void filterContainerInit(FilterContainerInitEvent contInitEvent, ReportQueryParam queryParam) { super.filterContainerInit(contInitEvent, queryParam); + FilterColumn orgFilter = contInitEvent.getFilterColumn("shkd_seluserpower"); + } + + @Override + public void initDefaultQueryParam(ReportQueryParam queryParam) { + super.initDefaultQueryParam(queryParam); + Boolean shkd_isone = (Boolean) this.getModel().getValue("shkd_isone");//是否在第一层 + HasPermOrgResult userHasPermOrgs = PermissionServiceHelper.getUserHasPermOrgs(Long.parseLong(RequestContext.get().getUserId())); + //有权的组织 + List hasPermOrgs = userHasPermOrgs.getHasPermOrgs(); + + + if (hasPermOrgs.size()==0){ + this.getModel().setValue("shkd_seluserpower", null); + }else if (hasPermOrgs.size()!=0&&shkd_isone){//有组织权限隔离且在首层 + //获取有权组织里级别高的根节点组织 + List res=getSuperOrg(hasPermOrgs); + Object[] longs = res.toArray(new Long[0]); + this.getModel().setValue("shkd_seluserpower", longs); + }else if (hasPermOrgs.size()!=0&&!shkd_isone){//有组织权限隔离但不在首层 + this.getModel().setValue("shkd_seluserpower", null); + } + //是否全部组织有权 + boolean hasallOrg = userHasPermOrgs.hasAllOrgPerm(); } @Override @@ -124,9 +174,14 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement ReportShowParameter formShowParameter = (ReportShowParameter) this.getView().getFormShowParameter(); Object shkd_selorg = formShowParameter.getCustomParam("shkd_selorg"); Object shkd_seldate = formShowParameter.getCustomParam("shkd_seldate"); + Object shkd_selmoney = formShowParameter.getCustomParam("shkd_selmoney"); + Object shkd_isone = formShowParameter.getCustomParam("shkd_isone"); if (shkd_selorg != null) { this.getModel().setValue("shkd_selorg", shkd_selorg); this.getModel().setValue("shkd_seldate", shkd_seldate); + this.getModel().setValue("shkd_selmoney", shkd_selmoney); + this.getModel().setValue("shkd_isone", shkd_isone); + this.getModel().setValue("shkd_seluserpower", null); ReportFilter filter = this.getView().getControl("reportfilterap");//调用页面的自动查询 filter.search(); } @@ -305,17 +360,54 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement //按字段 组织配置 排序 Collections.sort(rowData , new Comparator(){ - @Override - public int compare(DynamicObject dynamicObject1, DynamicObject dynamicObject2) { return (map.get(dynamicObject1.getString("shkd_orgnumber"))==null?100:map.get(dynamicObject1.getString("shkd_orgnumber")))-(map.get(dynamicObject2.getString("shkd_orgnumber"))==null?100:map.get(dynamicObject2.getString("shkd_orgnumber"))); - -// return dynamicObject1.getInt("menuindex")-dynamicObject2.getInt("menuindex"); - } }); + + //添加“集团内债务融资未抵消“合计行 + addheji(rowData); + + } + + private void addheji(DynamicObjectCollection rowData){ + BigDecimal shkd_jtnbjkamount=new BigDecimal(0);//⑩集团内部借款金额 + BigDecimal shkd_jtnbjkrzcb=new BigDecimal(0);//⑩集团内部借款融资成本(%) + BigDecimal shkd_jtnbjkqx=new BigDecimal(0);//⑩集团内部借款期限 + for (DynamicObject rowDatum : rowData) { + shkd_jtnbjkamount.subtract(rowDatum.getBigDecimal("shkd_jtnbjkamount")); + shkd_jtnbjkrzcb.subtract(rowDatum.getBigDecimal("shkd_jtnbjkrzcb")); + shkd_jtnbjkqx.subtract(rowDatum.getBigDecimal("shkd_jtnbjkqx")); + } + DynamicObject dynamicObject = new DynamicObject(rowData.getDynamicObjectType()); + dynamicObject.set("shkd_org","合并抵消"); + dynamicObject.set("shkd_jtnbjkamount",shkd_jtnbjkamount); + dynamicObject.set("shkd_jtnbjkrzcb",shkd_jtnbjkrzcb); + dynamicObject.set("shkd_jtnbjkqx",shkd_jtnbjkqx); + rowData.add(dynamicObject); + } + + private List getSuperOrg(List org){ + //组织和其对应直接上级 + Map map = new HashMap(); + map=OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.OrgUnit, org); + + Set existingOrgs = new HashSet<>(map.keySet()); + + // 2. 遍历 map,检查每个组织 a 的上级是否存在于 existingOrgs 中 + List result = new ArrayList<>(); + for (Long orgId : map.keySet()) { + Long superior = map.get(orgId); // 获取当前组织的上级 + if (superior == null || !existingOrgs.contains(superior)) { + // 如果上级不存在(或为 null),则保留当前组织 + result.add(orgId); + } + // 否则(上级存在),不加入 result(相当于删除) + } + List longs = new ArrayList<>(result); + return longs; } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportPlugin.java index b61dd23..c8ef605 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportPlugin.java @@ -3,11 +3,13 @@ package shkd.sys.sys.plugin.report; import kd.bos.algo.DataSet; import kd.bos.algo.JoinDataSet; import kd.bos.algo.JoinType; +import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.LocaleString; import kd.bos.db.DB; import kd.bos.db.DBRoute; +import kd.bos.entity.AppMetadataCache; import kd.bos.entity.MainEntityType; import kd.bos.entity.report.*; import kd.bos.entity.tree.TreeNode; @@ -18,11 +20,14 @@ import kd.bos.org.model.OrgTreeParam; import kd.bos.orm.ORM; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.permission.api.HasPermOrgResult; +import kd.bos.permission.cache.constant.PermItemConst; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.MetadataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.org.OrgUnitServiceHelper; import kd.bos.servicehelper.org.OrgViewType; +import kd.bos.servicehelper.permission.PermissionServiceHelper; import kd.bos.util.CollectionUtils; import shkd.sys.sys.plugin.form.PaymentProcessingBillPlugin; import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum; @@ -66,6 +71,7 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin { List dateList = new ArrayList<>(); DynamicObject selorgDy = null; Double shkd_selmoney=0.0; + DynamicObjectCollection shkd_seluserpower=null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (QFilter filter : listQFilter) { if (filter.getProperty().contains("shkd_selorg")) { @@ -74,11 +80,27 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin { dateList.add(sdf.format(filter.getValue())); } else if (filter.getProperty().contains("shkd_selmoney")) { shkd_selmoney= Double.parseDouble((String) filter.getValue()); + }else if (filter.getProperty().contains("shkd_seluserpower")){ + shkd_seluserpower=(DynamicObjectCollection) filter.getValue(); } } HashMap> map = new HashMap<>();//组织层级关系 - getOrgrelate(map, selorgDy); + //如果有组织则单独处理,没有则走getOrgrelate方法 + if (shkd_seluserpower==null){ + getOrgrelate(map, selorgDy); + }else { + for (DynamicObject dynamicObject : shkd_seluserpower) { + Long id = dynamicObject.getLong("id");//业务单元id + List orgIds = new ArrayList<>(1); + orgIds.add(id); + //获取该组织的全部下级业务单元 + List allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己 + map.put(id,allSubordinateOrgs); + } + + } + //根据组织关系配置sql StringBuilder sqlBuilder = new StringBuilder("/*dialect*/ "); int size = map.size(); @@ -102,6 +124,7 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin { DataSet res = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//财务云 + //业务单元数据集 DataSet balanceDataSet = QueryServiceHelper.queryDataSet(this.getClass().getSimpleName(),"bos_org","id,number as shkd_orgnumber,name as shkd_org", null, null); @@ -155,8 +178,8 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin { } /* - * 拼接sql方法 - * */ + * 拼接sql方法 + * */ public StringBuilder getSQlBuilder(List dateList,List orgIds,String orgnumber,StringBuilder sqlBuilder){ String result = orgIds.toString(); result = result.substring(1, result.length() - 1); @@ -348,11 +371,6 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin { orgIds.add(id); //获取该组织的全部下级业务单元 List allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己 -// OrgTreeParam param = new OrgTreeParam(); -// param.setId(id); -// param.setOrgViewNumber(OrgViewType.OrgUnit); -// Map treeRootNodeMapById = OrgUnitServiceHelper.getTreeRootNodeMapById(param); -// Boolean isleaf = (Boolean) treeRootNodeMapById.get("isleaf"); map.put(id,allSubordinateOrgs); } return map;