合同类型控制字段

续签合同与续签查询
合同结算提示
This commit is contained in:
xiaoshi 2025-06-05 18:14:49 +08:00
parent 140bd6e3ac
commit b841584609
5 changed files with 299 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.bill.AbstractBillPlugIn; import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
@ -17,7 +18,6 @@ public class EcContractFromPlugin extends AbstractBillPlugIn implements Plugin {
@Override @Override
public void afterCreateNewData(EventObject e) { public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e); super.afterCreateNewData(e);
} }
@Override @Override
@ -25,7 +25,20 @@ public class EcContractFromPlugin extends AbstractBillPlugIn implements Plugin {
super.propertyChanged(e); super.propertyChanged(e);
String name = e.getProperty().getName(); String name = e.getProperty().getName();
ChangeData changeData = e.getChangeSet()[0]; ChangeData changeData = e.getChangeSet()[0];
if (name.equals("contracttype")){
Object contracttype = this.getModel().getValue("contracttype");
if (contracttype!=null){
DynamicObject type = (DynamicObject) contracttype;
String number = type.getString("number");
if (number.equals("sbzssr")){
this.getView().setVisible(true,"zcgj_equipment");
this.getView().setVisible(false,"zcgj_administer");
} else if (number.equals("hfzl")) {
this.getView().setVisible(true,"zcgj_administer");
this.getView().setVisible(false,"zcgj_equipment");
}
}
}
Object taxrate = this.getModel().getValue("taxrate"); Object taxrate = this.getModel().getValue("taxrate");
if (taxrate != null) { if (taxrate != null) {
DynamicObject taxrateInfo = (DynamicObject) taxrate; DynamicObject taxrateInfo = (DynamicObject) taxrate;

View File

@ -4,6 +4,7 @@ import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.context.RequestContext; import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener; import kd.bos.form.field.events.BeforeF7SelectListener;
@ -13,8 +14,10 @@ import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import zcgj.zcdev.zcdev.pr.plugin.utils.PluginUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.EventObject; import java.util.EventObject;
import java.util.List; import java.util.List;
@ -54,4 +57,25 @@ public class EcInFinalsettleJusCustPlugin extends AbstractBillPlugIn implements
} }
} }
@Override
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
String name = e.getProperty().getName();
if (name.equals("contract")){
Object objcontract = this.getModel().getValue("contract");
if (objcontract!=null){
DynamicObject contract = (DynamicObject) objcontract;
DynamicObject contractInfo = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,billname,zcgj_renewal,zcgj_isrenewal,zcgj_enddate", new QFilter[]{new QFilter("id", QCP.equals, contract.getLong("id"))});
Date zcgjEnddate = contractInfo.getDate("zcgj_enddate");
Date nowdate = new Date();
int timeDays = PluginUtils.getTimeDays(zcgjEnddate, nowdate);
// int endDays = Integer.parseInt(System.getProperty("endDays"));
int endDays = 100;
if (timeDays-endDays<=0){
this.getView().showTipNotification("当前选择合同距离到期不足"+endDays+"天!");
}
}
}
}
} }

View File

