考察计划自动带出分录

This commit is contained in:
李贵强 2025-06-25 09:51:20 +08:00
parent 463340698a
commit 0c9f75429d
3 changed files with 305 additions and 55 deletions

View File

@ -235,7 +235,7 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P
DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录
for (DynamicObject dy : evalschemeentry) {
DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取考察指标
if ("resm_evalschemef7".equals(planName)) {
// if ("resm_evalschemef7".equals(planName)) {
String name = evalindex.getString("name");
indexNames.add(name);
switch (scoremethod){
@ -255,10 +255,10 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P
break;
}
indexColumnNames.add(name);
} else {
DynamicObject group = evalindex.getDynamicObject("group");
indexNames.add(group.getString("name"));
}
// } else {
// DynamicObject group = evalindex.getDynamicObject("group");
// indexNames.add(group.getString("name"));
// }
}
//
@ -492,7 +492,7 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P
DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录
for (DynamicObject dy : evalschemeentry) {
DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取评估指标
if ("resm_evalschemef7".equals(planName)) {
// if ("resm_evalschemef7".equals(planName)) {
String name = evalindex.getString("name");
indexNames.add(name);
switch (scoremethod){
@ -512,10 +512,10 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P
break;
}
indexColumnNames.add(name);
} else {
DynamicObject group = evalindex.getDynamicObject("group");
indexNames.add(group.getString("name"));
}
// } else {
// DynamicObject group = evalindex.getDynamicObject("group");
// indexNames.add(group.getString("name"));
// }
}
}

View File

