diff --git a/src/com/api/jygf/web/MobilePermissionsAction.java b/src/com/api/jygf/web/MobilePermissionsAction.java deleted file mode 100644 index 040835b..0000000 --- a/src/com/api/jygf/web/MobilePermissionsAction.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.api.jygf.web; - -import javax.ws.rs.Path; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -@Path("/mobile/permission") -public class MobilePermissionsAction extends com.engine.jygf.web.MobilePermissionsAction { -} diff --git a/src/com/api/thinktrans/web/ReportCollectController.java b/src/com/api/thinktrans/web/ReportCollectController.java new file mode 100644 index 0000000..e9307b8 --- /dev/null +++ b/src/com/api/thinktrans/web/ReportCollectController.java @@ -0,0 +1,13 @@ +package com.api.thinktrans.web; + +import javax.ws.rs.Path; + +/** + * @Author liang.cheng + * @Date 2023/11/16 10:41 AM + * @Description: 报表汇总 + * @Version 1.0 + */ +@Path("/thinktrans/report") +public class ReportCollectController extends com.engine.thinktrans.web.ReportCollectController { +} diff --git a/src/com/engine/jygf/cmd/MobilePermissionsCmd.java b/src/com/engine/jygf/cmd/MobilePermissionsCmd.java deleted file mode 100644 index b8c5477..0000000 --- a/src/com/engine/jygf/cmd/MobilePermissionsCmd.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.engine.jygf.cmd; - -import com.engine.common.biz.AbstractCommonCommand; -import com.engine.common.entity.BizLogContext; -import com.engine.core.interceptor.CommandContext; -import org.apache.commons.lang3.StringUtils; -import weaver.conn.RecordSet; -import weaver.hrm.User; -import weaver.wechat.util.Utils; - -import java.util.*; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public class MobilePermissionsCmd extends AbstractCommonCommand> { - - private static final String FIELDID = "field100043"; //移动电话自定义字段field100026 - - private static final String SCOPE = "HrmCustomFieldByInfoType"; - - private static final String SCOPEID = "-1"; - - public MobilePermissionsCmd(Map params, User user) { - this.user = user; - this.params = params; - } - - @Override - public BizLogContext getLogContext() { - return null; - } - - - @Override - public Map execute(CommandContext commandContext) { - Map data = new HashMap<>(); - String uid = Utils.null2String(user.getUID()); - RecordSet rs = new RecordSet(); - HashSet ids = new HashSet<>(); - ids.add(uid); - rs.executeQuery("select ckr,bckr from uf_yddhqx_dt1"); - while (rs.next()) { - String ckr = Utils.null2String(rs.getString("ckr")); - String bckr = Utils.null2String(rs.getString("bckr")); - if (Arrays.asList(ckr.split(",")).contains(uid)) { - ids.addAll(Arrays.asList(bckr.split(","))); - } - } - - Map mobileInfo = new HashMap<>(); - String value = StringUtils.join(ids,","); - rs.executeQuery("select id,"+FIELDID+" from cus_fielddata where scope = ? and scopeid = ?" + - " and id in ("+value+")",SCOPE,SCOPEID); - while (rs.next()){ - mobileInfo.put(Utils.null2String(rs.getString("id")),rs.getString(FIELDID)); - } - - data.put("ids",ids); - data.put("mobileInfo",mobileInfo); - return data; - } - - -} diff --git a/src/com/engine/jygf/service/MobilePermissionsService.java b/src/com/engine/jygf/service/MobilePermissionsService.java deleted file mode 100644 index e41d2a9..0000000 --- a/src/com/engine/jygf/service/MobilePermissionsService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.engine.jygf.service; - -import weaver.hrm.User; - -import java.util.Map; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public interface MobilePermissionsService { - - Map getPermissionInfo(Map params, User user); -} diff --git a/src/com/engine/jygf/service/impl/MobilePermissionsServiceImpl.java b/src/com/engine/jygf/service/impl/MobilePermissionsServiceImpl.java deleted file mode 100644 index 579ba36..0000000 --- a/src/com/engine/jygf/service/impl/MobilePermissionsServiceImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.engine.jygf.service.impl; - -import com.engine.core.impl.Service; -import com.engine.jygf.cmd.MobilePermissionsCmd; -import com.engine.jygf.service.MobilePermissionsService; -import weaver.hrm.User; - -import java.util.Map; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public class MobilePermissionsServiceImpl extends Service implements MobilePermissionsService { - - - - @Override - public Map getPermissionInfo(Map params, User user) { - return commandExecutor.execute(new MobilePermissionsCmd(params,user)); - } -} diff --git a/src/com/engine/jygf/web/MobilePermissionsAction.java b/src/com/engine/jygf/web/MobilePermissionsAction.java deleted file mode 100644 index f3cf66d..0000000 --- a/src/com/engine/jygf/web/MobilePermissionsAction.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.engine.jygf.web; - -import com.alibaba.fastjson.JSONObject; -import com.engine.common.util.ParamUtil; -import com.engine.common.util.ServiceUtil; -import com.engine.jygf.service.MobilePermissionsService; -import com.engine.jygf.service.impl.MobilePermissionsServiceImpl; -import weaver.hrm.HrmUserVarify; -import weaver.hrm.User; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import java.util.HashMap; -import java.util.Map; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public class MobilePermissionsAction { - - public MobilePermissionsService getMobilePermissionsService(User user) { - return ServiceUtil.getService(MobilePermissionsServiceImpl.class,user); - } - - /** - * 晶优光伏 移动电话通过建模控制权限 通讯录显示 - * @param request - * @param response - * @return - */ - @GET - @Path("/controller") - @Produces(MediaType.APPLICATION_JSON) - public String getPermissionInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { - Map apidatas = new HashMap<>(); - try { - User user = HrmUserVarify.getUser(request, response); - //实例化Service 并调用业务类处理 - apidatas = getMobilePermissionsService(user).getPermissionInfo(ParamUtil.request2Map(request), user); - } catch (Exception e) { - //异常处理 - apidatas.put("api_status", false); - } - return JSONObject.toJSONString(apidatas); - } - - - -} diff --git a/src/com/engine/thinktrans/entity/ReportChildrenData.java b/src/com/engine/thinktrans/entity/ReportChildrenData.java new file mode 100644 index 0000000..e19def9 --- /dev/null +++ b/src/com/engine/thinktrans/entity/ReportChildrenData.java @@ -0,0 +1,24 @@ +package com.engine.thinktrans.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Author liang.cheng + * @Date 2023/11/16 2:24 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ReportChildrenData { + + private List data; +} diff --git a/src/com/engine/thinktrans/entity/ReportColumns.java b/src/com/engine/thinktrans/entity/ReportColumns.java new file mode 100644 index 0000000..39ae4bc --- /dev/null +++ b/src/com/engine/thinktrans/entity/ReportColumns.java @@ -0,0 +1,25 @@ +package com.engine.thinktrans.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/11/16 1:34 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ReportColumns { + + private String title; + + private String key; + +} diff --git a/src/com/engine/thinktrans/entity/param/TendencyReportParam.java b/src/com/engine/thinktrans/entity/param/TendencyReportParam.java new file mode 100644 index 0000000..43653d1 --- /dev/null +++ b/src/com/engine/thinktrans/entity/param/TendencyReportParam.java @@ -0,0 +1,26 @@ +package com.engine.thinktrans.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/11/16 2:43 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TendencyReportParam { + + private String deptIds; + + private Integer year; + + private String useKind; +} diff --git a/src/com/engine/thinktrans/entity/vo/TendencyReportVO.java b/src/com/engine/thinktrans/entity/vo/TendencyReportVO.java new file mode 100644 index 0000000..155c8aa --- /dev/null +++ b/src/com/engine/thinktrans/entity/vo/TendencyReportVO.java @@ -0,0 +1,28 @@ +package com.engine.thinktrans.entity.vo; + +import com.engine.thinktrans.entity.ReportChildrenData; +import com.engine.thinktrans.entity.ReportColumns; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Author liang.cheng + * @Date 2023/11/16 11:44 AM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TendencyReportVO { + + private List columns; + + private List datas; +} diff --git a/src/com/engine/thinktrans/exception/CustomizeRunTimeException.java b/src/com/engine/thinktrans/exception/CustomizeRunTimeException.java new file mode 100644 index 0000000..98ae103 --- /dev/null +++ b/src/com/engine/thinktrans/exception/CustomizeRunTimeException.java @@ -0,0 +1,22 @@ +package com.engine.thinktrans.exception; + +/** + * @Author liang.cheng + * @Date 2023/11/16 2:37 PM + * @Description: TODO + * @Version 1.0 + */ +public class CustomizeRunTimeException extends RuntimeException{ + + public CustomizeRunTimeException(String message) { + super(message); + } + + public CustomizeRunTimeException(Throwable cause) { + super(cause); + } + + public CustomizeRunTimeException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/engine/thinktrans/service/ReportCollectService.java b/src/com/engine/thinktrans/service/ReportCollectService.java new file mode 100644 index 0000000..cad6197 --- /dev/null +++ b/src/com/engine/thinktrans/service/ReportCollectService.java @@ -0,0 +1,22 @@ +package com.engine.thinktrans.service; + +import com.engine.thinktrans.entity.param.TendencyReportParam; +import com.engine.thinktrans.entity.vo.TendencyReportVO; + +/** + * @Author liang.cheng + * @Date 2023/11/16 10:43 AM + * @Description: TODO + * @Version 1.0 + */ +public interface ReportCollectService { + + /** + * @Description: 年度人力趋势报表 + * @Author: liang.cheng + * @Date: 2023/11/16 2:39 PM + * @param: [] + * @return: com.engine.thinktrans.entity.vo.TendencyReportVO + */ + TendencyReportVO getPersonTendency(TendencyReportParam tendencyReportParam); +} diff --git a/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java b/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java new file mode 100644 index 0000000..6cf34b0 --- /dev/null +++ b/src/com/engine/thinktrans/service/impl/ReportCollectServiceImpl.java @@ -0,0 +1,155 @@ +package com.engine.thinktrans.service.impl; + +import com.engine.core.impl.Service; +import com.engine.thinktrans.entity.ReportChildrenData; +import com.engine.thinktrans.entity.ReportColumns; +import com.engine.thinktrans.entity.param.TendencyReportParam; +import com.engine.thinktrans.entity.vo.TendencyReportVO; +import com.engine.thinktrans.service.ReportCollectService; +import com.engine.thinktrans.util.CommonDateUtil; +import com.engine.thinktrans.util.OperateUtil; +import com.weaver.general.Util; +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.hrm.company.DepartmentComInfo; + +import java.time.Year; +import java.time.YearMonth; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @Author liang.cheng + * @Date 2023/11/16 10:43 AM + * @Description: TODO + * @Version 1.0 + */ +public class ReportCollectServiceImpl extends Service implements ReportCollectService { + + @Override + public TendencyReportVO getPersonTendency(TendencyReportParam tendencyReportParam) { + + List columns = getReportColumns(); + List deptList = new ArrayList<>(); + RecordSet rs = new RecordSet(); + rs.executeQuery("select a.deptid from hrmdepartmentdefined a left join hrmdepartment b on a.deptid =b.id where a.bmcj in (0,1)"); + while (rs.next()) { + deptList.add(Util.getIntValue(rs.getString("deptid"))); + } + String deptIds = tendencyReportParam.getDeptIds(); + if (StringUtils.isNotEmpty(deptIds)) { + List list = Arrays.stream(deptIds.split(",")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + deptList = list.stream() + .filter(deptList::contains) + .collect(Collectors.toList()); + } + + List datas = new ArrayList<>(); + List> countLists = new ArrayList<>(); + + deptList.forEach(id -> { + List countList = new ArrayList<>(); + ReportChildrenData childrenData = getReportChildrenData(tendencyReportParam,id,countList); + datas.add(childrenData); + countLists.add(countList); + }); + + //求和 + List result = countLists.stream() + .reduce((a, b) -> { + List sum = new ArrayList<>(); + for (int i = 0; i < a.size(); i++) { + sum.add(a.get(i) + b.get(i)); + } + return sum; + }) + .orElse(new ArrayList<>()); + + List stringList = result.stream() + .map(String::valueOf) + .collect(Collectors.toList()); + + List sums = new ArrayList<>(); + sums.add("总数"); + sums.addAll(stringList); + + datas.add(ReportChildrenData.builder().data(sums).build()); + return TendencyReportVO.builder() + .columns(columns) + .datas(datas) + .build(); + } + + /** + * + * @param param + * @return + */ + @SneakyThrows + private ReportChildrenData getReportChildrenData(TendencyReportParam param, Integer id,List countList) { + RecordSet rs = new RecordSet(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + List data = new ArrayList<>(); + data.add(departmentComInfo.getDepartmentName(String.valueOf(id))); + ArrayList allSubDepartment = new ArrayList<>(); + departmentComInfo.getAllChildDeptByDepId(allSubDepartment, String.valueOf(id)); + allSubDepartment.add(String.valueOf(id)); + String allId = StringUtils.join(allSubDepartment, ","); + + if (param.getYear() == null) { + param.setYear(Year.now().getValue()); + } + + String startDate = CommonDateUtil.getYearDayFirst(param.getYear()); + List yearMonths = CommonDateUtil.getYearMonths(param.getYear()); + + StringBuilder st = new StringBuilder(); + st.append("select count(1) as sum from hrmresource where status < 4 and companystartdate >= ? and companystartdate <= ? and departmentid in"); + st.append(" (").append(allId).append(")"); + if (StringUtils.isNotEmpty(param.getUseKind())) { + st.append(" and usekind = ").append(param.getUseKind()); + } + yearMonths.forEach(yearMonth -> { + String endMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateEndOfMonth(yearMonth)); + rs.executeQuery(st.toString(),startDate,endMonth); + if (rs.next()) { + Integer sum = Util.getIntValue(rs.getString("sum"),0); + data.add(String.valueOf(sum)); + countList.add(sum); + } + }); + + return ReportChildrenData.builder().data(data).build(); + } + + + /** + * 月份 + * @return + */ + private List getReportColumns() { + List columns = new ArrayList<>(); + columns.add(ReportColumns.builder().title("月份").key("0").build()); + columns.add(ReportColumns.builder().title("1月").key("1").build()); + columns.add(ReportColumns.builder().title("2月").key("2").build()); + columns.add(ReportColumns.builder().title("3月").key("3").build()); + columns.add(ReportColumns.builder().title("4月").key("4").build()); + columns.add(ReportColumns.builder().title("5月").key("5").build()); + columns.add(ReportColumns.builder().title("6月").key("6").build()); + columns.add(ReportColumns.builder().title("7月").key("7").build()); + columns.add(ReportColumns.builder().title("8月").key("8").build()); + columns.add(ReportColumns.builder().title("9月").key("9").build()); + columns.add(ReportColumns.builder().title("10月").key("10").build()); + columns.add(ReportColumns.builder().title("11月").key("11").build()); + columns.add(ReportColumns.builder().title("12月").key("12").build()); + return columns; + } + + +} diff --git a/src/com/engine/thinktrans/util/CommonDateUtil.java b/src/com/engine/thinktrans/util/CommonDateUtil.java new file mode 100644 index 0000000..e8b1476 --- /dev/null +++ b/src/com/engine/thinktrans/util/CommonDateUtil.java @@ -0,0 +1,107 @@ +package com.engine.thinktrans.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.*; + +/** + * @Author liang.cheng + * @Date 2023/9/27 4:44 PM + * @Description: + * @Version 1.0 + */ + +@Slf4j +public class CommonDateUtil { + + public static final String DATE_FORMATTER_PATTERN = "yyyy-MM-dd"; + + /** + * YearMonth转Date + * 注意dayOfMonth范围:1到31之间,最大值根据月份确定特殊情况,如2月闰年29,非闰年28 + * 如果要转换为当月最后一天,可以使用下面方法:toDateEndOfMonth(YearMonth) + * + * @param yearMonth + * @param dayOfMonth + * @return + */ + public static Date toDate(YearMonth yearMonth, int dayOfMonth) { + Objects.requireNonNull(yearMonth, "yearMonth"); + return localDateToDate(yearMonth.atDay(dayOfMonth)); + } + + + /** + * YearMonth转Date,转换为当月第一天 + * + * @param yearMonth + * @return + */ + public static Date toDateStartOfMonth(YearMonth yearMonth) { + return toDate(yearMonth, 1); + } + + /** + * YearMonth转Date,转换为当月最后一天 + * + * @param yearMonth + * @return + */ + public static Date toDateEndOfMonth(YearMonth yearMonth) { + Objects.requireNonNull(yearMonth, "yearMonth"); + return localDateToDate(yearMonth.atEndOfMonth()); + } + + public static Date localDateToDate(LocalDate localDate) { + if (null == localDate) { + return null; + } + ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault()); + return Date.from(zonedDateTime.toInstant()); + } + + public static String getFormatYear(Date localDate) { + if (localDate == null) { + return StringUtils.EMPTY; + } + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMATTER_PATTERN); + return simpleDateFormat.format(localDate); + } catch (Exception e) { + log.warn("格式化年份错误", e); + return StringUtils.EMPTY; + } + } + + public static List getYearMonths(LocalDate date) { + List yearMonths = new ArrayList<>(); + for (int month = 1; month <= 12; month++) { + LocalDate firstDayOfMonth = date.withMonth(month); + yearMonths.add(YearMonth.from(firstDayOfMonth)); + } + return yearMonths; + } + + public static List getYearMonths(Integer year) { + List yearMonths = new ArrayList<>(); + for (int month = 1; month <= 12; month++) { + YearMonth yearMonth = YearMonth.of(year, month); + yearMonths.add(yearMonth); + } + return yearMonths; + } + + public static String getYearDayFirst (Integer year) { + Calendar calendar = Calendar.getInstance(); + calendar.set(year, Calendar.JANUARY, 1); + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMATTER_PATTERN); + return sdf.format(calendar.getTime()); + } + +} diff --git a/src/com/engine/thinktrans/util/ExceptionUtil.java b/src/com/engine/thinktrans/util/ExceptionUtil.java new file mode 100644 index 0000000..b52bdc7 --- /dev/null +++ b/src/com/engine/thinktrans/util/ExceptionUtil.java @@ -0,0 +1,20 @@ +package com.engine.thinktrans.util; + +/** + * @Author liang.cheng + * @Date 2023/11/16 2:37 PM + * @Description: TODO + * @Version 1.0 + */ +public class ExceptionUtil { + public static String getRealMessage(Throwable e) { + while (e != null) { + Throwable cause = e.getCause(); + if (cause == null) { + return e.getMessage(); + } + e = cause; + } + return ""; + } +} \ No newline at end of file diff --git a/src/com/engine/thinktrans/util/OperateUtil.java b/src/com/engine/thinktrans/util/OperateUtil.java new file mode 100644 index 0000000..c0eb22f --- /dev/null +++ b/src/com/engine/thinktrans/util/OperateUtil.java @@ -0,0 +1,30 @@ +package com.engine.thinktrans.util; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @Author liang.cheng + * @Date 2023/11/16 5:58 PM + * @Description: TODO + * @Version 1.0 + */ +public class OperateUtil { + + public static List sumLists(List... lists) { + return Arrays.stream(lists) + .flatMap(List::stream) + .skip(1) + .map(OperateUtil::sumDigits) + .collect(Collectors.toList()); + } + + private static String sumDigits(String str) { + int sum = IntStream.range(0, str.length()) + .map(i -> str.charAt(i) - '0') + .sum(); + return String.valueOf(sum); + } +} diff --git a/src/com/engine/thinktrans/util/ResponseResult.java b/src/com/engine/thinktrans/util/ResponseResult.java new file mode 100644 index 0000000..344345d --- /dev/null +++ b/src/com/engine/thinktrans/util/ResponseResult.java @@ -0,0 +1,186 @@ +package com.engine.thinktrans.util; + + + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; + +import com.engine.core.exception.ECException; +import com.engine.thinktrans.exception.CustomizeRunTimeException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import weaver.general.BaseBean; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + + +@Slf4j +public class ResponseResult { + + private static final long serialVersionUID = 1L; + + private final User user; + + private final BaseBean baseBean = new BaseBean(); + + private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); + + public ResponseResult(User user) { + this.user = user; + } + + /** + * 统一返回方法(自定义返回格式) + */ + public String customRun(Function f, T t) { + try { + if (isLog) { + log.info("run api , param {}", t); + } + return getJsonString(f.apply(t)); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + Throwable cause = e.getCause(); + return Error(cause.getMessage()); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!"); + } + } + + /** + * 统一返回方法 + */ + public String run(Function f, T t) { + try { + if (isLog) { + log.info("run api , param {}", t); + } + return Ok(f.apply(t)); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + Throwable cause = e.getCause(); + return Error(cause.getMessage()); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!"); + } + } + + /** + * 统一返回方法(有参无返回) + */ + public String run(Consumer f, T t) { + try { + if (isLog) { + log.info("run api , param {}", t); + } + f.accept(t); + return Ok(); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + return Error(ExceptionUtil.getRealMessage(e)); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!", e); + } + } + + + /** + * 统一返回方法(无参有返回) + */ + public String run(Supplier f) { + try { + if (isLog) { + log.info("run api"); + } + return Ok(f.get()); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + Throwable cause = e.getCause(); + return Error(cause.getMessage()); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!", e); + } + } + + + private static String getJsonString(Object apidatas) { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(apidatas); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return ""; + } + + + /** + * 成功返回 + */ + private String Ok() { + Map apidatas = new HashMap<>(); + apidatas.put("status", true); + return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + + + /** + * 成功返回 + */ + private String Ok(R r) { + Map apidatas = new HashMap<>(); + apidatas.put("status", true); + apidatas.put("data", r); + String success = getJsonString(apidatas); + if (isLog) { + log.info("run salary api success return {}", success); + } + return success; + } + + + /** + * 失败返回 + */ + private static String Error(String message) { + Map apidatas = new HashMap<>(); + apidatas.put("status", false); + apidatas.put("errormsg", message); + return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + + + /** + * 系统异常失败返回 + */ + private static String Error(String message, Exception e) { + Map apidatas = new HashMap<>(); + apidatas.put("status", false); + apidatas.put("errormsg", message); + apidatas.put("error", e.getMessage()); + return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + +} diff --git a/src/com/engine/thinktrans/web/ReportCollectController.java b/src/com/engine/thinktrans/web/ReportCollectController.java new file mode 100644 index 0000000..b4f5873 --- /dev/null +++ b/src/com/engine/thinktrans/web/ReportCollectController.java @@ -0,0 +1,43 @@ +package com.engine.thinktrans.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.thinktrans.entity.param.TendencyReportParam; +import com.engine.thinktrans.entity.vo.TendencyReportVO; +import com.engine.thinktrans.service.ReportCollectService; +import com.engine.thinktrans.service.impl.ReportCollectServiceImpl; +import com.engine.thinktrans.util.ResponseResult; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +/** + * @Author liang.cheng + * @Date 2023/11/16 10:42 AM + * @Description: TODO + * @Version 1.0 + */ +public class ReportCollectController { + + private ReportCollectService getReportCollectService(User user) { + return ServiceUtil.getService(ReportCollectServiceImpl.class,user); + } + + + @GET + @Path("/personTendency") + @Produces(MediaType.APPLICATION_JSON) + public String getPersonTendency(@Context HttpServletRequest request, @Context HttpServletResponse response, + @QueryParam("deptIds") String deptIds, @QueryParam("year") Integer year, @QueryParam("useKind") String useKind) { + User user = HrmUserVarify.getUser(request, response); + TendencyReportParam tendencyReportParam = TendencyReportParam.builder().deptIds(deptIds).year(year).useKind(useKind).build(); + return new ResponseResult(user).run(getReportCollectService(user) :: getPersonTendency,tendencyReportParam); + } +} diff --git a/src/test/MainTest.java b/src/test/MainTest.java index 2bfc0b3..a704d93 100644 --- a/src/test/MainTest.java +++ b/src/test/MainTest.java @@ -1,5 +1,17 @@ package test; +import com.engine.thinktrans.entity.ReportChildrenData; +import com.engine.thinktrans.util.CommonDateUtil; +import com.engine.thinktrans.util.OperateUtil; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + /** * @Author weaver_cl * @Description: @@ -10,5 +22,9 @@ public class MainTest { public static void main(String[] args) { + String yearDayFirst = CommonDateUtil.getYearDayFirst(2034); + System.out.println(yearDayFirst); } + + } diff --git a/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java b/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java deleted file mode 100644 index 42ba2de..0000000 --- a/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java +++ /dev/null @@ -1,135 +0,0 @@ -package weaver.interfaces.gsjrkg.action; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import weaver.conn.RecordSet; -import weaver.general.Util; -import weaver.interfaces.workflow.action.Action; -import weaver.soa.workflow.request.MainTableInfo; -import weaver.soa.workflow.request.Property; -import weaver.soa.workflow.request.RequestInfo; - -import java.util.*; - -/** - * @Description: 同步证书到人员卡片个人信息 - * @author:dxfeng - * @createTime: 2023/02/20 - * @version: 1.0 - */ -public class SyncCertificateAction implements Action { - /** - * 建模表表名 - */ - private String modeTableName; - - /** - * 参数名称:建模表字段名:人员表字段名 - */ - private String params; - - private String resourceFieldGroup; - - @Override - public String execute(RequestInfo requestInfo) { - if (StringUtils.isBlank(params)) { - requestInfo.getRequestManager().setMessagecontent("自定义接口参数值配置错误"); - return Action.FAILURE_AND_CONTINUE; - } - if (StringUtils.isBlank(resourceFieldGroup)) { - // -1:基本信息,1:个人信息,3:工作信息 - resourceFieldGroup = "1"; - } - Map fieldMap = new HashMap<>(); - String[] fieldsArray = params.split(";"); - for (String fields : fieldsArray) { - String[] field = fields.split(":"); - if (field.length == 2) { - fieldMap.put(field[0], field[1]); - } - } - if (fieldMap.size() != fieldsArray.length) { - requestInfo.getRequestManager().setMessagecontent("自定义接口参数值格式错误,请检查"); - return Action.FAILURE_AND_CONTINUE; - } - Set modeFields = fieldMap.keySet(); - Map> modeMap = new HashMap<>(); - - RecordSet rs = new RecordSet(); - String resourceId = ""; - MainTableInfo mainTableInfo = requestInfo.getMainTableInfo(); - Property[] property = mainTableInfo.getProperty(); - for (Property item : property) { - String name = item.getName(); - String value = Util.null2String(item.getValue()); - if (StringUtils.isNotBlank(name) && StringUtils.isNotBlank(value)) { - if ("xm".equals(name)) { - resourceId = value; - } - } - } - // 查询当前人员的所有数据 - StringBuilder sqlBuilder = new StringBuilder("select ").append(StringUtils.join(modeFields, ",")).append(" from ").append(modeTableName).append(" where xm = ").append(resourceId).append(" order by id"); - rs.executeQuery(sqlBuilder.toString()); - while (rs.next()) { - appendIds(modeFields, rs, modeMap); - } - // 判断有无数据,没有的话插入数据 - sqlBuilder = new StringBuilder("SELECT id FROM CUS_FIELDDATA where scope ='HrmCustomFieldByInfoType' and scopeid = '").append(resourceFieldGroup).append("' and id =? "); - rs.executeQuery(sqlBuilder.toString(), resourceId); - if (!rs.next()) { - // 插入人员信息数据 - rs.executeUpdate("insert into cus_fielddata (scope,scopeid,id) values ('HrmCustomFieldByInfoType','" + resourceFieldGroup + "',?)", resourceId); - } - // 组装更新SQL语句 - sqlBuilder = new StringBuilder("update cus_fielddata set "); - for (Map.Entry entry : fieldMap.entrySet()) { - Set valueSet = modeMap.get(entry.getKey()); - String values = CollectionUtils.isEmpty(valueSet) ? "" : StringUtils.join(valueSet, ","); - sqlBuilder.append(" ").append(entry.getValue()).append(" = '").append(values).append("',"); - } - sqlBuilder.deleteCharAt(sqlBuilder.length() - 1); - sqlBuilder.append(" where scope ='HrmCustomFieldByInfoType' and scopeid = ").append(resourceFieldGroup).append(" and id = ").append(resourceId); - rs.executeUpdate(sqlBuilder.toString()); - - return Action.SUCCESS; - } - - - private void appendIds(Set modeFields, RecordSet rs, Map> modeMap) { - for (String modeField : modeFields) { - String ids = rs.getString(modeField); - if (StringUtils.isBlank(ids)) { - return; - } - if (CollectionUtils.isEmpty(modeMap.get(modeField))) { - modeMap.put(modeField, new HashSet<>()); - } - modeMap.get(modeField).addAll(Arrays.asList(ids.split(","))); - } - } - - public String getParams() { - return params; - } - - public void setParams(String params) { - this.params = params; - } - - public String getModeTableName() { - return modeTableName; - } - - public void setModeTableName(String modeTableName) { - this.modeTableName = modeTableName; - } - - public String getResourceFieldGroup() { - return resourceFieldGroup; - } - - public void setResourceFieldGroup(String resourceFieldGroup) { - this.resourceFieldGroup = resourceFieldGroup; - } -}