完成工资结算
This commit is contained in:
@ -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);
|
||||
// }
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user