@ -1,17 +1,29 @@
package shkd.repc.resm.formplugin;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.bill.BillShowParameter;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.ShowType;
import kd.bos.form.events.HyperLinkClickEvent;
import kd.bos.form.events.HyperLinkClickListener;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.util.*;
import java.util.stream.Collectors;
/**
* 考察计划单据界面插件
*/
public class InvestigationPlanFormPlugin extends AbstractBillPlugIn implements Plugin {
public class InvestigationPlanFormPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
/**
@ -22,54 +34,146 @@ public class InvestigationPlanFormPlugin extends AbstractBillPlugIn implements P
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
String name = e.getProperty().getName();//字段名称
if("suppliername".equals(name)){
String supplierType = "";
String supplierTypeName = "";
ChangeData[] changeSet = e.getChangeSet();
ChangeData changeData = changeSet[0];
DynamicObject newValue = (DynamicObject) changeData.getNewValue();
int rowIndex = changeData.getRowIndex();//当前更新供应商字段的行号
Object supplierclassification = this.getModel().getValue("supplierclassification");//获取单头的供应商分类
if (newValue != null){
Object pkValue = newValue.getPkValue();
String suppliersource = (String) this.getModel().getValue("suppliersource", rowIndex);//获取供应商类型
if("resm_regsupplier".equals(suppliersource)){//潜在供应商
supplierType = "resm_regsupplier";
supplierTypeName = "group";
}else {//正式供应商
supplierType = "resm_official_supplier";
supplierTypeName = "apt_group";
if("qeug_latentsuppliername".equals(name) || "qeug_formalsuppliername".equals(name)){
DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("plandetails");
if (entryEntity.size()!=0){
entryEntity.clear();
}
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, supplierType);//加载供应商数据
DynamicObjectCollection entry_linkman = dynamicObject.getDynamicObjectCollection("entry_linkman");//获取联系人分录
for (DynamicObject object : entry_linkman) {
if (object.getBoolean("isdefault_linkman")){//选择默认联系人
String contactperson = object.getString("contactperson");//名称
String contactphone = object.getString("contactphone");//手机号
this.getModel().setValue("qeug_supplieruname",contactperson,rowIndex);//供应商联系人名称赋值
this.getModel().setValue("suppliercontact",contactphone,rowIndex);//供应商联系方式赋值
break;
//获取供应商名称多选基础资料值
DynamicObject dataEntity = this.getModel().getDataEntity(true);
//潜在供应商
DynamicObjectCollection latentSupplier = dataEntity.getDynamicObjectCollection(name);
List<DynamicObject> latentSupplierList = new ArrayList<>();
for (DynamicObject user : latentSupplier) {
DynamicObject userObj = user.getDynamicObject("fbasedataid");
latentSupplierList.add(userObj);
}
//自动带出分录数据
if (latentSupplierList.size()!=0){
for (DynamicObject dynamicObject : latentSupplierList) {
DynamicObject newEntry = entryEntity.addNew();
newEntry.set("suppliersource",dataEntity.getString("qeug_suppliersource"));//供应商来源
newEntry.set("suppliername",dynamicObject);//供应商名称
newEntry.set("detail_supplierclassifica",dataEntity.getDynamicObject("supplierclassification"));//供应商分类
newEntry.set("detail_investigationtype",dataEntity.getDynamicObject("investigationtype"));//考察类型-默认供方考察
newEntry.set("detail_starttime",dataEntity.getDate("startdate"));//考察开始日期
newEntry.set("detail_endtime",dataEntity.getDate("enddate"));//考察开始日期
newEntry.set("detail_investigationuser",dataEntity.getDynamicObject("investigationuser"));//考察负责人
}
this.getView().updateView("plandetails");
}
// String supplierType = "";
// String supplierTypeName = "";
// ChangeData[] changeSet = e.getChangeSet();
// ChangeData changeData = changeSet[0];
// DynamicObject newValue = (DynamicObject) changeData.getNewValue();
// int rowIndex = changeData.getRowIndex();//当前更新供应商字段的行号
// Object supplierclassification = this.getModel().getValue("supplierclassification");//获取单头的供应商分类
// if (newValue != null){
// Object pkValue = newValue.getPkValue();
// String suppliersource = (String) this.getModel().getValue("suppliersource", rowIndex);//获取供应商类型
// if("resm_regsupplier".equals(suppliersource)){//潜在供应商
// supplierType = "resm_regsupplier";
// supplierTypeName = "group";
// }else {//正式供应商
// supplierType = "resm_official_supplier";
// supplierTypeName = "apt_group";
// }
// DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, supplierType);//加载供应商数据
// DynamicObjectCollection entry_linkman = dynamicObject.getDynamicObjectCollection("entry_linkman");//获取联系人分录
// for (DynamicObject object : entry_linkman) {
// if (object.getBoolean("isdefault_linkman")){//选择默认联系人
// String contactperson = object.getString("contactperson");//名称
// String contactphone = object.getString("contactphone");//手机号
// this.getModel().setValue("qeug_supplieruname",contactperson,rowIndex);//供应商联系人名称赋值
// this.getModel().setValue("suppliercontact",contactphone,rowIndex);//供应商联系方式赋值
// break;
// }
// }
// if (supplierclassification == null){
// DynamicObjectCollection apt_group = dynamicObject.getDynamicObjectCollection(supplierTypeName);
// if (apt_group != null){
// DynamicObject fbasedataid = apt_group.get(0).getDynamicObject("fbasedataid");
// this.getModel().setValue("detail_supplierclassifica",fbasedataid,rowIndex);//供应商分类赋值
// }else {
// this.getView().showTipNotification("该供应商-供应商分类数据异常,请维护!");
// }
// }
//
// }else {
// if (supplierclassification == null){
// this.getModel().setValue("detail_supplierclassifica",null,rowIndex);//清除供应商分类
// }
// this.getModel().setValue("qeug_supplieruname",null,rowIndex);//清除联系人名称
// this.getModel().setValue("suppliercontact",null,rowIndex);//清除联系人联系方式
// }
}
}
if (supplierclassification == null){
DynamicObjectCollection apt_group = dynamicObject.getDynamicObjectCollection(supplierTypeName);
if (apt_group != null){
DynamicObject fbasedataid = apt_group.get(0).getDynamicObject("fbasedataid");
this.getModel().setValue("detail_supplierclassifica",fbasedataid,rowIndex);//供应商分类赋值
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
BasedataEdit bEdit1 = this.getView().getControl("qeug_latentsuppliername");
bEdit1.addBeforeF7SelectListener(this);
BasedataEdit bEdit2 = this.getView().getControl("qeug_formalsuppliername");
bEdit2.addBeforeF7SelectListener(this);
}
@Override
public void beforeF7Select(BeforeF7SelectEvent event) {
String name = event.getProperty().getName();
DynamicObject dataEntity = this.getModel().getDataEntity(true);
if ("qeug_latentsuppliername".equals(name) || "qeug_formalsuppliername".equals(name)) {
this.registerSupplierName(event, dataEntity);
}
}
/**
* 标品的数据过滤逻辑
* @param event
* @param dataEntity
*/
private void registerSupplierName(BeforeF7SelectEvent event, DynamicObject dataEntity) {
List<QFilter> customQFilters = event.getCustomQFilters();
DynamicObject org = dataEntity.getDynamicObject("org");
String suppliersource = dataEntity.getString("qeug_suppliersource");
if (suppliersource == null) {
this.getView().showTipNotification(ResManager.loadKDString("请先设置供应商来源。", "InvestigationPlanEditUI_2", "repc-resm-formplugin", new Object[0]));
event.setCancel(true);
} else {
this.getView().showTipNotification("该供应商-供应商分类数据异常,请维护!");
DynamicObjectCollection plandetails = dataEntity.getDynamicObjectCollection("plandetails");
List<Object> hasSelectSupplierIdList = (List)plandetails.stream().filter((row) -> {
return row.getDynamicObject("suppliername") != null;
}).map((row) -> {
return row.getDynamicObject("suppliername").getPkValue();
}).collect(Collectors.toList());
DynamicObject supplierclassification = dataEntity.getDynamicObject("supplierclassification");
if ("resm_regsupplier".equals(suppliersource)) {
customQFilters.add(new QFilter("serviceorg", "=", org.getPkValue()));
customQFilters.add(new QFilter("group_entry.groupstatus", "in", Arrays.asList("TO_EXAM", "UNPASS_EXAM")));
if (supplierclassification != null) {
customQFilters.add(new QFilter("group_entry.sgroup", "=", supplierclassification.getPkValue()));
customQFilters.add(new QFilter("id", "not in", hasSelectSupplierIdList));
}
} else if ("resm_official_supplier".equals(suppliersource)) {
event.getFormShowParameter().setCustomParam("selectorgId", org.getPkValue());
if (supplierclassification != null) {
customQFilters.add(new QFilter("entry_serviceorg.supgroup.fbasedataid", "=", supplierclassification.getPkValue()));
event.getFormShowParameter().setCustomParam("selectGroupId", supplierclassification.getPkValue());
customQFilters.add(new QFilter("id", "not in", hasSelectSupplierIdList));
}
}
}else {
if (supplierclassification == null){
this.getModel().setValue("detail_supplierclassifica",null,rowIndex);//清除供应商分类
}
this.getModel().setValue("qeug_supplieruname",null,rowIndex);//清除联系人名称
this.getModel().setValue("suppliercontact",null,rowIndex);//清除联系人联系方式
}
}
}
}

