diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtProjectRecruitApplyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtProjectRecruitApplyController.java index 0c389a6..630cfb7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtProjectRecruitApplyController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtProjectRecruitApplyController.java @@ -48,7 +48,8 @@ public class AppBgtProjectRecruitApplyController extends BaseController { * */ @ApiOperation(value = "App务工者列表(分页)" - ,notes = "务工者申请列表 状态 为报名-未选择(0)和通过-已选择(1)") + ,notes = "务工者申请列表 状态 为报名-未选择(0)和通过-已选择(1) " + + "总体考勤情况-进退场 状态为 进场(5)和退场(6) ") @GetMapping("/list") public TableDataInfo listPage(@Validated BgtProjectRecruitApplyQueryDTO dto) { return iBgtProjectRecruitApplyService.appQueryPageList(dto); @@ -83,10 +84,10 @@ public class AppBgtProjectRecruitApplyController extends BaseController { } - @ApiOperation("人员出勤情况") + @ApiOperation("总体考勤情况-人员出勤情况") @GetMapping("/todayAttendanceList") - public AjaxResult> todayAttendanceList(@Validated BgtAttendanceDayDTO req) { - return AjaxResult.success(iBgtProjectRecruitApplyService.todayAttendanceList(req)); + public TableDataInfo todayAttendanceList(@Validated BgtAttendanceDayDTO req) { + return iBgtProjectRecruitApplyService.dayAttendanceList(req); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtUserController.java index b4789fd..dc33c6a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtUserController.java @@ -53,4 +53,16 @@ public class AppBgtUserController extends BaseController { return AjaxResult.success(iBgtUserService.queryById(id)); } + + /** + * 修改后台管理包工头 + */ + @ApiOperation("修改后台管理包工头") + @Log(title = "后台管理包工头", businessType = BusinessType.UPDATE) + @RepeatSubmit + @PutMapping("/edit") + public AjaxResult edit(@Validated @RequestBody BgtUser bo) { + return AjaxResult.success(iBgtUserService.update(bo)); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java index 344c34c..d538c6c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java @@ -9,6 +9,7 @@ import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.BgtLoginBody; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.util.DataUtil; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.framework.web.service.AppLoginService; import com.ruoyi.framework.web.service.SysPermissionService; @@ -38,7 +39,7 @@ import java.util.Map; @Api(value = "App登录验证", tags = {"App登录验证"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController -public class AppLoginController +public class AppLoginController { @Autowired private AppLoginService loginService; @@ -95,6 +96,7 @@ public class AppLoginController switch (userType){ case Constants.BGT: BgtUser bgtUser = iBgtUserService.selectUserByPhone(user.getPhonenumber()); + bgtUser.setAge(DataUtil.calculateAge(bgtUser.getBirthdate())); ajax.put("user", bgtUser); break; case Constants.WGZ: diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/TestController.java new file mode 100644 index 0000000..6146ff8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/TestController.java @@ -0,0 +1,22 @@ +package com.ruoyi.web.controller.common; + +import org.springframework.web.bind.annotation.*; + +@RestController +public class TestController { + + @PostMapping("/test") + public String test(@RequestBody String data) { + System.out.println(data); + return "Received: " + data; + } + + @GetMapping("/testGet") + public String testGet(String data,Long taskId) { + System.out.println("data:"+data); + System.out.println("taskId:"+taskId); + return "Received GET data: " + data; + } + + +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index df13adc..e753835 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -323,3 +323,12 @@ management: endpoint: logfile: external-file: ./logs/sys-console.log + + +aes: + enabled: false + secret-key: gwk0ghayjw7vnmru + exclude-paths: + - /ruoyi/actuator/** + - /ruoyi/system/** + - /ruoyi/admin/** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/BgtUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/BgtUser.java index 51b1169..756d7a2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/BgtUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/BgtUser.java @@ -151,4 +151,8 @@ public class BgtUser implements Serializable { @ApiModelProperty("备注") private String remark; + @ApiModelProperty("年龄") + @TableField(exist = false) + private Integer age; + } diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 4313ce5..29693b4 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -67,6 +67,17 @@ ruoyi-system + + org.apache.commons + commons-lang3 + 3.12.0 + + + commons-codec + commons-codec + 1.15 + + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index 2caa253..01e2a14 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -101,7 +101,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter // 过滤请求 .authorizeRequests() // 对于登录login 验证码captchaImage 允许匿名访问 - .antMatchers("/login", "/app/login", "/captchaImage","/demo/tress/all").anonymous() + .antMatchers("/login", "/app/login", "/captchaImage","/demo/tress/all","/test","/testGet").anonymous() .antMatchers("/app/login","/wgz/app/wgzRegister").permitAll() .antMatchers( HttpMethod.GET, diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/AESUtil.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/AESUtil.java new file mode 100644 index 0000000..dd0cdc0 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/AESUtil.java @@ -0,0 +1,49 @@ +package com.ruoyi.framework.encrypt; + +import cn.hutool.core.util.RandomUtil; +import org.apache.commons.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; + +public class AESUtil { + private static final Logger logger = LoggerFactory.getLogger(AESUtil.class); + private static final String ALGORITHM = "AES"; + private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding"; + + public static String encrypt(String data, String key) { + try { + logger.info("AES加密开始,加密内容:{}", data); + logger.info("AES加密开始,加密密钥:{}", key); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); + byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); + return Base64.encodeBase64String(encryptedBytes); + } catch (Exception e) { + logger.error("Encryption error: ", e); + return data; + } + } + + public static String decrypt(String encryptedData, String key) { + try { + logger.info("AES解密开始,解密内容:{}", encryptedData); + logger.info("AES解密开始,解密密钥:{}", key); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); + byte[] decryptedBytes = cipher.doFinal(Base64.decodeBase64(encryptedData)); + return new String(decryptedBytes, StandardCharsets.UTF_8); + } catch (Exception e) { + logger.error("Decryption error: ", e); + return encryptedData; + } + } + public static void main(String[] args) { + System.out.println(RandomUtil.randomString(16)); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/AesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/AesConfig.java new file mode 100644 index 0000000..503e0b6 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/AesConfig.java @@ -0,0 +1,18 @@ +package com.ruoyi.framework.encrypt; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Configuration +@ConfigurationProperties(prefix = "aes") +@Data +public class AesConfig { + private boolean enabled; + private String secretKey; + private List excludePaths; + + // Getters and Setters +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/DecryptRequestWrapper.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/DecryptRequestWrapper.java new file mode 100644 index 0000000..6490e66 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/DecryptRequestWrapper.java @@ -0,0 +1,48 @@ +package com.ruoyi.framework.encrypt; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.*; +import java.nio.charset.StandardCharsets; + +public class DecryptRequestWrapper extends HttpServletRequestWrapper { + private final String decryptedBody; + + public DecryptRequestWrapper(HttpServletRequest request, String decryptedBody) { + super(request); + this.decryptedBody = decryptedBody; + } + + @Override + public ServletInputStream getInputStream() throws IOException { + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(decryptedBody.getBytes(StandardCharsets.UTF_8)); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return byteArrayInputStream.available() == 0; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + throw new UnsupportedOperationException(); + } + + @Override + public int read() throws IOException { + return byteArrayInputStream.read(); + } + }; + } + + @Override + public BufferedReader getReader() throws IOException { + return new BufferedReader(new InputStreamReader(this.getInputStream(), StandardCharsets.UTF_8)); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptDecryptFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptDecryptFilter.java new file mode 100644 index 0000000..2e5aa2d --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptDecryptFilter.java @@ -0,0 +1,144 @@ +package com.ruoyi.framework.encrypt; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +@Component +public class EncryptDecryptFilter implements Filter { + private static final Logger logger = LoggerFactory.getLogger(EncryptDecryptFilter.class); + @Autowired + private AesConfig aesConfig; + + private final AntPathMatcher pathMatcher = new AntPathMatcher(); + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + if (!aesConfig.isEnabled()) { + logger.info("Encryption/Decryption is disabled. Skipping."); + chain.doFilter(request, response); + return; + } + + HttpServletRequest httpRequest = (HttpServletRequest) request; + HttpServletResponse httpResponse = (HttpServletResponse) response; + + if (isExcludedPath(httpRequest.getRequestURI())) { + logger.info("Request URI {} is excluded. Skipping encryption/decryption.", httpRequest.getRequestURI()); + chain.doFilter(request, response); + return; + } + + if ("GET".equalsIgnoreCase(httpRequest.getMethod())) { + Map parameterMap = new HashMap<>(httpRequest.getParameterMap()); + for (Map.Entry entry : parameterMap.entrySet()) { + String[] values = entry.getValue(); + for (int i = 0; i < values.length; i++) { + logger.info("Received encoded parameter: {}", values[i]); + String decodedValue = URLDecoder.decode(values[i], StandardCharsets.UTF_8.name()); + decodedValue = decodedValue.replace(" ", "+"); + logger.info("Decoded parameter: {}", decodedValue); + values[i] = decryptRequestBody(decodedValue); + } + } + HttpServletRequestWrapper requestWrapper = new CustomHttpServletRequestWrapper(httpRequest, parameterMap); + EncryptResponseWrapper responseWrapper = new EncryptResponseWrapper(httpResponse); + chain.doFilter(requestWrapper, responseWrapper); + byte[] content = responseWrapper.getContent(); + String responseBody = new String(content, responseWrapper.getCharacterEncoding()); + String encryptedResponse = encryptResponseBody(responseBody); + httpResponse.setContentLength(encryptedResponse.getBytes().length); + httpResponse.getOutputStream().write(encryptedResponse.getBytes()); + } else { + String requestBody = IOUtils.toString(httpRequest.getInputStream(), httpRequest.getCharacterEncoding()); + logger.info("Received request body: {}", requestBody); + String decryptedBody = decryptRequestBody(requestBody); + logger.info("Decrypted request body: {}", decryptedBody); + DecryptRequestWrapper requestWrapper = new DecryptRequestWrapper(httpRequest, decryptedBody); + + EncryptResponseWrapper responseWrapper = new EncryptResponseWrapper(httpResponse); + + chain.doFilter(requestWrapper, responseWrapper); + + byte[] content = responseWrapper.getContent(); + String responseBody = new String(content, responseWrapper.getCharacterEncoding()); + logger.info("Received response body: {}", responseBody); + String encryptedResponse = encryptResponseBody(responseBody); + logger.info("Encrypted response body: {}", encryptedResponse); + httpResponse.setContentLength(encryptedResponse.getBytes().length); + httpResponse.getOutputStream().write(encryptedResponse.getBytes()); + } + } + + private boolean isExcludedPath(String path) { + for (String pattern : aesConfig.getExcludePaths()) { + if (pathMatcher.match(pattern, path)) { + return true; + } + } + return false; + } + + private String decryptRequestBody(String requestBody) { + try { + return AESUtil.decrypt(requestBody, aesConfig.getSecretKey()); + } catch (Exception e) { + logger.error("Decryption error: ", e); + return requestBody; + } + } + + private String encryptResponseBody(String responseBody) { + try { + return AESUtil.encrypt(responseBody, aesConfig.getSecretKey()); + } catch (Exception e) { + logger.error("Encryption error: ", e); + return responseBody; + } + } + + private static class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper { + private final Map parameterMap; + + public CustomHttpServletRequestWrapper(HttpServletRequest request, Map parameterMap) { + super(request); + this.parameterMap = parameterMap; + } + + @Override + public String getParameter(String name) { + String[] values = parameterMap.get(name); + return values != null && values.length > 0 ? values[0] : null; + } + + @Override + public Map getParameterMap() { + return parameterMap; + } + + @Override + public Enumeration getParameterNames() { + return Collections.enumeration(parameterMap.keySet()); + } + + @Override + public String[] getParameterValues(String name) { + return parameterMap.get(name); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptFilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptFilterConfig.java new file mode 100644 index 0000000..8841e33 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptFilterConfig.java @@ -0,0 +1,31 @@ +package com.ruoyi.framework.encrypt; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class EncryptFilterConfig { + private static final Logger logger = LoggerFactory.getLogger(EncryptFilterConfig.class); + + @Autowired + private EncryptDecryptFilter encryptDecryptFilter; + + public EncryptFilterConfig() { + logger.info("FilterConfig initialized"); + } + + @Bean + public FilterRegistrationBean encryptDecryptFilterRegistration() { + logger.info("Registering encryptDecryptFilter"); + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(encryptDecryptFilter); + registration.addUrlPatterns("/*"); + registration.setName("encryptDecryptFilter"); + registration.setOrder(1); + return registration; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptResponseWrapper.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptResponseWrapper.java new file mode 100644 index 0000000..e928472 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptResponseWrapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.framework.encrypt; + +import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; + +public class EncryptResponseWrapper extends HttpServletResponseWrapper { + private final ByteArrayOutputStream outputStream; + private ServletOutputStream servletOutputStream; + private PrintWriter writer; + + public EncryptResponseWrapper(HttpServletResponse response) { + super(response); + outputStream = new ByteArrayOutputStream(); + } + + @Override + public ServletOutputStream getOutputStream() throws IOException { + if (servletOutputStream == null) { + servletOutputStream = new ServletOutputStream() { + @Override + public boolean isReady() { + return true; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + throw new UnsupportedOperationException(); + } + + @Override + public void write(int b) throws IOException { + outputStream.write(b); + } + }; + } + return servletOutputStream; + } + + @Override + public PrintWriter getWriter() throws IOException { + if (writer == null) { + writer = new PrintWriter(new OutputStreamWriter(outputStream, getCharacterEncoding())); + } + return writer; + } + + public byte[] getContent() throws IOException { + if (writer != null) { + writer.flush(); + } else if (servletOutputStream != null) { + servletOutputStream.flush(); + } + return outputStream.toByteArray(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtProjectRecruitQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtProjectRecruitQueryBo.java index a527e3a..d0a7151 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtProjectRecruitQueryBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtProjectRecruitQueryBo.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + /** * 包工头招工分页查询对象 bgt_project_recruit * @@ -52,7 +54,7 @@ public class BgtProjectRecruitQueryBo extends BaseEntity { private String recruitAddress; /** 招工金额 */ @ApiModelProperty("招工金额") - private Integer recruitAmount; + private BigDecimal recruitAmount; /** 招工数量 */ @ApiModelProperty("招工数量") private Integer recruitStaffNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtWageApplicationQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtWageApplicationQueryBo.java index 4df17fa..9d11888 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtWageApplicationQueryBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/bo/BgtWageApplicationQueryBo.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + /** * 包工头工资申请分页查询对象 bgt_wage_application * @@ -49,7 +51,7 @@ public class BgtWageApplicationQueryBo extends BaseEntity { private Long userId; /** 申请金额 */ @ApiModelProperty("申请金额") - private Integer applicantAmount; + private BigDecimal applicantAmount; /** 用工情况 */ @ApiModelProperty("用工情况") private String employmentSituation; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/BgtWageApplication.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/BgtWageApplication.java index 8c7c159..70b3cf2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/BgtWageApplication.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/BgtWageApplication.java @@ -12,6 +12,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -89,7 +90,7 @@ public class BgtWageApplication implements Serializable { /** 申请金额 */ @Excel(name = "申请金额") @ApiModelProperty("申请金额") - private Integer applicantAmount; + private BigDecimal applicantAmount; /** 用工情况 */ @Excel(name = "用工情况") diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/dto/BgtAttendanceDayDTO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/dto/BgtAttendanceDayDTO.java index 3ec9ee1..fe9878a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/dto/BgtAttendanceDayDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/dto/BgtAttendanceDayDTO.java @@ -16,6 +16,11 @@ import java.time.LocalDate; @ApiModel("App包工头总体考勤查询对象") public class BgtAttendanceDayDTO { + @ApiModelProperty("分页大小") + private Integer pageSize; + /** 当前页数 */ + @ApiModelProperty("当前页数") + private Integer pageNum; @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd") diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtAttendanceVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtAttendanceVO.java index e1cd850..4847e1d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtAttendanceVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtAttendanceVO.java @@ -11,7 +11,7 @@ import java.util.List; @Data @NoArgsConstructor @Accessors(chain = true) -@ApiModel("App包工头总体考勤视图对象") +@ApiModel("App包工头总体考勤统计视图对象") public class BgtAttendanceVO { @ApiModelProperty("任务ID") @@ -38,6 +38,9 @@ public class BgtAttendanceVO { @ApiModelProperty("外勤人数") private Integer outDutyNum = 0; + @ApiModelProperty("早退人数") + private Integer earlyLeaveNum = 0; + @ApiModelProperty("考勤列表") List countVOs; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitApplyVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitApplyVO.java index 7b95ba7..8b2e4c2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitApplyVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitApplyVO.java @@ -62,5 +62,7 @@ public class BgtProjectRecruitApplyVO implements Serializable { @ApiModelProperty("0报名 1包工同意 2包工头拒绝(截止时间)3务工者同意 4务工者拒绝 5进场 6离场") private String status; + @ApiModelProperty("打卡状态") + private String attendanceStatus; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitDetailVO.java index 3e2a3c4..06ce2ed 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitDetailVO.java @@ -9,6 +9,7 @@ import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -58,7 +59,7 @@ public class BgtProjectRecruitDetailVO implements Serializable { private String recruitAddress; @ApiModelProperty("招工金额") - private Integer recruitAmount; + private BigDecimal recruitAmount; @ApiModelProperty("招工数量") private Integer recruitStaffNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitVO.java index 25e90eb..3a2d6be 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtProjectRecruitVO.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -39,7 +40,7 @@ public class BgtProjectRecruitVO implements Serializable { private String recruitAddress; @ApiModelProperty("招工金额") - private Integer recruitAmount; + private BigDecimal recruitAmount; @ApiModelProperty("招工数量") private Integer recruitStaffNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationDetailVO.java index ec7efe7..ad7ea3f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationDetailVO.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -38,7 +39,7 @@ public class BgtWageApplicationDetailVO { private Integer taskStaffNum; @ApiModelProperty("申请金额") - private Integer applicantAmount; + private BigDecimal applicantAmount; @ApiModelProperty("申请人") private String username; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationListVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationListVO.java index e8da18c..db52ecc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationListVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationListVO.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.math.BigDecimal; + /** * 包工头工资申请分页查询对象 bgt_wage_application * @@ -26,7 +28,7 @@ public class BgtWageApplicationListVO { private String username; @ApiModelProperty("申请金额") - private Integer applicantAmount; + private BigDecimal applicantAmount; @ApiModelProperty("审核状态(1审核中 2已审核 3未审核)") private String auditStatus; diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationVO.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationVO.java index de2f8cd..4af8cc7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/domain/vo/BgtWageApplicationVO.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -32,7 +33,7 @@ public class BgtWageApplicationVO { private String username; @ApiModelProperty("申请金额") - private Integer applicantAmount; + private BigDecimal applicantAmount; @ApiModelProperty("申请时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java index 896c7eb..8f0da97 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java @@ -28,7 +28,7 @@ public interface BgtProjectRecruitApplyMapper extends BaseMapperPlus appQueryList(@Param("dto") BgtProjectRecruitApplyQueryDTO dto); - List todayAttendanceList(@Param("dto") BgtAttendanceDayDTO dto); + Page dayAttendanceList(@Param("page")Page queryDTOPage,@Param("dto") BgtAttendanceDayDTO dto); // 获取指定项目下的所有成员(分页) Page underwayPage (@Param("page") Page page,@Param("req") WgzAppUnderwayReq req); diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java index 59f7f12..ce4859b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java @@ -98,7 +98,7 @@ public interface IBgtProjectRecruitApplyService extends IServicePlus todayAttendanceList(BgtAttendanceDayDTO dto); + TableDataInfo dayAttendanceList(BgtAttendanceDayDTO dto); /** * 退场 diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java index 28dda16..7dbe052 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java @@ -305,8 +305,12 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl todayAttendanceList(BgtAttendanceDayDTO dto) { - return baseMapper.todayAttendanceList(dto); + public TableDataInfo dayAttendanceList(BgtAttendanceDayDTO dto) { + Page queryDTOPage = new Page<>(); + queryDTOPage.setCurrent(dto.getPageNum()); + queryDTOPage.setSize(dto.getPageSize()); + Page queryVOPage = baseMapper.dayAttendanceList(queryDTOPage, dto); + return PageUtils.buildDataInfo(queryVOPage); } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/util/DataUtil.java b/ruoyi-system/src/main/java/com/ruoyi/common/util/DataUtil.java index 5e82253..8875e59 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/util/DataUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/util/DataUtil.java @@ -1,5 +1,6 @@ package com.ruoyi.common.util; +import cn.hutool.core.util.StrUtil; import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO; import java.time.*; @@ -95,7 +96,10 @@ public class DataUtil { /** * 计算年龄 */ - public static int calculateAge(String birthdate) { + public static Integer calculateAge(String birthdate) { + if(StrUtil.isBlank(birthdate)){ + return null; + } DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 将字符串解析为 LocalDate 对象 LocalDate birth = LocalDate.parse(birthdate, dateTimeFormatter); diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/bo/FbsProjectTaskQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/bo/FbsProjectTaskQueryBo.java index 5afc486..491dd8d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/bo/FbsProjectTaskQueryBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/bo/FbsProjectTaskQueryBo.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + /** * 分包商项目任务分页查询对象 fbs_project_task * @@ -49,7 +51,7 @@ public class FbsProjectTaskQueryBo extends BaseEntity { private String taskAddress; /** 任务金额 */ @ApiModelProperty("任务金额") - private Integer taskAmount; + private BigDecimal taskAmount; /** 用工数量 */ @ApiModelProperty("用工数量") private Integer taskStaffNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/FbsProjectTask.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/FbsProjectTask.java index 65587cb..1561f34 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/FbsProjectTask.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/FbsProjectTask.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -59,7 +60,7 @@ public class FbsProjectTask implements Serializable { /** 任务金额 */ @Excel(name = "任务金额") @ApiModelProperty("任务金额") - private Integer taskAmount; + private BigDecimal taskAmount; /** 用工数量 */ @Excel(name = "用工数量") diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailVO.java index eb4dd54..65be363 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailVO.java @@ -46,7 +46,7 @@ public class AppTaskDetailVO { /** 任务金额 */ @ApiModelProperty("任务金额") - private Integer taskAmount; + private BigDecimal taskAmount; /** 用工数量 */ @ApiModelProperty("用工数量") diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailWageVO.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailWageVO.java index 0f87fdb..7544382 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailWageVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskDetailWageVO.java @@ -26,6 +26,6 @@ public class AppTaskDetailWageVO { private BgtWageApplicationListVO wageApplication; @ApiModelProperty("任务金额") - private Integer taskAmount; + private BigDecimal taskAmount; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskVO.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskVO.java index 4f02e8d..389219e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/AppTaskVO.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; @@ -41,7 +42,7 @@ public class AppTaskVO { private String taskDescribe; /** 任务金额 */ @ApiModelProperty("任务金额") - private Integer taskAmount; + private BigDecimal taskAmount; /** 用工数量 */ @ApiModelProperty("用工数量") private Integer taskStaffNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java index 0ea968e..3f4374c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java @@ -31,7 +31,6 @@ import com.ruoyi.fbs.domain.FbsProjectTask; import com.ruoyi.fbs.domain.dto.AppTaskDTO; import com.ruoyi.fbs.domain.vo.*; import com.ruoyi.fbs.mapper.FbsProjectTaskMapper; -import com.ruoyi.fbs.service.IFbsProjectTaskApplyService; import com.ruoyi.fbs.service.IFbsProjectTaskService; import com.ruoyi.wgz.service.IWgzAttendanceService; import com.ruoyi.wgz.service.IWgzPayCalculationService; @@ -43,7 +42,10 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -58,8 +60,6 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl AuditStatus.PASS.getCode().equals(wage.getAuditStatus())) - .mapToInt(BgtWageApplicationListVO::getApplicantAmount) - .sum(); + .map(BgtWageApplicationListVO::getApplicantAmount) + .reduce(BigDecimal.ZERO, BigDecimal::add).intValue(); appTaskDetailVO.setTaskReceiveAmount(taskReceiveAmount); //付款金额 BigDecimal payByTaskAndBgt = payCalculationService.getPayByTaskAndBgt(byId.getId(), byId.getUserId()); @@ -249,8 +249,8 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl AuditStatus.PASS.getCode().equals(wage.getAuditStatus())) - .mapToInt(BgtWageApplicationListVO::getApplicantAmount) - .sum(); + .map(BgtWageApplicationListVO::getApplicantAmount) + .reduce(BigDecimal.ZERO, BigDecimal::add).intValue(); appTaskDetailVO.setTaskReceiveAmount(taskReceiveAmount); //付款金额 BigDecimal payByTaskAndBgt = payCalculationService.getPayByTaskAndBgt(id, SecurityUtils.getAppUserId()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppJobListingRes.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppJobListingRes.java index 818fb6b..ed31f9c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppJobListingRes.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppJobListingRes.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -31,7 +32,7 @@ public class WgzAppJobListingRes implements Serializable { private String recruitAddress; @ApiModelProperty("招工金额") - private Long recruitAmount; + private BigDecimal recruitAmount; @ApiModelProperty("招工数量") private Long recruitStaffNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java index 35c768a..5e1c3ec 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java @@ -10,7 +10,6 @@ import com.ruoyi.bgt.domain.BgtProjectRecruit; import com.ruoyi.bgt.domain.BgtProjectRecruitApply; import com.ruoyi.bgt.domain.dto.BgtAttendanceDTO; import com.ruoyi.bgt.domain.dto.BgtAttendanceDetailDTO; -import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailListVO; import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO; import com.ruoyi.bgt.domain.vo.BgtAttendanceDetailVO; import com.ruoyi.bgt.domain.vo.BgtAttendanceVO; @@ -34,7 +33,6 @@ import com.ruoyi.wgz.bo.rests.WgzAppCardReplacementApplicationTwo; import com.ruoyi.wgz.bo.rests.WgzAppPunchTheCalendarRecordThree; import com.ruoyi.wgz.bo.rests.WgzAppPunchTheCalendarRecordTwo; import com.ruoyi.wgz.domain.WgzAttendance; -import com.ruoyi.wgz.domain.WgzPayCalculation; import com.ruoyi.wgz.domain.WgzUser; import com.ruoyi.wgz.mapper.WgzAttendanceMapper; import com.ruoyi.wgz.service.IWgzAttendanceService; @@ -418,29 +416,33 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl countVOS = countByTaskId(dto.getTaskId(), startData, endData); + bgtAttendanceVO.setCountVOs(DataUtil.fillMissingDates(countVOS, startData, endData)); if(CollectionUtil.isNotEmpty(countVOS)){ - bgtAttendanceVO.setCountVOs(DataUtil.fillMissingDates(countVOS, startData, endData)); BgtAttendanceCountVO countVO = countVOS.stream() .filter(vo -> vo.getDate().isEqual(date)) .findFirst().orElse(null); - bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum()); - bgtAttendanceVO.setTotalNum(countVO.getTotalNum()); - bgtAttendanceVO.setAbsenceDutyNum(countVO.getTotalNum()-countVO.getReportToDutyNum()); + if (countVO != null) { + bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum()); + bgtAttendanceVO.setTotalNum(countVO.getTotalNum()); + bgtAttendanceVO.setAbsenceDutyNum(countVO.getTotalNum()-countVO.getReportToDutyNum()); + } + } }else if(dto.getDateType().equals(DateUtils.MONTH)){ // 获取本年开始日期 startData = date.with(TemporalAdjusters.firstDayOfYear()); endData = date.with(TemporalAdjusters.lastDayOfMonth()); List countVOS = countByTaskId(dto.getTaskId(), startData, endData); - if(CollectionUtil.isNotEmpty(countVOS)){ - bgtAttendanceVO.setCountVOs(DataUtil.statisticsByMonth(countVOS,startData, endData)); - } + bgtAttendanceVO.setCountVOs(DataUtil.statisticsByMonth(countVOS,startData, endData)); BgtAttendanceCountVO countVO = countVOS.stream() .filter(vo -> YearMonth.from(vo.getDate()).equals(YearMonth.from(date))) .findFirst().orElse(null); - bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum()); - bgtAttendanceVO.setTotalNum(countVO.getTotalNum()); - bgtAttendanceVO.setAbsenceDutyNum(countVO.getAbsenceDutyNum()); + if (countVO != null) { + bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum()); + bgtAttendanceVO.setTotalNum(countVO.getTotalNum()); + bgtAttendanceVO.setAbsenceDutyNum(countVO.getAbsenceDutyNum()); + } + } getLateAndLeave(bgtAttendanceVO, startData, endData); return bgtAttendanceVO; @@ -450,12 +452,14 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl bgtProjectRecruits = iBgtProjectRecruitService.getBaseMapper().selectList(Wrappers.lambdaQuery() .eq(BgtProjectRecruit::getTaskId, vo.getTaskId())); List recruitIds = bgtProjectRecruits.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList()); - Integer late = baseMapper.selectCount(Wrappers.lambdaQuery().eq(WgzAttendance::getLate, 1) - .in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate)); - Integer leave = baseMapper.selectCount(Wrappers.lambdaQuery().isNotNull(WgzAttendance::getLeaveMarkId) - .in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate)); - vo.setLateNum(late); - vo.setLeaveNum(leave); + if(CollectionUtil.isNotEmpty(recruitIds)){ + Integer late = baseMapper.selectCount(Wrappers.lambdaQuery().eq(WgzAttendance::getLate, 1) + .in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate)); + Integer leave = baseMapper.selectCount(Wrappers.lambdaQuery().isNotNull(WgzAttendance::getLeaveMarkId) + .in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate)); + vo.setLateNum(late); + vo.setLeaveNum(leave); + } } // @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/bo/ZbfProjectSubcontractingQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/bo/ZbfProjectSubcontractingQueryBo.java index d8483a9..d940710 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/bo/ZbfProjectSubcontractingQueryBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/bo/ZbfProjectSubcontractingQueryBo.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + /** * 总包方项目分包分页查询对象 zbf_project_subcontracting * @@ -46,7 +48,7 @@ public class ZbfProjectSubcontractingQueryBo extends BaseEntity { private String subDescribe; /** 分包金额 */ @ApiModelProperty("分包金额") - private Integer subAmount; + private BigDecimal subAmount; /** 资质要求 */ @ApiModelProperty("资质要求") private String qualification; diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/ZbfProjectSubcontracting.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/ZbfProjectSubcontracting.java index 92f80ee..9cfea53 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/ZbfProjectSubcontracting.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/ZbfProjectSubcontracting.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -54,7 +55,7 @@ public class ZbfProjectSubcontracting implements Serializable { /** 分包金额 */ @Excel(name = "分包金额") @ApiModelProperty("分包金额") - private Integer subAmount; + private BigDecimal subAmount; /** 资质要求 */ @Excel(name = "资质要求") diff --git a/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml b/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml index d0cfc8a..d5593e0 100644 --- a/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml @@ -53,7 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by bpra.create_time desc,bpra.status asc - select bpra.id, bpra.entry_time, wu.user_id, @@ -63,7 +63,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" wu.username, wu.type_of_work, bpr.recruit_name, - fpt.task_name + fpt.task_name, + CASE + WHEN wa.leave_mark_id is not null THEN '请假' + WHEN wa.late =1 THEN '迟到' + WHEN wa.early_leave =1 THEN '早退' + WHEN wa.missed_in = 0 OR wa.missed_out = 0 THEN '出勤' + WHEN wa.missed_in =1 and missed_out = 1 THEN '缺勤' + ELSE '未知状态' + END AS attendance_status from wgz_attendance wa left join wgz_user wu on wa.user_id = wu.user_id left join bgt_project_recruit_apply bpra on wa.recruit_id = bpra.recruit_id and bpra.user_id = wa.user_id @@ -71,10 +79,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join fbs_project_task fpt on fpt.id = bpr.task_id where wa.date = #{dto.date} - and (wa.missed_in =0 or missed_out = 0 ) + and (wa.missed_in =0 or wa.missed_out = 0 ) - and (wa.missed_in =1 and missed_out = 1 ) + and (wa.missed_in =1 and wa.missed_out = 1) and wa.late =1