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 javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; 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.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import cn.hutool.json.JSONObject; 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.kqmk.KqglAssoMonthPunchSummary; import cn.timer.api.bean.kqmk.KqglAssoRelationSummary; import cn.timer.api.bean.sbgjj.SbgjjAssoDetailed; import cn.timer.api.bean.sbgjj.SbgjjAssoYjzd; import cn.timer.api.bean.xcgl.XcglAdminXzz; import cn.timer.api.bean.xcgl.XcglAssoBszqsz; import cn.timer.api.bean.xcgl.XcglAssoGsjsmx; 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.XcglAssoTaxFormula; 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.config.validation.ValidList; import cn.timer.api.controller.kqgl.ClockInTool; 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.kqmk.KqglAssoMonthPunchSummaryMapper; import cn.timer.api.dao.kqmk.KqglAssoRelationSummaryMapper; import cn.timer.api.dao.sbgjj.SbgjjAssoDetailedMapper; import cn.timer.api.dao.sbgjj.SbgjjAssoYjzdMapper; import cn.timer.api.dao.xcgl.XcglAdminXzzMapper; import cn.timer.api.dao.xcgl.XcglAssoGsjsmxMapper; 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.kqmk.CalculatingCompensationDto; import cn.timer.api.dto.sbgjj.InspersonnelDto; import cn.timer.api.dto.xcgl.AdditionalDeductionDto; import cn.timer.api.dto.xcgl.AppPaysSalaryOneDto; import cn.timer.api.dto.xcgl.AppPaysSalaryTwoDto; import cn.timer.api.dto.xcgl.AppPayslipDetailsDto; import cn.timer.api.dto.xcgl.BuildPayGroupDto; 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.CheckSalaryStaffDto; import cn.timer.api.dto.xcgl.CjPayrollGroupDto; 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.FloatingDataDto; import cn.timer.api.dto.xcgl.HolidayInquiryDto; import cn.timer.api.dto.xcgl.ImportDescriptionDto; import cn.timer.api.dto.xcgl.ImportSalaryDto; import cn.timer.api.dto.xcgl.ImportSalarySetDto; import cn.timer.api.dto.xcgl.IndividualTaxDetailsDto; import cn.timer.api.dto.xcgl.ModifyPayslipDto; import cn.timer.api.dto.xcgl.ModifysalaryruleDto; 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.PayslipSearchDto; import cn.timer.api.dto.xcgl.PushPayslipDto; 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.SalaryRulesDto; import cn.timer.api.dto.xcgl.SalaryoptionsDto; import cn.timer.api.dto.xcgl.SearchSalariedPeopleDto; import cn.timer.api.dto.xcgl.SpecialDeductionDto; import cn.timer.api.dto.xcgl.TjSalaryItemDot; import cn.timer.api.dto.xcgl.UserPersonnelDto; import cn.timer.api.dto.xcgl.XcglAssoGsjsmxDto; 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/{yemon}") @ApiOperation(value = "获取薪资组信息", httpMethod = "GET", notes = "接口发布说明") public ResponseResult selectpaylist(@CurrentUser UserBean userBean,@PathVariable String yemon) { List<XcglAdminXzz> xcgladminxzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getQyid, userBean.getOrgCode()).eq(XcglAdminXzz::getMonthtime, yemon).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());// 下 Calendar lastm = Calendar.getInstance(); lastm.setTime(SalaryTool.strToDateLong(paygro.getXzyf() + "-01 00:00:00")); // 设置为当前时间 lastm.set(Calendar.MONTH, lastm.get(Calendar.MONTH) - 1); String lastmonth = new SimpleDateFormat("yyyy-MM").format(lastm.getTime());// 上 String thismonth = paygro.getXzyf();// 本 Calendar calendar = Calendar.getInstance(); calendar.setTime(SalaryTool.strToDateLong(paygro.getXzyf() + "-01 00:00:00")); // 设置为当前时间 calendar.set(Calendar.MONTH, calendar.get(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 = SalaryTool.getfirstlastTwo(paygro.getXzyf() + "-01 00:00:00") + "到" + SalaryTool.getlastlastTwo(paygro.getXzyf() + "-01 00:00:00"); } 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 = SalaryTool.getfirstnowTwo(paygro.getXzyf() + "-01 00:00:00") + "到" + SalaryTool.getlastnowTwo(paygro.getXzyf() + "-01 00:00:00"); } 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());//薪资月份 xcglxzz.setXzyf(payrollcycle.substring(0, 7));//开始);//算薪月份 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().replace("{{", "").replace("}}", ""));//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs().replace("{{", "").replace("}}", ""));//公式格式 系统提供/自定义公式 zzx.setRulestate(xzxj.getRulestate());//规则状态[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().replace("{{", "").replace("}}", ""));//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs().replace("{{", "").replace("}}", ""));//公式格式 系统提供/自定义公式 zzx.setRulestate(xzxj.getRulestate());//规则状态[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]);//银行模板项 需与银行一一对应 if(xzxj != null) { zzx.setRule(xzxj.getGsxs().replace("{{", "").replace("}}", ""));//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs().replace("{{", "").replace("}}", ""));//公式格式 系统提供/自定义公式 zzx.setRulestate(xzxj.getRulestate());//规则状态[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, 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(yzxs.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); } /** * @param userBean * @param modifysalaryruledto * @return */ @PostMapping(value = "/modifysalaryrule") @ApiOperation(value = "修改薪资规则", httpMethod = "POST", notes = "接口发布说明") public Result<Object> Modifysalaryrule(@CurrentUser UserBean userBean,@RequestBody ModifysalaryruleDto modifysalaryruledto) { XcglAssoXcjsgz xcjsgz = XcglAssoXcjsgz.builder().id(modifysalaryruledto.getXcjsgzid()).build().selectById(); //11:应发工资 13:实发工资 if(modifysalaryruledto.getXcjsgzid().equals(11) || modifysalaryruledto.getXcjsgzid().equals(13)) { if(!xcjsgz.getGsxs().equals(modifysalaryruledto.getFormula())) { XcglAssoJsgzzx.builder().gsid(modifysalaryruledto.getXcjsgzid()).gsgs(modifysalaryruledto.getFormula()) .rule(modifysalaryruledto.getFormula()).rulestate(3).id(modifysalaryruledto.getJsgzzxid()).build().updateById(); }else { XcglAssoJsgzzx.builder().gsid(modifysalaryruledto.getXcjsgzid()).gsgs(modifysalaryruledto.getFormula()) .rule(modifysalaryruledto.getFormula()).rulestate(xcjsgz.getRulestate()).id(modifysalaryruledto.getJsgzzxid()).build().updateById(); } }else { XcglAssoJsgzzx.builder().gsid(modifysalaryruledto.getXcjsgzid()).gsgs(modifysalaryruledto.getFormula()) .dygk(modifysalaryruledto.getDygk()).degk(modifysalaryruledto.getDegk()) .rule(modifysalaryruledto.getFormula()).rulestate(xcjsgz.getRulestate()) .id(modifysalaryruledto.getJsgzzxid()).build().updateById(); } return ResultUtil.success("操作成功!"); } /** * 弹出薪资规则 * @param userBean * @param id 薪资选项id * @return */ @GetMapping(value="/popupsalaryrule/{id}") @ApiOperation(value = "弹出薪资规则", httpMethod = "GET", notes = "接口发布说明") public Result<Object> Popupsalaryrule(@CurrentUser UserBean userBean,@PathVariable("id") Integer id) { List<XcglAssoXcjsgz> gzgs = XcglAssoXcjsgz.builder().build().selectList(new QueryWrapper<XcglAssoXcjsgz>().lambda().eq(XcglAssoXcjsgz::getOptionid, id)); return ResultUtil.data(gzgs,"操作成功!"); } /** * 删除薪资组 *********** */ @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(SalaryTool.strToDateLong(paygro.getXzyf() + "-01 00:00:00")); // 设置为当前时间 lastm.set(Calendar.MONTH, lastm.get(Calendar.MONTH) - 1); String lastmonth = new SimpleDateFormat("yyyy-MM").format(lastm.getTime());// 上 String thismonth = paygro.getXzyf();// 本 Calendar calendar = Calendar.getInstance(); calendar.setTime(SalaryTool.strToDateLong(paygro.getXzyf() + "-01 00:00:00")); // 设置为当前时间 calendar.set(Calendar.MONTH, calendar.get(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 = SalaryTool.getfirstlastTwo(paygro.getXzyf() + "-01 00:00:00") + "到" + SalaryTool.getlastlastTwo(paygro.getXzyf() + "-01 00:00:00"); } 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 = SalaryTool.getfirstnowTwo(paygro.getXzyf() + "-01 00:00:00") + "到" + SalaryTool.getlastnowTwo(paygro.getXzyf() + "-01 00:00:00"); } 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.setXzyf(payrollcycle.substring(0, 7));//算薪月份 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 = "/check_staff_file") @ApiOperation(value = "核对算薪人员及薪资档案", httpMethod = "POST", notes = "接口发布说明") public ResponseResult Check_staff_file(@CurrentUser UserBean userBean,@RequestBody CheckSalaryStaffDto checksalary) { checksalary.setOrgcode(userBean.getOrgCode()); List<FixedSalaryStaffDto> dxrylist = xcglassoxzdazdymapper.selectPaygroupStaff(checksalary);// 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); } /** * 获取薪资选项 */ @PostMapping(value = "/salaryoptions") @ApiOperation(value = "获取薪资选项", httpMethod = "POST", notes = "接口发布说明") public ResponseResult SalaryOoptions(@CurrentUser UserBean userBean, @RequestBody SalaryoptionsDto dto) { List<XcglAssoOptionDto> itemlist = xcglsalaryitemmapper.selectxcglsalaryitemList(dto); 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().replace("{{", "").replace("}}", ""));//规则******************************** zzx.setGsid(xzxj.getId());//公式id 0:未关联规则 zzx.setGsgs(xzxj.getGsxs().replace("{{", "").replace("}}", ""));//公式格式 系统提供/自定义公式 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()); zzx.setDygk(xzxj.getDygk()); zzx.setDegk(xzxj.getDegk()); 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 sfcz = XcglAssoJsgzzx.builder().build().selectOne(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, payc.getGid()).eq(XcglAssoJsgzzx::getSalaryitem, payc.getName())); if(sfcz == null) { 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); zzx.setIsCustom(1);//是否自定义项(0:否;1:是) xcglassojsgzzxmapper.jsgzzxinsert(zzx); return new ResponseResult().success("创建薪资组成功", zzx); }else { return new ResponseResult().error(payc.getName()+"重复添加"); } } /** * 获取薪资项公式 */ @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 = "/monthly_manual_import/{id}") @ApiOperation(value = "每月手动导入所需导出的表头数据", httpMethod = "GET", notes = "接口发布说明") public Result<Object> MonthlyManualImport(@CurrentUser UserBean userBean,@PathVariable Integer id) { FloatingDataDto data = new FloatingDataDto(); //rulestate:规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] List<XcglAssoJsgzzx> jsgzzx = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, id) .eq(XcglAssoJsgzzx::getRulestate, 4)); data.setJsgzzx(jsgzzx); List<UserPersonnelDto> sonn = xcglassoxzbmapper.UserPersonnel(id, userBean.getOrgCode()); data.setUsers(sonn); return ResultUtil.data(data); } /** * 导入浮动数据薪资 */ @PostMapping(value = "/payimport") @ApiOperation(value = "导入薪资", httpMethod = "POST", notes = "接口发布说明") public ResponseResult ImportSalaryData(@CurrentUser UserBean userBean,@RequestBody ImportSalarySetDto impor) { 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(Double.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(Double.valueOf(ims[p].getSrz()));// // xzb.setQyid(userBean.getOrgCode()); // xcglassoxzbmapper.ModifyImportedSalary(xzb); // } } } return new ResponseResult().success("导入成功"); } @PostMapping(value = "/determinesalaryrules") @ApiOperation(value = "是否确定薪资规则", httpMethod = "POST", notes = "接口发布说明") public Result<Object> DetermineSalaryRules(@CurrentUser UserBean userBean,@RequestBody SalaryRulesDto salaryrulesdto) { XcglAdminXzz.builder().id(salaryrulesdto.getXzzid()).isXzgz(salaryrulesdto.getState()).build().updateById(); return ResultUtil.success("操作成功!"); } @PostMapping(value = "/locksalary") @ApiOperation(value = "是否锁定薪资", httpMethod = "POST", notes = "接口发布说明") public Result<Object> LockSalary(@CurrentUser UserBean userBean,@RequestBody SalaryRulesDto salaryrulesdto) { XcglAdminXzz.builder().id(salaryrulesdto.getXzzid()).isXzsd(salaryrulesdto.getState()).build().updateById(); return ResultUtil.success("操作成功!"); } /** * 查看薪资 */ @PostMapping(value = "/checksalary") @ApiOperation(value = "查看薪资", httpMethod = "POST", notes = "接口发布说明") public ResponseResult CheckSalary(@CurrentUser UserBean userBean, @RequestBody CheckSalaryStaffDto checksalary) { //计算完成 返回数据 checksalary.setOrgcode(userBean.getOrgCode()); List<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(checksalary); return new ResponseResult().success("查看薪资成功", jswsj); } /** * 获取计薪规则组项 */ @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<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(id,userBean.getOrgCode()); CheckSalaryStaffDto checksalary = new CheckSalaryStaffDto(); checksalary.setPaygroupid(id); // checksalary.setXzyf(xzyf); checksalary.setOrgcode(userBean.getOrgCode()); List<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(checksalary); salfie.setComuser(jswsj); return new ResponseResult().success("获取计薪规则组项成功", salfie); } @Autowired private KqglAssoMonthPunchSummaryMapper kqglassomonthpunchsummarymapper; @Autowired private SbgjjAssoYjzdMapper sbgjjassoyjzdmapper; @Autowired private SbgjjAssoDetailedMapper sbgjjassodetailedmapper; /** * (保存,下一步)计算薪资 ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() */ @GetMapping(value = "/calculatesalary/{id}") @ApiOperation(value = "计算薪资", httpMethod = "GET", notes = "接口发布说明") public ResponseResult CalculateSalary(@CurrentUser UserBean userBean,@PathVariable Integer id) { int orgcode = userBean.getOrgCode(); String xzyf = ""; //typeid--1:计算 2:重新计算 //已知薪资组id**** //规则状态[0:系统自动提取;1:系统固定值;2:固定公式计算;3:自定义公式计算;4:每月自动导入] //计算薪资改变薪资组计算状态 XcglAdminXzz yjs = XcglAdminXzz.builder().build(); yjs.setCountstate(1);//计算状态 0:未计算;1:已计算 yjs.setId(id); yjs.updateById(); //薪资组信息 XcglAdminXzz xzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getId, id).one(); // sxrq = xzz.getXzyf(); xzyf = xzz.getXzyf(); //当前薪资组内人员 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) { xcglassoxzbmapper.deleteByuserid(znr.getUserid(),id,xzyf);//删除已经计算的薪资 //查询员工定薪数据 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(xzyf);//薪资月 xzb.setXzxid(cal.getId());//薪资项id xzb.setXzxjg(Double.valueOf(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(xzyf);//薪资月 xzb.setXzxid(cal.getId());//薪资项id xzb.setXzxjg(0.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) .eq(XcglAssoJsgzzx::getType, 2).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; double vacation = 0;//假期 int numover = 0; double workover = 0;//加班 if(tablename.equals("yggl_main_emp")) {//员工管理 QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<>(); queryWrapper.select(fieldname).eq("emp_num", znr.getUserid()).eq("org_code", userBean.getOrgCode());//select #{tablename} from yggl_main_emp where emp_num = ? list = ygglmainempmapper.selectMaps(queryWrapper); }else if(tablename.equals("kqgl_asso_month_punch_summary")) { QueryWrapper<KqglAssoMonthPunchSummary> queryWrapper = new QueryWrapper<>(); queryWrapper.select(fieldname).eq("num", znr.getUserid()).eq("org_code", userBean.getOrgCode()).eq("belong_year", xzyf.substring(0, 4)).eq("belong_month", Integer.valueOf(xzyf.substring(5, 7)));//select #{tablename} from yggl_main_emp where emp_num = ? list = kqglassomonthpunchsummarymapper.selectMaps(queryWrapper); }else if(tablename.equals("sbgjj_asso_yjzd")) { QueryWrapper<SbgjjAssoYjzd> queryWrapper = new QueryWrapper<>(); queryWrapper.select(fieldname).eq("user_num", znr.getUserid()).eq("qyid", userBean.getOrgCode()).eq("zymonth", xzyf);//select #{tablename} from yggl_main_emp where emp_num = ? list = sbgjjassoyjzdmapper.selectMaps(queryWrapper); }else if(tablename.equals("sbgjj_asso_detailed")) {//社保公积金 QueryWrapper<SbgjjAssoDetailed> queryWrapper = new QueryWrapper<>(); queryWrapper.select(fieldname).eq("coverage_name", lbcx.getOptionname().substring(0, 2)).eq("user_id", znr.getUserid()).eq("org_code", userBean.getOrgCode()).eq("attribution_time", xzyf);//select #{tablename} from yggl_main_emp where emp_num = ? list = sbgjjassodetailedmapper.selectMaps(queryWrapper); }else if(tablename.equals("kqgl_asso_relation_summary")) {//假期(32~41)、补卡次数15、工作日加班24、休息日加班25、节假日加班26 if(lbcx.getId() == 32) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 1, znr.getUserid()); vacation = balance.getBalance(); } if(lbcx.getId() == 33) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 2, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 34) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 3, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 35) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 4, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 36) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 5, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 37) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 6, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 38) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 7, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 39) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 8, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 40) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 9, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 41) { HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(orgcode, xzyf, 10, znr.getUserid()); vacation = balance.getBalance();} if(lbcx.getId() == 15) { HolidayInquiryDto num = xcglassoxzbmapper.NumberOvertime(orgcode, xzyf, znr.getUserid()); numover = num.getNum();} if(lbcx.getId() == 24) { HolidayInquiryDto worov = xcglassoxzbmapper.PeriodsOvertime(orgcode, xzyf, 1, znr.getUserid()); workover = worov.getBalance();} if(lbcx.getId() == 25) { HolidayInquiryDto worov = xcglassoxzbmapper.PeriodsOvertime(orgcode, xzyf, 2, znr.getUserid()); workover = worov.getBalance();} if(lbcx.getId() == 26) { HolidayInquiryDto worov = xcglassoxzbmapper.PeriodsOvertime(orgcode, xzyf, 3, znr.getUserid()); workover = worov.getBalance();} }else if(tablename.equals("xcgl_asso_gsjsmx")) { QueryWrapper<XcglAssoGsjsmx> queryWrapper = new QueryWrapper<>(); queryWrapper.select(fieldname).eq("user_num", znr.getUserid()).eq("qyid", userBean.getOrgCode()).eq("salary_month", xzyf);//select #{tablename} from yggl_main_emp where emp_num = ? list = xcglassogsjsmxmapper.selectMaps(queryWrapper); } String autacq = ""; if(list != null) { for(Map<String, Object> aut:list) { if(aut != null) { autacq = aut.toString().substring(aut.toString().indexOf("=")+1).replace("}", ""); } } }else { if(lbcx.getId() == 15) { autacq = String.valueOf(numover); }else if(lbcx.getId() == 24 || lbcx.getId() == 25 || lbcx.getId() == 26) { autacq = String.valueOf(workover); }else { autacq = String.valueOf(vacation); } } //处理结果 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(xzyf);//薪资月 } xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg(("").equals(autacq) ? 0.0 : Double.valueOf(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(xzyf);//薪资月 } xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg(null);//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(xzyf);//薪资月 xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg(0.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 || xtzd.getIsCustom() == 1) {//说明阔以根据表查出结果 XcglAssoOption lbcx = new LambdaQueryChainWrapper<XcglAssoOption>(xcglassooptionmapper).eq(XcglAssoOption::getId,xtzd.getOptionid()).one(); if(lbcx != null && 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; //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(xzyf);//薪资月 xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg(0.0);//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(xzyf);//薪资月 xzb.setXzxid(xtzd.getId());//薪资项id xzb.setXzxjg(0.0);//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } } } } } //计算完成 返回数据 // jswsj = xcglassoxzbmapper.CalculationResults(id,userBean.getOrgCode()); CheckSalaryStaffDto checksalary = new CheckSalaryStaffDto(); checksalary.setPaygroupid(id); checksalary.setXzyf(xzyf); checksalary.setOrgcode(userBean.getOrgCode()); jswsj = xcglassoxzbmapper.CalculationResults(checksalary); return new ResponseResult().success("计算完成", jswsj); }else {//该组无人 return new ResponseResult().error("请先添加算薪人员"); } } /** * 计算薪资!@#$%^&*()_+ * @param userBean * @param calcomtiondto * @return * @throws ScriptException * @throws NumberFormatException */ @PostMapping(value = "/salary_calculation") @ApiOperation(value = "计算薪资", httpMethod = "POST", notes = "接口发布说明") public Result<Object> SalaryCalculation(@CurrentUser UserBean userBean, @RequestBody CalculatingCompensationDto calcomtiondto) throws NumberFormatException, ScriptException { int orgcode = userBean.getOrgCode(); String strY = new SimpleDateFormat("yyyy").format(new Date()); ScriptEngine js = new ScriptEngineManager().getEngineByName("JavaScript"); //查询出薪资组内成员 List<XcglAssoXzury> paygrlist = XcglAssoXzury.builder().build().selectList(new QueryWrapper<XcglAssoXzury>().lambda().eq(XcglAssoXzury::getXzzid, calcomtiondto.getPay_group_id())); //查询出当前薪资组里所有列表头 计薪规则组项 固定数值 //32:事假、33:调休、34:病假、35:年假、36:产假、37:陪产假、38:婚假、39:例假、40:丧假、41:哺乳假; List<XcglAssoJsgzzx> sjbt = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, calcomtiondto.getPay_group_id())); //薪资组信息 XcglAdminXzz xzz = XcglAdminXzz.builder().id(calcomtiondto.getPay_group_id()).build().selectById(); //算薪月周期 String startcycle = xzz.getPayrollcycle().substring(0, 10);//开始 String endcycle = xzz.getPayrollcycle().substring(11, 21);//结束 //算薪月份 String salary_month = xzz.getXzyf();//算薪月份 //基本工资,岗位津贴,应出勤天数,实出勤天数,事假,病假 double base_pay = 0;//基本工资 double post_allowance = 0;//岗位津贴 double attendance_days = 0;//应出勤天数 // double actual_attendance_days = 0;//实出勤天数 double matter_leave = 0;//事假 double sick_leave = 0;//病假 double absenteeism_days = 0;//旷工天数 double personal_income_tax = 0;//个税 double other_deductions = 0;//其他扣除 double wages_payable = 0;//应发工资 double late_cs = 0;//迟到次数 double leave_early_cs = 0;//早退次数 double late_sc = 0;//迟到时长 double leave_early_sc = 0;//早退时长 double achievement_bonus = 0;//绩效奖金 double performance_commission = 0;//业绩提成 double pre_taxmakediff = 0;//税前补差 double matter_leave_deduction = 0;//事假扣款 double sick_leave_deduction = 0;//病假扣款 double secretary_ling = 0;//司龄 double grsb = 0;//个人社保 double grgjj = 0;//个人公积金 double net_salary = 0;//实发工资 //薪资组内成员 for(XcglAssoXzury pag : paygrlist) { //存在的计薪规则组项数据对应 写入薪资表 for(XcglAssoJsgzzx xzx : sjbt) { if(xzx.getRulestate() == 1 && xzx.getIsCustom() == 0 && xzx.getOptionid() == 0 && xzx.getSalaryitem().equals("基本工资")) { XcglAssoXzb xzb = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); base_pay = xzb.getXzxjg(); } if(xzx.getRulestate() == 1 && xzx.getIsCustom() == 0 && xzx.getOptionid() == 0 && xzx.getSalaryitem().equals("岗位津贴")) { XcglAssoXzb xzb = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); post_allowance = xzb.getXzxjg(); } XcglAssoXzb xzb = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 10) { attendance_days = xzb.getXzxjg(); }//实出勤天数 // if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 11) { actual_attendance_days = xzb.getXzxjg(); }//实出勤天数 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 32) { matter_leave = xzb.getXzxjg(); }//事假 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 34) { sick_leave = xzb.getXzxjg(); }//病假 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 12) { absenteeism_days = xzb.getXzxjg(); }//旷工天数 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 72) { other_deductions = xzb.getXzxjg(); }//其他扣除 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 13) { late_cs = xzb.getXzxjg(); }//迟到次数 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 14) { leave_early_cs = xzb.getXzxjg(); }//早退次数 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 18) { late_sc = xzb.getXzxjg(); }//迟到时长 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 22) { leave_early_sc = xzb.getXzxjg(); }//早退时长 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 50) { grsb = xzb.getXzxjg(); }//个人社保 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 51) { grgjj = xzb.getXzxjg(); }//个人公积金 if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 43) {//司龄 YgglMainEmp xzrz = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, pag.getUserid()).eq(YgglMainEmp::getOrgCode, orgcode)); int entry_date = Integer.valueOf(ClockInTool.SunNovCSTY(xzrz.getRzTime()));//yyyy if(Integer.valueOf(strY) - entry_date >= 0) { secretary_ling = Integer.valueOf(strY) - entry_date; } XcglAssoXzb.builder().xzxjg(secretary_ling).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); } //公式计算 //(固定公式计算):迟到早退扣款、事假扣款、病假扣款、旷工扣款、司龄工资、应发工资、实发工资 if(xzx.getRulestate().equals(2)) { double result = 0; if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 31) {//司龄工资 String formula = xzx.getGsgs();//#司龄#*100 String qaz = formula.replace("#司龄#", String.valueOf(secretary_ling)); result = Double.valueOf(String.valueOf(js.eval(qaz))); } if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 27) {//事假扣款 String formula = xzx.getGsgs();//#基本工资#/#应出勤天数#*#事假# #事假#*200 String qaz = formula.replace("#基本工资#", String.valueOf(base_pay)).replace("#应出勤天数#", String.valueOf(attendance_days)).replace("#事假#", String.valueOf(matter_leave)); if(attendance_days > 0) { result = Double.valueOf(String.valueOf(js.eval(qaz))); } matter_leave_deduction = result; } if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 28) {//病假扣款 String formula = xzx.getGsgs();//#基本工资#/#应出勤天数#*#病假#*0.4 #病假#*100 String qaz = formula.replace("#基本工资#", String.valueOf(base_pay)).replace("#应出勤天数#", String.valueOf(attendance_days)).replace("#病假#", String.valueOf(sick_leave)); if(attendance_days > 0) { result = Double.valueOf(String.valueOf(js.eval(qaz))); } sick_leave_deduction = result; } if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 29) {//旷工扣款 String formula = xzx.getGsgs();//#基本工资#/#应出勤天数#*#旷工天数#*3 #旷工天数#*100 String qaz = formula.replace("#基本工资#", String.valueOf(base_pay)).replace("#应出勤天数#", String.valueOf(attendance_days)).replace("#旷工天数#", String.valueOf(absenteeism_days)); if(attendance_days > 0) { result = SalaryTool.formatDouble(Double.valueOf(String.valueOf(js.eval(qaz)))); } } if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 30) {//迟到早退扣款 String qaz = ""; if(xzx.getGsid().equals(1)) { String formula = xzx.getGsgs();//#迟到次数#*20+#早退次数#*15 qaz = formula.replace("#迟到次数#", String.valueOf(late_cs)).replace("#早退次数#", String.valueOf(leave_early_cs)); }else { String formula = xzx.getGsgs();//#迟到时长#*10+#早退时长#*5 qaz = formula.replace("#迟到时长#", String.valueOf(late_sc)).replace("#早退时长数#", String.valueOf(leave_early_sc)); } if(!("").equals(qaz)) { result = Double.valueOf(String.valueOf(js.eval(qaz))); } } XcglAssoXzb.builder().xzxjg(result).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); } //应发工资 if(xzx.getRulestate().equals(2) && xzx.getIsCustom() == 0 && xzx.getOptionid() == 48) { String formula = xzx.getGsgs();//#基本工资#+#岗位津贴#+#绩效奖金#+#业绩提成#+#税前补差#-#事假扣款#-#病假扣款# String qaz = formula.replace("#基本工资#", String.valueOf(base_pay)).replace("#岗位津贴#", String.valueOf(post_allowance)).replace("#绩效奖金#", String.valueOf(achievement_bonus)) .replace("#业绩提成#", String.valueOf(performance_commission)).replace("#税前补差#", String.valueOf(pre_taxmakediff)) .replace("#事假扣款#", String.valueOf(matter_leave_deduction)).replace("#病假扣款#", String.valueOf(sick_leave_deduction)); double result = SalaryTool.formatDouble(Double.valueOf(String.valueOf(js.eval(qaz)))); wages_payable = result; XcglAssoXzb.builder().xzxjg(result).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); }else if(xzx.getRulestate() == 3 && xzx.getIsCustom() == 0 && xzx.getOptionid() == 48) {//(自定义公式计算): 应发工资 double result = 0; //计薪规则组项中自定义项 List<XcglAssoJsgzzx> zdyx = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, calcomtiondto.getPay_group_id()).eq(XcglAssoJsgzzx::getIsCustom, 1)); String formula = xzx.getGsgs();//#基本工资#+#岗位津贴#+#绩效奖金#+#业绩提成#+#税前补差#-#事假扣款#-#病假扣款#? String qaz = formula.replace("#基本工资#", String.valueOf(base_pay)).replace("#岗位津贴#", String.valueOf(post_allowance)).replace("#绩效奖金#", String.valueOf(achievement_bonus)) .replace("#业绩提成#", String.valueOf(performance_commission)).replace("#税前补差#", String.valueOf(pre_taxmakediff)) .replace("#事假扣款#", String.valueOf(matter_leave_deduction)).replace("#病假扣款#", String.valueOf(sick_leave_deduction)); for(XcglAssoJsgzzx zdy : zdyx) { double custom_ = 0;//自定义 boolean status = qaz.contains("#"+zdy.getSalaryitem()+"#");//公式中是否存在自定义 if(status) {//存在 XcglAssoJsgzzx zdygsx = XcglAssoJsgzzx.builder().build().selectOne(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getRulestate, 4).eq(XcglAssoJsgzzx::getIsCustom, 1) .eq(XcglAssoJsgzzx::getOptionid, 0).eq(XcglAssoJsgzzx::getSalaryitem, zdy.getSalaryitem())); XcglAssoXzb xzb_custom = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, zdygsx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); custom_ = xzb_custom.getXzxjg(); qaz = qaz.replace("#"+zdy.getSalaryitem()+"#", String.valueOf(custom_)); } } boolean status = qaz.contains("#");//再次确认公式中是否存在系统数据项 if(status) { List<XcglAssoJsgzzx> system_zdyx = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, calcomtiondto.getPay_group_id()) .eq(XcglAssoJsgzzx::getIsCustom, 0).ne(XcglAssoJsgzzx::getType, 1)); for(XcglAssoJsgzzx sys : system_zdyx) { if(qaz.contains("#"+sys.getSalaryitem()+"#")) { XcglAssoXzb xzb_custom = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, sys.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); double custom_two = xzb_custom.getXzxjg(); qaz = qaz.replace("#"+sys.getSalaryitem()+"#", String.valueOf(custom_two)); } } } if(!qaz.contains("#")) { result = Double.valueOf(String.valueOf(js.eval(qaz))); }else { System.err.println(xzx.getOptionid() + ":"+qaz+"有误!!!"); } wages_payable = result; XcglAssoXzb.builder().xzxjg(result).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); } if(xzx.getIsCustom() == 0 && xzx.getOptionid() == 69) {//个税 //个税计算 try { personal_income_tax = CalculationOfIndividualIncomeTax(String.valueOf(pag.getUserid()), salary_month, orgcode, wages_payable, other_deductions); } catch (ParseException e) { e.printStackTrace(); System.out.println("个税计算错误"); } double result = personal_income_tax < 0 ? 0.0 : personal_income_tax; XcglAssoXzb.builder().xzxjg(result).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); } //实发工资 if(xzx.getRulestate().equals(2) && xzx.getIsCustom() == 0 && xzx.getOptionid() == 70) { String formula = xzx.getGsgs();//#应发工资#-#个人社保#-#个人公积金#-#个税# String qaz = formula.replace("#应发工资#", String.valueOf(wages_payable)).replace("#个人社保#", String.valueOf(grsb)).replace("#个人公积金#", String.valueOf(grgjj)).replace("#个税#", String.valueOf(personal_income_tax < 0 ? 0.0 : personal_income_tax)); double result = SalaryTool.formatDouble(Double.valueOf(String.valueOf(js.eval(qaz)))); net_salary = result; XcglAssoXzb.builder().xzxjg(result).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); }else if(xzx.getRulestate().equals(3) && xzx.getIsCustom() == 0 && xzx.getOptionid() == 70) { double result = 0; //计薪规则组项中自定义项 List<XcglAssoJsgzzx> zdyx = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, calcomtiondto.getPay_group_id()).eq(XcglAssoJsgzzx::getIsCustom, 1)); String formula = xzx.getGsgs();//#应发工资#-#个人社保#-#个人公积金#-#个税# String qaz = formula.replace("#应发工资#", String.valueOf(wages_payable)).replace("#个人社保#", String.valueOf(grsb)).replace("#个人公积金#", String.valueOf(grgjj)).replace("#个税#", String.valueOf(personal_income_tax < 0 ? 0.0 : personal_income_tax)); for(XcglAssoJsgzzx zdy : zdyx) { double custom_ = 0;//自定义 boolean status = qaz.contains("#"+zdy.getSalaryitem()+"#");//公式中是否存在自定义 if(status) {//存在 XcglAssoJsgzzx zdygsx = XcglAssoJsgzzx.builder().build().selectOne(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getRulestate, 4).eq(XcglAssoJsgzzx::getIsCustom, 1) .eq(XcglAssoJsgzzx::getOptionid, 0).eq(XcglAssoJsgzzx::getSalaryitem, zdy.getSalaryitem())); XcglAssoXzb xzb_custom = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, zdygsx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); custom_ = xzb_custom.getXzxjg(); qaz = qaz.replace("#"+zdy.getSalaryitem()+"#", String.valueOf(custom_)); } } boolean status = qaz.contains("#");//再次确认公式中是否存在系统数据项 if(status) { List<XcglAssoJsgzzx> system_zdyx = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, calcomtiondto.getPay_group_id()) .eq(XcglAssoJsgzzx::getIsCustom, 0).ne(XcglAssoJsgzzx::getType, 1)); for(XcglAssoJsgzzx sys : system_zdyx) { if(qaz.contains("#"+sys.getSalaryitem()+"#")) { XcglAssoXzb xzb_custom = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, sys.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); double custom_two = xzb_custom.getXzxjg(); qaz = qaz.replace("#"+sys.getSalaryitem()+"#", String.valueOf(custom_two)); } } } if(!qaz.contains("#")) { result = Double.valueOf(String.valueOf(js.eval(qaz))); }else { System.err.println(xzx.getOptionid() + ":"+qaz+"有误!!!"); } net_salary = result; XcglAssoXzb.builder().xzxjg(result).build().update(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getXzxid, xzx.getId()).eq(XcglAssoXzb::getUserid, pag.getUserid())); } }//存在的计薪规则组项数据对应 写入薪资表 --结束 XcglAssoGztzt.builder().build().delete(new QueryWrapper<XcglAssoGztzt>().lambda().eq(XcglAssoGztzt::getUserid, pag.getUserid()).eq(XcglAssoGztzt::getXzyf, salary_month) .eq(XcglAssoGztzt::getQyid, orgcode)); //xcgl_asso_gztzt XcglAssoGztzt gzt = XcglAssoGztzt.builder().build(); gzt.setUserid(pag.getUserid()); gzt.setXzyf(salary_month);//薪资月 gzt.setFsType(0); gzt.setCkType(0); gzt.setQrType(0); gzt.setFkyj(null); gzt.setYhqm(null); gzt.setSfgz(net_salary); gzt.setQyid(orgcode); gzt.insert(); }//薪资组内成员--结束 return ResultUtil.data(null, "计算完成"); } /** * 个税计算明细 * @param gsus 用户id * @param salary_month 计算薪资月 * @param orgcode 企业id * @param wages_payable 应发工资 * @param other_deductions 其他扣除 * @return * @throws ParseException */ public double CalculationOfIndividualIncomeTax(String gsus,String salary_month,int orgcode,double wages_payable,double other_deductions) throws ParseException { double personalincome = 0; String strY = new SimpleDateFormat("yyyy").format(new Date()); //当月个税存在则直接获取 无则根据计算薪资月的上月个税为基准计算 XcglAssoGsjsmx dyxzgs = XcglAssoGsjsmx.builder().build().selectOne(new QueryWrapper<XcglAssoGsjsmx>().lambda().eq(XcglAssoGsjsmx::getUserNum, gsus).eq(XcglAssoGsjsmx::getQyid, orgcode) .eq(XcglAssoGsjsmx::getSalaryMonth, salary_month)); if(dyxzgs != null) { personalincome = dyxzgs.getThmonthPersonal(); }else { //#(上月)# 对应薪资月的-1 个税对标数据 (九月工资:对应8月的个税来计算九月的个税) XcglAssoGsjsmx sygs = XcglAssoGsjsmx.builder().build().selectOne(new QueryWrapper<XcglAssoGsjsmx>().lambda().eq(XcglAssoGsjsmx::getUserNum, gsus).eq(XcglAssoGsjsmx::getQyid, orgcode) .eq(XcglAssoGsjsmx::getSalaryMonth, SalaryTool.getfirstlastMo(salary_month+"-01 00:00:00"))); YgglMainEmp yh = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, gsus).eq(YgglMainEmp::getOrgCode, orgcode)); //对应算薪月份的专项附加扣除 XcglAssoZxfjkc zxf = XcglAssoZxfjkc.builder().build().selectOne(new QueryWrapper<XcglAssoZxfjkc>().lambda().eq(XcglAssoZxfjkc::getUserid, gsus) .eq(XcglAssoZxfjkc::getQyid, orgcode).eq(XcglAssoZxfjkc::getTaxmonth, salary_month)); //写入个税明细表***************** XcglAssoGsjsmx gsmx = XcglAssoGsjsmx.builder().build(); gsmx.setUserNum(gsus);//用户id gsmx.setUserName(yh.getName());//用户姓名 gsmx.setSalaryMonth(salary_month);//薪资月 //报税周期:(1:当月报税;2:次月报税) XcglAssoBszqsz bssz = XcglAssoBszqsz.builder().build().selectOne(new QueryWrapper<XcglAssoBszqsz>().lambda().eq(XcglAssoBszqsz::getQyid, orgcode)); String taxmonth = ""; if(bssz.getTaxReturnCycle().equals(1)) { taxmonth = salary_month; }else{ taxmonth = SalaryTool.getfirstnextMo(salary_month+"-01 00:00:00"); } gsmx.setTaxMonth(taxmonth);//税款所属月份 gsmx.setCumZljy(zxf == null ? 0 : zxf.getChildrenedu());//累计子女教育 gsmx.setCumZfdklx(zxf == null ? 0 : zxf.getHouseloans());//累计住房贷款利息 gsmx.setCumZfzj(zxf == null ? 0 : zxf.getHouserents());//累计住房租金 gsmx.setCumSylr(zxf == null ? 0 : zxf.getSupportolder());//累计赡养老人 gsmx.setCumJxjy(zxf == null ? 0 : zxf.getContinueedu());//累计继续教育 gsmx.setCumZxfjkc(zxf == null ? 0 : zxf.getTotalmoney());//累计专项附加扣除 gsmx.setTaxType("工资薪金所得");//计税类型 gsmx.setCurrentIncome(wages_payable);//本期收入 【应发工资】 SbgjjAssoYjzd cuspde = sbgjjassoyjzdmapper.IndividualTotalsbgjj(gsus, orgcode, salary_month); gsmx.setCurrentSpecialDeduction(cuspde == null ? 0 : Double.valueOf(cuspde.getGrjltotal()));//本期专项扣除 【个人的社保公积金缴纳扣除】 gsmx.setCumSre(wages_payable+(sygs == null ? 0 : sygs.getCumSre()));//累计收入额 【本期收入+累计收入额(上月)】 double cumjcfy = 0; int xcy = 0; YgglMainEmp xzrz = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, gsus).eq(YgglMainEmp::getOrgCode, orgcode)); if(xzrz != null) { String entry_date = ClockInTool.SunNovCSTYMD(xzrz.getRzTime());//yyyyMMdd if(bssz.getTaxReturnCycle().equals(1)) {//当月报税 if(entry_date.substring(0,4).equals(strY)) {//判断是否是本年 xcy = SalaryTool.getMonthDiff(entry_date, salary_month+"-01"); }else { xcy = SalaryTool.getMonthDiff(strY+"-01-01", salary_month+"-01"); } cumjcfy = xcy*5000; }else {//次月报税 if(entry_date.substring(0,4).equals(strY)) {//判断是否是本年 xcy = SalaryTool.getMonthDiff(entry_date, salary_month+"-01")+1; }else { xcy = SalaryTool.getMonthDiff(strY+"-01-01", salary_month+"-01")+1; } cumjcfy = xcy*5000; } } gsmx.setCumJcfy(cumjcfy);//累计减除费用 【5000*在职月份数】 gsmx.setCumZxkc((cuspde == null ? 0 : Double.valueOf(cuspde.getGrjltotal())) + (sygs == null ? 0 : sygs.getCumZxkc()));//累计专项扣除 【本期专项扣除+累计专项扣除(上月)】 gsmx.setCumQtkc(other_deductions+(sygs == null ? 0 : sygs.getCumQtkc()));//累计其他扣除 【其他扣除+累计其他扣除(上月)】 double cumynssde = 0; cumynssde = gsmx.getCumSre() - cumjcfy - gsmx.getCumZxkc() - gsmx.getCumZxfjkc() - gsmx.getCumQtkc(); gsmx.setCumYnssde(cumynssde);//累计应纳税所得额 【累计收入额-累计减除费用-累计专项扣除-累计专项附加扣除-累计其他扣除】 String[] miscalculation = getPersonalincometax(cumynssde); gsmx.setTaxRate(Double.valueOf(miscalculation[0]));//税率 gsmx.setQuickCalculationDeduction(Double.valueOf(miscalculation[1]));//速算扣除数 gsmx.setCumYnse(Double.valueOf(miscalculation[2]));//累计应纳税额 【累计应纳税所得额*税率-速算扣除数】 double cumyyjse = 0; cumyyjse = (sygs == null ? 0 : sygs.getCumYyjse()) + (sygs == null ? 0 : sygs.getCumYbtse()); gsmx.setCumYyjse(cumyyjse);//累计已预缴纳税额 【累计已预缴税额(上月)+累计应补(退)税额(上月)】 double cumybtse = 0; cumybtse = gsmx.getCumYnse() - gsmx.getCumYyjse(); gsmx.setCumYbtse(cumybtse);//累计应补(退)税额(本月个税) 【累计应纳税额-累计已预缴纳税额】 gsmx.setThmonthPersonal(cumybtse);//本月个税 gsmx.setQyid(orgcode);//企业id gsmx.insert(); if(cumybtse > 0) { personalincome = cumybtse; } } return personalincome; } /** * 计算个税 * @param taxpayroll 累计应纳税所得额 */ public String[] getPersonalincometax(double taxpayroll){ String[] perinctax = new String[3]; List<XcglAssoTaxFormula> taxratelist = XcglAssoTaxFormula.builder().build().selectList(new QueryWrapper<XcglAssoTaxFormula>().lambda().eq(XcglAssoTaxFormula::getQyid, 0)); double personalIncomeTax=0;//个税 double money=36000;//应交税工资最低点 if(taxpayroll>money){//应交税 for (XcglAssoTaxFormula tax : taxratelist) {//计算个税 if(tax.getTaxablestart()<=taxpayroll&&taxpayroll<tax.getTaxableend()){ //个人所得税=计税工资*税率-速算扣除数 BigDecimal aa = new BigDecimal(tax.getTaxrate()); BigDecimal bb = new BigDecimal(100); double taxrate = aa.divide(bb,2,BigDecimal.ROUND_HALF_UP).doubleValue(); personalIncomeTax = taxpayroll*taxrate-tax.getDeductions(); perinctax[0] = String.valueOf(taxrate);//税率 perinctax[1] = String.valueOf(tax.getDeductions());//速算扣除数 perinctax[2] = String.valueOf(SalaryTool.formatDouble(personalIncomeTax));//累计应纳税额 } } }else{ perinctax[0] = "0"; perinctax[1] = "0"; perinctax[2] = "0"; } return perinctax; } @GetMapping(value = "/gettaxreturncycle") @ApiOperation(value = "查询报税周期信息", httpMethod = "GET", notes = "接口发布说明") public Result<Object> gettaxreturncycle(@CurrentUser UserBean userBean) { XcglAssoBszqsz bszq = XcglAssoBszqsz.builder().build().selectOne(new QueryWrapper<XcglAssoBszqsz>().lambda().eq(XcglAssoBszqsz::getQyid, userBean.getOrgCode())); if(bszq == null) { XcglAssoBszqsz.builder().taxReturnCycle(1).qyid(userBean.getOrgCode()).build().insert(); } bszq = XcglAssoBszqsz.builder().build().selectOne(new QueryWrapper<XcglAssoBszqsz>().lambda().eq(XcglAssoBszqsz::getQyid, userBean.getOrgCode())); return ResultUtil.data(bszq, "完成"); } /** * 新增/修改--报税周期信息 */ @PostMapping(value = "/taxreturncycle") @ApiOperation(value = "新增/修改--报税周期信息", httpMethod = "POST", notes = "接口发布说明") public Result<Object> Taxreturncycle(@CurrentUser UserBean userBean,@RequestBody XcglAssoBszqsz xcglassobszqsz) { xcglassobszqsz.setQyid(userBean.getOrgCode()); return xcglassobszqsz.insertOrUpdate() ? ResultUtil.success("操作成功!") : ResultUtil.error("操作失败!"); } /** 构建薪资组 * @param userBean * @param budpaygr * @return */ @PostMapping(value = "/buildpaygroup") @ApiOperation(value = "构建薪资组", httpMethod = "POST", notes = "接口发布说明") public Result<Object> Buildpaygroup(@CurrentUser UserBean userBean, @RequestBody BuildPayGroupDto budpaygr) { Integer empNum = userBean.getEmpNum(); Integer orgCode = userBean.getOrgCode(); Calendar lastm = Calendar.getInstance(); lastm.setTime(SalaryTool.strToDateLong(budpaygr.getXzyf() + "-01 00:00:00")); // 设置为当前时间 lastm.set(Calendar.MONTH, lastm.get(Calendar.MONTH) - 1); String lastmonth = new SimpleDateFormat("yyyy-MM").format(lastm.getTime());// 上 String thismonth = budpaygr.getXzyf();// 本 Calendar calendar = Calendar.getInstance(); calendar.setTime(SalaryTool.strToDateLong(budpaygr.getXzyf() + "-01 00:00:00")); // 设置为当前时间 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1); String nextMonth = new SimpleDateFormat("yyyy-MM").format(calendar.getTime());// 下 //查询系统现有的薪资组 List<XcglAdminXzz> xcxz = XcglAdminXzz.builder().build().selectList(new QueryWrapper<XcglAdminXzz>().lambda().eq(XcglAdminXzz::getQyid, userBean.getOrgCode())); for(XcglAdminXzz xzz : xcxz) { XcglAdminXzz xcglxzz = XcglAdminXzz.builder().build(); xcglxzz.setName(xzz.getName());// 薪资组命名 xcglxzz.setPayperiod(xzz.getPayperiod());// 算薪月周期 0:上月;1:当月 xcglxzz.setPaydayperiod(xzz.getPaydayperiod());// 算薪日周期 全月 String payper = String.format("%02d", xzz.getPaydayperiod()); String payrollcycle = null; if (xzz.getPayperiod() == 0) {// 上月 if (xzz.getPaydayperiod() == 1) { payrollcycle = SalaryTool.getfirstlastTwo(budpaygr.getXzyf() + "-01 00:00:00") + "到" + SalaryTool.getlastlastTwo(budpaygr.getXzyf() + "-01 00:00:00"); } else { String firstnext = lastmonth + "-" + payper; int jgs = xzz.getPaydayperiod() - 1; String lastnext = thismonth + "-" + String.format("%02d", jgs); payrollcycle = firstnext + "到" + lastnext; } } else {// 当月 if (xzz.getPaydayperiod() == 1) { payrollcycle = SalaryTool.getfirstnowTwo(budpaygr.getXzyf() + "-01 00:00:00") + "到" + SalaryTool.getlastnowTwo(budpaygr.getXzyf() + "-01 00:00:00"); } else { String firstnow = thismonth + "-" + payper; int jgs = xzz.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(xzz.getPxfs());// 选择配薪方式(0: 空白模板;df:默认) xcglxzz.setAdduserid(empNum);// 员工工号 xcglxzz.setQyid(orgCode);// 企业编码 xcglxzz.setAddtime(new Date().getTime());// 添加时间 xcglxzz.setMonthtime(budpaygr.getXzyf());//薪资月份 xcglxzz.setXzyf(payrollcycle.substring(0, 7));//算薪月份 xcgladminxzzmapper.insert(xcglxzz); int payid = xcglxzz.getId(); //从其他薪资组复制规则 /*****************/ //未加入分组 List<XcglAssoJsgzzx> wjrfzlist = new LambdaQueryChainWrapper<XcglAssoJsgzzx>(xcglassojsgzzxmapper).eq(XcglAssoJsgzzx::getXzzid, xzz.getId()).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, xzz.getId()).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, xzz.getId()).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(yzxs.getOptionid()); yjrfzzzxlist.add(zzx); } if(yjrfzzzxlist.size() > 0) { xcglassojsgzzxmapper.insertxcglassojsgzzxList(yjrfzzzxlist); } } } List<XcglAssoXzury> zxzus = XcglAssoXzury.builder().build().selectList(new QueryWrapper<XcglAssoXzury>().lambda().eq(XcglAssoXzury::getXzzid, xzz.getId())); List<XcglAssoXzury> xcgllist = new ArrayList<XcglAssoXzury>(); for (XcglAssoXzury xzr : zxzus) { // xcglassoxzurymapper.deleteByuseridoqyid(Integer.valueOf(attser[u]), orgCode); XcglAssoXzury kquser = new XcglAssoXzury(); kquser.setXzzid(payid);// 薪资组id kquser.setUserid(xzr.getUserid()); kquser.setQyid(orgCode); xcgllist.add(kquser); } if (xcgllist.size() > 0) { xcglassoxzurymapper.insertxcglassoxzuryList(xcgllist); } }//循环结束 return ResultUtil.data(null, "完成"); } /** * 同步考勤 XXXXXXX */ @GetMapping(value = "/SynchroAtt/{id}/{xzyf}") @ApiOperation(value = "同步考勤", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SynchroAttendance(@CurrentUser UserBean userBean,@PathVariable Integer id,@PathVariable String xzyf) { //已知薪资组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,xzyf); //计算得出考勤相关数据 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(xzyf);//薪资月 xzb.setXzxid(payatt.getId());//薪资项id xzb.setXzxjg(Double.valueOf(autacq));//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); }else { //入[薪资表] XcglAssoXzb xzb = XcglAssoXzb.builder().build(); xzb.setUserid(znr.getUserid());//用户id xzb.setXzyf(xzyf);//薪资月 xzb.setXzxid(payatt.getId());//薪资项id xzb.setXzxjg(0.0);//薪资项结果 xzb.setQyid(userBean.getOrgCode()); xcglassoxzbmapper.xzbinsert(xzb); } } } } //计算完成 返回数据 // List<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(id,userBean.getOrgCode()); CheckSalaryStaffDto checksalary = new CheckSalaryStaffDto(); checksalary.setPaygroupid(id); checksalary.setXzyf(xzyf); checksalary.setOrgcode(userBean.getOrgCode()); List<CalculationDto> jswsj = xcglassoxzbmapper.CalculationResults(checksalary); return new ResponseResult().success("考勤数据同步成功", jswsj); }else {//该组无人 return new ResponseResult().error("请先添加算薪人员"); } } /***************/ /***考勤****/ /** * @param orgCode 企业id * @param userid 用户id * @param payrolldate 计薪日期 * @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 = SalaryTool.getMinMonthDate(start); startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaet,"yyyy-MM-dd")).getTime(); String edate = SalaryTool.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,orgCode); 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 <= SalaryTool.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 = SalaryTool.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 <= SalaryTool.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 = SalaryTool.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; } /** * 切换薪资日期 */ @GetMapping(value = "/switchsalarydate/{sxrq}") @ApiOperation(value = "切换薪资日期", httpMethod = "GET", notes = "接口发布说明") public ResponseResult SwitchSalaryDate(@CurrentUser UserBean userBean,@PathVariable String sxrq) { List<XcglAdminXzz> xcgladminxzz = new LambdaQueryChainWrapper<XcglAdminXzz>(xcgladminxzzmapper).eq(XcglAdminXzz::getQyid, userBean.getOrgCode()).eq(XcglAdminXzz::getMonthtime, sxrq).list(); return new ResponseResult().success("成功", xcgladminxzz); } /** * 切换薪资日期 */ // @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 = SalaryTool.getMinMonthDate(date); // Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaet,"yyyy-MM-dd")).getTime(); // strstartdate = new SimpleDateFormat("yyyy-MM-dd").format(startDate);// 上 // String edate = SalaryTool.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 = SalaryTool.getMinMonthDate(lasdate); // Long startDatelas = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaetlas,"yyyy-MM-dd")).getTime(); // lasstrstartdate = new SimpleDateFormat("yyyy-MM-dd").format(startDatelas);// 上 // String edatelas = SalaryTool.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); // } /** * 获取附加扣除数据 */ @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.selectAdditionalDeductiontwo(search); return new ResponseResult().success("获取附加扣除数据成功", fjkclist); } /** * 查询列表-获取附加扣除数据-分页 */ @PostMapping(value = "/select_leave_rules") @ApiOperation(value = "获取附加扣除数据-分页", httpMethod = "POST", notes = "接口发布说明") public Result<Object> selectleaverules(@CurrentUser UserBean userBean, @RequestBody SearchSalariedPeopleDto search) { IPage<AdditionalDeductionDto> page = new Page<AdditionalDeductionDto>( search.getCurrentPage() == null ? 1 : search.getCurrentPage(), search.getTotalPage() == null ? 10 : search.getTotalPage()); search.setOrgcode(userBean.getOrgCode()); if(("0").equals(search.getStatus())) {//全部 search.setStatus(""); }else if(("1").equals(search.getStatus())) {//在职 search.setStatus("0"); }else { search.setStatus("3"); } IPage<AdditionalDeductionDto> pageAs = xcglassozxfjkcmapper.selectAdditionalDeduction(page, search); List<AdditionalDeductionDto> listAs = pageAs.getRecords(); return ResultUtil.data(pageAs, listAs, "操作成功!"); } /** * 专项附加扣除 */ @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); } @PostMapping(value = "/payslipSearch") @ApiOperation(value = "工资条搜索", httpMethod = "POST", notes = "接口发布说明") public ResponseResult payslipSearch(@CurrentUser UserBean userBean, @RequestBody PayslipSearchDto dto) { dto.setOrgcode(userBean.getOrgCode()); List<PayslipDetailsDto> paydetlist = xcglassogztztmapper.payslipSearch(dto); 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 = "/import_special_additional_deduction") @ApiOperation(value = "导入专项附加扣除", httpMethod = "POST", notes = "接口发布说明") public Result<JSONObject> importSpecialAdditionalDeduction(@CurrentUser UserBean userBean, @Validated @RequestBody ValidList<SpecialDeductionDto> specialdeductiondto) throws Exception { Integer orgCode = userBean.getOrgCode(); for (SpecialDeductionDto spec : specialdeductiondto) { String name = spec.getName(); String phone = spec.getPhone(); String date = spec.getDate(); YgglMainEmp ygl = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getName, name) .eq(YgglMainEmp::getPhone, phone).eq(YgglMainEmp::getOrgCode, orgCode)); XcglAssoZxfjkc xcg = XcglAssoZxfjkc.builder().build().selectOne(new QueryWrapper<XcglAssoZxfjkc>().lambda().eq(XcglAssoZxfjkc::getTaxmonth, date) .eq(XcglAssoZxfjkc::getQyid, userBean.getOrgCode()).eq(XcglAssoZxfjkc::getUserid, ygl.getEmpNum())); if(xcg == null) { XcglAssoZxfjkc xcglas = XcglAssoZxfjkc.builder().build(); xcglas.setUserid(ygl.getEmpNum()); xcglas.setTaxmonth(date); xcglas.setChildrenedu(Double.valueOf(spec.getZljy()));//子女教育 xcglas.setHouseloans(Double.valueOf(spec.getZfdk()));//住房贷款利息 xcglas.setHouserents(Double.valueOf(spec.getZfzj()));//住房租金 xcglas.setSupportolder(Double.valueOf(spec.getSylr()));//赡养老人 xcglas.setContinueedu(Double.valueOf(spec.getJxjy()));//继续教育 BigDecimal num1 = new BigDecimal(spec.getZljy()); BigDecimal num2 = new BigDecimal(spec.getZfdk()); double result1 = num1.add(num2).doubleValue(); BigDecimal num3 = new BigDecimal(result1); BigDecimal num4 = new BigDecimal(spec.getZfzj()); double result2 = num3.add(num4).doubleValue(); BigDecimal num5 = new BigDecimal(result2); BigDecimal num6 = new BigDecimal(spec.getSylr()); double result3 = num5.add(num6).doubleValue(); BigDecimal num7 = new BigDecimal(result3); BigDecimal num8 = new BigDecimal(spec.getJxjy()); double result = num7.add(num8).doubleValue(); xcglas.setTotalmoney(result);//累计专项附加扣除 xcglas.setQyid(userBean.getOrgCode()); xcglas.setAddtime(new Date().getTime()); xcglassozxfjkcmapper.insertXcglAssoZxfjkc(xcglas); }else { XcglAssoZxfjkc fjkc = XcglAssoZxfjkc.builder().build(); fjkc.setId(xcg.getId()); fjkc.setChildrenedu(Double.valueOf(spec.getZljy()));//子女教育 fjkc.setHouseloans(Double.valueOf(spec.getZfdk()));//住房贷款利息 fjkc.setHouserents(Double.valueOf(spec.getZfzj()));//住房租金 fjkc.setSupportolder(Double.valueOf(spec.getSylr()));//赡养老人 fjkc.setContinueedu(Double.valueOf(spec.getJxjy()));//继续教育 BigDecimal num1 = new BigDecimal(spec.getZljy()); BigDecimal num2 = new BigDecimal(spec.getZfdk()); double result1 = num1.add(num2).doubleValue(); BigDecimal num3 = new BigDecimal(result1); BigDecimal num4 = new BigDecimal(spec.getZfzj()); double result2 = num3.add(num4).doubleValue(); BigDecimal num5 = new BigDecimal(result2); BigDecimal num6 = new BigDecimal(spec.getSylr()); double result3 = num5.add(num6).doubleValue(); BigDecimal num7 = new BigDecimal(result3); BigDecimal num8 = new BigDecimal(spec.getJxjy()); double result = num7.add(num8).doubleValue(); fjkc.setTotalmoney(Double.valueOf(result));//累计专项附加扣除 xcglassozxfjkcmapper.updateXcglAssoZxfjkc(fjkc); } } return ResultUtil.success("成功"); } /** * 导入个税明细 */ @PostMapping(value = "/individual_income_tax_details") @ApiOperation(value = "导入个税明细", httpMethod = "POST", notes = "接口发布说明") public Result<ImportDescriptionDto> IndividualIncomeTaxDetails(@CurrentUser UserBean userBean, @Validated @RequestBody ValidList<IndividualTaxDetailsDto> individualtaxdetailsdto) throws Exception { Integer orgCode = userBean.getOrgCode(); int success = 0;//成功 int failure = 0;//失败 int toupdate = 0;//更新 String[] names = new String[individualtaxdetailsdto.size()]; int i = 0; for (IndividualTaxDetailsDto indv : individualtaxdetailsdto) { String name = indv.getUserName(); String phone = indv.getPhone(); String date = indv.getSalaryMonth();//薪资月 try { YgglMainEmp ygl = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getName, name) .eq(YgglMainEmp::getPhone, phone).eq(YgglMainEmp::getOrgCode, orgCode)); if(ygl != null) { XcglAssoGsjsmx gsjs = XcglAssoGsjsmx.builder().build().selectOne(new QueryWrapper<XcglAssoGsjsmx>().lambda().eq(XcglAssoGsjsmx::getUserNum, ygl.getEmpNum()) .eq(XcglAssoGsjsmx::getQyid, ygl.getOrgCode()).eq(XcglAssoGsjsmx::getSalaryMonth, date)); if(gsjs == null) { XcglAssoGsjsmx gsgs = XcglAssoGsjsmx.builder().build(); gsgs.setUserNum(String.valueOf(ygl.getEmpNum())); gsgs.setUserName(indv.getUserName()); gsgs.setSalaryMonth(indv.getSalaryMonth()); gsgs.setTaxMonth(indv.getTaxMonth()); gsgs.setThmonthPersonal(indv.getThmonthPersonal() == null ? null : Double.valueOf(indv.getThmonthPersonal())); gsgs.setCumZljy(indv.getCumZljy() == null ? null : Double.valueOf(indv.getCumZljy())); gsgs.setCumZfdklx(indv.getCumZfdklx() == null ? null : Double.valueOf(indv.getCumZfdklx())); gsgs.setCumZfzj(indv.getCumZfzj() == null ? null : Double.valueOf(indv.getCumZfzj())); gsgs.setCumSylr(indv.getCumSylr() == null ? null : Double.valueOf(indv.getCumSylr())); gsgs.setCumJxjy(indv.getCumJxjy() == null ? null : Double.valueOf(indv.getCumJxjy())); gsgs.setCumZxfjkc(indv.getCumZxfjkc() == null ? null : Double.valueOf(indv.getCumZxfjkc())); gsgs.setTaxType(indv.getTaxType()); gsgs.setCurrentIncome(indv.getCurrentIncome() == null ? null : Double.valueOf(indv.getCurrentIncome())); gsgs.setCurrentSpecialDeduction(indv.getCurrentSpecialDeduction() == null ? null : Double.valueOf(indv.getCurrentSpecialDeduction())); gsgs.setCumSre(indv.getCumSre() == null ? null : Double.valueOf(indv.getCumSre())); gsgs.setCumJcfy(indv.getCumJcfy() == null ? null : Double.valueOf(indv.getCumJcfy())); gsgs.setCumZxkc(indv.getCumZxkc() == null ? null : Double.valueOf(indv.getCumZxkc())); gsgs.setCumQtkc(indv.getCumQtkc() == null ? null : Double.valueOf(indv.getCumQtkc())); gsgs.setCumYnssde(indv.getCumYnssde() == null ? null : Double.valueOf(indv.getCumYnssde())); gsgs.setTaxRate(indv.getTaxRate() == null ? null : Double.valueOf(indv.getTaxRate())); gsgs.setQuickCalculationDeduction(indv.getQuickCalculationDeduction() == null ? null : Double.valueOf(indv.getQuickCalculationDeduction())); gsgs.setCumYnse(indv.getCumYnse() == null ? null : Double.valueOf(indv.getCumYnse())); gsgs.setCumYyjse(indv.getCumYyjse() == null ? null : Double.valueOf(indv.getCumYyjse())); gsgs.setCumYbtse(indv.getCumYbtse() == null ? null : Double.valueOf(indv.getCumYbtse())); gsgs.setQyid(ygl.getOrgCode()); gsgs.insert(); success++; }else { XcglAssoGsjsmx gsgs = XcglAssoGsjsmx.builder().build(); gsgs.setUserNum(String.valueOf(ygl.getEmpNum())); gsgs.setUserName(indv.getUserName()); gsgs.setSalaryMonth(indv.getSalaryMonth()); gsgs.setTaxMonth(indv.getTaxMonth()); gsgs.setThmonthPersonal(indv.getThmonthPersonal() == null ? null : Double.valueOf(indv.getThmonthPersonal())); gsgs.setCumZljy(indv.getCumZljy() == null ? null : Double.valueOf(indv.getCumZljy())); gsgs.setCumZfdklx(indv.getCumZfdklx() == null ? null : Double.valueOf(indv.getCumZfdklx())); gsgs.setCumZfzj(indv.getCumZfzj() == null ? null : Double.valueOf(indv.getCumZfzj())); gsgs.setCumSylr(indv.getCumSylr() == null ? null : Double.valueOf(indv.getCumSylr())); gsgs.setCumJxjy(indv.getCumJxjy() == null ? null : Double.valueOf(indv.getCumJxjy())); gsgs.setCumZxfjkc(indv.getCumZxfjkc() == null ? null : Double.valueOf(indv.getCumZxfjkc())); gsgs.setTaxType(indv.getTaxType()); gsgs.setCurrentIncome(indv.getCurrentIncome() == null ? null : Double.valueOf(indv.getCurrentIncome())); gsgs.setCurrentSpecialDeduction(indv.getCurrentSpecialDeduction() == null ? null : Double.valueOf(indv.getCurrentSpecialDeduction())); gsgs.setCumSre(indv.getCumSre() == null ? null : Double.valueOf(indv.getCumSre())); gsgs.setCumJcfy(indv.getCumJcfy() == null ? null : Double.valueOf(indv.getCumJcfy())); gsgs.setCumZxkc(indv.getCumZxkc() == null ? null : Double.valueOf(indv.getCumZxkc())); gsgs.setCumQtkc(indv.getCumQtkc() == null ? null : Double.valueOf(indv.getCumQtkc())); gsgs.setCumYnssde(indv.getCumYnssde() == null ? null : Double.valueOf(indv.getCumYnssde())); gsgs.setTaxRate(indv.getTaxRate() == null ? null : Double.valueOf(indv.getTaxRate())); gsgs.setQuickCalculationDeduction(indv.getQuickCalculationDeduction() == null ? null : Double.valueOf(indv.getQuickCalculationDeduction())); gsgs.setCumYnse(indv.getCumYnse() == null ? null : Double.valueOf(indv.getCumYnse())); gsgs.setCumYyjse(indv.getCumYyjse() == null ? null : Double.valueOf(indv.getCumYyjse())); gsgs.setCumYbtse(indv.getCumYbtse() == null ? null : Double.valueOf(indv.getCumYbtse())); gsgs.setQyid(ygl.getOrgCode()); gsgs.setId(gsjs.getId()); gsgs.updateById(); toupdate++; } }else { failure++; int j = 5 / 0; } } catch (Exception e) { // e.printStackTrace(); names[i] = indv.getUserName(); i++; }finally { } } ImportDescriptionDto imds = new ImportDescriptionDto(); imds.setSuccess(success);//成功 imds.setFailure(failure);//失败 imds.setToupdate(toupdate);//更新 imds.setNames(ClockInTool.deleteArrayNull(names)); return ResultUtil.data(imds,"编辑员工权限成功"); // return ResultUtil.success("成功"); } @Autowired private XcglAssoGsjsmxMapper xcglassogsjsmxmapper; /** * 查询列表-获取个税明细数据-分页 */ @PostMapping(value = "/individual_income_details") @ApiOperation(value = "获取个税明细数据-分页", httpMethod = "POST", notes = "接口发布说明") public Result<Object> IndividualIncomeDetails(@CurrentUser UserBean userBean, @RequestBody SearchSalariedPeopleDto search) { IPage<XcglAssoGsjsmxDto> page = new Page<XcglAssoGsjsmxDto>( search.getCurrentPage() == null ? 1 : search.getCurrentPage(), search.getTotalPage() == null ? 10 : search.getTotalPage()); search.setOrgcode(userBean.getOrgCode()); if(("0").equals(search.getStatus())) {//全部 search.setStatus(""); }else if(("1").equals(search.getStatus())) {//在职 search.setStatus("0"); }else { search.setStatus("3"); } IPage<XcglAssoGsjsmxDto> pageAs = xcglassogsjsmxmapper.SelectIndividualincomedetails(page, search); List<XcglAssoGsjsmxDto> listAs = pageAs.getRecords(); return ResultUtil.data(pageAs, listAs, "操作成功!"); } /** * 查询列表-获取个税明细数据 */ @PostMapping(value = "/individual_income_details_all") @ApiOperation(value = "获取个税明细数据", httpMethod = "POST", notes = "接口发布说明") public Result<Object> IndividualIncomeDetailsAll(@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<XcglAssoGsjsmxDto> listAs = xcglassogsjsmxmapper.SelectIndividualincomedetails(search); return ResultUtil.data(listAs, "操作成功!"); } @GetMapping(value="/allyearround/{year}/{usernum}") @ApiOperation(value = "获取全年信息", httpMethod = "GET", notes = "接口发布说明") public Result<Object> AllyearroundList(@CurrentUser UserBean userBean,@PathVariable("year") String year,@PathVariable("usernum") String usernum) { List<XcglAssoGsjsmx> allyearround = xcglassogsjsmxmapper.Allyearround(year, usernum, userBean.getOrgCode()); return ResultUtil.data(allyearround,"操作成功!"); } @GetMapping(value="/justone/{id}") @ApiOperation(value = "获取单个信息", httpMethod = "GET", notes = "接口发布说明") public Result<Object> justone(@CurrentUser UserBean userBean,@PathVariable("id") Integer id) { XcglAssoGsjsmx allyearround = XcglAssoGsjsmx.builder().id(id).build().selectById(); return ResultUtil.data(allyearround,"操作成功!"); } @PostMapping(value = "/modifyindividualincometaxdetails") @ApiOperation(value = "修改个税明细", httpMethod = "POST", notes = "接口发布说明") public Result<Object> ModifyIndividualIncomeTaxDetails(@CurrentUser UserBean userBean, @RequestBody XcglAssoGsjsmx xcglassogsjsmx) { xcglassogsjsmx.updateById(); return ResultUtil.data(xcglassogsjsmx,"操作成功!"); } /** * 新增或编辑 */ @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); } @PostMapping(value = "/saveSalaryDetails") @ApiOperation(value = "保存薪资明细修改", httpMethod = "POST", notes = "接口发布说明") public ResponseResult saveSalaryDetails(@CurrentUser UserBean userBean,@RequestBody List<XcglAssoXzb> list) { xcglassoxzbmapper.updateBatchXzxjg(list); XcglAssoGztzt gzt = XcglAssoGztzt.builder().build().selectOne(new QueryWrapper<XcglAssoGztzt>().lambda().eq(XcglAssoGztzt::getUserid, list.get(0).getUserid()).eq(XcglAssoGztzt::getQyid, userBean.getOrgCode()) .eq(XcglAssoGztzt::getXzyf, list.get(0).getXzyf())); if(gzt != null) { XcglAssoXzb paycol = xcglassoxzbmapper.PayInColumn(list.get(0).getXzxid(), list.get(0).getUserid(), list.get(0).getXzyf()); XcglAssoGztzt.builder().sfgz(paycol.getXzxjg()).id(gzt.getId()).build().updateById(); } return new ResponseResult().success("保存成功"); } @PostMapping(value = "/sendpayslip/{id}/{fsType}") @ApiOperation(value = "发送工资条--操作", httpMethod = "POST", notes = "接口发布说明") public ResponseResult sendpayslip(@CurrentUser UserBean userBean, @PathVariable Integer id, @PathVariable Integer fsType) { xcglassogztztmapper.payslipSend(id, fsType); return new ResponseResult().success("成功"); } /***************************APP*************************************************/ @GetMapping(value="/wageconfirmation/{id}") @ApiOperation(value = "工资确认", httpMethod = "GET", notes = "接口发布说明") public Result<Object> WageConfirmation(@CurrentUser UserBean userBean,@PathVariable("id") Integer id) { XcglAssoGztzt.builder().qrType(1).id(id).build().updateById(); return ResultUtil.success("成功"); } @Autowired private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper; @PostMapping(value = "/pushpayslip") @ApiOperation(value = "发送工资条", httpMethod = "POST", notes = "接口发布说明") public Result<Object> PushPayslip(@CurrentUser UserBean userBean,@RequestBody PushPayslipDto pays) { double prescription = 8; //顶层 AppPayslipDetailsDto top = new AppPayslipDetailsDto(); //工资条数据 XcglAssoGztzt gzt = XcglAssoGztzt.builder().id(pays.getGztid()).build().selectById(); if(gzt != null) { top.setId(gzt.getId()); top.setNetsalary(gzt.getSfgz());//实发工资 top.setWagetime(gzt.getXzyf());//工资时间 top.setUserid(gzt.getUserid()); top.setSfyqrgz(gzt.getQrType()); //薪资组里项 List<XcglAssoJsgzzx> jsgs = XcglAssoJsgzzx.builder().build().selectList(new QueryWrapper<XcglAssoJsgzzx>().lambda().eq(XcglAssoJsgzzx::getXzzid, pays.getXzzid()).eq(XcglAssoJsgzzx::getType, 2) .orderByAsc(XcglAssoJsgzzx::getId)); //第一层集合 List<AppPaysSalaryOneDto> specific = new ArrayList<AppPaysSalaryOneDto>(); for(XcglAssoJsgzzx xzx : jsgs) { //第二层集合 List<AppPaysSalaryTwoDto> detailed = new ArrayList<AppPaysSalaryTwoDto>(); //第一层 AppPaysSalaryOneDto spe = new AppPaysSalaryOneDto(); XcglAssoXzb xzb = XcglAssoXzb.builder().build().selectOne(new QueryWrapper<XcglAssoXzb>().lambda().eq(XcglAssoXzb::getUserid, pays.getUserid()).eq(XcglAssoXzb::getXzyf, pays.getXzyf()) .eq(XcglAssoXzb::getXzxid, xzx.getId())); //事假扣款、病假扣款、旷工扣款、迟到早退扣款、司龄工资、个税 if(xzx.getOptionid() != 27 && xzx.getOptionid() != 28 && xzx.getOptionid() != 29 && xzx.getOptionid() != 30 && xzx.getOptionid() != 31 && xzx.getOptionid() != 69) { spe.setItemname(xzx.getSalaryitem());// spe.setDeduction(xzb == null ? 0 : xzb.getXzxjg());// spe.setFieldone(""); spe.setFieldtwo(""); spe.setDetailed(detailed); specific.add(spe); }else { //事假扣款 if(xzx.getOptionid() == 27) { spe.setItemname(xzx.getSalaryitem());// spe.setDeduction(xzb == null ? 0 : xzb.getXzxjg());// HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(userBean.getOrgCode(), pays.getXzyf(), 1, pays.getUserid()); double ts = 0; if(balance.getBalance() > 0) { ts = balance.getBalance()/prescription; } spe.setFieldone("共"+balance.getBalance()+"小时="+SalaryTool.formatDouble_(ts)+"天"); spe.setFieldtwo(""); //事假详细 List<KqglAssoRelationSummary> holdet = kqglassorelationsummarymapper.HolidayDetails(userBean.getOrgCode(), pays.getXzyf(), 1, pays.getUserid()); for(KqglAssoRelationSummary sjxx : holdet) { AppPaysSalaryTwoDto two = new AppPaysSalaryTwoDto(); two.setTerm("事假日期"); two.setSpecifictime(sjxx.getStartTime().substring(5, 16)+"至"+sjxx.getEndTime().substring(5, 16)); two.setField(sjxx.getDuration()); detailed.add(two); } spe.setDetailed(detailed); } //病假扣款 if(xzx.getOptionid() == 28) { spe.setItemname(xzx.getSalaryitem());// spe.setDeduction(xzb == null ? 0 : xzb.getXzxjg());// HolidayInquiryDto balance = xcglassoxzbmapper.Holidayamount(userBean.getOrgCode(), pays.getXzyf(), 3, pays.getUserid()); double ts = 0; if(balance.getBalance() > 0) { ts = balance.getBalance()/prescription; } spe.setFieldone("共"+balance.getBalance()+"小时="+SalaryTool.formatDouble_(ts)+"天"); spe.setFieldtwo(""); //病假详细 List<KqglAssoRelationSummary> holdet = kqglassorelationsummarymapper.HolidayDetails(userBean.getOrgCode(), pays.getXzyf(), 3, pays.getUserid()); for(KqglAssoRelationSummary sjxx : holdet) { AppPaysSalaryTwoDto two = new AppPaysSalaryTwoDto(); two.setTerm("病假日期"); two.setSpecifictime(sjxx.getStartTime().substring(5, 16)+"至"+sjxx.getEndTime().substring(5, 16)); two.setField(sjxx.getDuration()); detailed.add(two); } spe.setDetailed(detailed); } //旷工扣款 if(xzx.getOptionid() == 29) { spe.setItemname(xzx.getSalaryitem());// spe.setDeduction(xzb == null ? 0 : xzb.getXzxjg());// } specific.add(spe); } top.setSpecific(specific); } } return ResultUtil.data(top,"操作成功!"); } }