完成工资结算

This commit is contained in:
2025-02-22 14:21:41 +08:00
parent 081f1f23d8
commit c8c7606703
26 changed files with 1723 additions and 31 deletions

View File

@ -9,6 +9,7 @@ import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
import com.ruoyi.common.bo.AnnexQueryBo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.domain.Annex;
@ -21,6 +22,7 @@ import com.ruoyi.wgz.bo.rests.WgzAppGetTestPaperTwo;
import com.ruoyi.wgz.bo.rests.WgzAutonymAnnex;
import com.ruoyi.wgz.bo.req.*;
import com.ruoyi.wgz.domain.WgzDailyClock;
import com.ruoyi.wgz.domain.WgzPayCalculation;
import com.ruoyi.wgz.domain.WgzQuestionsConfiguration;
import com.ruoyi.wgz.service.*;
import io.swagger.annotations.Api;
@ -90,6 +92,9 @@ public class WgzAppController {
@Autowired
private IWgzReissueacardService iWgzReissueacardService;
@Autowired
private IWgzPayCalculationService iWgzPayCalculationService;
/**
* 【注册】务工者注册
@ -370,30 +375,46 @@ public class WgzAppController {
}
/**
* 【首页】【项目进行中】 项目进行中·申请工资结算(查询)
* 【首页】【项目进行中】 项目进行中·详情
*/
@ApiOperation("【首页】【项目进行中】 项目进行中·申请工资结算(查询)")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userApplyForPayrollSettlementFind')")
@GetMapping("/WgzAppUserApplyForPayrollSettlementFind")
public AjaxResult<WgzApplyForPayrollSettlementFindRes> userApplyForPayrollSettlementFind(@Validated WgzApplyForPayrollSettlementFindReq req) {
@ApiOperation("【首页】【项目进行中】 项目进行中·详情")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userProjectInProgressDetails')")
@GetMapping("/WgzAppUserProjectInProgressDetails/{id}")
public AjaxResult<WgzApplyForPayrollSettlementAddRes> userProjectInProgressDetails(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) {
WgzApplyForPayrollSettlementAddRes res = new WgzApplyForPayrollSettlementAddRes();
Long appUserId = SecurityUtils.getAppUserId();
BgtProjectRecruitApply by = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(appUserId);
BgtProjectRecruit appById = iBgtProjectRecruitService.getAppById(by.getId());
//1、查询入场时间、退场时间、单天金额
//1、先获取项目详情基本信息
WgzAppProjectDetailsRes wgzAppProjectDetailsRes = iBgtProjectRecruitService.userProjectDetails(id);
BeanUtils.copyProperties(wgzAppProjectDetailsRes, res);
//2、获取当前人员的打卡天数*单天金额=实际总工资金额
BigDecimal recruitAmount = appById.getRecruitAmount();
//2、查询实际考勤时间(只要有打卡就算出勤一条,异常也视为正常出勤,也就是说只要有上班or下班至少有一个有数据那就证明出勤ok
Integer i = iWgzAttendanceService.attendanceDetail(appUserId, appById.getId(), 1);
if (i == 0){
throw new RuntimeException("您还未打卡");
//查询实际考勤时间(只要有打卡就算出勤一条,异常也视为正常出勤,也就是说只要有上班or下班至少有一个有数据那就证明出勤ok
Integer i = iWgzAttendanceService.attendanceDetail(appUserId, appById.getId(), null);
if (i==0){
res.setNum(0);
res.setTotalAmount(BigDecimal.valueOf(0));
}else{
BigDecimal totalAmount = recruitAmount.multiply(BigDecimal.valueOf(i));
res.setNum(i);
res.setTotalAmount(totalAmount);
}
//3、单天金额*实际考勤总天数=实际工资
BigDecimal totalAmount = recruitAmount.multiply(BigDecimal.valueOf(i));
WgzApplyForPayrollSettlementFindRes res = new WgzApplyForPayrollSettlementFindRes().
setEntryTime(by.getEntryTime()).
res.setEntryTime(by.getEntryTime()).
setLeaveTime(by.getLeaveTime()).
setAmount(recruitAmount).
setNum(i).
setTotalAmount(totalAmount);
setAmount(recruitAmount);
//3、查询当前进行中的项目是否有工资结算
WgzPayCalculation gz = iWgzPayCalculationService.findByUserIdRecruitIdNewestData(appUserId, appById.getId());
if (gz != null){
//金额*天数=实际工资
res.setAppliedAmount(gz.getRecruitAmount().multiply(BigDecimal.valueOf(gz.getNum())));
res.setNameOfApplicant(gz.getUserName());
}
if(i!=0){
//总的金额/结算的金额=百分比
BigDecimal divide = res.getTotalAmount().divide(res.getAmount(), 2, BigDecimal.ROUND_HALF_UP);
res.setPercentage(divide.doubleValue());
}
return AjaxResult.success(res);
}
@ -402,12 +423,25 @@ public class WgzAppController {
*/
@ApiOperation("【首页】【项目进行中】 项目进行中·申请工资结算(新增)")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userApplyForPayrollSettlementAdd')")
@GetMapping("/WgzAppUserApplyForPayrollSettlementAdd")
public AjaxResult<WgzApplyForPayrollSettlementFindRes> userApplyForPayrollSettlementAdd(@Validated WgzApplyForPayrollSettlementFindReq req) {
return null;
@PostMapping("/WgzAppUserApplyForPayrollSettlementAdd")
public AjaxResult<Boolean> userApplyForPayrollSettlementAdd(@Validated @RequestBody WgzApplyForPayrollSettlementAddReq req) {
return AjaxResult.success(iWgzPayCalculationService.userApplyForPayrollSettlementAdd(req));
}
/**
* 【首页】【项目进行中】 项目进行中·申请工资结算(列表)
*/
@ApiOperation("【首页】【项目进行中】 项目进行中·申请工资结算(列表)")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userApplyForPayrollSettlementList')")
@GetMapping("/WgzAppUserApplyForPayrollSettlementList")
public TableDataInfo<WgzAppApplyForPayrollSettlementListRes> userApplyForPayrollSettlementList(@Validated WgzAppApplyForPayrollSettlementListReq req) {
return iWgzPayCalculationService.userApplyForPayrollSettlementList(req);
}
/**
* 通用接口
@ -422,7 +456,7 @@ public class WgzAppController {
* 【我的】【签协议】协议列表
1-劳动合同
*/
@ApiOperation("通用·附件获取")
@ApiOperation("通用·附件获取(仅限和务工者直接关联的)")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userAttachmentAcquisition')")
@GetMapping("/wgzUserAttachmentAcquisition")
public AjaxResult<WgzAppAttachmentAcquisitionRes> userAttachmentAcquisition(@Validated WgzAppAttachmentAcquisitionReq req) {
@ -504,9 +538,9 @@ public class WgzAppController {
return section;
}
// /**
// * 【我的】【实名认证】实名认证·删除附件
// */
/**
* 【我的】【实名认证】实名认证·删除附件
*/
// @ApiOperation("APP务工者-实名认证·删除附件")
// @PreAuthorize("@ss.hasPermi('wgzApp:user:userDeleteAttachment')")
// @DeleteMapping("/WgzUserDeleteAttachment/{attachmentId}")
@ -515,4 +549,32 @@ public class WgzAppController {
// }
/**
* 【首页】【项目进行中】 项目进行中·申请工资结算(查询)
*/
// @ApiOperation("【首页】【项目进行中】 项目进行中·申请工资结算(查询)")
// @PreAuthorize("@ss.hasPermi('wgzApp:user:userApplyForPayrollSettlementFind')")
// @GetMapping("/WgzAppUserApplyForPayrollSettlementFind")
// public AjaxResult<WgzApplyForPayrollSettlementFindRes> userApplyForPayrollSettlementFind(@Validated WgzApplyForPayrollSettlementFindReq req) {
// Long appUserId = SecurityUtils.getAppUserId();
// BgtProjectRecruitApply by = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(appUserId);
// BgtProjectRecruit appById = iBgtProjectRecruitService.getAppById(by.getId());
// //1、查询入场时间、退场时间、单天金额
// BigDecimal recruitAmount = appById.getRecruitAmount();
// //2、查询实际考勤时间只要有打卡就算出勤一条异常也视为正常出勤,也就是说只要有上班or下班至少有一个有数据那就证明出勤ok
// Integer i = iWgzAttendanceService.attendanceDetail(appUserId, appById.getId(), req.getNum());
// if (i == 0){
// throw new RuntimeException("您还未打卡");
// }
// //3、单天金额*实际考勤总天数=实际工资
// BigDecimal totalAmount = recruitAmount.multiply(BigDecimal.valueOf(i));
// WgzApplyForPayrollSettlementFindRes res = new WgzApplyForPayrollSettlementFindRes().
// setEntryTime(by.getEntryTime()).
// setLeaveTime(by.getLeaveTime()).
// setAmount(recruitAmount).
// setNum(i).
// setTotalAmount(totalAmount);
// return AjaxResult.success(res);
// }
}

View File

@ -0,0 +1,108 @@
package com.ruoyi.web.controller.wgz.controller;
import java.util.List;
import java.util.Arrays;
import com.ruoyi.wgz.domain.WgzPayCalculation;
import lombok.RequiredArgsConstructor;
import javax.validation.constraints.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.wgz.bo.WgzPayCalculationQueryBo;
import com.ruoyi.wgz.service.IWgzPayCalculationService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* 工资结算Controller
*
* @author ruoyi
* @date 2025-02-21
*/
@Api(value = "工资结算控制器", tags = {"工资结算管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/wgz/calculation")
public class WgzPayCalculationController extends BaseController {
private final IWgzPayCalculationService iWgzPayCalculationService;
/**
* 查询工资结算列表
*/
@ApiOperation("查询工资结算列表")
@PreAuthorize("@ss.hasPermi('wgz:calculation:list')")
@GetMapping("/list")
public TableDataInfo<WgzPayCalculation> list(@Validated WgzPayCalculationQueryBo bo) {
return iWgzPayCalculationService.queryPageList(bo);
}
/**
* 导出工资结算列表
*/
@ApiOperation("导出工资结算列表")
@PreAuthorize("@ss.hasPermi('wgz:calculation:export')")
@Log(title = "工资结算", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public AjaxResult<WgzPayCalculation> export(@Validated WgzPayCalculationQueryBo bo) {
List<WgzPayCalculation> list = iWgzPayCalculationService.queryList(bo);
ExcelUtil<WgzPayCalculation> util = new ExcelUtil<WgzPayCalculation>(WgzPayCalculation.class);
return util.exportExcel(list, "工资结算");
}
/**
* 获取工资结算详细信息
*/
@ApiOperation("获取工资结算详细信息")
@PreAuthorize("@ss.hasPermi('wgz:calculation:query')")
@GetMapping("/{id}")
public AjaxResult<WgzPayCalculation> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iWgzPayCalculationService.queryById(id));
}
/**
* 新增工资结算
*/
@ApiOperation("新增工资结算")
@PreAuthorize("@ss.hasPermi('wgz:calculation:add')")
@Log(title = "工资结算", businessType = BusinessType.INSERT)
@RepeatSubmit
@PostMapping()
public AjaxResult<Void> add(@Validated @RequestBody WgzPayCalculation bo) {
return toAjax(iWgzPayCalculationService.insert(bo) ? 1 : 0);
}
/**
* 修改工资结算
*/
@ApiOperation("修改工资结算")
@PreAuthorize("@ss.hasPermi('wgz:calculation:edit')")
@Log(title = "工资结算", businessType = BusinessType.UPDATE)
@RepeatSubmit
@PutMapping()
public AjaxResult<Void> edit(@Validated @RequestBody WgzPayCalculation bo) {
return toAjax(iWgzPayCalculationService.update(bo) ? 1 : 0);
}
/**
* 删除工资结算
*/
@ApiOperation("删除工资结算")
@PreAuthorize("@ss.hasPermi('wgz:calculation:remove')")
@Log(title = "工资结算" , businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iWgzPayCalculationService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
}
}

View File

@ -0,0 +1,108 @@
package com.ruoyi.web.controller.wgz.controller;
import java.util.List;
import java.util.Arrays;
import com.ruoyi.wgz.domain.WgzPayCalculationFiles;
import lombok.RequiredArgsConstructor;
import javax.validation.constraints.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.wgz.bo.WgzPayCalculationFilesQueryBo;
import com.ruoyi.wgz.service.IWgzPayCalculationFilesService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* 工资结算附件Controller
*
* @author ruoyi
* @date 2025-02-22
*/
@Api(value = "工资结算附件控制器", tags = {"工资结算附件管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/wgz/files")
public class WgzPayCalculationFilesController extends BaseController {
private final IWgzPayCalculationFilesService iWgzPayCalculationFilesService;
/**
* 查询工资结算附件列表
*/
@ApiOperation("查询工资结算附件列表")
@PreAuthorize("@ss.hasPermi('wgz:files:list')")
@GetMapping("/list")
public TableDataInfo<WgzPayCalculationFiles> list(@Validated WgzPayCalculationFilesQueryBo bo) {
return iWgzPayCalculationFilesService.queryPageList(bo);
}
/**
* 导出工资结算附件列表
*/
@ApiOperation("导出工资结算附件列表")
@PreAuthorize("@ss.hasPermi('wgz:files:export')")
@Log(title = "工资结算附件", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public AjaxResult<WgzPayCalculationFiles> export(@Validated WgzPayCalculationFilesQueryBo bo) {
List<WgzPayCalculationFiles> list = iWgzPayCalculationFilesService.queryList(bo);
ExcelUtil<WgzPayCalculationFiles> util = new ExcelUtil<WgzPayCalculationFiles>(WgzPayCalculationFiles.class);
return util.exportExcel(list, "工资结算附件");
}
/**
* 获取工资结算附件详细信息
*/
@ApiOperation("获取工资结算附件详细信息")
@PreAuthorize("@ss.hasPermi('wgz:files:query')")
@GetMapping("/{id}")
public AjaxResult<WgzPayCalculationFiles> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iWgzPayCalculationFilesService.queryById(id));
}
/**
* 新增工资结算附件
*/
@ApiOperation("新增工资结算附件")
@PreAuthorize("@ss.hasPermi('wgz:files:add')")
@Log(title = "工资结算附件", businessType = BusinessType.INSERT)
@RepeatSubmit
@PostMapping()
public AjaxResult<Void> add(@Validated @RequestBody WgzPayCalculationFiles bo) {
return toAjax(iWgzPayCalculationFilesService.insert(bo) ? 1 : 0);
}
/**
* 修改工资结算附件
*/
@ApiOperation("修改工资结算附件")
@PreAuthorize("@ss.hasPermi('wgz:files:edit')")
@Log(title = "工资结算附件", businessType = BusinessType.UPDATE)
@RepeatSubmit
@PutMapping()
public AjaxResult<Void> edit(@Validated @RequestBody WgzPayCalculationFiles bo) {
return toAjax(iWgzPayCalculationFilesService.update(bo) ? 1 : 0);
}
/**
* 删除工资结算附件
*/
@ApiOperation("删除工资结算附件")
@PreAuthorize("@ss.hasPermi('wgz:files:remove')")
@Log(title = "工资结算附件" , businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iWgzPayCalculationFilesService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
}
}