@ -0,0 +1,94 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bill.BillShowParameter;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
import kd.bos.entity.datamodel.events.BizDataEventArgs;
import kd.bos.form.FormShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.control.events.CellClickEvent;
import kd.bos.form.control.events.CellClickListener;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.util.EventObject;
import java.util.List;
import java.util.Map;
public class QueryInstancesFromPlugin extends AbstractFormPlugin implements CellClickListener {
@Override
public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e);
Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
Object list = customParams.get("list");
if (list!=null){
JSONArray jsonArray = JSONArray.parseArray(list.toString());
DynamicObjectCollection entrys = (DynamicObjectCollection)getModel().getValue("zcgj_entryentity");
entrys.remove(0);
for (int i = 0; i < jsonArray.size(); i++) {
DynamicObjectType type = entrys.getDynamicObjectType();
DynamicObject entry = new DynamicObject(type);
JSONObject jsonObject = jsonArray.getJSONObject(i);
entry.set("zcgj_billno",jsonObject.getString("zcgj_billno"));
entry.set("zcgj_billname",jsonObject.getString("zcgj_billname"));
entry.set("zcgj_renewalnum",jsonObject.getString("zcgj_renewalnum"));
entry.set("zcgj_renewalname",jsonObject.getString("zcgj_renewalname"));
entrys.add(entry);
this.getModel().setValue("zcgj_billno",jsonObject.getString("zcgj_billno"),i);
this.getModel().setValue("zcgj_billname",jsonObject.getString("zcgj_billname"),i);
this.getModel().setValue("zcgj_renewalnum",jsonObject.getString("zcgj_renewalnum"),i);
this.getModel().setValue("zcgj_renewalname",jsonObject.getString("zcgj_renewalname"),i);
}
}
}
public void registerListener(EventObject e) {
super.registerListener(e);
EntryGrid control = (EntryGrid)getView().getControl("zcgj_entryentity");
control.addCellClickListener(this);
}
@Override
public void cellClick(CellClickEvent cellClickEvent) {
String fieldKey = cellClickEvent.getFieldKey();
if (!fieldKey.equals("0")) {
int row = cellClickEvent.getRow();
if (fieldKey.equals("zcgj_billno")){
Object number = getModel().getValue("zcgj_billno", row);
if (number!=null){
DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("billno", QCP.equals, number.toString())});
BillShowParameter formShowParameter = new BillShowParameter();
formShowParameter.setFormId("ec_in_contract");
formShowParameter.setPkId(contract.getLong("id"));
formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
getView().showForm(formShowParameter);
}
} else if (fieldKey.equals("zcgj_renewalnum")) {
Object number = getModel().getValue("zcgj_renewalnum", row);
if (number!=null){
DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("billno", QCP.equals, number.toString())});
BillShowParameter formShowParameter = new BillShowParameter();
formShowParameter.setFormId("ec_in_contract");
formShowParameter.setPkId(contract.getLong("id"));
formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
getView().showForm(formShowParameter);
}
}
}
}
@Override
public void cellDoubleClick(CellClickEvent cellClickEvent) {
}
}

View File

