package cn.timer.api.controller.xcgl; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import cn.timer.api.bean.kqgl.AttendanceGroup; import cn.timer.api.bean.kqgl.AttendanceReport; import cn.timer.api.bean.kqgl.AttendanceWeeklySch; import cn.timer.api.bean.kqgl.PunchCardDetails; import cn.timer.api.bean.kqgl.PunchRecord; import cn.timer.api.bean.kqgl.Schedule; import cn.timer.api.bean.kqgl.SpecialDate; import cn.timer.api.bean.xcgl.XcglAdminXzz; import cn.timer.api.bean.xcgl.XcglAssoGztsz; import cn.timer.api.bean.xcgl.XcglAssoGztzt; import cn.timer.api.bean.xcgl.XcglAssoJsgzzx; import cn.timer.api.bean.xcgl.XcglAssoJxgz; import cn.timer.api.bean.xcgl.XcglAssoOption; import cn.timer.api.bean.xcgl.XcglAssoXcjsgz; import cn.timer.api.bean.xcgl.XcglAssoXzb; import cn.timer.api.bean.xcgl.XcglAssoXzdadx; import cn.timer.api.bean.xcgl.XcglAssoXzdaz; import cn.timer.api.bean.xcgl.XcglAssoXzdazdy; import cn.timer.api.bean.xcgl.XcglAssoXzury; import cn.timer.api.bean.xcgl.XcglAssoZxfjkc; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.dao.kqgl.AttendanceGroupMapper; import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper; import cn.timer.api.dao.kqgl.PunchCardDetailsMapper; import cn.timer.api.dao.kqgl.PunchRecordMapper; import cn.timer.api.dao.kqgl.ScheduleMapper; import cn.timer.api.dao.kqgl.SpecialDateMapper; import cn.timer.api.dao.xcgl.XcglAdminXzzMapper; import cn.timer.api.dao.xcgl.XcglAssoGztszMapper; import cn.timer.api.dao.xcgl.XcglAssoGztztMapper; import cn.timer.api.dao.xcgl.XcglAssoJsgzzxMapper; import cn.timer.api.dao.xcgl.XcglAssoJxgzMapper; import cn.timer.api.dao.xcgl.XcglAssoOptionMapper; import cn.timer.api.dao.xcgl.XcglAssoXcjsgzMapper; import cn.timer.api.dao.xcgl.XcglAssoXzbMapper; import cn.timer.api.dao.xcgl.XcglAssoXzdadxMapper; import cn.timer.api.dao.xcgl.XcglAssoXzdazMapper; import cn.timer.api.dao.xcgl.XcglAssoXzdazdyMapper; import cn.timer.api.dao.xcgl.XcglAssoXzuryMapper; import cn.timer.api.dao.xcgl.XcglAssoZxfjkcMapper; import cn.timer.api.dao.xcgl.XcglSalaryItemMapper; import cn.timer.api.dao.yggl.YgglMainEmpMapper; import cn.timer.api.dto.sbgjj.InspersonnelDto; import cn.timer.api.dto.xcgl.AdditionalDeductionDto; import cn.timer.api.dto.xcgl.CalculatedFieldDto; import cn.timer.api.dto.xcgl.CalculationDto; import cn.timer.api.dto.xcgl.CalculationOptionsDto; import cn.timer.api.dto.xcgl.ChangeSalaryDto; import cn.timer.api.dto.xcgl.CjPayrollGroupDto; import cn.timer.api.dto.xcgl.ComputeUserDto; import cn.timer.api.dto.xcgl.CustomDto; import cn.timer.api.dto.xcgl.FixedSalaryStaffDto; import cn.timer.api.dto.xcgl.FixedsalaryDto; import cn.timer.api.dto.xcgl.ImportSalaryDto; import cn.timer.api.dto.xcgl.ImportSalarySetDto; import cn.timer.api.dto.xcgl.ModifyPayslipDto; import cn.timer.api.dto.xcgl.PayCustomDto; import cn.timer.api.dto.xcgl.PayCustomZDYDto; import cn.timer.api.dto.xcgl.PayGroupedDataDto; import cn.timer.api.dto.xcgl.PayTermDto; import cn.timer.api.dto.xcgl.PayrollExceptionDto; import cn.timer.api.dto.xcgl.PayrollGroupDto; import cn.timer.api.dto.xcgl.PayslipDetailsDto; import cn.timer.api.dto.xcgl.PayslipListDto; import cn.timer.api.dto.xcgl.SalaryCustomizationDto; import cn.timer.api.dto.xcgl.SalaryFieldDto; import cn.timer.api.dto.xcgl.SalaryGroupGroupingDto; import cn.timer.api.dto.xcgl.SalaryItemRulesDto; import cn.timer.api.dto.xcgl.SalaryPersonFieldDto; import cn.timer.api.dto.xcgl.SearchSalariedPeopleDto; import cn.timer.api.dto.xcgl.SwitchSalaryDateDto; import cn.timer.api.dto.xcgl.TjSalaryItemDot; import cn.timer.api.dto.xcgl.XcglAssoOptionDto; import cn.timer.api.dto.xcgl.YdMobilePacketDto; import cn.timer.api.utils.DateUtil; import cn.timer.api.utils.ResponseResult; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @Api(tags = "薪酬管理Api") @RestController @RequestMapping(value = "/sala", produces = { "application/json" }) public class SalaryManagementController { // 薪酬管理-定薪 @Autowired private XcglAssoXzdadxMapper xcglassoxzdadxmapper; // 薪资档案自定义 @Autowired private XcglAssoXzdazdyMapper xcglassoxzdazdymapper; // 薪资档案值 @Autowired private XcglAssoXzdazMapper xcglassoxzdazmapper; // 薪资组 @Autowired private XcglAdminXzzMapper xcgladminxzzmapper; // 薪资组内人员 @Autowired private XcglAssoXzuryMapper xcglassoxzurymapper; //计薪规则组项 @Autowired private XcglAssoJsgzzxMapper xcglassojsgzzxmapper; //计薪规则组 @Autowired private XcglAssoJxgzMapper xcglassojxgzmapper; //薪酬计算规则公式 @Autowired private XcglAssoXcjsgzMapper xcglassoxcjsgzmapper; //薪资项名 @Autowired private XcglSalaryItemMapper xcglsalaryitemmapper; //薪资选项 @Autowired private XcglAssoOptionMapper xcglassooptionmapper; //薪资表 @Autowired private XcglAssoXzbMapper xcglassoxzbmapper; @Resource private YgglMainEmpMapper ygglmainempmapper; //考勤组 @Autowired private AttendanceGroupMapper attendancegroupservice; //打卡明细表 @Autowired private PunchCardDetailsMapper punchcarddetailsservice; //打卡记录 @Autowired private PunchRecordMapper punchrecordservice; @Autowired private SpecialDateMapper specialdateservice; //考勤周排班 @Autowired private AttendanceWeeklySchMapper attendanceweeklyschservice; //排班明细 @Autowired private ScheduleMapper scheduleservice; //专项附加扣除 @Autowired private XcglAssoZxfjkcMapper xcglassozxfjkcmapper; //工资条组内成员状态 @Autowired private XcglAssoGztztMapper xcglassogztztmapper; //工资条组-设置 @Autowired private XcglAssoGztszMapper xcglassogztszmapper; static SimpleDateFormat mat = new SimpleDateFormat("yyyy-MM-dd"); /** * 获取薪资组信息 */ @GetMapping(value = "/paylist") @ApiOperation(value = "获取薪资组信息", httpMethod = "GET", notes = "接口发布说明") public ResponseResult selectpaylist(@CurrentUser UserBean userBean) { List<XcglAdminXzz> xcgladminxzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getQyid, userBean.getOrgCode()).list(); return new ResponseResult().success("获取薪资组信息成功", xcgladminxzz); } /** * 获取薪资组人员数据 */ @GetMapping(value = "/paygroupdate/{id}") @ApiOperation(value = "获取薪资组人员数据", httpMethod = "GET", notes = "接口发布说明") public ResponseResult Getpaygroupstaff(@CurrentUser UserBean userBean,@PathVariable Integer id) { List<XcglAssoXzury> xzurylist = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getQyid, userBean.getOrgCode()).eq(XcglAssoXzury::getXzzid, id).list(); return new ResponseResult().success("获取薪资组人员数据成功", xzurylist); } /** * 获取薪资组数据 */ @GetMapping(value = "/salarygroupdata/{id}") @ApiOperation(value = "获取薪资组数据", httpMethod = "GET", notes = "接口发布说明") public ResponseResult Salarygroupdata(@CurrentUser UserBean userBean,@PathVariable Integer id) { XcglAdminXzz xzzlist = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getQyid, userBean.getOrgCode()).eq(XcglAdminXzz::getId, id).one(); return new ResponseResult().success("获取薪资组数据成功", xzzlist); } /** * 添加薪资组(选择配薪方式:0-空白模板 df-默认模板) */ @PostMapping(value = "/paygro") @ApiOperation(value = "添加薪资组", httpMethod = "POST", notes = "接口发布说明") public ResponseResult PayrollGroup(@CurrentUser UserBean userBean, @RequestBody PayrollGroupDto paygro) { Integer empNum = userBean.getEmpNum(); Integer orgCode = userBean.getOrgCode(); Calendar lastm = Calendar.getInstance(); lastm.setTime(new Date()); // 设置为当前时间 lastm.set(Calendar.MONTH, lastm.get(Calendar.MONTH) - 1); String lastmonth = new SimpleDateFormat("yyyy-MM").format(lastm.getTime());// 上 Calendar thism = Calendar.getInstance(); lastm.set(Calendar.MONTH, thism.get(Calendar.MONTH) + 1); String thismonth = new SimpleDateFormat("yyyy-MM").format(thism.getTime());// 本 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, 1); String nextMonth = new SimpleDateFormat("yyyy-MM").format(calendar.getTime());// 下 XcglAdminXzz xcglxzz = XcglAdminXzz.builder().build(); xcglxzz.setName(paygro.getName());// 薪资组命名 xcglxzz.setPayperiod(paygro.getPayperiod());// 算薪月周期 0:上月;1:当月 xcglxzz.setPaydayperiod(paygro.getPaydayperiod());// 算薪日周期 全月 String payper = String.format("%02d", paygro.getPaydayperiod()); String payrollcycle = null; if (paygro.getPayperiod() == 0) {// 上月 if (paygro.getPaydayperiod() == 1) { payrollcycle = getfirstlast() + "到" + getlastlast(); } else { String firstnext = lastmonth + "-" + payper; int jgs = paygro.getPaydayperiod() - 1; String lastnext = thismonth + "-" + String.format("%02d", jgs); payrollcycle = firstnext + "到" + lastnext; } } else {// 当月 if (paygro.getPaydayperiod() == 1) { payrollcycle = getfirstnow() + "到" + getlastnow(); } else { String firstnow = thismonth + "-" + payper; int jgs = paygro.getPaydayperiod() - 1; String lastnow = nextMonth + "-" + String.format("%02d", jgs); payrollcycle = firstnow + "到" + lastnow; } } xcglxzz.setPayrollcycle(payrollcycle);// 算薪周期 xcglxzz.setDeletestate(1);// 状态 0:已删除;1:使用中 xcglxzz.setCountstate(0);// 计算状态 0:未计算;1:已计算 xcglxzz.setPxfs(paygro.getPxfs());// 选择配薪方式(0: 空白模板;df:默认) xcglxzz.setAdduserid(empNum);// 员工工号 xcglxzz.setQyid(orgCode);// 企业编码 xcglxzz.setAddtime(new Date().getTime());// 添加时间 xcglxzz.setMonthtime(paygro.getXzyf());//薪资月份 xcgladminxzzmapper.insert(xcglxzz); int payid = xcglxzz.getId(); String[][] mrzd = {{"姓名","从人事花名册-姓名自动提取数据"},{"部门","从人事花名册-部门自动提取数据"},{"职位","从人事花名册-职位自动提取数据"},{"工号","从人事花名册-工号自动提取数据"}}; if(("0").contentEquals(paygro.getPxfs())) {//空白模板 List<XcglAssoJsgzzx> zzxlist = new ArrayList<XcglAssoJsgzzx>(); for(String[] q : mrzd) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(q[0]);//薪资项 zzx.setYhmbzd(q[0]);//银行模板项 需与银行一一对应 zzx.setRule(q[1]);//规则 zzx.setType(1);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(0);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("");//公式格式 系统提供/自定义公式 zzx.setXzzid(payid); zzx.setRulestate(0);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, q[0]).one(); if(opt != null) { zzx.setOptionid(opt.getId()); }else {zzx.setOptionid(0);} zzxlist.add(zzx); } if(zzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(zzxlist); } }else if(("df").contentEquals(paygro.getPxfs())){//默认 //创建分组 //1、人事信息;2、固定工资;3、考勤;4、绩效奖金;5、应发;6、社保公积金;7、个税及实发 String[] grouping = {"人事信息","固定工资","考勤","绩效奖金","应发","社保公积金","个税及实发"}; for(int g=0;g<grouping.length;g++) { XcglAssoJxgz jxgz = new XcglAssoJxgz(); jxgz.setXzzid(payid); jxgz.setName(grouping[g]); jxgz.setRemarks(""); jxgz.setAddtime(new Date().getTime()); jxgz.setAdduserid(empNum); jxgz.setQyid(orgCode); xcglassojxgzmapper.jxgzinsert(jxgz); int groid = jxgz.getId(); if(("人事信息").equals(grouping[g])) { String[][] mrzd1 = {{"姓名","从人事花名册-姓名自动提取数据"},{"部门","从人事花名册-部门自动提取数据"},{"职位","从人事花名册-职位自动提取数据"},{"工号","从人事花名册-工号自动提取数据"}}; List<XcglAssoJsgzzx> zzxlist = new ArrayList<XcglAssoJsgzzx>(); for(String[] q : mrzd1) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(q[0]);//薪资项 zzx.setYhmbzd(q[0]);//银行模板项 需与银行一一对应 zzx.setRule(q[1]);//规则 zzx.setType(1);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("");//公式格式 系统提供/自定义公式 zzx.setXzzid(payid); zzx.setRulestate(0);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, q[0]).one(); if(opt != null) { zzx.setOptionid(opt.getId()); }else {zzx.setOptionid(0);} zzxlist.add(zzx); } if(zzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(zzxlist); } }else if(("固定工资").equals(grouping[g])) { String[] fixed = {"基本工资","岗位津贴"}; List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); for(int f=0;f<fixed.length;f++) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(fixed[f]);//薪资项 zzx.setYhmbzd(fixed[f]);//银行模板项 需与银行一一对应 @SuppressWarnings("unused") XcglAssoXzdazdy daz = xcglassoxzdazdymapper.SalaryFixedWages(fixed[f]); zzx.setRule("从薪资档案-"+fixed[f]+"自动提取数据");//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("从薪资档案-"+fixed[f]+"自动提取数据");//公式格式 系统提供/自定义公式 zzx.setRulestate(1);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] zzx.setOptionid(0); zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(payid); gzzxlist.add(zzx); } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } }else if(("考勤").equals(grouping[g])) { String[] att = {"病假","事假","入离职缺勤天数","入离职缺勤扣款","病假扣款","事假扣款","实出勤天数"}; List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); for(int a=0;a<att.length;a++) { XcglAssoXcjsgz xzxj = xcglassoxcjsgzmapper.QuerySalaryRules(att[a]); XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(att[a]);//薪资项 zzx.setYhmbzd(att[a]);//银行模板项 需与银行一一对应 if(xzxj != null) {//系统有规则 zzx.setRule(xzxj.getGsxs());//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs());//公式格式 系统提供/自定义公式 zzx.setRulestate(2);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] }else { String xxs = "自动提取数据"; String[] strxz = {"从考勤报表-"}; zzx.setRule(strxz[0] + att[a] + xxs);//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs(strxz[0] + att[a] + xxs);//公式格式 系统提供/自定义公式 zzx.setRulestate(0);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] } XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, att[a]).one(); zzx.setOptionid(opt.getId()); zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(payid); gzzxlist.add(zzx); } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } }else if(("绩效奖金").equals(grouping[g])) { String[] jxjj = {"绩效奖金","业绩提成"}; List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); for(int a=0;a<jxjj.length;a++) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(jxjj[a]);//薪资项 zzx.setYhmbzd(jxjj[a]);//银行模板项 需与银行一一对应 zzx.setRule("每月手动导入");//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("每月手动导入");//公式格式 系统提供/自定义公式 zzx.setRulestate(4);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, jxjj[a]).one(); zzx.setOptionid(opt.getId()); zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(payid); gzzxlist.add(zzx); } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } }else if(("应发").equals(grouping[g])) { String[] yingfa = {"应发工资","税前补差"}; List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); for(int a=0;a<yingfa.length;a++) { XcglAssoXcjsgz xzxj = xcglassoxcjsgzmapper.QuerySalaryRules(yingfa[a]); XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(yingfa[a]);//薪资项 zzx.setYhmbzd(yingfa[a]);//银行模板项 需与银行一一对应 if(xzxj != null) {//系统有规则 zzx.setRule(xzxj.getGsxs());//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs());//公式格式 系统提供/自定义公式 zzx.setRulestate(2);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] }else { zzx.setRule("每月手动导入");//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("每月手动导入");//公式格式 系统提供/自定义公式 zzx.setRulestate(4);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] } XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, yingfa[a]).one(); zzx.setOptionid(opt.getId()); zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(payid); gzzxlist.add(zzx); } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } }else if(("社保公积金").equals(grouping[g])) { String[] sbgjj = {"个人社保","个人公积金"}; List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); for(int a=0;a<sbgjj.length;a++) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(sbgjj[a]);//薪资项 zzx.setYhmbzd(sbgjj[a]);//银行模板项 需与银行一一对应 String xxs = "自动提取数据"; String[] strxz = {"从社保账单-"}; zzx.setRule(strxz[0] + sbgjj[a]+"部分合计" + xxs);//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs(strxz[0] + sbgjj[a]+"部分合计" + xxs);//公式格式 系统提供/自定义公式 zzx.setRulestate(0);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, sbgjj[a]).one(); zzx.setOptionid(opt.getId()); zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(payid); gzzxlist.add(zzx); } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } }else if(("个税及实发").equals(grouping[g])) { String[] jsjsf = {"个税","实发工资"}; List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); for(int a=0;a<jsjsf.length;a++) { XcglAssoXcjsgz xzxj = xcglassoxcjsgzmapper.QuerySalaryRules(jsjsf[a]); XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(jsjsf[a]);//薪资项 zzx.setYhmbzd(jsjsf[a]);//银行模板项 需与银行一一对应 zzx.setRule(xzxj.getGsxs());//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs());//公式格式 系统提供/自定义公式 zzx.setRulestate(2);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, jsjsf[a]).one(); zzx.setOptionid(opt.getId()); zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(groid);//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(payid); gzzxlist.add(zzx); } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } } } }else {//从其他薪资组复制规则 /*****************/ //未加入分组 List<XcglAssoJsgzzx> wjrfzlist = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, paygro.getPxfs()).eq(XcglAssoJsgzzx::getJxgzid,0).list(); List<XcglAssoJsgzzx> wjrfzzzxlist = new ArrayList<XcglAssoJsgzzx>(); for(XcglAssoJsgzzx zxs : wjrfzlist) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(zxs.getSalaryitem());//薪资项 zzx.setYhmbzd(zxs.getYhmbzd());//银行模板项 需与银行一一对应 zzx.setRule(zxs.getRule());//规则 zzx.setType(zxs.getType());//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(zxs.getJxgzid());//计薪规则组id 0:未加入组 zzx.setRemarks(zxs.getRemarks());//备注 zzx.setGsid(zxs.getGsid());//公式id 0:未关联规则 zzx.setGsgs(zxs.getGsgs());//公式格式 系统提供/自定义公式 zzx.setXzzid(payid); zzx.setRulestate(zxs.getRulestate());//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] zzx.setOptionid(zxs.getOptionid()); wjrfzzzxlist.add(zzx); } if(wjrfzzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(wjrfzzzxlist); } /*************/ //计薪规则组 List<XcglAssoJxgz> jxgzlist = new LambdaQueryChainWrapper<XcglAssoJxgz>(xcglassojxgzmapper).eq(XcglAssoJxgz::getXzzid, paygro.getPxfs()).list(); @SuppressWarnings("unused") List<XcglAssoJxgz> jxgzs = new ArrayList<XcglAssoJxgz>(); for(XcglAssoJxgz jxgzl : jxgzlist) { XcglAssoJxgz jxgz = new XcglAssoJxgz(); jxgz.setXzzid(payid); jxgz.setName(jxgzl.getName()); jxgz.setRemarks(jxgzl.getRemarks()); jxgz.setAddtime(new Date().getTime()); jxgz.setAdduserid(empNum); jxgz.setQyid(orgCode); // jxgzs.add(jxgz); xcglassojxgzmapper.jxgzinsert(jxgz); int jxgzid = jxgz.getId(); List<XcglAssoJsgzzx> yjrfzlist = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, paygro.getPxfs()).eq(XcglAssoJsgzzx::getJxgzid,jxgzl.getId()).list(); if(yjrfzlist.size() > 0) { List<XcglAssoJsgzzx> yjrfzzzxlist = new ArrayList<XcglAssoJsgzzx>(); for(XcglAssoJsgzzx yzxs : yjrfzlist) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(yzxs.getSalaryitem());//薪资项 zzx.setYhmbzd(yzxs.getYhmbzd());//银行模板项 需与银行一一对应 zzx.setRule(yzxs.getRule());//规则 zzx.setType(yzxs.getType());//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(empNum);//添加人员id zzx.setJxgzid(jxgzid);//计薪规则组id 0:未加入组 zzx.setRemarks(yzxs.getRemarks());//备注 zzx.setGsid(yzxs.getGsid());//公式id 0:未关联规则 zzx.setGsgs(yzxs.getGsgs());//公式格式 系统提供/自定义公式 zzx.setXzzid(payid); zzx.setRulestate(yzxs.getRulestate());//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] zzx.setOptionid(zzx.getOptionid()); yjrfzzzxlist.add(zzx); } if(yjrfzzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(yjrfzzzxlist); } } } } List<XcglAssoXzury> xcgllist = new ArrayList<XcglAssoXzury>(); String[] attser = paygro.getPayuserids(); if (attser.length > 0) { for (int u = 0; u < attser.length; u++) { xcglassoxzurymapper.deleteByuseridoqyid(Integer.valueOf(attser[u]), orgCode); XcglAssoXzury kquser = new XcglAssoXzury(); kquser.setXzzid(payid);// 薪资组id kquser.setUserid(Integer.valueOf(attser[u])); kquser.setQyid(orgCode); xcgllist.add(kquser); } } if (xcgllist.size() > 0) { xcglassoxzurymapper.insertxcglassoxzuryList(xcgllist); } return new ResponseResult().success("添加/修改薪资组成功", xcglxzz); } /** * 删除薪资组 */ @DeleteMapping(value = "/paydelete/{id}") @ApiOperation(value = "删除薪资组", httpMethod = "DELETE", notes = "接口发布说明") public ResponseResult paydelete(@PathVariable Integer id) { XcglAdminXzz.builder().build().deleteById(id); List<XcglAssoXzury> znrylist = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getXzzid, id).list(); for(XcglAssoXzury qcjs:znrylist) { xcglassoxzbmapper.deleteXcglAssoXzb(qcjs.getUserid()); } xcglassoxzurymapper.xzurydelete(id); xcglassojxgzmapper.deleteByxzzid(id);//计薪规则组 xcglassojsgzzxmapper.deleteByxzzid(id);//计薪规则组项 xcglassogztztmapper.deletegztztByxzzid(id); xcglassogztszmapper.deletexcglassogztszByxzzid(id); return new ResponseResult().success("删除成功", id); } /** * 修改薪资组 */ @PutMapping(value = "/salarygroup") @ApiOperation(value = "修改薪资组", httpMethod = "PUT", notes = "接口发布说明") public ResponseResult ModifySalaryGroup(@CurrentUser UserBean userBean, @RequestBody PayrollGroupDto paygro) { @SuppressWarnings("unused") Integer empNum = userBean.getEmpNum(); Integer orgCode = userBean.getOrgCode(); Calendar lastm = Calendar.getInstance(); lastm.setTime(new Date()); // 设置为当前时间 lastm.set(Calendar.MONTH, lastm.get(Calendar.MONTH) - 1); String lastmonth = new SimpleDateFormat("yyyy-MM").format(lastm.getTime());// 上 Calendar thism = Calendar.getInstance(); lastm.set(Calendar.MONTH, thism.get(Calendar.MONTH) + 1); String thismonth = new SimpleDateFormat("yyyy-MM").format(thism.getTime());// 本 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, 1); String nextMonth = new SimpleDateFormat("yyyy-MM").format(calendar.getTime());// 下 XcglAdminXzz xcglxzz = XcglAdminXzz.builder().build(); xcglxzz.setName(paygro.getName());// 薪资组命名 xcglxzz.setPayperiod(paygro.getPayperiod());// 算薪月周期 0:上月;1:当月 xcglxzz.setPaydayperiod(paygro.getPaydayperiod());// 算薪日周期 全月 String payper = String.format("%02d", paygro.getPaydayperiod()); String payrollcycle = null; if (paygro.getPayperiod() == 0) {// 上月 if (paygro.getPaydayperiod() == 1) { payrollcycle = getfirstlast() + "到" + getlastlast(); } else { String firstnext = lastmonth + "-" + payper; int jgs = paygro.getPaydayperiod() - 1; String lastnext = thismonth + "-" + String.format("%02d", jgs); payrollcycle = firstnext + "到" + lastnext; } } else {// 当月 if (paygro.getPaydayperiod() == 1) { payrollcycle = getfirstnow() + "到" + getlastnow(); } else { String firstnow = thismonth + "-" + payper; int jgs = paygro.getPaydayperiod() - 1; String lastnow = nextMonth + "-" + String.format("%02d", jgs); payrollcycle = firstnow + "到" + lastnow; } } xcglxzz.setPayrollcycle(payrollcycle);// 算薪周期 xcglxzz.setDeletestate(1);// 状态 0:已删除;1:使用中 xcglxzz.setCountstate(0);// 计算状态 0:未计算;1:已计算 xcglxzz.setPxfs(paygro.getPxfs());// 选择配薪方式(0:空白模板;df:默认) xcglxzz.setQyid(orgCode);// 企业编码 xcglxzz.setId(paygro.getId()); xcglxzz.updateById(); int payid = paygro.getId(); xcglassoxzurymapper.xzurydelete(payid); List<XcglAssoXzury> xcgllist = new ArrayList<XcglAssoXzury>(); String[] attser = paygro.getPayuserids(); if (attser.length > 0) { for (int u = 0; u < attser.length; u++) { XcglAssoXzury kquser = new XcglAssoXzury(); kquser.setXzzid(payid);// 薪资组id kquser.setUserid(Integer.valueOf(attser[u])); kquser.setQyid(orgCode); xcgllist.add(kquser); } } if (xcgllist.size() > 0) { xcglassoxzurymapper.insertxcglassoxzuryList(xcgllist); } return new ResponseResult().success("修改薪资组成功", xcglxzz); } /** * 获取自定义薪资组表头信息 */ @GetMapping(value = "/paycustom") @ApiOperation(value = "获取自定义薪资组信息", httpMethod = "GET", notes = "接口发布说明") public ResponseResult selectpaycustomlist(@CurrentUser UserBean userBean) { List<XcglAssoXzdazdy> Xzdazdy = new LambdaQueryChainWrapper<XcglAssoXzdazdy>(xcglassoxzdazdymapper).eq(XcglAssoXzdazdy::getQyid, userBean.getOrgCode()).list(); return new ResponseResult().success("获取自定义薪资组表头信息", Xzdazdy); } /** * 查询定薪人员+模糊查询 */ @PostMapping(value = "/fixedstaff") @ApiOperation(value = "查询定薪人员", httpMethod = "POST", notes = "接口发布说明") public ResponseResult FixedSalarStaff(@CurrentUser UserBean userBean,@RequestBody SearchSalariedPeopleDto search) { search.setOrgcode(userBean.getOrgCode()); if(("0").equals(search.getStatus())) {//全部 search.setStatus(""); }else if(("1").equals(search.getStatus())) {//在职 search.setStatus("0"); }else { search.setStatus("3"); } List<FixedSalaryStaffDto> dxrylist = xcglassoxzdazdymapper.selectFixedSalaryStaff(search);// return new ResponseResult().success("获取自定义薪资组表头信息", dxrylist); } /** * 自定义薪资表头 */ @PostMapping(value = "/Custsave") @ApiOperation(value = "添加/修改薪资档案自定义", httpMethod = "POST", notes = "接口发布说明") public ResponseResult Customheadersave(@CurrentUser UserBean userBean,@RequestBody SalaryCustomizationDto salarycustomizationdto) { List<XcglAssoXzdazdy> xzdazdy = new LambdaQueryChainWrapper<XcglAssoXzdazdy>(xcglassoxzdazdymapper).eq(XcglAssoXzdazdy::getQyid, userBean.getOrgCode()).list(); List<XcglAssoXzdazdy> zdylist = new ArrayList<XcglAssoXzdazdy>(); PayCustomDto[] paycus = salarycustomizationdto.getPaycustomdto();// if (paycus.length > 0) { int z = xzdazdy.size() + 1; for (int p = 0; p < paycus.length; p++) { if (paycus[p].getId() != 0) {// 修改 XcglAssoXzdazdy zdy = new XcglAssoXzdazdy(); zdy.setId(paycus[p].getId()); zdy.setZdmc(paycus[p].getTitle());// 字段名 int zdsrklx = 2; if (paycus[p].getType() == "文字") { zdsrklx = 1; } zdy.setZdsrklx(zdsrklx);// 字段输入框类型 1:文本 2:数字 xcglassoxzdazdymapper.dazdyupdate(zdy); } else {// 新增 XcglAssoXzdazdy zdy = new XcglAssoXzdazdy(); zdy.setQyid(userBean.getOrgCode());// 企业 zdy.setXhpx(z);// 序号 zdy.setZdmc(paycus[p].getTitle());// 字段名 int zdsrklx = 2; if (paycus[p].getType() == "文字") { zdsrklx = 1; } zdy.setZdsrklx(zdsrklx);// 字段输入框类型 1:文本 2:数字 zdy.setZdlx(1);// 字段类型 0:系统项 1:自定义 zdylist.add(zdy); z++; } } } if (zdylist.size() > 0) { xcglassoxzdazdymapper.insertxcglassoxzdazdyList(zdylist); } //薪资档案-定薪 List<XcglAssoXzdadx> xzdxlist = new LambdaQueryChainWrapper<XcglAssoXzdadx>(xcglassoxzdadxmapper).eq(XcglAssoXzdadx::getQyid, userBean.getOrgCode()).list(); for(XcglAssoXzdazdy xzd:zdylist) {//26 测试字段 for(XcglAssoXzdadx dad:xzdxlist) { // XcglAssoXzdaz daz = new LambdaQueryChainWrapper<XcglAssoXzdaz>(xcglassoxzdazmapper).eq(XcglAssoXzdaz::getXzdazdyid, xzd.getId()).eq(XcglAssoXzdaz::getXzdadxid,dad.getId()).one(); if(daz == null) { XcglAssoXzdaz xzdaz = new XcglAssoXzdaz(); xzdaz.setXzdazdyid(xzd.getId()); xzdaz.setRsz(""); xzdaz.setXzdadxid(dad.getId()); xzdaz.insert(); } } } return new ResponseResult().success("添加/修改成功", zdylist); } /** * 删除薪资组自定义表头 */ @DeleteMapping(value = "/customdelete/{id}") @ApiOperation(value = "删除薪资组自定义表头", httpMethod = "DELETE", notes = "接口发布说明") public ResponseResult customdelete(@CurrentUser UserBean userBean,@PathVariable Integer id) { XcglAssoXzdazdy.builder().build().deleteById(id); return new ResponseResult().success("删除成功", id); } /** * 初始化数据 */ @GetMapping(value = "/initialization") @ApiOperation(value = "初始化薪资档案自定义", httpMethod = "GET", notes = "接口发布说明") public ResponseResult Initialization(@CurrentUser UserBean userBean) { List<XcglAssoXzdazdy> cshsj = xcglassoxzdazdymapper.selectxcglassoxzdazdy(userBean.getOrgCode()); String[] zdmc = { "基本工资", "绩效工资", "岗位津贴", "加班工资" }; // 检查是否有初始化数据 if (cshsj.size() == 0) { for (int z = 0; z < zdmc.length; z++) { XcglAssoXzdazdy zdy = new XcglAssoXzdazdy(); zdy.setZdmc(zdmc[z]);// 字段名 zdy.setZdsrklx(2);// 字段输入框类型 1:文本 2:数字 zdy.setZdlx(0);// 字段类型 0:系统项 1:自定义 zdy.setQyid(userBean.getOrgCode());// 企业id zdy.setXhpx(z + 1);// 序号 zdy.insert(); } } return new ResponseResult().success("初始化成功", null); } /** * 定薪 */ @PostMapping(value = "/fixedsalary") @ApiOperation(value = "定薪", httpMethod = "POST", notes = "接口发布说明") public ResponseResult fixedsalary(@CurrentUser UserBean userBean,@RequestBody FixedsalaryDto fixedsalarydto) { XcglAssoXzdadx xzdadx = XcglAssoXzdadx.builder().build(); xzdadx.setUserid(Integer.valueOf(fixedsalarydto.getId()));//用户id xzdadx.setSxrq(fixedsalarydto.getSxrq());//生效日期 xzdadx.setAddtime(new Date().getTime()); xzdadx.setRemarks(fixedsalarydto.getRemarks()); xzdadx.setQyid(userBean.getOrgCode()); xzdadx.setTxzt(0);//0:使用中;1:最近使用;2:历史 xcglassoxzdadxmapper.xzdadxinsert(xzdadx); int zdyid = xzdadx.getId(); List<XcglAssoXzdaz> xzdazlist=new ArrayList<XcglAssoXzdaz>(); CustomDto[] cus = fixedsalarydto.getCus(); if(cus.length>0){ for(int p=0;p<cus.length;p++){ XcglAssoXzdaz xzdaz = new XcglAssoXzdaz(); xzdaz.setXzdazdyid(cus[p].getId());//薪资档案自定义id xzdaz.setRsz(cus[p].getVal());//输入值 xzdaz.setXzdadxid(zdyid);//薪资档案-定薪id xzdazlist.add(xzdaz); } } if(xzdazlist.size()>0){ xcglassoxzdazmapper.insertxcglassoxzdazList(xzdazlist); } return new ResponseResult().success("成功", xzdadx); } /** * 获取调薪数据 */ @GetMapping(value = "/getsalaryadjustment/{empnum}") @ApiOperation(value = "获取调薪数据", httpMethod = "GET", notes = "接口发布说明") public ResponseResult GetSalaryAdjustment(@CurrentUser UserBean userBean,@PathVariable Integer empnum) { List<ChangeSalaryDto> hqtxsj = xcglassoxzdazdymapper.AchieveSalaryAdjustment(userBean.getOrgCode(),empnum); return new ResponseResult().success("获取自定义薪资组表头信息", hqtxsj); } /** * 调薪 */ @PostMapping(value = "/payensaad") @ApiOperation(value = "调薪", httpMethod = "POST", notes = "接口发布说明") public ResponseResult EnterSalaryAdjustment(@CurrentUser UserBean userBean,@RequestBody FixedsalaryDto fixedsalarydto) { XcglAssoXzdadx xzds = new LambdaQueryChainWrapper<XcglAssoXzdadx>(xcglassoxzdadxmapper).eq(XcglAssoXzdadx::getUserid, Integer.valueOf(fixedsalarydto.getId())).eq(XcglAssoXzdadx::getTxzt, 0).one(); if(xzds != null) { XcglAssoXzdadx txrz = XcglAssoXzdadx.builder().build(); txrz.setTxzt(1);//使用状态(0:使用中;1:历史 txrz.setId(xzds.getId()); txrz.updateById(); XcglAssoXzdadx xzdadx = XcglAssoXzdadx.builder().build(); xzdadx.setUserid(Integer.valueOf(fixedsalarydto.getId()));//用户id xzdadx.setSxrq(fixedsalarydto.getSxrq());//生效日期 xzdadx.setAddtime(new Date().getTime()); xzdadx.setXgyhid(userBean.getEmpNum());//修改用户id xzdadx.setRemarks(fixedsalarydto.getRemarks()); xzdadx.setQyid(userBean.getOrgCode()); xzdadx.setTxzt(0);//0:使用中;1:历史 xcglassoxzdadxmapper.xzdadxinsert(xzdadx); int zdyid = xzdadx.getId(); List<XcglAssoXzdaz> xzdazlist=new ArrayList<XcglAssoXzdaz>(); CustomDto[] cus = fixedsalarydto.getCus(); if(cus.length>0){ for(int p=0;p<cus.length;p++){ XcglAssoXzdaz xzdaz = new XcglAssoXzdaz(); xzdaz.setXzdazdyid(cus[p].getId());//薪资档案自定义id xzdaz.setRsz(cus[p].getVal());//输入值 xzdaz.setXzdadxid(zdyid);//薪资档案-定薪id xzdazlist.add(xzdaz); } } if(xzdazlist.size()>0){ xcglassoxzdazmapper.insertxcglassoxzdazList(xzdazlist); } return new ResponseResult().success("调薪成功", xzdadx); } return new ResponseResult().error("调薪失败"); } /** * 调薪记录 */ @GetMapping(value = "/payzdysj/{id}") @ApiOperation(value = "获取调薪记录信息", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SalaryAdjustmentRecord(@CurrentUser UserBean userBean,@PathVariable Integer id) { List<FixedSalaryStaffDto> txjllist = xcglassoxzdazdymapper.SalaryAdjustmentRecord(userBean.getOrgCode(),id); return new ResponseResult().success("获取调薪记录信息", txjllist); } /** * 删除调薪记录 */ @DeleteMapping(value = "/delSalaryAdjustmentRecord/{id}") @ApiOperation(value = "删除调薪记录", httpMethod = "DELETE", notes = "接口发布说明") public ResponseResult delSalaryAdjustmentRecord(@CurrentUser UserBean userBean,@PathVariable Integer id) { XcglAssoXzdadx.builder().build().deleteById(id);//薪资档案-定薪 xcglassoxzdazmapper.Recorddelete(id);//薪资档案值 return new ResponseResult().success("删除成功", id); } /** * 获取薪资选项 */ @GetMapping(value = "/salaryoptions") @ApiOperation(value = "获取薪资选项", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SalaryOoptions(@CurrentUser UserBean userBean) { List<XcglAssoOptionDto> itemlist = xcglsalaryitemmapper.selectxcglsalaryitemList(); return new ResponseResult().success("获取薪资选项信息", itemlist); } /** * 创建薪资组 */ @PostMapping(value = "/paycreategro") @ApiOperation(value = "创建薪资组", httpMethod = "POST", notes = "接口发布说明") public ResponseResult CreatePayGroup(@CurrentUser UserBean userBean,@RequestBody CjPayrollGroupDto cjpaygro) { XcglAssoJxgz jxgz = new XcglAssoJxgz(); jxgz.setXzzid(cjpaygro.getId()); jxgz.setName(cjpaygro.getName()); jxgz.setRemarks(cjpaygro.getRemarks()); jxgz.setAddtime(new Date().getTime()); jxgz.setAdduserid(userBean.getEmpNum()); jxgz.setQyid(userBean.getOrgCode()); xcglassojxgzmapper.jxgzinsert(jxgz); return new ResponseResult().success("创建薪资组成功", jxgz); } /** * 修改薪资组 */ @PutMapping(value = "/movecreatepaygroup") @ApiOperation(value = "修改薪资组", httpMethod = "PUT", notes = "接口发布说明") public Result<XcglAssoJxgz> MoveCreatePayGroup(@RequestBody CjPayrollGroupDto cjpaygro) { XcglAssoJxgz jxgz = XcglAssoJxgz.builder().build(); jxgz.setId(cjpaygro.getId()); jxgz.setName(cjpaygro.getName()); jxgz.setRemarks(cjpaygro.getRemarks()); jxgz.updateById(); return ResultUtil.data(jxgz,"编辑员工权限成功"); } /** * 删除薪资组 */ @DeleteMapping(value = "/delcreatepaygroup/{id}") @ApiOperation(value = "删除薪资组", httpMethod = "DELETE", notes = "接口发布说明") public ResponseResult deleteCreatePayGroup(@PathVariable Integer id) { List<XcglAssoJsgzzx> jsgzzx = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getJxgzid, id).list(); if(jsgzzx.size() > 0) {// for(XcglAssoJsgzzx jsgz:jsgzzx) { XcglAssoJsgzzx jsg = XcglAssoJsgzzx.builder().build(); jsg.setId(jsgz.getId()); jsg.setJxgzid(0); jsg.updateById(); } } XcglAssoJxgz.builder().build().deleteById(id); return new ResponseResult().success("解散成功", id); } /** * 删除薪资项 */ @DeleteMapping(value = "/deletesalaryitem/{id}/{ident}") @ApiOperation(value = "删除薪资项", httpMethod = "DELETE", notes = "接口发布说明") public ResponseResult deleteSalaryItem(@PathVariable Integer id,@PathVariable Integer ident) { if(ident == 1) { XcglAssoJsgzzx zx = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getId, id).one(); XcglAdminXzz yjs = XcglAdminXzz.builder().build(); yjs.setCountstate(0);//计算状态 0:未计算;1:已计算 yjs.setId(zx.getXzzid()); yjs.updateById(); List<XcglAssoXzury> znrylist = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getXzzid, zx.getXzzid()).list(); for(XcglAssoXzury qcjs:znrylist) { xcglassoxzbmapper.deleteXcglAssoXzb(qcjs.getUserid()); } } XcglAssoJsgzzx.builder().build().deleteById(id); return new ResponseResult().success("删除成功", id); } @GetMapping(value = "/paysettings/{id}") @ApiOperation(value = "计薪规则设置", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SalaryCalculationRuleSettings(@PathVariable Integer id) { SalaryGroupGroupingDto salgr = new SalaryGroupGroupingDto(); //#薪资组里未加入分组的字段 List<PayTermDto> jsgzzx = xcglassojsgzzxmapper.selectxcglassojxgzList(id); salgr.setJsgzzx(jsgzzx); //#加入分组的字段 List<PayGroupedDataDto> jrxzzs = xcglassojxgzmapper.selectPayrollGroupList(id); salgr.setPaygrte(jrxzzs); return new ResponseResult().success("获取调薪记录信息", salgr); } /** * 创建计薪规则组项【非自定义】 */ @PostMapping(value = "/payrulegroupitem") @ApiOperation(value = "创建计薪规则组项", httpMethod = "POST", notes = "接口发布说明") public ResponseResult PayRuleGroupItem(@CurrentUser UserBean userBean,@RequestBody TjSalaryItemDot tjsal) { if(tjsal.getIdent() == 1) {// XcglAdminXzz yjs = XcglAdminXzz.builder().build(); yjs.setCountstate(0);//计算状态 0:未计算;1:已计算 yjs.setId(tjsal.getId()); yjs.updateById(); List<XcglAssoXzury> znrylist = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getXzzid, tjsal.getId()).eq(XcglAssoXzury::getQyid,userBean.getOrgCode()).list(); for(XcglAssoXzury qcjs:znrylist) { xcglassoxzbmapper.deleteXcglAssoXzb(qcjs.getUserid()); } } List<XcglAssoJsgzzx> gzzxlist=new ArrayList<XcglAssoJsgzzx>(); //optitemid;//类型 1:人事信息、2:考勤、3:绩效奖金、4:应发、5:社保公积金、6:个税及实发 SalaryItemRulesDto[] term = tjsal.getTerm(); if(term.length > 0){ for(int a=0;a<term.length;a++){ XcglAssoXcjsgz xzxj = xcglassoxcjsgzmapper.QuerySalaryRules(term[a].getOptname()); XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(term[a].getOptname());//薪资项 zzx.setYhmbzd(term[a].getOptname());//银行模板项 需与银行一一对应 if(xzxj != null && term[a].getOptitemid() != 0) {//系统有规则 zzx.setRule(xzxj.getGsxs());//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs());//公式格式 系统提供/自定义公式 zzx.setRulestate(2);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] }else {//系统无规则 //薪资档案自定义 XcglAssoXzdazdy daz = xcglassoxzdazdymapper.SalaryFixedWages(term[a].getOptname()); if(daz!=null && term[a].getOptitemid() == 0) {//系统有固定设值 ==> term[a].getOptitemid() == 0 zzx.setRule("从薪资档案-"+term[a].getOptname()+"自动提取数据");//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("从薪资档案-"+term[a].getOptname()+"自动提取数据");//公式格式 系统提供/自定义公式 zzx.setRulestate(1);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] }else {// String xxs = "自动提取数据"; String[] strxz = {"从人事花名册-","从考勤报表-","从社保账单-"}; String describe = ""; int rule = 0;//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月手动导入] if(term[a].getOptitemid() == 1) {//人事信息 describe = strxz[0] + term[a].getOptname() + xxs; }else if(term[a].getOptitemid() == 2){//考勤 describe = strxz[1] + term[a].getOptname() + xxs; }else if(term[a].getOptitemid() == 3){//绩效奖金 describe = "每月手动导入"; rule = 4; }else if(term[a].getOptitemid() == 4){//应发 describe = "每月手动导入"; rule = 4; }else if(term[a].getOptitemid() == 5){//社保公积金 describe = strxz[2] + term[a].getOptname()+"部分合计" + xxs; } zzx.setRule(describe);//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs(describe);//公式格式 系统提供/自定义公式 zzx.setRulestate(rule);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] } } if(term[a].getOptitemid() != 0) { XcglAssoOption opt = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getOptionname, term[a].getOptname()).one(); zzx.setOptionid(opt.getId()); }else { zzx.setOptionid(0); } zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(userBean.getEmpNum());//添加人员id zzx.setJxgzid(tjsal.getGroid());//计薪规则组id 0:未加入组 zzx.setRemarks("");//备注 zzx.setXzzid(tjsal.getId()); gzzxlist.add(zzx); } } if(gzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(gzzxlist); } return new ResponseResult().success("创建薪资组成功", gzzxlist); } /** * 创建自定义计薪规则组项 */ @PostMapping(value = "/payCustomitem") @ApiOperation(value = "创建自定义计薪规则组项", httpMethod = "POST", notes = "接口发布说明") public ResponseResult PayCustomRuleGroupItem(@CurrentUser UserBean userBean,@RequestBody PayCustomZDYDto payc) { XcglAssoJsgzzx zzx = XcglAssoJsgzzx.builder().build(); zzx.setSalaryitem(payc.getName());//薪资项 zzx.setYhmbzd(payc.getName());//银行模板项 需与银行一一对应 if(payc.getSource() == 1) {//自定义公式 zzx.setRule(payc.getFormula());//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs(payc.getFormula());//公式格式 系统提供/自定义公式 zzx.setRulestate(3);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] }else if(payc.getSource() == 2){ zzx.setRule("每月手动导入");//规则******************************** zzx.setGsid(0);//公式id 0:未关联规则 zzx.setGsgs("每月手动导入");//公式格式 系统提供/自定义公式 zzx.setRulestate(4);//规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] } zzx.setType(2);//类型 1:系统项;2:非系统项 zzx.setAddtime(new Date().getTime());//添加时间 zzx.setAdduserid(userBean.getEmpNum());//添加人员id zzx.setJxgzid(payc.getFgid());//计薪规则组id 0:未加入组 zzx.setRemarks(payc.getRemarks());//备注 zzx.setXzzid(payc.getGid());// zzx.setOptionid(0); xcglassojsgzzxmapper.jsgzzxinsert(zzx); return new ResponseResult().success("创建薪资组成功", zzx); } /** * 获取薪资项公式 */ @GetMapping(value = "/salaryitemformula") @ApiOperation(value = "获取薪资项公式", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SalaryItemFormula(@PathVariable String text) { XcglAssoXcjsgz xzxj = xcglassoxcjsgzmapper.QuerySalaryRules(text); return new ResponseResult().success("创建薪资组成功", xzxj); } /** * 移动薪资项 */ @PutMapping(value = "/movesalaryitem") @ApiOperation(value = "移动薪资项", httpMethod = "PUT", notes = "接口发布说明") public ResponseResult MoveSalaryItem(@RequestBody YdMobilePacketDto ydmob) { if(ydmob.getYdgid() != 0) {//踢出当前薪资组 XcglAssoJsgzzx jsgzzx = XcglAssoJsgzzx.builder().build(); jsgzzx.setJxgzid(ydmob.getYdgid()); jsgzzx.setId(ydmob.getXid()); jsgzzx.updateById(); }else { XcglAssoJsgzzx jsgzzx = XcglAssoJsgzzx.builder().build(); jsgzzx.setJxgzid(0); jsgzzx.setId(ydmob.getXid()); jsgzzx.updateById(); } return new ResponseResult().success("移动薪资项成功", null); } /*******计算薪资*********/ /** * 获取计薪规则组项 */ @GetMapping(value = "/payrulegroupitem/{id}") @ApiOperation(value = "获取计薪规则组项", httpMethod = "GET", notes = "接口发布说明") public ResponseResult Payrulegroupitem(@CurrentUser UserBean userBean,@PathVariable Integer id) { SalaryFieldDto salfie = new SalaryFieldDto(); List<XcglAssoJsgzzx> jsgzzxlist = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, id).eq(XcglAssoJsgzzx::getType,2).list(); List<CalculatedFieldDto> fielist = new ArrayList<CalculatedFieldDto>(); for(XcglAssoJsgzzx jsg : jsgzzxlist) { CalculatedFieldDto fie = new CalculatedFieldDto(); fie.setId(jsg.getId()); fie.setTitle(jsg.getSalaryitem()); fie.setFormula(jsg.getGsgs());//公式 fielist.add(fie); } if(fielist.size() > 0) { salfie.setCalfie(fielist); } List<SalaryPersonFieldDto> userfies = xcglassoxzurymapper.selectpersonfieldList(id,userBean.getOrgCode()); List<ComputeUserDto> usfil = new ArrayList<ComputeUserDto>(); for(SalaryPersonFieldDto usfl:userfies) { ComputeUserDto ufd = new ComputeUserDto(); // ufd.setName(usfl.getUsername()); // ufd.setUsernum(usfl.getUsernum()); ufd.setEmpname(usfl.getUsername()); ufd.setDept(usfl.getDept());//部门 ufd.setPost(usfl.getPost());//职位 ufd.setEmpnum(usfl.getUsernum()); usfil.add(ufd); } if(usfil.size() > 0) { salfie.setComuser(usfil); } return new ResponseResult().success("获取计薪规则组项成功", salfie); } /** * 计算薪资 */ @GetMapping(value = "/calculatesalary/{id}/{typeid}/{sxrq}") @ApiOperation(value = "计算薪资", httpMethod = "GET", notes = "接口发布说明") public ResponseResult CalculateSalary(@CurrentUser UserBean userBean,@PathVariable Integer id,@PathVariable Integer typeid,@PathVariable String sxrq) { //typeid--1:计算 2:重新计算 //已知薪资组id**** //规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] //计算薪资改变薪资组计算状态 XcglAdminXzz yjs = XcglAdminXzz.builder().build(); yjs.setCountstate(1);//计算状态 0:未计算;1:已计算 yjs.setId(id); yjs.updateById(); // List<XcglAssoJsgzzx> attsect = xcglassojsgzzxmapper.selectSalarySectionList(id); //薪资组信息 @SuppressWarnings("unused") XcglAdminXzz xzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getId, id).one(); //当前薪资组内人员 List<XcglAssoXzury> znrys = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getXzzid, id).eq(XcglAssoXzury::getQyid,userBean.getOrgCode()).list(); List<CalculationDto> jswsj = null; if(znrys.size() > 0) {//该薪资组有成员 for(XcglAssoXzury znr:znrys) { // if(typeid.equals(1)) {//计算 //如果是重新计算 就不要删除同步考勤的数据 // xcglassoxzbmapper.deleteXcglAssoXzb(znr.getUserid());//删除已经计算的薪资 // }else {//重新计算 //如果是重新计算 就不要删除同步考勤的数据 xcglassoxzbmapper.deleteByuserid(znr.getUserid(),id,sxrq);//删除已经计算的薪资 // } //查询员工定薪数据 XcglAssoXzdadx isdx = new LambdaQueryChainWrapper<XcglAssoXzdadx>(xcglassoxzdadxmapper).eq(XcglAssoXzdadx::getUserid,znr.getUserid()).eq(XcglAssoXzdadx::getQyid, userBean.getOrgCode()).eq(XcglAssoXzdadx::getTxzt, 0).one(); if(isdx != null) { //查询 “1:系统固定值”数据----入[薪资表] List<CalculationOptionsDto> gdxzx = xcglassojsgzzxmapper.selectCalculationOptionsList(id,znr.getUserid()); for(CalculationOptionsDto cal:gdxzx) { XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(cal.getId());//薪资项id xzb.setXzxjg(cal.getRsz());//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } }else { //未定薪人员 薪资表内“1:系统固定值”全为-->0 List<XcglAssoJsgzzx> jsgzzxlist = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, id).eq(XcglAssoJsgzzx::getRulestate,1).list(); for(XcglAssoJsgzzx cal:jsgzzxlist) { XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(cal.getId());//薪资项id xzb.setXzxjg("0");//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } } //查询“0:系统自动提取”数据----入[薪资表] 200---姓名 List<XcglAssoJsgzzx> xtzdtqlist = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, id).eq(XcglAssoJsgzzx::getRulestate,0).list(); for(XcglAssoJsgzzx xtzd:xtzdtqlist) { if(xtzd.getOptionid() > 0) {//说明阔以根据表查出结果 XcglAssoOption lbcx = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getId,xtzd.getOptionid()).one(); if(lbcx.getTablename() != null && !lbcx.getTablename().equals("") && lbcx.getFieldname() != null && !lbcx.getFieldname().equals("")) { String tablename = lbcx.getTablename();//对应库表名 String fieldname = lbcx.getFieldname();//对应库字段名 List<Map<String, Object>> list = null; if(tablename.equals("yggl_main_emp")) {//员工管理 QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<>(); queryWrapper.select(fieldname).eq("emp_num", znr.getUserid());//select #{tablename} from yggl_main_emp where emp_num = ? list = ygglmainempmapper.selectMaps(queryWrapper); } String autacq = ""; for(Map<String, Object> aut:list) { if(aut != null) { autacq = aut.toString().substring(aut.toString().indexOf("=")+1).replace("}", ""); } } //处理结果 if(fieldname.equals("job_type")) { if(autacq.equals("0")) {autacq="全职";}else if(autacq.equals("1")) {autacq="实习生";}else if(autacq.equals("2")) {autacq="兼职";}else if(autacq.equals("3")) {autacq="劳务派遣";}else if(autacq.equals("4")) {autacq="劳务";}else if(autacq.equals("5")) {autacq="派遣";}else if(autacq.equals("6")) {autacq="外包";}else {autacq="退休返聘";} }else if(fieldname.equals("job_status")) { if(autacq.equals("0")) {autacq="试用";}else if(autacq.equals("1")) {autacq="正式";}else if(autacq.equals("2")) {autacq="离职中";}else {autacq="已离职";} }else if(fieldname.equals("rz_time") || fieldname.equals("zz_time")) { autacq = autacq.substring(0, 10); } //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id if(fieldname.equals("name") || fieldname.equals("emp_num")) { xzb.setXzyf("");//薪资月 }else { xzb.setXzyf(sxrq);//薪资月 } xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg(autacq);//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { if(lbcx.getItemid() == 1) {//人事 //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id if(("部门").equals(lbcx.getOptionname()) || ("职位").equals(lbcx.getOptionname())) { xzb.setXzyf("");//薪资月 }else { xzb.setXzyf(sxrq);//薪资月 } xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg("");//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg("0");//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } } } } //查询“0:系统自动提取”数据----入[薪资表] 200---姓名 List<XcglAssoJsgzzx> xtzdtqother = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, id).list(); for(XcglAssoJsgzzx xtzd:xtzdtqother) { if(xtzd.getRulestate() == 2 || xtzd.getRulestate() == 3 || xtzd.getRulestate() == 4) { if(xtzd.getOptionid() > 0) {//说明阔以根据表查出结果 XcglAssoOption lbcx = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getId,xtzd.getOptionid()).one(); if(lbcx.getTablename() != null && !lbcx.getTablename().equals("") && lbcx.getFieldname() != null && !lbcx.getFieldname().equals("")) { @SuppressWarnings("unused") String tablename = lbcx.getTablename();//对应库表名 @SuppressWarnings("unused") String fieldname = lbcx.getFieldname();//对应库字段名 @SuppressWarnings("unused") List<Map<String, Object>> list = null; // if(tablename.equals("yggl_main_emp")) {//员工管理 // QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<>(); // queryWrapper.select(fieldname).eq("emp_num", znr.getUserid());//select #{tablename} from yggl_main_emp where emp_num = ? // list = ygglmainempmapper.selectMaps(queryWrapper); // } // String autacq = ""; // for(Map<String, Object> aut:list) { // if(aut != null) { // autacq = aut.toString().substring(aut.toString().indexOf("=")+1).replace("}", ""); // } // } //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg("0");//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg("0");//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } } } } } //计算完成 返回数据 jswsj = xcglassoxzbmapper.CalculationResults(id,sxrq,userBean.getOrgCode()); return new ResponseResult().success("计算完成", jswsj); }else {//该组无人 return new ResponseResult().error("请先添加算薪人员"); } } /** * 查看薪资 */ @GetMapping(value = "/checksalary/{id}/{sxrq}") @ApiOperation(value = "查看薪资", httpMethod = "GET", notes = "接口发布说明") public ResponseResult CheckSalary(@CurrentUser UserBean userBean,@PathVariable Integer id,@PathVariable String sxrq) { //计算完成 返回数据 List<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(id,sxrq,userBean.getOrgCode()); return new ResponseResult().success("查看薪资成功", jswsj); } /** * 同步考勤 */ @GetMapping(value = "/SynchroAtt/{id}/{sxrq}") @ApiOperation(value = "同步考勤", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SynchroAttendance(@CurrentUser UserBean userBean,@PathVariable Integer id,@PathVariable String sxrq) { //已知薪资组id**** //规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] //薪资组信息 XcglAdminXzz xzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getId, id).one(); //薪资组项--考勤 List<XcglAssoJsgzzx> attsect = xcglassojsgzzxmapper.selectSalarySectionList(id); //当前薪资组内人员 List<XcglAssoXzury> znrys = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getXzzid, id).eq(XcglAssoXzury::getQyid,userBean.getOrgCode()).list(); if(znrys.size() > 0) {//该薪资组有成员 for(XcglAssoXzury znr:znrys) { //删除已经计算的考勤薪资 xcglassoxzbmapper.deleteByAttendance(znr.getUserid(), id,sxrq); //计算得出考勤相关数据 AttendanceReport attrep = getAttendanceReport(userBean.getOrgCode(),znr.getUserid(),xzz.getPayrollcycle()); for(XcglAssoJsgzzx payatt:attsect) {//查询同步考勤时所需要的字段 if(payatt.getOptionid() > 0) {//说明阔以根据表查出结果 XcglAssoOption lbcx = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getId,payatt.getOptionid()).one(); if(lbcx.getFieldname() != null && !lbcx.getFieldname().equals("")) {//关于考勤的只有 -- 字段名:“fieldname” @SuppressWarnings("unused") String tablename = lbcx.getTablename();//对应库表名 String fieldname = lbcx.getFieldname();//对应库字段名 int autacq = 0; if(fieldname.equals("days_duty")) {//应出勤天数 autacq = attrep.getAnswerday(); }else if(fieldname.equals("actual_days")) {//实际出勤天数 autacq = attrep.getActualday(); }else if(fieldname.equals("rest_days")) {//休息天数 autacq = attrep.getRestday(); }else if(fieldname.equals("gzsc")) {//工作时长 autacq = attrep.getWorkhours(); }else if(fieldname.equals("late_num")) {//迟到次数 autacq = attrep.getLatenum(); }else if(fieldname.equals("late_time")) {//迟到时长 autacq = attrep.getLatehours(); }else if(fieldname.equals("absen_days ")) {//矿工天数 autacq = attrep.getMinerday(); }else if(fieldname.equals("early_num")) {//早退次数 autacq = attrep.getLeanum(); }else if(fieldname.equals("early_time")) {//早退时长 autacq = attrep.getLeahours(); }else if(fieldname.equals("sbqk_num")) {//上班缺卡次数 autacq = attrep.getGoworkmissingcard(); }else if(fieldname.equals("xbqk_num")) {//下班缺卡次数 autacq = attrep.getOffworkmissingcard(); } //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(payatt.getId());//薪资项id xzb.setXzxjg(String.valueOf(autacq));//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(sxrq);//薪资月 xzb.setXzxid(payatt.getId());//薪资项id xzb.setXzxjg("0");//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } } } } //计算完成 返回数据 List<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(id,sxrq,userBean.getOrgCode()); return new ResponseResult().success("考勤数据同步成功", jswsj); }else {//该组无人 return new ResponseResult().error("请先添加算薪人员"); } } /***************/ /***考勤****/ /** * @param orgCode 企业id * @param userid 用户id * @param payrolldate 计薪日期 * @param attendancedetails * @return */ public AttendanceReport getAttendanceReport(int orgCode,int userid,String payrolldate) { String start = payrolldate.substring(0, 10); String end = payrolldate.substring(11, 21); Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; int date = cal.get(Calendar.DATE); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Long startDate = 0l; Long endDate = 0l; try { String sdaet = getMinMonthDate(start); startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaet,"yyyy-MM-dd")).getTime(); String edate = getMaxMonthDate(end); endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(edate,"yyyy-MM-dd")).getTime(); } catch (ParseException e) { e.printStackTrace(); } int gzsc = punchcarddetailsservice.selectWorkingHours(userid,startDate,endDate); List<PunchRecord> initial = punchrecordservice.getMaintenancePunchCardList(startDate,endDate,userid); int latenum = 0;// 迟到次数 int latehours = 0;// 迟到时长 int leanum = 0;// 早退次数 int leahours = 0;// 早退时长 if(initial.size() > 0){ for(PunchRecord prd : initial){ if(prd.getType() == 1 && prd.getResults() > 0){ latenum++; latehours += prd.getResults(); } if(prd.getType() == 2 && prd.getResults() > 0){ leanum++; leahours += prd.getResults(); } } } AttendanceReport attrep = new AttendanceReport(); attrep.setId(0); attrep.setName("");//姓名 attrep.setJobnumber(userid);//工号 attrep.setWorkhours(gzsc);//工作时长 attrep.setLatenum(latenum);// attrep.setLatehours(latehours);// attrep.setLeanum(leanum);// attrep.setLeahours(leahours);// /**********/ AttendanceGroup attgro = attendancegroupservice.getAttendanceGroupInformationByUserid(userid,orgCode); //考勤组信息 //pbfs;// 排班方式 1:固定排班;2:自由排班;3:自由工时 if(attgro != null){//该员工是否加入到考勤组 if(attgro.getPbfs() == 1){ //当前月 必须打卡日期 List<SpecialDate> bxdklist = specialdateservice.ShouldSpecialDatessetByKqzid(attgro.getId(),startDate,endDate); int bxdk = bxdklist.size(); //当前月 无需打卡日期 List<SpecialDate> wxdk = specialdateservice.RestSpecialDatessetByKqzid(attgro.getId(),startDate,endDate); String[] appmaps= new String[wxdk.size()]; int d1 = 0; for(SpecialDate spe:wxdk){ appmaps[d1] = spe.getTsrq(); d1++; } List<AttendanceWeeklySch> atwek = attendanceweeklyschservice.selectAttendanceMadeByUserid(userid,orgCode); String[] week= new String[atwek.size()]; int e = 0; for(AttendanceWeeklySch awek : atwek){ week[e] = awek.getWekmc(); e++; } String yemo = year + "-" + month; String datetime = year + "-" + month + "-" + date; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); sdf1.setLenient(false); SimpleDateFormat sdf2 = new SimpleDateFormat("EEE"); try { Date parse = sdf.parse(datetime); Calendar lastDate = Calendar.getInstance(); lastDate.setTime(parse); lastDate.set(Calendar.DATE, 1); lastDate.add(Calendar.MONTH, 1); lastDate.add(Calendar.DATE, -1); } catch (ParseException e1) { e1.printStackTrace(); } int y = 0; int q = 0; for(int i = 1; i <= getDaysByYearMonth(year,month); i++){ try { Date date1 = sdf1.parse(yemo + "-" + i); for(int u=0;u<week.length;u++){ if(sdf2.format(date1).equals(week[u])){ q++; y++; if(Arrays.asList(appmaps).contains(String.valueOf(sdf1.format(date1)))){ y = y-1; } } } } catch (ParseException c) { c.printStackTrace(); } } int xiuxi = getDaysByYearMonth(year,month) - q - bxdk + wxdk.size(); attrep.setRestday(xiuxi);//休息天数 attrep.setAnswerday(y+bxdk);//应出勤 /***********/ }else if(attgro.getPbfs() == 2){ List<Schedule> ycqs = scheduleservice.getAttendanceShouldList(userid,startDate,endDate); int xiuxi = 0; int shangban = 0; for(Schedule sc : ycqs){ if(sc.getBcid().equals(0)){ xiuxi++; }else{ shangban++; } } attrep.setRestday(xiuxi);//休息天数 attrep.setAnswerday(shangban);//应出勤 }else{ List<AttendanceWeeklySch> atwek = attendanceweeklyschservice.selectAttendanceMadeByUserid(userid,orgCode); String[] week= new String[atwek.size()]; int e = 0; for(AttendanceWeeklySch awek : atwek){ week[e] = awek.getWekmc(); e++; } String yemo = year + "-" + month; String datetime = year + "-" + month + "-" + date; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); sdf1.setLenient(false); SimpleDateFormat sdf2 = new SimpleDateFormat("EEE"); try { Date parse = sdf.parse(datetime); Calendar lastDate = Calendar.getInstance(); lastDate.setTime(parse); lastDate.set(Calendar.DATE, 1); lastDate.add(Calendar.MONTH, 1); lastDate.add(Calendar.DATE, -1); } catch (ParseException e1) { e1.printStackTrace(); } int y = 0; for(int i = 1; i <= getDaysByYearMonth(year,month); i++){ try { Date date1 = sdf1.parse(yemo + "-" + i); for(int u=0;u<week.length;u++){ if(sdf2.format(date1).equals(week[u])){ y++; } } } catch (ParseException c) { c.printStackTrace(); } } int xiuxi = getDaysByYearMonth(year,month) - y; attrep.setRestday(xiuxi);//休息天数 attrep.setAnswerday(y);//应出勤 } List<PunchCardDetails> attendance = punchcarddetailsservice.selectAttendanceDays(userid, startDate, endDate);//打卡记录 attrep.setActualday(attendance.size());//已出勤 if(attrep.getAnswerday() > 0){ BigDecimal g = new BigDecimal(attrep.getAnswerday()); BigDecimal h = new BigDecimal(attrep.getActualday()); int lack = g.subtract(h).intValue(); attrep.setMinerday(lack);//缺勤 } int sbqk = 0; int xbqk = 0; for(PunchCardDetails pcd:attendance){ if(pcd.getYdkcs() == 2 || pcd.getYdkcs() == 4 || pcd.getYdkcs() == 6){ if(pcd.getSbdk1() == null){ sbqk++; } if(pcd.getXbdk1() == null){ xbqk++; } } if(pcd.getYdkcs() == 4 || pcd.getYdkcs() == 6){ if(pcd.getSbdk2() == null){ sbqk++; } if(pcd.getXbdk2() == null){ xbqk++; } } if(pcd.getYdkcs() == 6){ if(pcd.getSbdk3() == null){ sbqk++; } if(pcd.getXbdk3() == null){ xbqk++; } } } attrep.setGoworkmissingcard(sbqk);//上班缺卡 attrep.setOffworkmissingcard(xbqk);//下班缺卡 } /**********/ return attrep; } /** * 根据 年、月 获取对应的月份 的 天数 */ public static int getDaysByYearMonth(int year, int month) { Calendar a = Calendar.getInstance(); a.set(Calendar.YEAR, year); a.set(Calendar.MONTH, month - 1); a.set(Calendar.DATE, 1); a.roll(Calendar.DATE, -1); int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 获取月份起始日期 * * @param date * @return * @throws ParseException */ public String getMinMonthDate(String date) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(mat.parse(date)); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); return mat.format(calendar.getTime()); } /** * 获取月份最后日期 * * @param date * @return * @throws ParseException */ public String getMaxMonthDate(String date) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(mat.parse(date)); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return mat.format(calendar.getTime()); } /** * 导入薪资 */ @PostMapping(value = "/payimport") @ApiOperation(value = "导入薪资", httpMethod = "POST", notes = "接口发布说明") public ResponseResult ImportSalaryData(@CurrentUser UserBean userBean,@RequestBody ImportSalarySetDto impor) { // XcglAdminXzz xzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getId, impor.getGid()).one(); //用户工号来匹配入库 //XcglAssoXzury xzuryone = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getQyid, orgCode).eq(XcglAssoXzury::getXzzid, impor.getGid()).eq(XcglAssoXzury::getUserid, impor.getUsernum()).one(); //用户名称来匹配入库 //XcglAssoXzury yhmpp = xcglassoxzurymapper.selectImportedSalary(impor.getGid(),impor.getUsername(),String.valueOf(orgCode)); ImportSalaryDto[] ims = impor.getImsalary();// if(ims.length>0){ for(int p=0;p<ims.length;p++){ //用户工号来匹配入库 XcglAssoXzury xzuryone = new LambdaQueryChainWrapper<XcglAssoXzury>(xcglassoxzurymapper).eq(XcglAssoXzury::getQyid, userBean.getOrgCode()).eq(XcglAssoXzury::getXzzid, impor.getGid()).eq(XcglAssoXzury::getUserid, ims[p].getUsernum()).one(); //用户名称来匹配入库 XcglAssoXzury yhmpp = xcglassoxzurymapper.selectImportedSalary(impor.getGid(),ims[p].getUsername(),String.valueOf(userBean.getOrgCode())); int k = 0; if(xzuryone != null) { XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(xzuryone.getUserid());// xzb.setXzyf(impor.getSxrq());// xzb.setXzxid(ims[p].getJsgzzx());// xzb.setXzxjg(String.valueOf(ims[p].getSrz()));// xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.ModifyImportedSalary(xzb); k++; } if(yhmpp != null && k == 0) { XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(yhmpp.getUserid());// xzb.setXzyf(impor.getSxrq());// xzb.setXzxid(ims[p].getJsgzzx());// xzb.setXzxjg(String.valueOf(ims[p].getSrz()));// xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.ModifyImportedSalary(xzb); } } } return new ResponseResult().success("考勤数据同步成功"); } /** * 切换薪资日期 */ @GetMapping(value = "/switchsalarydate/{sxrq}") @ApiOperation(value = "切换薪资日期", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SwitchSalaryDate(@CurrentUser UserBean userBean,@PathVariable String sxrq) { List<SwitchSalaryDateDto> ssd = new ArrayList<SwitchSalaryDateDto>(); List<XcglAdminXzz> xcgladminxzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getQyid, userBean.getOrgCode()).list(); for(XcglAdminXzz xzx : xcgladminxzz) { XcglAssoXzury isck = xcglassoxzurymapper.selectISswitchdate(xzx.getId(),sxrq); // int payperiod = xzx.getPayperiod();//算薪月周期 0:上月;1:当月 // int paydayperiod = xzx.getPaydayperiod();//算薪日周期 全月 //输入月份的开始于结束 String strstartdate = ""; String strendDate = ""; String lastmonth = ""; String nextMonth = ""; String lasstrstartdate = ""; String lasstrendDate = ""; try { String date = sxrq+"-01"; String sdaet = getMinMonthDate(date); Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaet,"yyyy-MM-dd")).getTime(); strstartdate = new SimpleDateFormat("yyyy-MM-dd").format(startDate);// 上 String edate = getMaxMonthDate(date); Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(edate,"yyyy-MM-dd")).getTime(); strendDate = new SimpleDateFormat("yyyy-MM-dd").format(endDate);// 上 String dateStr = date+" 00:00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date transDate = sdf.parse(dateStr); Calendar lastm = Calendar.getInstance(); lastm.setTime(transDate); // 设置为当前时间 lastm.set(Calendar.MONTH, lastm.get(Calendar.MONTH) - 1); lastmonth = new SimpleDateFormat("yyyy-MM").format(lastm.getTime());// 上 Calendar lastmtow = Calendar.getInstance(); lastmtow.setTime(transDate); // 设置为当前时间 lastmtow.add(Calendar.MONTH, 1); nextMonth = new SimpleDateFormat("yyyy-MM").format(lastmtow.getTime());// 下 String lasdate = lastmonth+"-01"; String sdaetlas = getMinMonthDate(lasdate); Long startDatelas = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaetlas,"yyyy-MM-dd")).getTime(); lasstrstartdate = new SimpleDateFormat("yyyy-MM-dd").format(startDatelas);// 上 String edatelas = getMaxMonthDate(lasdate); Long endDatelas = DateUtil.getnowEndTime(23,DateUtil.getStringTime(edatelas,"yyyy-MM-dd")).getTime(); lasstrendDate = new SimpleDateFormat("yyyy-MM-dd").format(endDatelas);// 上 } catch (ParseException e) { e.printStackTrace(); } String payper = String.format("%02d", xzx.getPaydayperiod()); String payrollcycle = ""; if (xzx.getPayperiod() == 0) {// 上月 if (xzx.getPaydayperiod() == 1) { //上个月开始 --- 上个月结束 payrollcycle = lasstrstartdate + "到" + lasstrendDate; } else { String firstnext = lastmonth + "-" + payper; int jgs = xzx.getPaydayperiod() - 1; String lastnext = sxrq + "-" + String.format("%02d", jgs); payrollcycle = firstnext + "到" + lastnext; } } else {// 当月 if (xzx.getPaydayperiod() == 1) { //本月开始 -- 本月结束 payrollcycle = strstartdate + "到" + strendDate;//********* } else { String firstnow = sxrq + "-" + payper; int jgs = xzx.getPaydayperiod() - 1; String lastnow = nextMonth + "-" + String.format("%02d", jgs); payrollcycle = firstnow + "到" + lastnow; } } SwitchSalaryDateDto sds = new SwitchSalaryDateDto(); if(isck != null) { sds.setGid(xzx.getId()); sds.setState(1);//已计算 sds.setCycle(payrollcycle); ssd.add(sds); }else { sds.setGid(xzx.getId()); sds.setState(0);//未计算 sds.setCycle(payrollcycle); ssd.add(sds); } } return new ResponseResult().success("成功", ssd); } /** * 获取附加扣除数据 */ // @GetMapping(value = "/obtainidedu") // @ApiOperation(value = "获取附加扣除数据", httpMethod = "GET", notes = "接口发布说明") @PostMapping(value = "/obtainidedu") @ApiOperation(value = "获取附加扣除数据", httpMethod = "POST", notes = "接口发布说明") public ResponseResult ObtainAdditionalDeduction(@CurrentUser UserBean userBean,@RequestBody SearchSalariedPeopleDto search) { search.setOrgcode(userBean.getOrgCode()); if(("0").equals(search.getStatus())) {//全部 search.setStatus(""); }else if(("1").equals(search.getStatus())) {//在职 search.setStatus("0"); }else { search.setStatus("3"); } List<AdditionalDeductionDto> fjkclist = xcglassozxfjkcmapper.selectAdditionalDeduction(search); return new ResponseResult().success("获取附加扣除数据成功", fjkclist); } // @PostMapping(value = "/programme") // @ApiOperation(value = "获取附加扣除数据搜索/分页", httpMethod = "POST", notes = "接口发布说明") // public Result<Object> programme(@CurrentUser UserBean userBean,@RequestBody AdditionalkcDto kcdto) { // // String n = kcdto.getName(); // int s = kcdto.getState(); // String d = kcdto.getDate(); // // // /* // * Page<AdditionalDeductionDto> page = new Page<AdditionalDeductionDto>( // * kcdto.getCurrentPage() == null ? 1 : kcdto.getCurrentPage(), // * kcdto.getTotalPage() == null ? 10 : kcdto.getTotalPage()); // */ // // PageHelper.startPage(kcdto.getCurrentPage() == null ? 1 : kcdto.getCurrentPage(), kcdto.getTotalPage() == null ? 10 : kcdto.getTotalPage()); // // // //List<AdditionalDeductionDto> fjkclist = xcglassozxfjkcmapper.selectAdditionalDeduction(userBean.getOrgCode()); // // Page<AdditionalDeductionDto> fjkcpage = xcglassozxfjkcmapper.selectAdditionalDeduction(userBean.getOrgCode()); // // List<AdditionalDeductionDto> fjkclist = fjkcpage.getRecords(); // // fjkcpage.getCurrent(); // fjkcpage.getPages(); // fjkcpage.getTotal(); // fjkcpage.getSize(); // // //// QueryWrapper<SbgjjAssoCbfa> queryWrapper = new QueryWrapper<>(); //// queryWrapper.eq("qyid",userBean.getOrgCode()).and(!StrUtil.hasBlank(c), wq -> wq.likeRight("cbcs", c)); //// //// IPage<SbgjjAssoCbfa> sbgjjassocbfaPage = SbgjjAssoCbfa.builder().build().selectPage(page, queryWrapper); //// //// IPage<AdditionalDeductionDto> sbgjjassocbfaPage = //// List<SbgjjAssoCbfa> sbgjjassocbfaEmps = sbgjjassocbfaPage.getRecords(); //// sbgjjassocbfaPage.getCurrent(); //// sbgjjassocbfaPage.getPages(); //// sbgjjassocbfaPage.getTotal(); //// sbgjjassocbfaPage.getSize(); // // return ResultUtil.data2(fjkcpage, fjkclist, "方案搜索成功"); // } /** * 专项附加扣除 */ @PostMapping(value = "/addduction") @ApiOperation(value = "专项附加扣除", httpMethod = "POST", notes = "接口发布说明") public ResponseResult AdditionalDeduction(@CurrentUser UserBean userBean,@RequestBody XcglAssoZxfjkc xcglas) { if(xcglas.getId() == 0) { xcglas.setQyid(userBean.getOrgCode()); xcglas.setAddtime(new Date().getTime()); xcglassozxfjkcmapper.insertXcglAssoZxfjkc(xcglas); }else { XcglAssoZxfjkc fjkc = XcglAssoZxfjkc.builder().build(); fjkc.setId(xcglas.getId()); fjkc.setChildrenedu(xcglas.getChildrenedu()); fjkc.setHouseloans(xcglas.getHouseloans()); fjkc.setHouserents(xcglas.getHouserents()); fjkc.setSupportolder(xcglas.getSupportolder()); fjkc.setContinueedu(xcglas.getContinueedu()); fjkc.setTotalmoney(xcglas.getTotalmoney()); xcglassozxfjkcmapper.updateXcglAssoZxfjkc(fjkc); } return new ResponseResult().success("成功", xcglas); } @GetMapping(value = "/payslip/{id}/{sxrq}") @ApiOperation(value = "工资条", httpMethod = "GET", notes = "接口发布说明") public ResponseResult EnterPayslip(@CurrentUser UserBean userBean,@PathVariable Integer id,@PathVariable String sxrq) { int xscgztszid = 0; XcglAssoGztsz xscid = new LambdaQueryChainWrapper<XcglAssoGztsz>(xcglassogztszmapper).eq(XcglAssoGztsz::getQyid, userBean.getOrgCode()) .eq(XcglAssoGztsz::getGztyf, sxrq).eq(XcglAssoGztsz::getXzzid,id).one(); if(xscid != null) { xscgztszid = xscid.getId(); xcglassogztszmapper.deletexcglassogztsz(sxrq,id); } XcglAdminXzz xzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getQyid, userBean.getOrgCode()).eq(XcglAdminXzz::getId, id).one(); XcglAssoGztsz gztsz = XcglAssoGztsz.builder().build(); gztsz.setMbmc(sxrq+"工资条("+xzz.getName()+")");//模板名称 gztsz.setGztyf(sxrq); gztsz.setIsWxts(1);//温馨提示开关 (0:关;1:开) gztsz.setWxtslr("工资条属于敏感信息,请注意保密");//温馨提示内容 gztsz.setTop(0);//实发金额(头部显示) 实发金额是指员工实际到手的工资,将显示在员工工资条的顶部蓝色区域 gztsz.setIsYcksj(0);//隐藏空数据项开关-(0:关;1:开) 在员工收到的工资条上,隐藏数值为空(或数值为0)的薪资项 gztsz.setXsxzx("");//显示薪资项(数组) gztsz.setIsYhjf(0);//阅后即焚开关-(0:关;1:开) 在员工查看工资条一定时间之后,将变为不可查阅 gztsz.setYhjfdw(1);//阅后即焚单位 1:分钟;2:小时;3:天 gztsz.setYhjfTime("");//阅后即焚时间(分钟) gztsz.setQmqr(0);//签名确认-(0:关;1:开) 开启后,员工确认工资条时需要手写签名 gztsz.setIsYgfk(0);//员工反馈开关-(0:关;1:开) 允许员工在工资条上反馈工资问题 gztsz.setXzzid(id);//薪资组id gztsz.setQyid(userBean.getOrgCode());//企业id xcglassogztszmapper.insertxcglassogztsz(gztsz); int gztszid = gztsz.getId(); if(xscgztszid > 0) { xcglassogztztmapper.deletexcglassogztzt(xscgztszid);// } List<PayrollExceptionDto> payrolllist = xcgladminxzzmapper.PayrollException(userBean.getOrgCode(), id, sxrq); List<XcglAssoGztzt> gztzs = new ArrayList<XcglAssoGztzt>(); for(PayrollExceptionDto ped:payrolllist) { XcglAssoGztzt gztz = XcglAssoGztzt.builder().build(); gztz.setUserid(ped.getUserid());//用户ID gztz.setXzyf(ped.getXzyf());//薪资月 gztz.setFsType(0);//发送状态 0:未发送 1:已发送 gztz.setCkType(0);//查看状态 0:未 1:已 gztz.setQrType(0);//确认状态 0:未 1:已 gztz.setFkyj("");//反馈意见 gztz.setYhqm("");//用户签名 gztz.setQyid(userBean.getOrgCode()); gztz.setGztszid(gztszid); gztzs.add(gztz); } if(gztzs.size()>0) { xcglassogztztmapper.insertxcglassogztztList(gztzs); } return new ResponseResult().success("成功", gztzs); } @PostMapping(value = "/paysliplist") @ApiOperation(value = "工资条数据", httpMethod = "POST", notes = "接口发布说明") public ResponseResult Paysliplist(@CurrentUser UserBean userBean,@RequestBody InspersonnelDto inspers) { List<PayslipListDto> paydan = new ArrayList<PayslipListDto>(); List<XcglAssoGztsz> gztzlist = new LambdaQueryChainWrapper<XcglAssoGztsz>(xcglassogztszmapper).eq(XcglAssoGztsz::getQyid, userBean.getOrgCode()).eq(XcglAssoGztsz::getGztyf, inspers.getTitle()).list(); for(XcglAssoGztsz dzts:gztzlist) { PayslipListDto pagz = new PayslipListDto(); pagz.setGztszid(dzts.getId()); pagz.setGztname(dzts.getMbmc()); pagz.setGztyf(dzts.getGztyf()); pagz.setXzzid(dzts.getXzzid()); List<XcglAssoGztzt> zrs = new LambdaQueryChainWrapper<XcglAssoGztzt>(xcglassogztztmapper).eq(XcglAssoGztzt::getQyid, userBean.getOrgCode()) .eq(XcglAssoGztzt::getGztszid, dzts.getId()).list(); if(zrs.size() > 0) { pagz.setUsertotal(zrs.size());// }else { pagz.setUsertotal(0);// } List<XcglAssoGztzt> yfs = new LambdaQueryChainWrapper<XcglAssoGztzt>(xcglassogztztmapper).eq(XcglAssoGztzt::getQyid, userBean.getOrgCode()) .eq(XcglAssoGztzt::getGztszid, dzts.getId()).eq(XcglAssoGztzt::getFsType,1).list(); if(yfs.size() > 0) { pagz.setYfsnum(yfs.size()); }else { pagz.setYfsnum(0); } List<XcglAssoGztzt> yck = new LambdaQueryChainWrapper<XcglAssoGztzt>(xcglassogztztmapper).eq(XcglAssoGztzt::getQyid, userBean.getOrgCode()) .eq(XcglAssoGztzt::getGztszid, dzts.getId()).eq(XcglAssoGztzt::getCkType,1).list(); if(yck.size()>0) { pagz.setYckrs(yck.size()); }else { pagz.setYckrs(0); } List<XcglAssoGztzt> yqr = new LambdaQueryChainWrapper<XcglAssoGztzt>(xcglassogztztmapper).eq(XcglAssoGztzt::getQyid, userBean.getOrgCode()) .eq(XcglAssoGztzt::getGztszid, dzts.getId()).eq(XcglAssoGztzt::getQrType,1).list(); if(yqr.size()>0) { pagz.setYqrrs(yqr.size()); }else { pagz.setYqrrs(0); } paydan.add(pagz); } return new ResponseResult().success("成功", paydan); } @GetMapping(value = "/details/{id}") @ApiOperation(value = "工资条明细", httpMethod = "GET", notes = "接口发布说明") public ResponseResult PayslipDetails(@CurrentUser UserBean userBean,@PathVariable Integer id) { List<PayslipDetailsDto> paydetlist = xcglassogztztmapper.PayslipDetails(id,userBean.getOrgCode()); return new ResponseResult().success("成功", paydetlist); } /** * 删除工资条 */ @DeleteMapping(value = "/deletepayslip/{id}") @ApiOperation(value = "删除工资条", httpMethod = "DELETE", notes = "接口发布说明") public ResponseResult Deletepayslip(@PathVariable Integer id) { XcglAssoGztsz.builder().build().deleteById(id); xcglassogztztmapper.deletexcglassogztzt(id);// return new ResponseResult().success("删除成功", id); } @GetMapping(value = "/payslipsetti/{id}") @ApiOperation(value = "获取工资条设置", httpMethod = "GET", notes = "接口发布说明") public ResponseResult PayslipSetti(@CurrentUser UserBean userBean,@PathVariable Integer id) { XcglAssoGztsz gztz = new LambdaQueryChainWrapper<XcglAssoGztsz>(xcglassogztszmapper).eq(XcglAssoGztsz::getQyid, userBean.getOrgCode()).eq(XcglAssoGztsz::getId, id).one(); return new ResponseResult().success("成功", gztz); } @PutMapping(value = "/modifypayslip") @ApiOperation(value = "修改工资条", httpMethod = "PUT", notes = "接口发布说明") public ResponseResult ModifyPayslip(@CurrentUser UserBean userBean, @RequestBody ModifyPayslipDto modifypay) { XcglAssoGztsz gztz = XcglAssoGztsz.builder().build(); gztz.setId(modifypay.getId()); // gztz.setMbmc(mbmc);//模板名称 if(modifypay.getSwitchs()) { gztz.setIsWxts(1);//温馨提示开关 gztz.setWxtslr(modifypay.getTip());//温馨提示内容 }else { gztz.setIsWxts(0);//温馨提示开关 gztz.setWxtslr("");//温馨提示内容 } gztz.setTop(modifypay.getSfje());//实发金额(头部显示) if(modifypay.getYc()) { gztz.setIsYcksj(1);//隐藏空数据项开关 }else { gztz.setIsYcksj(0);//隐藏空数据项开关 } // gztz.setXsxzx(xsxzx);//显示薪资项(数组) if(modifypay.getYhjf()) { gztz.setIsYhjf(1);//阅后即焚开关 在员工查看工资条一定时间之后,将变为不可查阅 gztz.setYhjfTime(modifypay.getJfinp());//阅后即焚时间(分钟) gztz.setYhjfdw(modifypay.getJfsel());//阅后即焚单位 1:分钟;2:小时;3:天 }else { gztz.setIsYhjf(0);//阅后即焚开关 在员工查看工资条一定时间之后,将变为不可查阅 gztz.setYhjfTime("");//阅后即焚时间(分钟) gztz.setYhjfdw(1);//阅后即焚单位 1:分钟;2:小时;3:天 } if(modifypay.getAutograph()) { gztz.setQmqr(1);//签名确认 开启后,员工确认工资条时需要手写签名 }else{ gztz.setQmqr(0);//签名确认 开启后,员工确认工资条时需要手写签名 } if(modifypay.getFeedback()) { gztz.setIsYgfk(1);//员工反馈开关 允许员工在工资条上反馈工资问题 }else { gztz.setIsYgfk(0);//员工反馈开关 允许员工在工资条上反馈工资问题 } gztz.updateById(); return new ResponseResult().success("成功", gztz); } /****************************************************************************/ /****************************************************************************/ /** * 新增或编辑 */ @PostMapping(value = "/paysave") @ApiOperation(value = "添加/修改薪资组", httpMethod = "POST", notes = "接口发布说明") public ResponseResult paysave(@CurrentUser UserBean userBean,@RequestBody XcglAdminXzz obj) { obj.setAdduserid(userBean.getEmpNum());// 员工工号 obj.setQyid(userBean.getOrgCode());// 企业编码 obj.setAddtime(new Date().getTime());// 添加时间 obj.insertOrUpdate(); return new ResponseResult().success("添加/修改成功", obj); } // 上个月 public static String getfirstlast() { String firstnext; Calendar c1 = Calendar.getInstance(); c1.add(Calendar.MONTH, -1); c1.set(Calendar.DAY_OF_MONTH, 1); firstnext = mat.format(c1.getTime()); return firstnext; } public static String getlastlast() { String lastnext; Calendar ca1 = Calendar.getInstance(); ca1.add(Calendar.MONTH, -1); ca1.set(Calendar.DAY_OF_MONTH, ca1.getActualMaximum(Calendar.DAY_OF_MONTH)); lastnext = mat.format(ca1.getTime()); return lastnext; } // 本月 public static String getfirstnow() { String firstnow; Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH, 1); firstnow = mat.format(c.getTime()); return firstnow; } public static String getlastnow() { String lastnow; Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); lastnow = mat.format(ca.getTime()); return lastnow; } // 下个月 public static String getfirstnext() { String firstnext; Calendar c1 = Calendar.getInstance(); c1.add(Calendar.MONTH, 1); c1.set(Calendar.DAY_OF_MONTH, 1); firstnext = mat.format(c1.getTime()); return firstnext; } public static String getlastnext() { String lastnext; Calendar ca1 = Calendar.getInstance(); ca1.add(Calendar.MONTH, 1); ca1.set(Calendar.DAY_OF_MONTH, ca1.getActualMaximum(Calendar.DAY_OF_MONTH)); lastnext = mat.format(ca1.getTime()); return lastnext; } }