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

This commit is contained in:
zhangzhiguo 2026-01-06 14:41:25 +08:00
commit fb7b1f5ddc
2 changed files with 300 additions and 0 deletions

View File

@ -0,0 +1,291 @@
package zcgj.zcdev.zcdev.fs.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.bill.BillShowParameter;
import kd.bos.bill.OperationStatus;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.ILocaleString;
import kd.bos.dataentity.metadata.IDataEntityProperty;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.IClientViewProxy;
import kd.bos.form.control.AttachmentPanel;
import kd.bos.form.control.Label;
import kd.bos.form.control.events.AttachmentOperaClickListener;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
import kd.bos.mvc.form.ClientViewProxy;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
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.user.UserServiceHelper;
import kd.fi.er.business.bean.CostDeptF7ChangePram;
import kd.fi.er.business.servicehelper.CoreBaseBillServiceHelper;
import kd.fi.er.business.utils.ErCommonUtils;
import kd.fi.er.business.utils.ErEntityTypeUtils;
import kd.sdk.plugin.Plugin;
import java.util.*;
/*
* 通用申请表单插件
*/
public class CommonBillPlugin extends AbstractBillPlugIn implements AttachmentOperaClickListener, Plugin, BeforeF7SelectListener {
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
BasedataEdit zcgj_department = this.getView().getControl("zcgj_department");//部门
zcgj_department.addBeforeF7SelectListener(this);
BasedataEdit zcgj_org = this.getView().getControl("zcgj_org");//所属组织
zcgj_org.addBeforeF7SelectListener(this);
AttachmentPanel panel = getControl("attachmentpanel");//附件
panel.addOperaClickListener(this);
BasedataEdit zcgj_costcompany = this.getView().getControl("zcgj_costcompany");//费用承担公司
zcgj_costcompany.addBeforeF7SelectListener(this);
}
@Override
public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e);
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
if (costDept != null) {
setOrg(costDept);
}
}
@Override
public void afterBindData(EventObject e) {
super.afterBindData(e);
setAttFileVisble();//隐藏删除按钮
BillShowParameter bsp = (BillShowParameter) this.getView().getFormShowParameter();
if (bsp.getStatus() == OperationStatus.ADDNEW) {
//如果是新增时
DynamicObject creator = this.getModel().getDataEntity().getDynamicObject("creator");//创建人
if (creator != null) {
long mainOrgId = UserServiceHelper.getUserMainOrgId(creator.getLong("id"));
this.getModel().setValue("zcgj_department", mainOrgId);//部门
this.getView().updateView("zcgj_department");
}
}
}
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs);
setAttFileVisble();
}
@Override
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
if (e.getProperty().getName().equals("attachmentpanel")) {
setAttFileVisble();
} else if (e.getProperty().getName().equals("zcgj_department")) {
//部门
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
if (costDept != null) {
setOrg(costDept);
}
String propName = e.getProperty().getName();
ChangeData[] valueSet = e.getChangeSet();
Object propValue = valueSet[0].getNewValue();
costDeptChange(propName, (DynamicObject) propValue);
}
}
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
IDataEntityProperty property = beforeF7SelectEvent.getProperty();//过滤字段信息
String propertyName = property.getName();//过滤字段标识
if (propertyName.equals("zcgj_department")) {
// 部门
DynamicObject creator = this.getModel().getDataEntity().getDynamicObject("creator");//创建人
if (creator == null) {
return;
}
List<Long> id = UserServiceHelper.getOrgsUserJoin(creator.getLong("id"));
List<QFilter> qFilter = new ArrayList<>();
qFilter.add(new QFilter("id", QCP.in, id));
formShowParameter.getListFilterParameter().setQFilters(qFilter);
formShowParameter.setCustomParam("isIncludeAllSub", "true");
} else if (propertyName.equals("zcgj_org")) {
// 所属组织
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
DynamicObject zcgj_org = (DynamicObject) this.getModel().getValue("zcgj_org");//所属组织
if (costDept != null && zcgj_org != null) {
DynamicObject orgPattern = costDept.getDynamicObject("orgpattern");
if (orgPattern == null) {
return;
}
String orgPatternNumber = orgPattern.getString("number");
if (orgPatternNumber.equals("Orgform06")) {
Long id = (Long) zcgj_org.get("id");
List<QFilter> qFilter = new ArrayList<>();
qFilter.add(new QFilter("id", QCP.in, id));
formShowParameter.getListFilterParameter().setQFilters(qFilter);
// formShowParameter.setCustomParam(OrgTreeUtils.PARAM_INIT_ROOT_ORG_ID, id);
formShowParameter.setCustomParam("isIncludeAllSub", "true");
}
}
} else if ("zcgj_costcompany".equals(propertyName)) { //费用承担公司过滤
DynamicObject zcgjDepartment = (DynamicObject) this.getModel().getValue("zcgj_department");
if (zcgjDepartment != null) {
List<Long> id = findCostCompanysByCostDept(zcgjDepartment.getLong("id"));
if (id != null && !id.isEmpty()) {
List<QFilter> qFilter = new ArrayList<>();
qFilter.add(new QFilter("id", QCP.in, id));
formShowParameter.getListFilterParameter().setQFilters(qFilter);
}
}
}
}
private void setAttFileVisble() {
String billstatus = String.valueOf(this.getModel().getValue("billstatus"));
if (!billstatus.equals("A")) {
AttachmentPanel attachmentPanel = this.getControl("attachmentpanel");
List<Map<String, Object>> attachmentData = attachmentPanel.getAttachmentData();
if (attachmentData == null && attachmentData.isEmpty()) {
return;
}
List<Map<String, Object>> attachmentDatas = attachmentPanel.getAttachmentData();
for (Map<String, Object> attachmentMap : attachmentDatas) {
String visiablePreview = "1";//是否显示预览按钮
String visiableDownload = "1";//是否显示下载按钮
String visiableRename = "1";//是否显示重命名按钮
String visiableDelete = "0";//是否显示删除按钮
//visible参数规则为01组成,0代表不可见,1代表可见
attachmentMap.put("visible", visiablePreview + visiableDownload + visiableRename + visiableDelete);
//attachmentMap.put("hiddenBtn",hiddenBtnList);
}
ClientViewProxy cvp = this.getView().getService(IClientViewProxy.class);
cvp.setFieldProperty("attachmentpanel", "v", attachmentDatas);
}
}
private void setOrg(DynamicObject costDept) {
DynamicObject orgPattern = costDept.getDynamicObject("orgpattern");
if (orgPattern == null) {
return;
}
String orgPatternNumber = orgPattern.getString("number");
if (!orgPatternNumber.equals("Orgform06")) {
//填写的部门的形态不是部门时直接将部门值赋值给所属组织
this.getModel().setValue("zcgj_org", costDept);//所属组织
return;
}
int a = 0;
DynamicObject cost;
DynamicObject viewParent = null;
while (true) {
if (a == 0) {
//第一次进入循环
cost = costDept;
} else {
QFilter[] qFilters = new QFilter[]{
new QFilter("number", QCP.equals, viewParent.getString("number"))
};
cost = BusinessDataServiceHelper.loadSingle("bos_adminorg", qFilters);
}
long currentOrgId = Long.parseLong(cost.getString("id"));//当前部门ID
Map<Long, Long> orgParentMap = OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.Admin, Collections.singletonList(currentOrgId));//获取当前部门的上级组织
Long parentId = orgParentMap.get(currentOrgId);//上级组织ID
viewParent = BusinessDataServiceHelper.loadSingle("bos_adminorg",
new QFilter[]{new QFilter("id", QCP.equals, parentId)});//行政组织-上级组织
// DynamicObjectCollection structureCollection = cost.getDynamicObjectCollection("structure");//组织结构分录
// DynamicObject structure = structureCollection.get(0);
// viewParent = structure.getDynamicObject("viewparent");//上级组织
String viewParentNumber = viewParent.getString("number");
QFilter[] qFilters = new QFilter[]{
new QFilter("number", QCP.equals, viewParentNumber)
};
DynamicObject bos_adminOrg = BusinessDataServiceHelper.loadSingle("bos_adminorg", qFilters);//行政组织
DynamicObject orgPattern1 = bos_adminOrg.getDynamicObject("orgpattern");//形态
String orgPatternNumber1 = orgPattern1.getString("number");
if (!orgPatternNumber1.equals("Orgform06")) {
//上级不为不为部门的时候将现在查询的部门赋值给一级承担部门
break;
} else {
a++;
}
}
DynamicObject bos_adminorg = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{
new QFilter("number", QCP.equals, viewParent.getString("number"))});
this.getModel().setValue("zcgj_org", bos_adminorg);//所属组织
}
//获取费用承担公司
protected void costDeptChange(String propName, DynamicObject costDept) {
if (costDept != null) {
IDataModel model = this.getModel();
this.refreshBaseInfoLabel(propName, costDept);
DynamicObject company = (DynamicObject) model.getValue("zcgj_org");
DynamicObject costCompany = (DynamicObject) model.getValue("zcgj_costcompany");
CostDeptF7ChangePram costDeptF7ChangePram = new CostDeptF7ChangePram(Boolean.TRUE, costDept, costCompany, company);
Long costCompanyId = CoreBaseBillServiceHelper.getAccountOrgId(costDeptF7ChangePram);//获取费用承担公司
model.setValue("zcgj_costcompany", costCompanyId);
this.getView().updateView("zcgj_costcompany");
}
}
protected void refreshBaseInfoLabel(String propName, Object propValue) {
String propStr = null;
if (propValue instanceof DynamicObject) {
ILocaleString name = ((DynamicObject) propValue).getLocaleString("name");
propStr = name.getLocaleValue();
} else if (propValue instanceof String) {
propStr = (String) propValue;
}
Label propControl = (Label) this.getControl(propName + "V");
if (propControl != null) {
propControl.setText(propStr);
}
}
public static List<Long> findCostCompanysByCostDept(Long deptID) {
ArrayList<Long> deptIDs = new ArrayList();
deptIDs.add(deptID);
List<Long> selectIds = OrgUnitServiceHelper.getAdminOrgRelation(deptIDs, false);
QFilter treeTypeFilter = new QFilter("view.treetype", "=", "10");
QFilter isDefaultViewFilter = new QFilter("view.isdefault", "=", Boolean.TRUE);
QFilter isbizunitFilter = new QFilter("isbizunit", "=", Boolean.TRUE);
QFilter orgFilter = null;
QFilter[] filters = null;
DynamicObject orgInfo = null;
Long costCompany = null;
List parents;
for (String orgFunction = "01"; costCompany == null; deptID = (Long) parents.get(0)) {
orgFilter = new QFilter("org", "=", deptID);
filters = new QFilter[]{treeTypeFilter, isDefaultViewFilter, orgFilter, isbizunitFilter};
orgInfo = QueryServiceHelper.queryOne("bos_org_structure", "org", filters);
if (orgInfo != null) {
costCompany = ErCommonUtils.getPk(orgInfo.get("org"));
selectIds.add(costCompany);
break;
}
parents = OrgUnitServiceHelper.getSuperiorOrgs(orgFunction, deptID);
if (parents == null || parents.isEmpty()) {
break;
}
}
return selectIds;
}
}

View File

@ -175,6 +175,15 @@ public class DailyreimbursHomeCheckOp extends AbstractOperationServicePlugIn {
} }
boolean zcgj_is_home = dataEntity.getBoolean("zcgj_is_home");//是否来往家居地 boolean zcgj_is_home = dataEntity.getBoolean("zcgj_is_home");//是否来往家居地
if (zcgj_is_home) { if (zcgj_is_home) {
QFilter filter = new QFilter("zcgj_companyblentry.zcgj_org.id", QCP.equals, companyId);
filter.and(new QFilter("zcgj_usehomegeo", QCP.equals, true));//费用报销往返家居地关联费用申请为是
DynamicObject zcgj_authorizedcompany = QueryServiceHelper.queryOne("zcgj_companybelong",
"id", new QFilter[]{filter});//公司归属区域
if (zcgj_authorizedcompany == null) {
continue;
}
DynamicObjectCollection writeOffApplyCollection = dataEntity.getDynamicObjectCollection("writeoffapply");//关联申请 DynamicObjectCollection writeOffApplyCollection = dataEntity.getDynamicObjectCollection("writeoffapply");//关联申请
if (writeOffApplyCollection.size() > 0) { if (writeOffApplyCollection.size() > 0) {
int i = 0; int i = 0;