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 getQuickSearchCondition(Map params) { Map 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 rangeConditions = new ArrayList<>(); List 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 selectOptions = getSelectOptions(quickSearchCondition); if (CollectionUtils.isEmpty(selectOptions)) { condition.setCom(SystemEnv.getHtmlLabelName(547591,user.getLanguage())); } else { // 字段本身值、判断有无下拉框选项 List 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 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 selectLinkageDataMap = new HashMap<>(1); Map 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 quickSearchDetailList = getQuickSearchMapper().getQuickSearchDetailByCid(quickSearchCondition.getId().toString()); if (CollectionUtils.isEmpty(quickSearchDetailList)) { condition.setCom(SystemEnv.getHtmlLabelName(547591,user.getLanguage())); } else { List 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 getQuickSearchInfo(Map params) { Map 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 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 allFieldInfo = getQuickSearchMapper().getAllFieldInfo(); //List 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 saveQuickSearchInfo(Map params) { Map 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 quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue()); List 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 getQuickSearchDetailInfo(Map params) { Map apiDatas = new HashMap<>(16); String cid = weaver.formmode.exttools.impexp.common.StringUtils.null2String(params.get("cid")); //开关查询 List 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 saveQuickSearchDetailInfo(Map params) { Map apiDatas = new HashMap<>(16); String cid = Util.null2String(params.get("cid")); String data = Util.null2String(params.get("data")); JSONArray datas = JSONArray.parseArray(data); List 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 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); } } }