You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
weaver-hrm-organization/src/com/engine/organization/service/impl/QuickSearchServiceImpl.java

473 lines
24 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.engine.organization.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.api.browser.bean.SearchConditionItem;
import com.api.browser.bean.SearchConditionOption;
import com.api.hrm.bean.HrmFieldBean;
import com.api.hrm.util.HrmFieldSearchConditionComInfo;
import com.cloudstore.dev.api.util.TextUtil;
import com.engine.core.impl.Service;
import com.engine.organization.entity.jclimport.po.CusFormFieldPO;
import com.engine.organization.entity.search.QuickSearchCondition;
import com.engine.organization.entity.search.QuickSearchDetail;
import com.engine.organization.entity.search.QuickSearchField;
import com.engine.organization.entity.search.QuickSearchSetting;
import com.engine.organization.entity.search.condition.ConditionOption;
import com.engine.organization.entity.search.condition.RangeCondition;
import com.engine.organization.enums.LogModuleNameEnum;
import com.engine.organization.mapper.condition.QuickSearchMapper;
import com.engine.organization.service.QuickSearchService;
import com.engine.organization.util.db.MapperProxyFactory;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.json.JSONException;
import weaver.formmode.exttools.impexp.common.DateUtils;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.definedfield.HrmFieldManager;
import weaver.systeminfo.SystemEnv;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author:dxfeng
* @createTime: 2023/08/08
* @version: 1.0
*/
public class QuickSearchServiceImpl extends Service implements QuickSearchService {
private QuickSearchMapper getQuickSearchMapper() {
return MapperProxyFactory.getProxy(QuickSearchMapper.class);
}
@Override
public Map<String, Object> getQuickSearchCondition(Map<String, Object> params) {
Map<String, Object> apiDatas = new HashMap<>(16);
QuickSearchSetting quickSearchSetting = getQuickSearchMapper().getQuickSearchSetting(user.getUID());
if (null != quickSearchSetting) {
apiDatas.put("enable", "1".equals(Util.null2String(quickSearchSetting.getIsQuickSearch())));
} else {
apiDatas.put("enable", false);
}
List<Object> rangeConditions = new ArrayList<>();
List<QuickSearchCondition> quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue());
for (QuickSearchCondition quickSearchCondition : quickSearchConditionList) {
RangeCondition condition = new RangeCondition();
condition.setLabel(quickSearchCondition.getCustomName());
condition.setDomkey(Collections.singletonList(quickSearchCondition.getFieldId()));
// 根据条件字段类型,组装展示样式
switch (quickSearchCondition.getType()) {
case 5:
List<SearchConditionOption> selectOptions = getSelectOptions(quickSearchCondition);
if (CollectionUtils.isEmpty(selectOptions)) {
condition.setCom(SystemEnv.getHtmlLabelName(547591,user.getLanguage()));
} else {
// 字段本身值、判断有无下拉框选项
List<ConditionOption> options = selectOptions.stream().map(item -> ConditionOption.builder().key(item.getKey()).showname(item.getShowname()).build()).collect(Collectors.toList());
options.add(0,ConditionOption.builder().key("-1").showname(SystemEnv.getHtmlLabelName(547191,user.getLanguage())).build());
condition.setOptions(options);
}
rangeConditions.add(condition);
break;
case 3:
// 日期类型数据
List<ConditionOption> options = new ArrayList<>();
options.add(ConditionOption.builder().key("0").showname(SystemEnv.getHtmlLabelName(332, user.getLanguage())).build());
options.add(ConditionOption.builder().key("1").showname(SystemEnv.getHtmlLabelName(15537, user.getLanguage())).build());
options.add(ConditionOption.builder().key("2").showname(SystemEnv.getHtmlLabelName(15539, user.getLanguage())).build());
options.add(ConditionOption.builder().key("3").showname(SystemEnv.getHtmlLabelName(15541, user.getLanguage())).build());
options.add(ConditionOption.builder().key("7").showname(SystemEnv.getHtmlLabelName(27347, user.getLanguage())).build());
options.add(ConditionOption.builder().key("4").showname(SystemEnv.getHtmlLabelName(21904, user.getLanguage())).build());
options.add(ConditionOption.builder().key("5").showname(SystemEnv.getHtmlLabelName(15384, user.getLanguage())).build());
options.add(ConditionOption.builder().key("8").showname(SystemEnv.getHtmlLabelName(81716, user.getLanguage())).build());
options.add(ConditionOption.builder().key("6").showname(SystemEnv.getHtmlLabelName(32530, user.getLanguage())).build());
condition.setOptions(options);
Map<String, Object> selectLinkageDataMap = new HashMap<>(1);
Map<String, Object> map = new HashMap<>(2);
map.put("conditionType", "RANGEPICKER");
map.put("domkey", Arrays.asList(quickSearchCondition.getFieldId() + "_start", quickSearchCondition.getFieldId() + "_end"));
selectLinkageDataMap.put("6", map);
condition.setSelectLinkageDatas(selectLinkageDataMap);
rangeConditions.add(condition);
break;
case 1:
// 整数-浮点数
List<QuickSearchDetail> quickSearchDetailList = getQuickSearchMapper().getQuickSearchDetailByCid(quickSearchCondition.getId().toString());
if (CollectionUtils.isEmpty(quickSearchDetailList)) {
condition.setCom(SystemEnv.getHtmlLabelName(547591,user.getLanguage()));
} else {
List<ConditionOption> collect = quickSearchDetailList.stream().map(item -> ConditionOption.builder().key(item.getId().toString()).showname(item.getCustomName()).build()).collect(Collectors.toList());
collect.add(0,ConditionOption.builder().key("-1").showname(SystemEnv.getHtmlLabelName(547191,user.getLanguage())).build());
condition.setOptions(collect);
}
rangeConditions.add(condition);
break;
case -1:
case -3:
case -4:
default:
rangeConditions.add(condition);
break;
}
}
apiDatas.put("rangeConditions", rangeConditions);
return apiDatas;
}
@Override
public Map<String, Object> getQuickSearchInfo(Map<String, Object> params) {
Map<String, Object> apiDatas = new HashMap<>(16);
//开关查询
QuickSearchSetting quickSearchSetting = getQuickSearchMapper().getQuickSearchSetting(user.getUID());
JSONObject json = new JSONObject();
if (null != quickSearchSetting) {
json.put("isquicksearch", Util.null2String(quickSearchSetting.getIsQuickSearch()));
json.put("isshowtype", null != quickSearchSetting.getIsShowType() ? quickSearchSetting.getIsShowType() : "1");
json.put("ishidename", null != quickSearchSetting.getIsHideName() ? quickSearchSetting.getIsHideName() : "0");
json.put("id", Util.null2String(quickSearchSetting.getId()));
} else {
json.put("isquicksearch", "0");
json.put("isshowtype", "0");
json.put("ishidename", "0");
json.put("id", "0");
}
apiDatas.put("setting", json);
//条件字段查询
List<QuickSearchCondition> quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue());
JSONArray datas = new JSONArray();
if (CollectionUtils.isNotEmpty(quickSearchConditionList)) {
for (QuickSearchCondition quickSearchCondition : quickSearchConditionList) {
JSONObject obj = new JSONObject();
String id = Util.null2String(quickSearchCondition.getId());
String fieldId = Util.null2String(quickSearchCondition.getFieldId());
String customName = Util.null2String(quickSearchCondition.getCustomName());
String type = Util.null2String(quickSearchCondition.getType());
String orderId = Util.null2String(quickSearchCondition.getOrderId());
String showModel = null != quickSearchCondition.getShowModel() ? quickSearchCondition.getShowModel().toString() : "0";
obj.put("cid", id);
obj.put("key", id);
obj.put("fieldid", fieldId);
obj.put("orifieldid", fieldId);
obj.put("customname", TextUtil.toBase64ForMultilang(customName));
obj.put("type", type);
obj.put("orderid", orderId);
obj.put("groupid", "");
obj.put("showmodel", showModel);
datas.add(obj);
}
}
apiDatas.put("datas", datas);
//字段下拉框查询
List<CusFormFieldPO> allFieldInfo = getQuickSearchMapper().getAllFieldInfo();
//List<QuickSearchOption> quickSearchOptionList = getQuickSearchMapper().getQuickSearchOptionList();
JSONArray options = new JSONArray();
if (CollectionUtils.isNotEmpty(allFieldInfo)) {
for (CusFormFieldPO formFieldPO : allFieldInfo) {
JSONObject obj = new JSONObject();
String fieldHtmlType = Util.null2String(formFieldPO.getFieldHtmlType());
String fieldId = Util.null2String(formFieldPO.getScopeId() + "_" + formFieldPO.getTableName() + "_" + formFieldPO.getFieldName());
// String fieldName = Util.null2String(quickSearchOption.getFieldName());
String type = Util.null2String(formFieldPO.getType());
int fieldLabel = Util.getIntValue(formFieldPO.getFieldLabel(), 0);
String labelName = SystemEnv.getHtmlLabelName(Util.getIntValue(formFieldPO.getFieldLabel()), user.getLanguage());
String fieldType = "2";
boolean isShowModel = false;
if ("1".equals(fieldHtmlType)) {
if ("1".equals(type)) {
//单行文本
continue;
} else {
//整数或浮点数
fieldType = "1";
isShowModel = true;
}
} else if ("5".equals(fieldHtmlType) && "3".equals(type)) {
//选择框单选框
fieldType = "5";
isShowModel = true;
} else if ("5".equals(fieldHtmlType) && "2".equals(type)) {
//选择框多选框
fieldType = "5";
isShowModel = true;
} else if ("5".equals(fieldHtmlType) && "0".equals(type)) {
//选择框
fieldType = "5";
isShowModel = true;
} else if ("4".equals(fieldHtmlType) && "1".equals(type)) {
//check框
fieldType = "5";
isShowModel = true;
} else if ("3".equals(fieldHtmlType)) {
switch (type) {
case "2":
//日期
fieldType = "3";
break;
case "1":
case "3":
case "5":
default:
continue;
}
} else {
continue;
}
if ("".equals(labelName)) {
labelName = SystemEnv.getHtmlLabelName(fieldLabel, user.getLanguage());
}
obj.put("key", fieldId);
obj.put("fieldid", fieldId);
obj.put("showname", labelName);
obj.put("isdetailtable", "0");
obj.put("type", fieldType);
obj.put("isShowModel", isShowModel);
options.add(obj);
}
}
apiDatas.put("options", options);
apiDatas.put("groupidOptions", new JSONArray());
return apiDatas;
}
@Override
public Map<String, Object> saveQuickSearchInfo(Map<String, Object> params) {
Map<String, Object> apiDatas = new HashMap<>(16);
String isQuickSearch = Util.null2String(params.get("isquicksearch"));
String isShowType = Util.null2String(params.get("isshowtype"));
isShowType = StringUtils.isBlank(isShowType) ? "0" : isShowType;
String isHideName = Util.null2String(params.get("ishidename"));
isHideName = StringUtils.isBlank(isHideName) ? "0" : isHideName;
String id = Util.null2String(params.get("id"));
String data = Util.null2String(params.get("data"));
JSONArray datas = JSONArray.parseArray(data);
//配置信息更新
if ("0".equals(id) || "".equals(id)) {
QuickSearchSetting quickSearchSetting = QuickSearchSetting.builder()
.belongTo(user.getUID())
.isQuickSearch(Integer.parseInt(isQuickSearch))
.isShowType(Integer.parseInt(isShowType))
.isHideName(Integer.parseInt(isHideName))
.updateTor(user.getUID())
.updateDate(DateUtils.getCurrentDate())
.updateTime(DateUtils.getCurrentTime())
.build();
//第一次修改配置
getQuickSearchMapper().insertQuickSearchSetting(quickSearchSetting);
} else {
QuickSearchSetting quickSearchSetting = QuickSearchSetting.builder()
.id(Integer.parseInt(id))
.isQuickSearch(Integer.parseInt(isQuickSearch))
.isShowType(Integer.parseInt(isShowType))
.isHideName(Integer.parseInt(isHideName))
.build();
getQuickSearchMapper().updateQuickSearchSetting(quickSearchSetting);
}
List<QuickSearchCondition> quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue());
List<Integer> list = quickSearchConditionList.stream().map(QuickSearchCondition::getId).collect(Collectors.toList());
for (int i = 0; i < datas.size(); i++) {
JSONObject obj = (JSONObject) datas.get(i);
String fieldId = obj.getString("fieldid");
String oriFieldId = obj.getString("orifieldid");
Integer cid = Util.getIntValue(obj.getString("cid"));
String customName = obj.getString("customname");
String type = obj.getString("type");
String orderId = obj.getString("orderid");
String showModel = obj.getString("showmodel");
if (cid > 0) {
list.remove(cid);
QuickSearchCondition quickSearchCondition = QuickSearchCondition.builder()
.belongTo(user.getUID())
.fieldId(fieldId)
.customName(customName)
.type(StringUtils.isBlank(type) ? null : Integer.parseInt(type))
.orderId(StringUtils.isBlank(orderId) ? null : Integer.parseInt(orderId))
.showModel(StringUtils.isBlank(showModel) ? null : Integer.parseInt(showModel))
.id(cid)
.modelId(LogModuleNameEnum.RESOURCE.getValue())
.build();
getQuickSearchMapper().updateQuickSearchCondition(quickSearchCondition);
if (!fieldId.equals(oriFieldId)) {
//改变了字段,将原先字段的明细删除
getQuickSearchMapper().deleteQuickSearchDetailByCid(cid);
}
} else {
QuickSearchCondition quickSearchCondition = QuickSearchCondition.builder()
.belongTo(user.getUID())
.fieldId(fieldId)
.customName(customName)
.type(StringUtils.isBlank(type) ? null : Integer.parseInt(type))
.orderId(StringUtils.isBlank(orderId) ? null : Integer.parseInt(orderId))
.showModel(StringUtils.isBlank(showModel) ? null : Integer.parseInt(showModel))
.modelId(LogModuleNameEnum.RESOURCE.getValue())
.build();
getQuickSearchMapper().insertQuickSearchCondition(quickSearchCondition);
}
}
if (CollectionUtils.isNotEmpty(list)) {
getQuickSearchMapper().deleteQuickSearchConditionByIds(list);
getQuickSearchMapper().deleteQuickSearchDetailByCids(list);
}
return apiDatas;
}
@Override
public Map<String, Object> getQuickSearchDetailInfo(Map<String, Object> params) {
Map<String, Object> apiDatas = new HashMap<>(16);
String cid = weaver.formmode.exttools.impexp.common.StringUtils.null2String(params.get("cid"));
//开关查询
List<QuickSearchDetail> quickSearchDetailList = getQuickSearchMapper().getQuickSearchDetailByCid(cid);
JSONArray datas = new JSONArray();
for (QuickSearchDetail quickSearchDetail : quickSearchDetailList) {
JSONObject obj = new JSONObject();
String id = Util.null2String(quickSearchDetail.getId());
String customName = Util.null2String(quickSearchDetail.getCustomName());
String minNum = Util.null2String(quickSearchDetail.getMinNum());
minNum = minNum.startsWith("0E") ? "0" : minNum;
String maxNum = Util.null2String(quickSearchDetail.getMaxNum());
maxNum = maxNum.startsWith("0E") ? "0" : maxNum;
String type = Util.null2String(quickSearchDetail.getType());
String orderId = Util.null2String(quickSearchDetail.getOrderId());
String fieldId = Util.null2String(quickSearchDetail.getFieldId());
String belongTo = Util.null2String(quickSearchDetail.getBelongTo());
obj.put("id", id);
obj.put("cid", cid);
obj.put("key", id);
obj.put("customname", customName);
obj.put("minnum", minNum);
obj.put("maxnum", maxNum);
obj.put("type", type);
obj.put("fieldid", fieldId);
obj.put("belongto", belongTo);
obj.put("orderid", orderId);
datas.add(obj);
}
QuickSearchCondition quickSearchConditionById = getQuickSearchMapper().getQuickSearchConditionById(cid);
String[] split = quickSearchConditionById.getFieldId().split("_");
int precision = 0;
if(split.length==3) {
QuickSearchField quickSearchField = getQuickSearchMapper().getQuickSearchFieldListByConditionId(split[2], split[0]);
String fieldHtmlType = quickSearchField.getFieldHtmlType();
String type = quickSearchField.getType();
String fieldDbType = quickSearchField.getFieldDbType();
if ("1".equals(fieldHtmlType) && !"1".equals(type)) {
int digitsIndex = fieldDbType.indexOf(",");
precision = Util.getIntValue(fieldDbType.substring(digitsIndex + 1, fieldDbType.length() - 1), 0);
}
}
apiDatas.put("datas", datas);
apiDatas.put("precision", precision);
return apiDatas;
}
@Override
public Map<String, Object> saveQuickSearchDetailInfo(Map<String, Object> params) {
Map<String, Object> apiDatas = new HashMap<>(16);
String cid = Util.null2String(params.get("cid"));
String data = Util.null2String(params.get("data"));
JSONArray datas = JSONArray.parseArray(data);
List<Integer> list = getQuickSearchMapper().getQuickSearchDetailByCid(cid).stream().map(QuickSearchDetail::getId).collect(Collectors.toList());
try {
for (int i = 0; i < datas.size(); i++) {
JSONObject obj = (JSONObject) datas.get(i);
String customName = obj.getString("customname");
String fieldId = obj.getString("fieldid");
String minNum = obj.getString("minnum");
minNum = "".equals(minNum) ? null : minNum;
String maxNum = obj.getString("maxnum");
maxNum = "".equals(maxNum) ? null : maxNum;
String type = obj.getString("type");
String orderId = obj.getString("orderid");
Integer id = Util.getIntValue(obj.getString("id"));
QuickSearchDetail quickSearchDetail = QuickSearchDetail.builder()
.cId(StringUtils.isBlank(cid) ? null : Integer.parseInt(cid))
.customName(customName)
.minNum(StringUtils.isBlank(minNum) ? null : Integer.parseInt(minNum))
.maxNum(StringUtils.isBlank(maxNum) ? null : Integer.parseInt(maxNum))
.type(StringUtils.isBlank(type) ? null : Integer.parseInt(type))
.orderId(StringUtils.isBlank(orderId) ? null : Integer.parseInt(orderId))
.fieldId(fieldId)
.belongTo(user.getUID())
.build();
if (id > 0) {
list.remove(id);
quickSearchDetail.setId(id);
getQuickSearchMapper().updateQuickSearchDetail(quickSearchDetail);
} else {
getQuickSearchMapper().insertQuickSearchDetail(quickSearchDetail);
}
}
if (CollectionUtils.isNotEmpty(list)) {
getQuickSearchMapper().deleteQuickSearchDetailByIds(list);
}
} catch (Exception e) {
new BaseBean().writeLog(e);
e.printStackTrace();
}
return apiDatas;
}
/**
* 获取人员自定义选择字段,所有选择选项
*
* @param quickSearchCondition 快速搜索条件
* @return 选择字段,所有选项列表
*/
private List<SearchConditionOption> getSelectOptions(QuickSearchCondition quickSearchCondition) {
try {
String fieldId = quickSearchCondition.getFieldId();
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo();
int scopeid = Integer.parseInt(fieldId.split("_")[0]);
HrmFieldManager hfm = new HrmFieldManager("HrmCustomFieldByInfoType", scopeid);
String fieldName = fieldId.substring(fieldId.lastIndexOf("_") + 1);
org.json.JSONObject hrmFieldConf = hfm.getHrmFieldConf(fieldName);
if (null == hrmFieldConf) {
return new ArrayList<>();
}
boolean baseField = hfm.isBaseField(fieldName);
HrmFieldBean hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldid(Util.null2String(hrmFieldConf.getString("id")));
hrmFieldBean.setFieldname(scopeid + "_" + (baseField ? "hrm" : "cus") + "_" + fieldName);
hrmFieldBean.setFieldlabel(hrmFieldConf.getString("fieldlabel"));
hrmFieldBean.setFieldhtmltype(hrmFieldConf.getString("fieldhtmltype"));
hrmFieldBean.setType(hrmFieldConf.getString("type"));
hrmFieldBean.setDmlurl(hrmFieldConf.getString("dmlurl"));
hrmFieldBean.setIssystem(baseField ? "1" : "0");
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setIsQuickSearch(false);
hrmFieldBean.setIsScope(false);
if ("jobactivity".equals(fieldName)) {
// 职务282
hrmFieldBean.setType("282");
}
SearchConditionItem searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
return searchConditionItem.getOptions();
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
}