| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package com.ydtech.modules.esm.service.impl;
- import com.github.pagehelper.PageHelper;
- import com.ydtech.constants.SysConstants;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.core.page.PageResult;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.admin.service.SysUserService;
- import com.ydtech.modules.esm.dao.EsmSalaryCheckMapper;
- import com.ydtech.modules.esm.dao.EsmSalaryMapper;
- import com.ydtech.modules.esm.model.EsmSalary;
- import com.ydtech.modules.esm.model.EsmSalaryCheck;
- import com.ydtech.modules.esm.service.EsmSalaryService;
- import com.ydtech.modules.esm.model.vo.EsmSalaryQueryVO;
- import com.ydtech.modules.esm.model.vo.req.ReqVo;
- import com.ydtech.modules.esm.model.vo.res.EsmSalaryCheckRes;
- import com.ydtech.modules.esm.model.vo.res.EsmSalaryRes;
- import com.ydtech.utils.DateUtil;
- import com.ydtech.utils.StringUtils;
- import com.ydtech.utils.excel.ExcelUtils2;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.multipart.MultipartFile;
- import java.math.BigDecimal;
- import java.text.ParseException;
- import java.util.Date;
- import java.util.List;
- /**
- * @author: shenweidong
- * @Date: 2021/8/6 17:53
- **/
- @Slf4j
- @Service
- public class EsmSalaryServiceImpl implements EsmSalaryService {
- @Autowired
- private EsmSalaryMapper esmSalaryMapper;
- @Autowired
- private EsmSalaryCheckMapper esmSalaryCheckMapper;
- @Autowired
- private SysUserService sysUserService;
- /**
- * @author: shenweidong
- * @date: 2021/8/6 17:54
- **/
- @Override
- @Transactional
- public HttpResult importSalary(MultipartFile file, String userProp, String userId, String tokemDeptId) {
- String msg = "导入成功!";
- if (StringUtils.isNullOrEmpty(userProp)) {
- return HttpResult.error("人员合同类型不可为空!");
- }
- List<EsmSalary> list = null;
- try {
- list = ExcelUtils2.importExcel(file, 0, 1, EsmSalary.class);
- } catch (Exception e) {
- log.error("数据转换集合异常:" + e.getMessage());
- return HttpResult.error("数据转换异常,请检查文件是否与上传类型一致");
- }
- // 总工资
- double salaryTotal = 0.00;
- // 机构代码,只保存2级
- tokemDeptId = tokemDeptId.contains("D") ? tokemDeptId.substring(0, tokemDeptId.indexOf("D")) : tokemDeptId;
- if (list == null || list.isEmpty()) {
- return HttpResult.error("数据为空,请检查");
- } else {
- Date now = new Date();
- String checkId = String.valueOf(now.getTime());
- Date payDate = null;
- String deptId = "";
- String oldChcekId = "";
- for (int i = 0; i < list.size(); i++) {
- EsmSalary esmSalary = list.get(i);
- // 设置发薪日期
- String year = esmSalary.getYear();// 获取到年
- String month = esmSalary.getMonth(); // 获取到月
- String day = esmSalary.getDay(); // 获取到天
- if (userProp.equals(SysConstants.B)) { // 非全日制
- if (!SysConstants.B.equals(esmSalary.getUserType())) {
- return HttpResult.error("非全日制员工类型只能为业务员类型【B】");
- }
- if ("1".equals(month) && "15".equals(month)) {
- return HttpResult.error("非全日制员工的发薪日期只能选择1号或者15号!");
- }
- } else {
- day = "1";
- }
- // 判断发薪月份
- // 获取当前时间的上月月份和上月年份
- // String[] lastMonthDay = DateUtil.dayOfLastMonth(new Date()).split("-");
- /*if (!lastMonthDay[0].equals(year) || !lastMonthDay[1].equals(month)){
- return HttpResult.error("员工编码:" + esmSalary.getUserId() + "的发薪年份(月份)不是有效的上月时间!");
- }*/
- SysUser sysUser = sysUserService.findByUserId(esmSalary.getUserId());
- if (sysUser == null) {
- return HttpResult.error("第" + (i + 1) + "行员工信息<" + esmSalary.getUserId() + ">不存在");
- }
- /*if (!sysUser.getUsertype().equals(esmSalary.getUserType())){
- return HttpResult.error("第" + (i+1) +"行员工<"+esmSalary.getUserId()+">对应的人员类型不是"+
- (SysConstants.A.equals(esmSalary.getUserType())? "后线人员":"业务员"));
- }
- // 判断权限
- if (!SysConstants.DEPT.equals(tokemDeptId)) {
- if (!esmSalary.getUserId().startsWith(tokemDeptId)) {
- return HttpResult.error("当前登录账号" + userId + "没有权限导入>>>员工编码:" + esmSalary.getUserId());
- }
- }*/
- if (SysConstants.A.equals(userProp)) {
- if (StringUtils.isNullOrEmpty(year) || StringUtils.isNullOrEmpty(month)) {
- return HttpResult.error("第" + (i + 1) + "行【全日制 发薪年份/发薪月份】不可为空!");
- }
- } else if (SysConstants.B.equals(userProp)) {
- if (StringUtils.isNullOrEmpty(year) || StringUtils.isNullOrEmpty(month) || StringUtils.isNullOrEmpty(day)) {
- return HttpResult.error("第" + (i + 1) + "行【非全日制 发薪年份/发薪月份/发薪日期】不可为空!");
- }
- }
- // 拼接成YYYY-MM-DD格式
- try {
- payDate = DateUtil.StringToDate(year + "-" + month + (StringUtils.isNullOrEmpty(day) ? "" : "-" + day));
- // 设置发薪时间
- esmSalary.setPayDate(payDate);
- } catch (ParseException e) {
- e.printStackTrace();
- return HttpResult.error("第" + (i + 1) + "行【发薪日期】不是有效的日期!");
- }
- // 获取当前员工薪酬数据是否未审核或审核已通过,如果存在返回错误提示
- EsmSalary esmSalaryExist = esmSalaryMapper.getByPayDate(esmSalary, userProp);
- if (esmSalaryExist != null) {
- if (SysConstants.TO_BE_REVIEW.equals(esmSalaryExist.getReviewStatus())) {
- return HttpResult.error("员工号:" + esmSalaryExist.getUserId() + "数据已上传过,正在待审核,请检查数据和上传条件");
- } else if (SysConstants.SUCCESS_REVIEW.equals(esmSalaryExist.getReviewStatus())) {
- return HttpResult.error("员工号:" + esmSalaryExist.getUserId() + "数据已上传过,审核已通过,请检查数据和上传条件");
- }
- if (StringUtils.isNullOrEmpty(oldChcekId)) {
- oldChcekId = esmSalaryExist.getCheckId();
- }
- }
- // 设置实发工资
- esmSalary.setSfgz(String.valueOf(new BigDecimal(esmSalary.getSfgz()).setScale(2, BigDecimal.ROUND_HALF_UP)));
- // 总实发工资
- salaryTotal += Double.parseDouble(StringUtils.isNullOrEmpty(esmSalary.getSfgz()) ? "0.00" : esmSalary.getSfgz());
- deptId = esmSalary.getDeptId().length() >= 5 ? (esmSalary.getDeptId().contains("D") ? esmSalary.getDeptId().substring(0, esmSalary.getDeptId().indexOf("D")) : esmSalary.getDeptId().substring(0, 5)) : esmSalary.getDeptId();
- // 设置插入表的数据
- esmSalary.setCheckId(checkId);
- esmSalary.setQuality(userProp);
- esmSalary.setCreateUser(userId);
- esmSalary.setCreateTime(now);
- esmSalary.setReviewStatus(SysConstants.NO_SUBMIT_REVIEW);
- }
- // 先删后插
- esmSalaryMapper.deleteByCheckId(oldChcekId);
- esmSalaryMapper.inserBatch(list);
- // 设置审核的数据
- EsmSalaryCheck esmSalaryCheck = new EsmSalaryCheck();
- esmSalaryCheck.setCheckId(checkId);
- esmSalaryCheck.setDeptId(deptId);
- esmSalaryCheck.setQuality(userProp);
- esmSalaryCheck.setPayDate(payDate);
- esmSalaryCheck.setPaidInSalaryTotal(String.valueOf(new BigDecimal(salaryTotal).setScale(2, BigDecimal.ROUND_HALF_UP)));
- esmSalaryCheck.setCreateUser(userId);
- esmSalaryCheck.setReviewStatus(SysConstants.NO_SUBMIT_REVIEW);
- // 先删后插
- esmSalaryCheckMapper.deleteByPrimaryKey(oldChcekId);
- esmSalaryCheckMapper.insertSelective(esmSalaryCheck);
- }
- return HttpResult.ok("数据导入成功", null);
- }
- @Override
- public HttpResult selectSalary(EsmSalaryQueryVO queryVO, String userId, String tokemDeptId) {
- if (StringUtils.isNullOrEmpty(queryVO.getPayDate()) || StringUtils.isNullOrEmpty(queryVO.getPayEndDate())) {
- return HttpResult.error("发薪年月不可为空!");
- }
- // 机构代码,只保存2级
- tokemDeptId = tokemDeptId.contains("D") ? tokemDeptId.substring(0, tokemDeptId.indexOf("D")) : tokemDeptId;
- // 判断权限
- if (!SysConstants.DEPT.equals(tokemDeptId)) {
- if (!queryVO.getSecondCom().startsWith(tokemDeptId)) {
- queryVO.setSecondCom(tokemDeptId);
- }
- } else {
- }
- PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize());
- List<EsmSalaryCheckRes> list = esmSalaryCheckMapper.select(queryVO);
- return HttpResult.ok("查询成功", new PageResult<>(list));
- }
- @Override
- public HttpResult selectSalaryByCheckId(ReqVo vo) {
- String submitcheckid = vo.getSubmitcheckid();
- if (StringUtils.isNullOrEmpty(submitcheckid)) {
- return HttpResult.error("批次号不可为空!");
- }
- PageHelper.startPage(vo.getPageNum(), vo.getPageSize());
- List<EsmSalaryRes> list = esmSalaryMapper.selectSalaryByCheckId(submitcheckid);
- return HttpResult.ok("查询成功", new PageResult<>(list));
- }
- /**
- * 薪酬数据提交审核
- *
- * @param reqVo
- * @return
- */
- @Transactional
- @Override
- public HttpResult submitSalaryByCheckId(ReqVo reqVo) {
- String submitcheckid = reqVo.getSubmitcheckid();
- if (StringUtils.isNullOrEmpty(submitcheckid)) {
- return HttpResult.error("批次号不可为空!");
- }
- Date date = new Date();
- EsmSalary esmSalary = new EsmSalary();
- esmSalary.setCheckId(submitcheckid);
- esmSalary.setReviewStatus(SysConstants.TO_BE_REVIEW);
- esmSalary.setSubmitDate(date);
- EsmSalaryCheck esmSalaryCheck = new EsmSalaryCheck();
- esmSalaryCheck.setSubmitDate(date);
- esmSalaryCheck.setReviewStatus(SysConstants.TO_BE_REVIEW);
- esmSalaryCheck.setCheckId(submitcheckid);
- // 先查询审核状态,不可二次审核
- EsmSalaryCheck resultCheck = esmSalaryCheckMapper.selectByPrimaryKey(submitcheckid);
- if (SysConstants.SUCCESS_REVIEW.equals(resultCheck.getReviewStatus())) {
- return HttpResult.error("当前任务已经审核完成,不可再次提交!");
- }
- if (SysConstants.TO_BE_REVIEW.equals(resultCheck.getReviewStatus())) {
- return HttpResult.error("当前任务已经提交审核,不可再次提交!");
- }
- esmSalaryMapper.updateByPrimaryKeySelective(esmSalary);
- esmSalaryCheckMapper.updateByPrimaryKeySelective(esmSalaryCheck);
- return HttpResult.ok("提交审核成功");
- }
- @Transactional
- @Override
- public HttpResult reviewSalary(EsmSalaryCheck esmSalaryCheck, String userId, String tokemDeptId) {
- if (StringUtils.isNullOrEmpty(esmSalaryCheck.getCheckId())) {
- return HttpResult.error("批次号不可为空!");
- }
- if (StringUtils.isNullOrEmpty(esmSalaryCheck.getReviewStatus())) {
- return HttpResult.error("审核状态不可为空!");
- }
- Date date = new Date();
- EsmSalary esmSalary = new EsmSalary();
- esmSalary.setCheckId(esmSalaryCheck.getCheckId());
- esmSalary.setReviewStatus(esmSalaryCheck.getReviewStatus());
- esmSalaryCheck.setReviewer(userId);
- esmSalaryCheck.setReviewTime(date);
- // 先查询审核状态,不可二次审核
- EsmSalaryCheck resultCheck = esmSalaryCheckMapper.selectByPrimaryKey(esmSalaryCheck.getCheckId());
- if (SysConstants.SUCCESS_REVIEW.equals(resultCheck.getReviewStatus())) {
- return HttpResult.error("当前任务已经审核完成,不可再次提交!");
- }
- if (esmSalary.getReviewStatus().equals(resultCheck.getReviewStatus())) {
- return HttpResult.error("当前任务已经是" + (SysConstants.TO_BE_REVIEW.equals(esmSalary.getReviewStatus()) ? "待审核" : "退回修改 ") + ",不可再次提交!");
- }
- esmSalaryMapper.updateByPrimaryKeySelective(esmSalary);
- esmSalaryCheckMapper.updateByPrimaryKeySelective(esmSalaryCheck);
- return HttpResult.ok("审核成功");
- }
- }
|