|
|
@@ -1,27 +1,58 @@
|
|
|
package nckd.jxccl.hrmp.hbpm.plugin.form.hr;
|
|
|
|
|
|
+import com.google.common.collect.Maps;
|
|
|
import kd.bos.bill.BillOperationStatus;
|
|
|
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.metadata.IDataEntityProperty;
|
|
|
+import kd.bos.dataentity.metadata.IDataEntityType;
|
|
|
+import kd.bos.dataentity.serialization.SerializationUtils;
|
|
|
import kd.bos.entity.BillEntityType;
|
|
|
+import kd.bos.entity.EntityMetadataCache;
|
|
|
+import kd.bos.entity.MainEntityType;
|
|
|
+import kd.bos.entity.datamodel.IDataModel;
|
|
|
+import kd.bos.entity.datamodel.ListSelectedRow;
|
|
|
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
|
|
|
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
|
|
|
import kd.bos.entity.operate.result.OperationResult;
|
|
|
+import kd.bos.entity.property.BasedataProp;
|
|
|
+import kd.bos.ext.hr.entity.property.PositionFieldProp;
|
|
|
+import kd.bos.form.CloseCallBack;
|
|
|
import kd.bos.form.ConfirmCallBackListener;
|
|
|
import kd.bos.form.ConfirmTypes;
|
|
|
+import kd.bos.form.IFormView;
|
|
|
import kd.bos.form.MessageBoxOptions;
|
|
|
+import kd.bos.form.ShowType;
|
|
|
import kd.bos.form.control.EntryGrid;
|
|
|
+import kd.bos.form.control.events.EntryGridBindDataListener;
|
|
|
import kd.bos.form.events.AfterDoOperationEventArgs;
|
|
|
import kd.bos.form.events.ClosedCallBackEvent;
|
|
|
import kd.bos.form.events.MessageBoxClosedEvent;
|
|
|
+import kd.bos.form.field.BasedataEdit;
|
|
|
+import kd.bos.form.field.events.BeforeBasedataSetValueEvent;
|
|
|
+import kd.bos.form.field.events.BeforeBasedataSetValueListener;
|
|
|
+import kd.bos.form.field.events.BeforeF7SelectEvent;
|
|
|
+import kd.bos.form.field.events.BeforeF7SelectListener;
|
|
|
import kd.bos.form.plugin.AbstractFormPlugin;
|
|
|
+import kd.bos.list.ListShowParameter;
|
|
|
import kd.bos.logging.Log;
|
|
|
import kd.bos.logging.LogFactory;
|
|
|
import kd.bos.mvc.bill.BillView;
|
|
|
import kd.bos.orm.ORM;
|
|
|
import kd.bos.orm.query.QCP;
|
|
|
import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.orm.util.CollectionUtils;
|
|
|
+import kd.bos.permission.api.HasPermOrgResult;
|
|
|
+import kd.bos.servicehelper.basedata.BaseDataServiceHelper;
|
|
|
+import kd.bos.servicehelper.permission.PermissionServiceHelper;
|
|
|
+import kd.hr.haos.business.domain.common.service.impl.BaseDataHelper;
|
|
|
import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
|
|
|
+import kd.hr.hbp.common.model.AuthorizedOrgResult;
|
|
|
+import kd.hr.hbp.common.util.HRDateTimeUtils;
|
|
|
+import kd.hr.hbp.common.util.HRDynamicObjectUtils;
|
|
|
import kd.hr.hbp.common.util.HRStringUtils;
|
|
|
import kd.hr.hbp.common.util.concurrent.NullableConcurrentHashMap;
|
|
|
import kd.hr.homs.business.domain.batchbill.repository.AdminOrgBatchChgHelper;
|
|
|
@@ -31,8 +62,13 @@ import nckd.jxccl.hrmp.hbpm.business.hr.PositionBillConfirmCallBackService;
|
|
|
import nckd.jxccl.hrmp.hbpm.business.hr.PositionBillPropertyChangedService;
|
|
|
import nckd.jxccl.hrmp.hbpm.business.hr.PositionBillServiceHelper;
|
|
|
import nckd.jxccl.hrmp.hbpm.common.hr.PositionBillConstant;
|
|
|
+import org.apache.commons.lang3.time.DateUtils;
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
import java.util.EventObject;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
@@ -41,7 +77,7 @@ import java.util.Objects;
|
|
|
* @author: jtd
|
|
|
* @date: 2025-10-25 13:38
|
|
|
*/
|
|
|
-public class PositionBillFormPlugin extends AbstractFormPlugin {
|
|
|
+public class PositionBillFormPlugin extends AbstractFormPlugin implements BeforeF7SelectListener, EntryGridBindDataListener, BeforeBasedataSetValueListener {
|
|
|
private static final Log LOG = LogFactory.getLog(PositionBillFormPlugin.class);
|
|
|
private final Map<String, Map<?, DynamicObject>> baseDataCacheMap = new NullableConcurrentHashMap(3);
|
|
|
|
|
|
@@ -65,6 +101,33 @@ public class PositionBillFormPlugin extends AbstractFormPlugin {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void beforeBasedataSetValue(BeforeBasedataSetValueEvent beforeBasedataSetValueEvent) {
|
|
|
+ Object value = beforeBasedataSetValueEvent.getValue();
|
|
|
+ Object source = beforeBasedataSetValueEvent.getSource();
|
|
|
+ if (value instanceof ListSelectedRowCollection && source instanceof BasedataEdit) {
|
|
|
+ ListSelectedRowCollection rows = (ListSelectedRowCollection) value;
|
|
|
+ BasedataEdit basedataEdit = (BasedataEdit) source;
|
|
|
+ IDataEntityProperty property = basedataEdit.getProperty();
|
|
|
+ if (property instanceof PositionFieldProp && basedataEdit.isF7MultipleSelect()) {
|
|
|
+ DynamicObject billDy = getModel().getDataEntity();
|
|
|
+ String fieldKey = basedataEdit.getFieldKey();
|
|
|
+ String baseEntityId = ((BasedataProp) property).getBaseEntityId();
|
|
|
+ HRBaseServiceHelper helper = new HRBaseServiceHelper(baseEntityId);
|
|
|
+ DynamicObject[] baseDataDys = helper.loadDynamicObjectArray(rows.stream().map(ListSelectedRow::getPrimaryKeyValue).distinct().toArray());
|
|
|
+ //Set<Long> parentBoIds = Sets.newHashSetWithExpectedSize(baseDataDys.length);
|
|
|
+ Map<Object, DynamicObject> baseDataDyMap = Maps.newHashMapWithExpectedSize(baseDataDys.length);
|
|
|
+
|
|
|
+ for(DynamicObject orgDy : baseDataDys) {
|
|
|
+ //parentBoIds.add(orgDy.getLong(String.join(".", PositionBillConstant.PARENT_KEY, PositionBillConstant.BOID_KEY)));
|
|
|
+ baseDataDyMap.put(orgDy.getPkValue(), orgDy);
|
|
|
+ }
|
|
|
+
|
|
|
+ baseDataCacheMap.put(baseEntityId, baseDataDyMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }// 280
|
|
|
+
|
|
|
@Override
|
|
|
public void propertyChanged(PropertyChangedArgs e) {
|
|
|
super.propertyChanged(e);
|
|
|
@@ -99,7 +162,7 @@ public class PositionBillFormPlugin extends AbstractFormPlugin {
|
|
|
PositionBillServiceHelper.openViewForm(getView(), PositionBillConstant.ADD_TAG, getPluginName(), null);
|
|
|
break;
|
|
|
case PositionBillConstant.EDIT_ADD_OP:
|
|
|
- PositionBillServiceHelper.openEditAddPage(status, getModel(), getView());
|
|
|
+ openEditAddPage(status, getModel(), getView());
|
|
|
break;
|
|
|
case PositionBillConstant.EDIT_CHANGE_OP:
|
|
|
PositionBillServiceHelper.entryEntityMore(getModel(), getView(), PositionBillConstant.CHANGE_TAG, status);
|
|
|
@@ -162,4 +225,158 @@ public class PositionBillFormPlugin extends AbstractFormPlugin {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void openEditAddPage(OperationStatus status, IDataModel iDataModel, IFormView iFormView) {
|
|
|
+ EntryGrid strategyEntryGrid = iFormView.getControl(PositionBillConstant.NCKD_ENTRYENTITY_ADD_KEY);
|
|
|
+ int row = strategyEntryGrid.getEntryState().getFocusRow();
|
|
|
+ DynamicObject addDy = iDataModel.getDataEntity(true).getDynamicObjectCollection(PositionBillConstant.NCKD_ENTRYENTITY_ADD_KEY).get(row);
|
|
|
+ Long adddyId = addDy.getLong(PositionBillConstant.ID_KEY);
|
|
|
+ Map map = HRDynamicObjectUtils.convertDynamicObjectToMap(addDy);
|
|
|
+ BillShowParameter formShowParameter = new BillShowParameter();
|
|
|
+ formShowParameter.setFormId(PositionBillConstant.NCKD_POSBILLENTRYADD_ENTITY);
|
|
|
+ formShowParameter.setCustomParam("position_bsed", iDataModel.getValue(PositionBillConstant.NCKD_EFFDT) == null ? HRDateTimeUtils.getNowDateTime().getTime() : ((Date) iDataModel.getValue(PositionBillConstant.NCKD_EFFDT)).getTime());
|
|
|
+ formShowParameter.setPkId(adddyId);
|
|
|
+ formShowParameter.setStatus(status);
|
|
|
+ formShowParameter.setCustomParam("billid", iDataModel.getDataEntity().getLong(PositionBillConstant.ID_KEY));
|
|
|
+ if (HRStringUtils.equals(iFormView.getFormShowParameter().getAppId(), PositionBillConstant.WFTASK_APP)) {
|
|
|
+ formShowParameter.setHasRight(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!status.equals(OperationStatus.VIEW)) {
|
|
|
+ formShowParameter.setCloseCallBack(new CloseCallBack(getPluginName(), PositionBillConstant.ADD_TAG));
|
|
|
+ }
|
|
|
+
|
|
|
+ formShowParameter.setCustomParam("selectObject", SerializationUtils.toJsonString(map));
|
|
|
+ formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
|
|
|
+ //formShowParameter.setCustomParam("OP_VALIDATOR_BILL_ORG_ALL_CHANGE_ORG_KEY", getThisBillAllValidateDataStr(dynamicObject));
|
|
|
+ //formShowParameter.setCustomParam("OP_VALIDATOR_BILL_ORG_NEW_ORG_NUMBERS_KEY", getThisBillOrgNumbersStr(dynamicObject));
|
|
|
+ iFormView.showForm(formShowParameter);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void registerListener(EventObject e) {
|
|
|
+ super.registerListener(e);
|
|
|
+
|
|
|
+ EntryGrid entryGrid = getControl(String.join("_", PositionBillConstant.NCKD_ENTRYENTITY, PositionBillConstant.CHANGE_TAG));
|
|
|
+ //entryGrid.addDataBindListener(this);
|
|
|
+
|
|
|
+ for(String registerBeforeF7Listener : getRegisterBeforeF7ListenerControlList()) {
|
|
|
+ BasedataEdit basedataEdit = getControl(registerBeforeF7Listener);
|
|
|
+ if (basedataEdit != null) {
|
|
|
+ basedataEdit.setF7BatchFill(false);
|
|
|
+ basedataEdit.addBeforeF7SelectListener(this);
|
|
|
+ basedataEdit.addBeforeBasedataSetValueListener(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> getRegisterBeforeF7ListenerControlList() {
|
|
|
+ return Arrays.asList(PositionBillConstant.NCKD_DISORG_KEY, String.join("_", PositionBillConstant.NCKD_ORG, PositionBillConstant.CHANGE_TAG), String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.CHANGE_TAG), String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.CHANGE_TAG));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
|
|
|
+ String fieldKey = beforeF7SelectEvent.getProperty().getName();
|
|
|
+ setFuzzySearchAuthFilter(beforeF7SelectEvent);
|
|
|
+ replaceFormIdByFieldKey(beforeF7SelectEvent);
|
|
|
+ if (PositionBillConstant.NCKD_DISORG_KEY.equals(fieldKey)) {// 780
|
|
|
+ beforeF7SelectEvent.getFormShowParameter().setCaption("签发组织");
|
|
|
+ beforeF7SelectEvent.getCustomQFilters().add(BaseDataHelper.getAdminOrgBaseDataFilter(PositionBillConstant.NCKD_POSITIONBILL_ENTITY, Collections.singletonList(((DynamicObject) getView().getModel().getValue(PositionBillConstant.ORG_KEY)).getLong(PositionBillConstant.ID_KEY))));
|
|
|
+ } else {
|
|
|
+ int rowIndex = beforeF7SelectEvent.getRow();
|
|
|
+ String suffix = getSuffixByFieldKey(fieldKey);
|
|
|
+ String entryName = String.join("_", PositionBillConstant.NCKD_ENTRYENTITY, suffix);
|
|
|
+ DynamicObjectCollection entryDynColl = getModel().getDataEntity(true).getDynamicObjectCollection(entryName);
|
|
|
+ DynamicObject focusEntryDyn = entryDynColl.get(rowIndex);
|
|
|
+ Date date = DateUtils.truncate(new Date(), 5);
|
|
|
+ MainEntityType entityType = EntityMetadataCache.getDataEntityType(getView().getEntityId());
|
|
|
+ IDataEntityProperty property = entityType.getAllFields().get(fieldKey);
|
|
|
+ IDataEntityType parent = property.getParent();
|
|
|
+ Date effectDate = (Date) getModel().getValue(PositionBillConstant.NCKD_EFFDT);
|
|
|
+ if (checkOrgValue(beforeF7SelectEvent, property, parent)) {
|
|
|
+ ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
|
|
|
+ if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.CHANGE_TAG))) {
|
|
|
+ showParameter.getCustomParams().put("searchdate", date);
|
|
|
+ AdminOrgBatchChgHelper.filterF7Org(getView(), beforeF7SelectEvent, null);
|
|
|
+ setFilterByOrg(beforeF7SelectEvent);
|
|
|
+ } else if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_PARENT, PositionBillConstant.CHANGE_TAG))) {
|
|
|
+ // 岗位变更-上级岗位业务逻辑
|
|
|
+ } else if (fieldKey.equals(String.join("_", PositionBillConstant.NCKD_ORG, PositionBillConstant.CHANGE_TAG))) {
|
|
|
+ HasPermOrgResult permOrgResult = PermissionServiceHelper.getUserHasPermOrgs(RequestContext.get().getCurrUserId(), false);
|
|
|
+ if (!permOrgResult.hasAllOrgPerm()) {
|
|
|
+ List<Long> hasPermOrgs = permOrgResult.getHasPermOrgs();
|
|
|
+ beforeF7SelectEvent.getCustomQFilters().add(new QFilter(PositionBillConstant.ID_KEY, QCP.equals, hasPermOrgs));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean checkOrgValue(BeforeF7SelectEvent beforeF7SelectEvent, IDataEntityProperty property, IDataEntityType parent) {
|
|
|
+ if (parent == null) {
|
|
|
+ return false;
|
|
|
+ } else if (parent.getName().equals(getView().getEntityId())) {
|
|
|
+ return false;
|
|
|
+ } else if (!getModel().getDataEntity().containsProperty(property.getParent().getName())) {
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ DynamicObjectCollection dynamicObjectCollection = getModel().getDataEntity(true).getDynamicObjectCollection(parent.getName());
|
|
|
+ DynamicObject dynamicObject = dynamicObjectCollection.get(beforeF7SelectEvent.getRow());
|
|
|
+ String name = property.getName();
|
|
|
+ String suffix = name.substring(name.lastIndexOf("_") + 1);
|
|
|
+ String fieldKey = name.replace("_"+suffix, "");
|
|
|
+ if (PositionBillConstant.NCKD_ORG.equals(fieldKey)) {
|
|
|
+ return false;
|
|
|
+ } else if (!dynamicObject.getDataEntityType().getProperties().containsKey(String.join("_", PositionBillConstant.NCKD_ORG, suffix))) {
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ Boolean baseDataCtrl = BaseDataServiceHelper.checkBaseDataCtrl(((BasedataProp)property).getBaseEntityId());
|
|
|
+ DynamicObject orgDy = dynamicObject.getDynamicObject(String.join("_", PositionBillConstant.NCKD_ORG, suffix));
|
|
|
+ if (orgDy == null && baseDataCtrl) {
|
|
|
+ getView().showTipNotification("请先选择组织体系管理组织。");
|
|
|
+ beforeF7SelectEvent.setCancel(true);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setFilterByOrg(BeforeF7SelectEvent beforeF7SelectEvent) {
|
|
|
+ List<Long> orgIdList = Collections.singletonList(((DynamicObject) getModel().getValue(PositionBillConstant.ORG_KEY)).getLong(PositionBillConstant.ID_KEY));
|
|
|
+ if (CollectionUtils.isEmpty(orgIdList)) {
|
|
|
+ beforeF7SelectEvent.getCustomQFilters().add(new QFilter("1", QCP.not_equals, 1));
|
|
|
+ } else {
|
|
|
+ beforeF7SelectEvent.getCustomQFilters().add(new QFilter(String.join(".", PositionBillConstant.ADMINORG, PositionBillConstant.ORG_KEY), QCP.in, orgIdList));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setFuzzySearchAuthFilter(BeforeF7SelectEvent beforeF7SelectEvent) {
|
|
|
+ if ("getLookUpList".equals(beforeF7SelectEvent.getSourceMethod()) || "setItemByNumber".equals(beforeF7SelectEvent.getSourceMethod())) {
|
|
|
+ AuthorizedOrgResult authorizedOrgResult = PositionBillServiceHelper.getOrgAuth(getView());
|
|
|
+ if (authorizedOrgResult.isHasAllOrgPerm()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String fieldName = beforeF7SelectEvent.getProperty().getName();
|
|
|
+ if (PositionBillConstant.NCKD_DISORG_KEY.equals(fieldName) || HRStringUtils.equals(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.CHANGE_TAG), fieldName)) {
|
|
|
+ List<Long> hasPermOrgList = authorizedOrgResult.getHasPermOrgs();
|
|
|
+ beforeF7SelectEvent.getCustomQFilters().add(new QFilter(String.join(".", PositionBillConstant.ADMINORG, PositionBillConstant.BOID_KEY), "in", hasPermOrgList));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }// 1018
|
|
|
+
|
|
|
+ private void replaceFormIdByFieldKey(BeforeF7SelectEvent beforeF7SelectEvent) {
|
|
|
+ String fieldKey = beforeF7SelectEvent.getProperty().getName();
|
|
|
+ if (PositionBillConstant.NCKD_DISORG_KEY.equals(fieldKey) || HRStringUtils.equals(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.CHANGE_TAG), fieldKey)) {
|
|
|
+ ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
|
|
|
+ showParameter.setFormId(PositionBillConstant.NCKD_HBPM_POSORGTREELISTF_ENTITY);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String getSuffixByFieldKey(String fieldKey) {
|
|
|
+ return fieldKey.substring(fieldKey.lastIndexOf("_") + 1);
|
|
|
+ }
|
|
|
}
|