Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/QueryInstancesFromPlugin.java
This commit is contained in:
xiaoshi 2025-06-30 15:20:40 +08:00
commit 9f96ccdfc8
9 changed files with 310 additions and 37 deletions

View File

@ -12,6 +12,9 @@ import java.util.EventObject;
import java.util.List;
import java.util.Map;
/**
* 用款申请单插件
*/
public class ApplicationfundsPlugin extends AbstractBillPlugIn implements AttachmentOperaClickListener {
@Override

View File

@ -8,20 +8,37 @@ import kd.bos.form.control.Control;
import kd.bos.form.control.events.BeforeClickEvent;
import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.ssc.task.formplugin.util.VoucherUtil;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* 我的共享任务审批时增加付款完成校验
*/
public class TaskApproveFormCkPlugin extends AbstractFormPlugin {
private static final Log log = LogFactory.getLog(TaskApproveFormCkPlugin.class);
private static Set<String> billTypes = new HashSet<String>();
static {
billTypes.add("er_repaymentbill");
billTypes.add("er_dailyreimbursebill");
billTypes.add("er_publicreimbursebill");
billTypes.add("er_tripreimbursebill");
billTypes.add("er_dailyloanbill");
billTypes.add("er_prepaybill");
billTypes.add("er_applypaybill");
billTypes.add("cas_paybill");
}
//
public void registerListener(EventObject evt) {
this.addClickListeners(new String[]{"submit", "submitandnext"});
@ -48,41 +65,49 @@ public class TaskApproveFormCkPlugin extends AbstractFormPlugin {
String billid = "";
String billNo = null;
if (customParams != null) {
log.info("TaskApproveFormCkPlugin"+customParams.toString());
log.info("TaskApproveFormCkPluginbilltypeid "+customParams.get("billtypeid"));
log.info("TaskApproveFormCkPlugintasktypeid "+customParams.get("tasktypeid"));
log.info("TaskApproveFormCkPluginsscid "+customParams.get("sscid"));
log.info("TaskApproveFormCkPluginbillnumber "+customParams.get("billnumber"));
log.info("TaskApproveFormCkPluginbillid "+customParams.get("billid"));
billtypeid = (Long)customParams.get("billtypeid");//单据类型id
tasktypeid = (Long)customParams.get("tasktypeid");//任务类型id
sscid = (Long)customParams.get("sscid");//任务类型id
sscid = Long.valueOf((String)customParams.get("sscid"));//任务类型id
billnumber = (String)customParams.get("billnumber");//单据编码单据标识 entityName
billid = (String)customParams.get("billid");//业务单据id
billNo = VoucherUtil.getTaskBillNo(billid);//业务单据编号
IDataModel model = this.getModel();
String operation = (String)model.getValue("operationgroupfield");
if ("1".equals(operation)) { //如果审批操作是通过
QFilter tasktypeFilter = new QFilter("orgfield.id", QCP.equals,sscid);
tasktypeFilter.and(new QFilter("tasklevel", QCP.equals,"2"));//任务类型为结算时
DynamicObject[] tasktypeArray = BusinessDataServiceHelper.load("task_tasktype", "id", new QFilter[]{tasktypeFilter});
if(tasktypeArray != null && tasktypeArray.length > 0){
DynamicObject tasktype = tasktypeArray[0];
if(tasktypeid.getLong("id") == tasktype.getLong("id")) {
if(StringUtils.isNotBlank(billNo) && StringUtils.isNotBlank(billid) && StringUtils.isNotBlank(billnumber) ) {
QFilter accountTableFilter = new QFilter("id", QCP.equals,Long.valueOf(billid));
DynamicObject sourceBillObject = BusinessDataServiceHelper.loadSingle(billnumber, new QFilter[]{accountTableFilter});
String billstatus = sourceBillObject.getString("billstatus");
if(!"G".equals(billstatus)) {
if("er_repaymentbill".equals(billnumber)) {
this.getView().showErrorNotification(String.format("审批结算任务:当前单据的收款未完成,请完成收款后提交。"));
evt.setCancel(true);
}else if(
"er_dailyreimbursebill".equals(billnumber) || //费用报销单
"er_publicreimbursebill".equals(billnumber) || //对公报销的呢
"er_tripreimbursebill".equals(billnumber) || //差旅报销单
"er_dailyloanbill".equals(billnumber) || //借款单
"er_prepaybill".equals(billnumber) || //预付单
"er_applypaybill".equals(billnumber) || //付款申请单
"cas_paybill".equals(billnumber) //付款处理单
){
this.getView().showErrorNotification(String.format("审批结算任务:当前单据的付款未完成,请完成付款后提交。"));
evt.setCancel(true);
if(billTypes.contains(billnumber)){
IDataModel model = this.getModel();
String operation = (String)model.getValue("operationgroupfield");
if ("1".equals(operation)) { //如果审批操作是通过
QFilter tasktypeFilter = new QFilter("orgfield.id", QCP.equals,sscid);
tasktypeFilter.and(new QFilter("tasklevel", QCP.equals,"2"));//任务类型为结算时
DynamicObject[] tasktypeArray = BusinessDataServiceHelper.load("task_tasktype", "id", new QFilter[]{tasktypeFilter});
if(tasktypeArray != null && tasktypeArray.length > 0){
DynamicObject tasktype = tasktypeArray[0];
if(tasktypeid == tasktype.getLong("id")) {
if(StringUtils.isNotBlank(billNo) && StringUtils.isNotBlank(billid) && StringUtils.isNotBlank(billnumber) ) {
QFilter accountTableFilter = new QFilter("id", QCP.equals,Long.valueOf(billid));
DynamicObject sourceBillObject = BusinessDataServiceHelper.loadSingle(billnumber, new QFilter[]{accountTableFilter});
String billstatus = sourceBillObject.getString("billstatus");
if(!"G".equals(billstatus)) {
if("er_repaymentbill".equals(billnumber)) {
this.getView().showErrorNotification(String.format("审批结算任务:当前单据的收款未完成,请完成收款后提交。"));
evt.setCancel(true);
}else if(
"er_dailyreimbursebill".equals(billnumber) || //费用报销单
"er_publicreimbursebill".equals(billnumber) || //对公报销的呢
"er_tripreimbursebill".equals(billnumber) || //差旅报销单
"er_dailyloanbill".equals(billnumber) || //借款单
"er_prepaybill".equals(billnumber) || //预付单
"er_applypaybill".equals(billnumber) || //付款申请单
"cas_paybill".equals(billnumber) //付款处理单
){
this.getView().showErrorNotification(String.format("审批结算任务:当前单据的付款未完成,请完成付款后提交。"));
evt.setCancel(true);
}
}
}
}
@ -91,11 +116,6 @@ public class TaskApproveFormCkPlugin extends AbstractFormPlugin {
}
}
//System.out.println(billtypeid);
//System.out.println(tasktypeid);
//System.out.println(billnumber);
//System.out.println(billid);
//System.out.println(billNo);
}
}

View File

@ -0,0 +1,73 @@
package zcgj.zcdev.zcdev.fs.plugin.form;
import com.alibaba.druid.util.StringUtils;
import kd.bos.bill.AbstractBillPlugIn;
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.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.control.Button;
import kd.bos.form.control.Control;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Set;
/**
* 差旅报销单-兖州公司座位等级发生改变事件校验插件
*/
public class TriprMulseatgradeCkPlugin extends AbstractBillPlugIn implements Plugin {
@Override
public void propertyChanged(PropertyChangedArgs e) {
//当前切换选择的组织
Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司)
Long currentOrgId = RequestContext.get().getOrgId();
if(company!=null){
String yzCompanyNumber ="10006475"; //兖州中材建设有限公司
DynamicObject companyObj = (DynamicObject)company;
Long companyId = companyObj.getLong("id");
if(OrgCheckUtils.isKS(companyId)){
String name = e.getProperty().getName();
if(name.equals("mulseatgrade")){//座位等级
boolean childrenOrg = OrgCheckUtils.isChildrenOrg(yzCompanyNumber, companyId);
if(childrenOrg){
this.getView().showErrorNotification("当前组织不允许改变座位等级。");
}
}else if(name.equals("comment")){//座位等级
boolean childrenOrg = OrgCheckUtils.isChildrenOrg(yzCompanyNumber, companyId);
// if(childrenOrg){
this.getView().showErrorNotification("当前组织不允许改变座位等级。");
ChangeData[] changeSet = e.getChangeSet();
String oldValue = (String) changeSet[0].getOldValue();
int rowIndex = changeSet[0].getRowIndex();
// DynamicObject data = this.getModel().getDataEntity(true);
// DynamicObjectCollection entry = data.getDynamicObjectCollection("tripentry");
// DynamicObject row = entry.get(rowIndex);//entry
// this.getModel().setValue("comment", oldValue);
}
}
}
super.propertyChanged(e);
}
}

View File

@ -9,6 +9,7 @@ import kd.bos.form.ShowType;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.events.FilterContainerInitArgs;
import kd.bos.form.events.HyperLinkClickArgs;
import kd.bos.form.events.SetFilterEvent;
import kd.bos.form.field.events.BeforeFilterF7SelectEvent;
import kd.bos.list.BillList;
import kd.bos.list.plugin.AbstractListPlugin;
@ -22,6 +23,7 @@ import kd.bos.servicehelper.permission.PermissionServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import kd.sdk.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
/**
@ -95,6 +97,27 @@ public class InContractFinaceConfirmeListPlugin extends AbstractListPlugin imple
}
}
@Override
public void setFilter(SetFilterEvent e) {
super.setFilter(e);
List<QFilter> qFilters = e.getQFilters();
for (QFilter qFilter : qFilters) {
if("zcgj_org.id".equals(qFilter.getProperty())){
String cp = qFilter.getCP();
Object value = qFilter.getValue();
StringBuilder sb = new StringBuilder();
if("=".equals(cp) && value instanceof Long){ //vale值类型为Long
sb.append(value);
}else if("IN".equals(cp) && value instanceof ArrayList){ //value值类型为ArrayList
for (Object o : (ArrayList) value) {
sb.append(o).append(",");
}
}
this.getPageCache().put("current_zcgj_orgid_in", sb.substring(0, sb.length()-1));
}
}
}
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);

View File

@ -9,10 +9,15 @@ import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.FormShowParameter;
import kd.bos.form.IPageCache;
import kd.bos.form.ShowType;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.events.HyperLinkClickEvent;
import kd.bos.form.events.HyperLinkClickListener;
import kd.bos.form.field.RefBillEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
@ -21,12 +26,14 @@ import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
/**
* 收入合同确认单插件
*/
public class InContractFinaceConfirmePlugin extends AbstractBillPlugIn implements Plugin, HyperLinkClickListener {
public class InContractFinaceConfirmePlugin extends AbstractBillPlugIn implements Plugin, HyperLinkClickListener, BeforeF7SelectListener {
@Override
@ -84,6 +91,7 @@ public class InContractFinaceConfirmePlugin extends AbstractBillPlugIn implement
item.set("zcgj_remark",dynamicObject.getString("remark"));
}
this.getView().updateView("zcgj_itementry");
}
public void propertyChanged(PropertyChangedArgs e) {
@ -133,6 +141,11 @@ public class InContractFinaceConfirmePlugin extends AbstractBillPlugIn implement
super.registerListener(e);
EntryGrid control = this.getControl("zcgj_entryentity");
control.addHyperClickListener(this);
RefBillEdit outContractSett = this.getControl("zcgj_ec_in_contract_sett"); //支出合同结算单
if(outContractSett != null) {
outContractSett.addBeforeF7SelectListener(this);
}
}
@Override
@ -158,4 +171,22 @@ public class InContractFinaceConfirmePlugin extends AbstractBillPlugIn implement
}
}
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
String name = beforeF7SelectEvent.getProperty().getName();
if(name.equals("zcgj_ec_in_contract_sett")){
IPageCache iPageCache = this.getView().getParentView().getService(IPageCache.class);
String listOrgId = iPageCache.get("current_zcgj_orgid_in");
List<Long> ids = new ArrayList<>();
if(StringUtils.isNotBlank(listOrgId)){
for (String s : listOrgId.split(",")) {
ids.add(Long.parseLong(s));
}
}
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
QFilter qFilter = new QFilter("org", QCP.in, ids);
showParameter.getListFilterParameter().getQFilters().add(qFilter);
}
}
}

View File

@ -105,6 +105,27 @@ public class OutContractFinaceConfirmeListPlugin extends AbstractListPlugin impl
}
}
@Override
public void setFilter(SetFilterEvent e) {
super.setFilter(e);
List<QFilter> qFilters = e.getQFilters();
for (QFilter qFilter : qFilters) {
if("zcgj_org.id".equals(qFilter.getProperty())){
String cp = qFilter.getCP();
Object value = qFilter.getValue();
StringBuilder sb = new StringBuilder();
if("=".equals(cp) && value instanceof Long){ //vale值类型为Long
sb.append(value);
}else if("IN".equals(cp) && value instanceof ArrayList){ //value值类型为ArrayList
for (Object o : (ArrayList) value) {
sb.append(o).append(",");
}
}
this.getPageCache().put("current_zcgj_orgid_out", sb.substring(0, sb.length()-1));
}
}
}
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);

View File

@ -11,11 +11,13 @@ import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.FormShowParameter;
import kd.bos.form.IPageCache;
import kd.bos.form.ShowType;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.events.HyperLinkClickEvent;
import kd.bos.form.events.HyperLinkClickListener;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.RefBillEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
@ -25,6 +27,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.ec.contract.common.enums.DirectionEnum;
import kd.sdk.plugin.Plugin;
import zcgj.zcdev.zcdev.pr.utils.OrgCheckUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
@ -56,8 +59,8 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme
}
//calBcCxAmt();
}
}
}
public void initData(Object contractSettleIdObj){
@ -169,6 +172,11 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme
super.registerListener(e);
EntryGrid control = this.getControl("zcgj_entryentity");
control.addHyperClickListener(this);
//kd.bos.form.field.RefBillEdit
RefBillEdit outContractSett = this.getControl("current_zcgj_orgid_out"); //支出合同结算单
if(outContractSett != null) {
outContractSett.addBeforeF7SelectListener(this);
}
BasedataEdit contractprocess = this.getControl("zcgj_cbs"); //承包工序
if(contractprocess != null) {
@ -257,7 +265,19 @@ public class OutContractFinaceConfirmePlugin extends AbstractBillPlugIn impleme
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
String name = beforeF7SelectEvent.getProperty().getName();
if(name.equals("zcgj_cbs")) {//工序根据项目过滤
if(name.equals("zcgj_ec_out_contract_sett")){
IPageCache iPageCache = this.getView().getParentView().getService(IPageCache.class);
String listOrgId = iPageCache.get("current_zcgj_orgid_out");
List<Long> ids = new ArrayList<>();
if(StringUtils.isNotBlank(listOrgId)){
for (String s : listOrgId.split(",")) {
ids.add(Long.parseLong(s));
}
}
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
QFilter qFilter = new QFilter("org", QCP.in, ids);
showParameter.getListFilterParameter().getQFilters().add(qFilter);
}else if(name.equals("zcgj_cbs")) {//工序根据项目过滤
Object projectObj = this.getModel().getValue("zcgj_project");
if(projectObj instanceof DynamicObject){
DynamicObject project = (DynamicObject) projectObj;

View File

@ -0,0 +1,12 @@
package zcgj.zcdev.zcdev.pr.utils;
import kd.bos.entity.datamodel.IDataModel;
public class CommonUtils {
public CommonUtils() {
}
public static boolean isNewData(IDataModel model) {
return !model.getDataEntity().getDataEntityState().getFromDatabase();
}
}

View File

@ -0,0 +1,70 @@
package zcgj.zcdev.zcdev.pr.utils;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class OrgCheckUtils {
public static String ksNumberTop = "10006431"; //矿山总部组织编码
public static String ksNumber = "10006447";//矿山总部本部
//试点四家公司本部
public static Set<String> testCompanyNumberSet = new HashSet<>();
static {
testCompanyNumberSet.add("10006461"); //南京本部
testCompanyNumberSet.add("10006476"); //兖州本部
testCompanyNumberSet.add("10007186"); //西安本部
testCompanyNumberSet.add("10006939"); //天津本部
}
/**
* 判断是否为矿山
*/
public static boolean isKS(Long currentOrgId){
QFilter filterOrgId = new QFilter("number", QCP.equals,ksNumberTop);//中材矿山建设有限公司
DynamicObject adminOrg = BusinessDataServiceHelper.loadSingle("bos_org", "number,name,fullname", new QFilter[]{filterOrgId});
long orgId = adminOrg.getLong("id");
List<Long> orgIds = new ArrayList<>(1);
//orgIds.add(1692204547985902592L);
orgIds.add(orgId);
List<Long> subOrgIds = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, orgIds, true);
Set<Long> orgSer = subOrgIds.stream().collect(Collectors.toSet());
if(orgSer.contains(currentOrgId)){
return true;
}
return false;
}
/**
* 判断某个组织是否在某个组织下面
* parentOrgNumber 上层组织编码
* currentOrgId 需要判断的组织id
*/
public static boolean isChildrenOrg(String parentOrgNumber,Long currentOrgId){
QFilter filterOrgId = new QFilter("number", QCP.equals,parentOrgNumber);//中材矿山建设有限公司
DynamicObject adminOrg = BusinessDataServiceHelper.loadSingle("bos_org", "number,name,fullname", new QFilter[]{filterOrgId});
long orgId = adminOrg.getLong("id");
List<Long> orgIds = new ArrayList<>(1);
//orgIds.add(1692204547985902592L);
orgIds.add(orgId);
List<Long> subOrgIds = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, orgIds, true);
Set<Long> orgSer = subOrgIds.stream().collect(Collectors.toSet());
if(orgSer.contains(currentOrgId)){
return true;
}
return false;
}
}