@ -0,0 +1,144 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.greenpineyu.fel.common.NumberUtil;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.CloseCallBack;
import kd.bos.form.FormShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.mvc.bill.BillModel;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import org.jetbrains.annotations.NotNull;
import java.util.*;
public class RenewalContractBillPlugin extends AbstractListPlugin {
@Override
public void afterCopyData(EventObject e) {
BillModel billModel = (BillModel) e.getSource();
Object billno = billModel.getValue("billno");
DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,billname,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("billno", QCP.equals, billno)});
super.afterCopyData(e);
this.getModel().setValue("id", null);//id
this.getModel().setValue("billno", null);//合同编码
this.getModel().setValue("billname", contract.getString("billname")+"-续签");//合同名称
this.getModel().setValue("zcgj_startdate", null);//起始日期
this.getModel().setValue("zcgj_enddate", null);//终止日期
// DynamicObject contract = BusinessDataServiceHelper.loadSingle("ec_in_contract", "id,billno,zcgj_renewal", new QFilter[]{new QFilter("billno", QCP.equals, billno)});
this.getModel().setValue("zcgj_renewal", contract);//续签主合同
this.getModel().setValue("zcgj_isrenewal", true);//是否续签
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
// 工具栏注册监听注意这里是把整个工具栏注册监听工具栏项是没有运行时控件模型的
this.addItemClickListeners("tbmain");//监听按钮
}
@Override
public void itemClick(ItemClickEvent evt) {
String itemKey = evt.getItemKey();
// List<String> objects = new ArrayList<>();
JSONArray jsonArray = new JSONArray();
// Map<Long,String> map = new HashMap<>();
if (itemKey.equals("zcgj_queryinstances")) {
Set<Long> setIds = getSelectOrderIds(this.getSelectedRows());
if (setIds.size() == 0) {
this.getView().showTipNotification("请选择要执行的数据。");
return;
} else if (setIds.size() > 1) {
this.getView().showTipNotification("只能选择一条数据查看!");
return;
}
DynamicObject[] receiveApplications = BusinessDataServiceHelper.load("ec_in_contract", "billno,billname,zcgj_renewal,zcgj_isrenewal", new QFilter[]{new QFilter("id", "in", setIds)});
DynamicObject receiveApplication = receiveApplications[0];
String billno = receiveApplication.getString("billno");
QFilter qf = new QFilter("zcgj_renewal.billno", QCP.equals,billno);
DynamicObject[] recontracts = BusinessDataServiceHelper.load("ec_in_contract", "id,billno,billname,zcgj_renewal", new QFilter[]{qf});
for (DynamicObject recontract : recontracts) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("zcgj_billno",billno);
jsonObject.put("zcgj_billname",receiveApplication.getString("billname"));
jsonObject.put("zcgj_renewalnum",recontract.getString("billno"));
jsonObject.put("zcgj_renewalname",recontract.getString("billname"));
// objects.add( ));
// map.put(recontract.getLong("id"),recontract.getString("billno"));
jsonArray.add(jsonObject);
}
if (jsonArray.size()<1){
this.getView().showTipNotification("该合同暂无续签合同!");
return;
}
// 如果是弹出动态表单工具栏项被点击则打开指定的动态表单
if ("zcgj_queryinstances".equalsIgnoreCase(itemKey)) {
FormShowParameter formShowParameter = new FormShowParameter();
// 弹窗案例-动态表单 页面标识
formShowParameter.setFormId("zcgj_ec_renewal");
// 自定义传参把当前单据的文本字段传过去
formShowParameter.setCustomParam("list", jsonArray.toJSONString());
// 设置回调事件回调插件为当前插件标识为zcgj_
formShowParameter.setCloseCallBack(new CloseCallBack(this, "zcgj_queryinstances"));
// 设置打开类型为模态框不设置的话指令参数缺失没办法打开页面
formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
// 当前页面发送showform指令注意也可以从其他页面发送指令后续有文章介绍
this.getView().showForm(formShowParameter);
}
}
super.itemClick(evt);
}
@Override
public void beforeItemClick(BeforeItemClickEvent evt) {
super.beforeItemClick(evt);
String itemKey = evt.getItemKey();
if (itemKey.equals("zcgj_inrenewal")) {
Set<Long> setIds = getSelectOrderIds(this.getSelectedRows());
if (setIds.size() == 0) {
this.getView().showTipNotification("请选择要执行的数据。");
return;
} else if (setIds.size() > 1) {
this.getView().showTipNotification("只能选择一条数据查看!");
return;
}
DynamicObject[] receiveApplications = BusinessDataServiceHelper.load("ec_in_contract", "billno,zcgj_renewal,zcgj_isrenewal,contstatus", new QFilter[]{new QFilter("id", "in", setIds)});
DynamicObject receiveApplication = receiveApplications[0];
boolean isrenewal = receiveApplication.getBoolean("zcgj_isrenewal");
if (isrenewal){
this.getView().showTipNotification("续签合同不能进行续签!");
evt.setCancel(true);
return;
}
String contstatus = receiveApplication.getString("contstatus");
if (!contstatus.equals("01")){
this.getView().showTipNotification("收入合同需执行中才可进行续签!");
evt.setCancel(true);
return;
}
}
}
@NotNull
private Set<Long> getSelectOrderIds(@NotNull ListSelectedRowCollection selectedRows) {
Set<Long> setIds = new HashSet<>();
for (ListSelectedRow selectedRow : selectedRows) {
setIds.add(NumberUtil.toLong(selectedRow.getPrimaryKeyValue()));
}
return setIds;
}
}

View File

@ -0,0 +1,22 @@
package zcgj.zcdev.zcdev.pr.plugin.utils;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
public class PluginUtils {
/*
计算两个时间中的天数
*/
public static int getTimeDays(Date starDate, Date endDate) {
// Date 转换为 LocalDate
LocalDate localDate1 = starDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate localDate2 = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
// 计算相差的天数
long daysDifference = Math.abs(localDate2.toEpochDay() - localDate1.toEpochDay());
return Math.toIntExact(daysDifference);
}
}