From 03d3befbdd8462ae1538c6aa3c36f2a10bde4d11 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 11 Oct 2023 14:07:23 +0800 Subject: [PATCH 1/8] token --- .../engine/salary/util/SalaryTokenUtil.java | 238 ++++++++++++++++++ .../salary/web/SalaryBillController.java | 14 ++ .../salary/wrapper/SalarySendWrapper.java | 5 + 3 files changed, 257 insertions(+) create mode 100644 src/com/engine/salary/util/SalaryTokenUtil.java diff --git a/src/com/engine/salary/util/SalaryTokenUtil.java b/src/com/engine/salary/util/SalaryTokenUtil.java new file mode 100644 index 000000000..f65948c41 --- /dev/null +++ b/src/com/engine/salary/util/SalaryTokenUtil.java @@ -0,0 +1,238 @@ +package com.engine.salary.util; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.engine.salary.exception.SalaryRunTimeException; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.rsa.security.RSA; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +public class SalaryTokenUtil { + + /** + * 通过注册返回的OA系统公钥和秘钥获取token + * + * @param address OA地址 + * @return + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ +// public static Map testGetoken(String address) throws NoSuchAlgorithmException, KeyManagementException { +// Map heads = new HashMap<>(); +// Map datas = testRegist(address); // 注册接口返回的secrit私钥和spk公钥可以在第一次调用后,第三方系统保存起来,之后调用可以不用再调用这个注册接口 +// //ECOLOGY返回的系统公钥 +// String spk = (String) (datas.get("spk")); +// RSA rsa = new RSA(); +// //对秘钥进行加密传输,防止篡改数据 +// String secret = rsa.encrypt(null, (String) (datas.get("secrit")), null, "utf-8", spk, false); +// //封装参数到请求头 +// heads.put("appid", APPID); +// heads.put("secret", secret); +// //调用ECOLOGY系统接口进行注册 +// String data = post(address + "/api/ec/dev/auth/applytoken", null, heads); +// System.out.println("=====testGetoken=====" + data); +// return JSONObject.parseObject(data, new TypeReference>() { +// }); +// } + + /** + * 注册第三方系统到OA系统,第一次用APPID获取到公钥spk和私钥secret,第三方系统可以保存,下次不用在请求注册接口 + * + * @param address OA地址 + * @return + * @throws NoSuchAlgorithmException + * @throws KeyManagementException + */ +// public static Map testRegist(String address) throws NoSuchAlgorithmException, KeyManagementException { +// Map heads = new HashMap<>(); +// //获取当前异构系统RSA加密的公钥 +// String cpk = new RSA().getRSA_PUB(); +// //封装参数到请求头 +// heads.put("appid", APPID); +// heads.put("cpk", cpk); +// //调用ECOLOGY系统接口进行注册 +// String data = post(address + "/api/ec/dev/auth/regist", null, heads); +// System.out.println("=====testRegist=====" + data); +// return JSONObject.parseObject(data, new TypeReference>() { +// }); +// } + + /** + * 第一次获取Token,需要先注册 + * + * @return + */ + public static Map GetToken(Long uid) { + Map heads = new HashMap<>(); + BaseBean baseBean = new BaseBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + + // 获取appid的id + String appidId = baseBean.getPropValue("hrmSalaryBillToken", "appid_id"); + String ip = baseBean.getPropValue("hrmSalaryBillToken", "ip"); + rs.execute("select APPID from ECOLOGY_BIZ_EC where id =" + appidId); + // 获取appid + String appid =""; + if (rs.next() && StringUtils.isNotEmpty(rs.getString("APPID"))) { + appid = rs.getString("APPID"); + } else { + return resultMap; + } + String sql= " SELECT conf_value FROM hrsa_salary_sys_conf t WHERE delete_type = 0 AND conf_key = 'SALARY_TOKEN_SECRET'"; + rs.execute(sql); + String secret = ""; + if (rs.next() && StringUtils.isNotEmpty(rs.getString("conf_value"))) { + // 从数据库中拿secret + secret = rs.getString("conf_value"); + } else { + // 注册获取secret + // 获取当前异构系统RSA加密的公钥 + String cpk = new RSA().getRSA_PUB(); + //封装参数到请求头 + heads.put("appid", appid); + heads.put("cpk", cpk); + // 调用ECOLOGY系统接口进行注册 + String data = post("http://" + ip + "/api/ec/dev/auth/regist", null, heads); + Map datas = JSONObject.parseObject(data, new TypeReference>() {}); + // ECOLOGY返回的系统公钥 + String spk = (String) (datas.get("spk")); + RSA rsa = new RSA(); + // 对秘钥进行加密传输,防止篡改数据 + secret = rsa.encrypt(null, (String) (datas.get("secrit")), null, "utf-8", spk, false); + // secret存库 + String date = SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now()); + sql = String.format("insert into hrsa_salary_sys_conf(id, conf_key, conf_value, title, module, order_weight, delete_type, create_time, update_time) values (%s,'%s','%s','%s','%s',%s,%s,'%s','%s')", + IdGenerator.generate(), "SALARY_TOKEN_SECRET", secret, "token", "basic",0,0,date,date); + rs.execute(sql); + // 保存spk + sql = String.format("insert into hrsa_salary_sys_conf(id, conf_key, conf_value, title, module, order_weight, delete_type, create_time, update_time) values (%s,'%s','%s','%s','%s',%s,%s,'%s','%s')", + IdGenerator.generate(), "SALARY_TOKEN_SPK", spk, "spk", "basic",0,0,date,date); + rs.execute(sql); + } + //封装参数到请求头 + heads.put("appid", appid); + heads.put("secret", secret); + //调用ECOLOGY系统接口进行注册 + String data2 = post("http://" + ip + "/api/ec/dev/auth/applytoken", null, heads); + // 通过第一步注册许可时返回spk公钥对userid进行加密生成的密文 + sql= " SELECT conf_value FROM hrsa_salary_sys_conf t WHERE delete_type = 0 AND conf_key = 'SALARY_TOKEN_SPK'"; + rs.execute(sql); + if (rs.next()){ + String spk = rs.getString("conf_value"); + // 对uid进行加密 + RSA rsa = new RSA(); + String encryptUid = rsa.encrypt(null, uid.toString(), null, "utf-8", spk, false); + String token = (String)JSONObject.parseObject(data2, new TypeReference>() {}).get("token"); + resultMap.put("encryptUid", encryptUid); + resultMap.put("token", token); + return resultMap; + } else { + throw new SalaryRunTimeException("spk不存在"); + } + } + + + /** + * 此方法仅供参考,第三方系统可采用自己的方式调用http接口 + * + * @param path 请求路径 + * @param data 请求参数 + * @return + */ + public static String post(String path, Map params, Map data) { + try { + String str = ""; +// if (params != null) { +// StringBuilder stringBuilder = new StringBuilder("?"); +// for (Map.Entry entry : params.entrySet()) { +// stringBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); +// } +// if (stringBuilder.length() > 1) +// path += stringBuilder.substring(0, stringBuilder.length() - 1); +// } + URL url = new URL(path); + //打开和url之间的连接 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); +// PrintWriter out = null; + // 请求参数 编码为 utf-8 + //请求方式 + conn.setRequestMethod("POST"); + //设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); + if (data != null) { + for (Map.Entry entry : data.entrySet()) { + conn.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + //设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个 + //最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, + //post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。 + conn.setDoOutput(true); + conn.setDoInput(true); + OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "utf-8"); + if (params != null) { + out.write(mapToStr(params)); + } + //缓冲数据 + out.flush(); + out.close(); + //获取URLConnection对象对应的输入流 + InputStream is = conn.getInputStream(); + //构造一个字符流缓存 + BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8")); + String result = ""; + while ((str = br.readLine()) != null) { + result = str; + } + //关闭流 + is.close(); + //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。 + //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。 + conn.disconnect(); + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 将Map转换成字符串参数,用于POST GET 请求 + * + * @param map + * @return + */ + public static String mapToStr(Map map) { + StringBuilder stringBuilder = new StringBuilder(); + if (map != null) { + for (Map.Entry entry : map.entrySet()) { + stringBuilder.append(entry.getKey()); + if (entry.getValue() != null) { + stringBuilder.append("=").append(entry.getValue()); + } + stringBuilder.append("&"); + } + } + if (stringBuilder.length() > 0) { + return stringBuilder.substring(0, stringBuilder.length() - 1); + } + return null; + } +} diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 382f93636..13483061a 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -571,6 +571,20 @@ public class SalaryBillController { .build(); } + /** + * 我的工资单列表 + * + * @param + * @return + */ + @GET + @Path("/getToken") + @Produces(MediaType.APPLICATION_JSON) + public String getToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "uid") Long uid) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::getToken, uid); + } + /** * 我的工资单列表 * diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index c1f84e730..75c83f012 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -35,6 +35,7 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.SalaryTokenUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.wrapper.proxy.SalarySendWrapperProxy; @@ -701,4 +702,8 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public String exportPdf(SalaryExportPdfParam param) { return getSalaryBillService(user).exportPdf(param); } + + public Map getToken(Long uid) { + return SalaryTokenUtil.GetToken( uid); + } } From b71633d744fd553cbae6835a111aba690fee6d91 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 11 Oct 2023 15:28:58 +0800 Subject: [PATCH 2/8] token --- src/com/engine/salary/util/SalaryTokenUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/util/SalaryTokenUtil.java b/src/com/engine/salary/util/SalaryTokenUtil.java index f65948c41..32388b475 100644 --- a/src/com/engine/salary/util/SalaryTokenUtil.java +++ b/src/com/engine/salary/util/SalaryTokenUtil.java @@ -140,6 +140,7 @@ public class SalaryTokenUtil { String token = (String)JSONObject.parseObject(data2, new TypeReference>() {}).get("token"); resultMap.put("encryptUid", encryptUid); resultMap.put("token", token); + resultMap.put("appid",appid); return resultMap; } else { throw new SalaryRunTimeException("spk不存在"); From c83539460c7b5d2f5644ff65b02155b65a25f6d5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 11 Oct 2023 15:54:08 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E8=96=AA=E9=85=ACtoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/SalaryTokenUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/util/SalaryTokenUtil.java b/src/com/engine/salary/util/SalaryTokenUtil.java index 32388b475..ba2509350 100644 --- a/src/com/engine/salary/util/SalaryTokenUtil.java +++ b/src/com/engine/salary/util/SalaryTokenUtil.java @@ -138,7 +138,7 @@ public class SalaryTokenUtil { RSA rsa = new RSA(); String encryptUid = rsa.encrypt(null, uid.toString(), null, "utf-8", spk, false); String token = (String)JSONObject.parseObject(data2, new TypeReference>() {}).get("token"); - resultMap.put("encryptUid", encryptUid); + resultMap.put("userid", encryptUid); resultMap.put("token", token); resultMap.put("appid",appid); return resultMap; From fbc49bff98dc22150b97b74e686d8080d0fe392b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 12 Oct 2023 13:47:18 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E4=B8=BA=E6=96=87=E6=9C=AC=E6=97=B6=E8=BF=94=E5=9B=9E=E2=80=9D?= =?UTF-8?q?=E2=80=9Dnumber=E8=BF=94=E5=9B=9E0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java index a0767e492..29e0f0ea5 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java @@ -98,8 +98,10 @@ public class ExpressFormulaBO { // 公式变量的值 String formulaVarValue = formulaVarValueMap.getOrDefault(formulaVar.getFieldId(), StringUtils.EMPTY); // 如果公式的返回值类型为number,公式中的变量的值如果为空,公式运行的时候会报错,所以需要替换成0 - if (StringUtils.isEmpty(formulaVarValue) && "number".equals(expressFormula.getReturnType())) { + if (StringUtils.isEmpty(formulaVarValue) && "number".equals(formulaVar.getFieldType())) { formulaVarValue = BigDecimal.ZERO.toPlainString(); + } else if (StringUtils.isEmpty(formulaVarValue) && "string".equals(formulaVar.getFieldType())) { + formulaVarValue = ""; } formulaVar.setContent(formulaVarValue); } From db71ba0e5fb71d3bb824d442e1d7b39bd6b92f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 12 Oct 2023 14:13:25 +0800 Subject: [PATCH 5/8] fix null --- .../salary/util/excel/ExcelUtilPlus.java | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index d54b875ab..b9aee0531 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -10,10 +10,7 @@ import org.springframework.beans.BeanUtils; import java.awt.Color; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -115,7 +112,7 @@ public class ExcelUtilPlus { //遍历设置列宽 List header = rowList.get(0); for (int i = 0; i < header.size(); i++) { - sheet.setColumnWidth(i,Math.max(12, header.get(i).toString().length()*4)*256); + sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256); } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { @@ -199,7 +196,7 @@ public class ExcelUtilPlus { //遍历设置列宽 List header = rowList.get(0); for (int i = 0; i < header.size(); i++) { - sheet.setColumnWidth(i,Math.max(12, header.get(i).toString().length()*4)*256); + sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256); } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { @@ -304,7 +301,7 @@ public class ExcelUtilPlus { //遍历设置列宽 List header = rowList.get(0); for (int i = 0; i < header.size(); i++) { - sheet.setColumnWidth(i,Math.max(12, header.get(i).toString().length()*4)*256); + sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256); } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { @@ -380,7 +377,6 @@ public class ExcelUtilPlus { childTitleCellStyle.setBorderBottom(BorderStyle.THIN); - // 设置主体样式 XSSFCellStyle cellStyle = workbook.createCellStyle(); XSSFFont font = workbook.createFont(); @@ -436,7 +432,7 @@ public class ExcelUtilPlus { rowOneCell.setCellValue(columnGroupItem.getText().toString()); rowOneCell.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex,Math.max(12, columnGroupItem.getText().length()*4)*256); + sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256); startIndex++; patternList.add(columnGroupItem.getPattern()); } else { @@ -458,7 +454,7 @@ public class ExcelUtilPlus { subHeader.setCellValue(childrenItem.getText().toString()); subHeader.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex + j,Math.max(12, childrenItem.getText().length()*4)*256); + sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256); patternList.add(childrenItem.getPattern()); } @@ -471,10 +467,10 @@ public class ExcelUtilPlus { HashMap numberCellStyleMap = new HashMap(); HashMap numberRedCellStyleMap = new HashMap(); XSSFDataFormat df = workbook.createDataFormat(); - patternList.stream().distinct().forEach(p -> { + patternList.stream().distinct().filter(a -> a != null).forEach(p -> { String start = "0."; - if (p==0) { - start ="0"; + if (p == 0) { + start = "0"; } XSSFCellStyle numberRedCellStyle = workbook.createCellStyle(); BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); @@ -570,7 +566,6 @@ public class ExcelUtilPlus { childTitleCellStyle.setBorderBottom(BorderStyle.THIN); - // 设置主体样式 XSSFCellStyle cellStyle = workbook.createCellStyle(); XSSFFont font = workbook.createFont(); @@ -623,7 +618,7 @@ public class ExcelUtilPlus { rowOneCell.setCellValue(columnGroupItem.getText().toString()); rowOneCell.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex,Math.max(12, columnGroupItem.getText().length()*4)*256); + sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256); startIndex++; } else { List childrenList = columnGroupItem.getChildren(); @@ -644,7 +639,7 @@ public class ExcelUtilPlus { subHeader.setCellValue(childrenItem.getText().toString()); subHeader.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex + j,Math.max(12, childrenItem.getText().length()*4)*256); + sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256); } startIndex += childrenList.size(); From 8e8a502738671aa484f0645d4aabc1553f01d581 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 12 Oct 2023 14:26:28 +0800 Subject: [PATCH 6/8] prop --- resource/WEB-INF/prop/hrmSalaryBillToken.properties | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 resource/WEB-INF/prop/hrmSalaryBillToken.properties diff --git a/resource/WEB-INF/prop/hrmSalaryBillToken.properties b/resource/WEB-INF/prop/hrmSalaryBillToken.properties new file mode 100644 index 000000000..9efa48c03 --- /dev/null +++ b/resource/WEB-INF/prop/hrmSalaryBillToken.properties @@ -0,0 +1,2 @@ +appid_id=123456 +ip=127.0.0.1:8080 \ No newline at end of file From 4a59859fa86595f8cb0d1dc89aabda2da9c806f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 12 Oct 2023 17:34:09 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E8=B0=83=E8=96=AA=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/删除档案.txt | 7 +--- .../SalaryArchiveAdjustRecordTypeEnum.java | 26 +++++++++++++ .../impl/SalaryArchiveItemServiceImpl.java | 1 + .../engine/salary/web/SIReportController.java | 2 +- .../wrapper/SalaryArchiveItemWrapper.java | 37 +++++++++++++++++++ 5 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 src/com/engine/salary/enums/salaryarchive/SalaryArchiveAdjustRecordTypeEnum.java diff --git a/resource/sql/删除档案.txt b/resource/sql/删除档案.txt index 2c4fa7372..1668c51f4 100644 --- a/resource/sql/删除档案.txt +++ b/resource/sql/删除档案.txt @@ -1,6 +1,6 @@ -一、删除指定扣缴义务人下的档案 操作前做好数据备份 +一、删除指定扣缴义务人下的档案 删除扣缴义务人下的档案(注意删除后,再添加进扣缴义务人,不会自动生成档案) 1、查询hrsa_tax_agent表对应扣缴义务人id @@ -19,8 +19,3 @@ update hrsa_salary_archive set delete_type=3 where tax_agent_id=扣缴义务人 二、删除停薪员工档案 update hrsa_salary_archive set delete_type=3 where run_status in ('STOP_FROM_PENDING','STOP_FROM_SUSPEND') - - - - -.\wkhtmltopdf.exe http://127.0.0.1:8080/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?id=1694053661638&recipient=92&type=phone C:\baidu.pdf \ No newline at end of file diff --git a/src/com/engine/salary/enums/salaryarchive/SalaryArchiveAdjustRecordTypeEnum.java b/src/com/engine/salary/enums/salaryarchive/SalaryArchiveAdjustRecordTypeEnum.java new file mode 100644 index 000000000..6fd513664 --- /dev/null +++ b/src/com/engine/salary/enums/salaryarchive/SalaryArchiveAdjustRecordTypeEnum.java @@ -0,0 +1,26 @@ +package com.engine.salary.enums.salaryarchive; + +/** + * 薪资档案调薪记录列表类型 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryArchiveAdjustRecordTypeEnum { + + MYADJUSTRECORD("myAdjustRecordList"), + ADJUSTRECORD("adjustRecordList"), + ADJUSTRECORDFORDELETE("adjustRecordForDeleteList"); + + private String pageUid; + + SalaryArchiveAdjustRecordTypeEnum(String pageUid) { + this.pageUid = pageUid; + } + + public String getPageUid() { + return pageUid; + } +} diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 080b330fe..270f26294 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -632,6 +632,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi }); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> rows = new ArrayList<>(); + rows.add(headerList); for (SalaryItemAdjustRecordListDTO dto : list) { List row = new ArrayList<>(); row.add(dto.getUsername()); diff --git a/src/com/engine/salary/web/SIReportController.java b/src/com/engine/salary/web/SIReportController.java index 55b602525..ceeb545ba 100644 --- a/src/com/engine/salary/web/SIReportController.java +++ b/src/com/engine/salary/web/SIReportController.java @@ -67,6 +67,6 @@ public class SIReportController { String pageSize = Optional.ofNullable(request.getParameter("pageSize")).orElse("10"); salaryItemAdjustRecordQueryParam.setCurrent(Integer.valueOf(current)); salaryItemAdjustRecordQueryParam.setPageSize(Integer.valueOf(pageSize)); - return new ResponseResult>(user).run(getSalaryArchiveItemWrapper(user)::adjustRecordList, salaryItemAdjustRecordQueryParam); + return new ResponseResult>(user).run(getSalaryArchiveItemWrapper(user)::myAdjustRecordList, salaryItemAdjustRecordQueryParam); } } diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 0f03e2906..4f711d32e 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -14,10 +14,12 @@ import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.proxy.SalaryArchiveItemWrapperProxy; @@ -223,6 +225,40 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL); + Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); + + List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); + PageInfo list = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(queryParam, salaryItemIds); + List listResult = list.getList(); + //获取上次更改的记录 + listResult.forEach(m -> { + if (!CollectionUtils.isEmpty(listAll)) { + listAll.removeIf(a -> a.getId().equals(m.getId())); + } + Optional optional = listAll.stream().filter(f -> f.getSalaryArchiveId().equals(m.getSalaryArchiveId()) && f.getSalaryItemId().equals(m.getSalaryItemId())).findFirst(); + m.setAdjustBefore(optional.isPresent() ? optional.get().getAdjustAfter() : ""); + DataCollectionEmployee employee = employeeMap.getOrDefault(m.getEmployeeId(), new DataCollectionEmployee()); + m.setUsername(employee.getUsername()); + m.setDepartmentName(employee.getDepartmentName()); + m.setEmployeeStatus(UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(employee.getStatus()))); + m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason())); + }); + + return list; + } + + + /** + * 我的调薪记录 + * @param queryParam + * @return + */ + public PageInfo myAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) { + // 获取所有可被引用的薪资项目 + List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); + List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(queryParam.getEmployeeId()); List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); @@ -245,6 +281,7 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt return list; } + /** * 单个档案的薪资项目调整记录列表 * From 855effccc54baae23fd4b1b68dcbb911d3a1c293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 13 Oct 2023 16:54:33 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202310130403.sql | 4 ++++ resource/sqlupgrade/GS/sql202310130403.sql | 4 ++++ resource/sqlupgrade/JC/sql202310130403.sql | 4 ++++ resource/sqlupgrade/Mysql/sql202310130403.sql | 2 ++ resource/sqlupgrade/Oracle/sql202310130403.sql | 3 +++ resource/sqlupgrade/PG/sql202310130403.sql | 3 +++ resource/sqlupgrade/SQLServer/sql202310130403.sql | 3 +++ resource/sqlupgrade/ST/sql202310130403.sql | 4 ++++ 8 files changed, 27 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202310130403.sql create mode 100644 resource/sqlupgrade/GS/sql202310130403.sql create mode 100644 resource/sqlupgrade/JC/sql202310130403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202310130403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202310130403.sql create mode 100644 resource/sqlupgrade/PG/sql202310130403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202310130403.sql create mode 100644 resource/sqlupgrade/ST/sql202310130403.sql diff --git a/resource/sqlupgrade/DM/sql202310130403.sql b/resource/sqlupgrade/DM/sql202310130403.sql new file mode 100644 index 000000000..71920e9d1 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202310130403.sql @@ -0,0 +1,4 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316); +/ + diff --git a/resource/sqlupgrade/GS/sql202310130403.sql b/resource/sqlupgrade/GS/sql202310130403.sql new file mode 100644 index 000000000..71920e9d1 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202310130403.sql @@ -0,0 +1,4 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316); +/ + diff --git a/resource/sqlupgrade/JC/sql202310130403.sql b/resource/sqlupgrade/JC/sql202310130403.sql new file mode 100644 index 000000000..71920e9d1 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202310130403.sql @@ -0,0 +1,4 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202310130403.sql b/resource/sqlupgrade/Mysql/sql202310130403.sql new file mode 100644 index 000000000..871ffbccd --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202310130403.sql @@ -0,0 +1,2 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316); \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202310130403.sql b/resource/sqlupgrade/Oracle/sql202310130403.sql new file mode 100644 index 000000000..19b460318 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202310130403.sql @@ -0,0 +1,3 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202310130403.sql b/resource/sqlupgrade/PG/sql202310130403.sql new file mode 100644 index 000000000..e96a56407 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202310130403.sql @@ -0,0 +1,3 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202310130403.sql b/resource/sqlupgrade/SQLServer/sql202310130403.sql new file mode 100644 index 000000000..c065b1e4b --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202310130403.sql @@ -0,0 +1,3 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202310130403.sql b/resource/sqlupgrade/ST/sql202310130403.sql new file mode 100644 index 000000000..71920e9d1 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202310130403.sql @@ -0,0 +1,4 @@ +update hrsa_formula set EXTEND_PARAM= '{"sqlReturnKey":"","openDecrypt":"0","datasource":{"datasourceId":""}}' +where id in (1674894163247,1674896933031,1674897014605,1675043440772,1680746056549,1681201555316); +/ +