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

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)) {
11 months ago
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());
11 months ago
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());
2 years ago
if (CollectionUtils.isEmpty(quickSearchDetailList)) {
11 months ago
condition.setCom(SystemEnv.getHtmlLabelName(547591,user.getLanguage()));
} else {
2 years ago
List<ConditionOption> collect = quickSearchDetailList.stream().map(item -> ConditionOption.builder().key(item.getId().toString()).showname(item.getCustomName()).build()).collect(Collectors.toList());
11 months ago
collect.add(0,ConditionOption.builder().key("-1").showname(SystemEnv.getHtmlLabelName(547191,user.getLanguage())).build());
2 years ago
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);
}
}
}