View File

@ -1,16 +1,162 @@
package shkd.repc.resm.listplugin;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.FormShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.StyleCss;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
/**
* 标准单据列表插件
*/
public class examTaskListPlugin extends AbstractListPlugin implements Plugin {
Object evalSchemeId;
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs);
String operateKey = afterDoOperationEventArgs.getOperateKey();
switch (operateKey){
case "batchgrading":
//todo:批量评分选择多个已下达任务的考察进行批量打分
ListSelectedRowCollection rows = this.getSelectedRows();
if (this.checkMyEval(rows)){
//todo: 构建传参
Object[] primaryKeyValues = rows.getPrimaryKeyValues();
FormShowParameter formShowParameter = new FormShowParameter();
formShowParameter.setFormId("qeug_batchevaluatetpage");
formShowParameter.setCaption("开始打分");
formShowParameter.setCustomParam("primaryKeyValues",primaryKeyValues);
formShowParameter.setCustomParam("evalschemepk",evalSchemeId);
formShowParameter.setCustomParam("actiontype","scoring");//设置页面动作模式为打分
formShowParameter.setCustomParam("pagetype","resm_myexam");
formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
StyleCss inlineStyleCss = new StyleCss();
inlineStyleCss.setHeight("600");
inlineStyleCss.setWidth("1500");
formShowParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss);
getView().showForm(formShowParameter);
}
break;
default:
break;
}
}
/**
* 校验选取的我的评估单据数据是否符合规范
* @param rows
* @return
*/
public boolean checkMyEval(ListSelectedRowCollection rows){
if (this.checkMyEvalStatus(rows)){//判断选择的考察评分状态是否正确
if (this.checkMyEvalData(rows)){//判断选择的我的评估数据是否一致
return true;
}else {
return false;
}
}else {
return false;
}
}
/**
* 校验我的评估的数据是否符合
* @param rows
* @return
*/
public boolean checkMyEvalData(ListSelectedRowCollection rows){
HashSet<Object> orges = new HashSet<>();//组织容器
// HashSet<Object> evalPeriods = new HashSet<>();//评估周期容器
// HashSet<Object> years = new HashSet<>();//年份容器
HashSet<Object> evalSchemes = new HashSet<>();//评估方案容器
for (ListSelectedRow row : rows) {
Object primaryKeyValue = row.getPrimaryKeyValue();
if (primaryKeyValue != null){
DynamicObject resm_myeval_new = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "resm_myexam");//获取我的考察完整数据
DynamicObject org = resm_myeval_new.getDynamicObject("org");//组织
if (org != null){
orges.add(org.getPkValue());//添加进组织容器
}
// String evalperiod = resm_myeval_new.getString("evalperiod");//评估周期
// evalPeriods.add(evalperiod);//添加进周期容器
//
// Date year = resm_myeval_new.getDate("year");//年份
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
// String format = simpleDateFormat.format(year);
// years.add(format);//添加进年份容器
//考察任务
DynamicObject evalTask = resm_myeval_new.getDynamicObject("evaltask");
DynamicObject evalscheme = evalTask.getDynamicObject("evalscheme");
//DynamicObject evalscheme = resm_myeval_new.getDynamicObject("evalscheme");
if (evalscheme != null){
Object evalSchemePkValue = evalscheme.getPkValue();
evalSchemeId = evalSchemePkValue;//覆盖方案id
evalSchemes.add(evalSchemePkValue);
}else {
this.getView().showTipNotification("选择的我的评估单据存在评估方案数据异常");
return false;
}
}
}
// if (orges.size() == 1 && evalPeriods.size() == 1 && years.size() == 1 && evalSchemes.size() == 1 ){//当考察方案主键唯一时符合条件
// return true;
// }else {
if (orges.size() != 1){
this.getView().showTipNotification("存在多个组织,请重新选择数据");
}
// if (evalPeriods.size() != 1){
// this.getView().showTipNotification("存在多种评估周期,请重新选择数据");
// }
// if (years.size() != 1){
// this.getView().showTipNotification("存在多种评估年度,请重新选择数据");
// }
if (evalSchemes.size() != 1){
this.getView().showTipNotification("存在多种评估方案,请重新选择数据");
}
return true;
// }
}
/**
* 校验我的评估状态是否符合
* @param rows
* @return
*/
public boolean checkMyEvalStatus(ListSelectedRowCollection rows){
Object[] primaryKeyValues = rows.getPrimaryKeyValues();
if (primaryKeyValues.length > 0){
QFilter qf = new QFilter("billstatus", QCP.equals,"B");//未完成
qf.and("id",QCP.in,primaryKeyValues);
DynamicObject[] load = BusinessDataServiceHelper.load("resm_myexam", "id", qf.toArray());
if (load.length != primaryKeyValues.length){
this.getView().showTipNotification("存在评估状态不符合规范的我的考察,请重新选择数据!");
return false;
}else {
return true;
}
}else {
this.getView().showTipNotification("评估任务数据异常,单据不存在,请重新选择数据!");
return false;
}
}
}