zss
10 天以前 03df670a1dfbcae8031e84e15dff0b77365f0af6
Merge remote-tracking branch 'origin/master' into pim_zss
已修改10个文件
已添加1个文件
288 ■■■■■ 文件已修改
src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/controller/HomeController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/HomeService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/controller/LavorIssueController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/dto/StatisticsLaborIssue.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/mapper/LavorIssueMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/pojo/LaborIssue.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/service/LavorIssueService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/lavorissue/LavorIssueMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java
@@ -1,5 +1,6 @@
package com.ruoyi.approve.utils;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -13,9 +14,11 @@
public class StartAndEndDateDto {
    @ApiModelProperty("开始时间")
    @TableField(exist = false)
    private String startDate;
    @ApiModelProperty("结束时间")
    @TableField(exist = false)
    private String endDate;
}
src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -21,6 +21,7 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.List;
/**
@@ -63,7 +64,7 @@
    @GetMapping("/todos")
    @Log(title = "待办事项", businessType = BusinessType.OTHER)
    @ApiOperation("待办事项")
    public AjaxResult todos(ApproveProcess req) {
    public AjaxResult todos(ApproveProcess req) throws ParseException {
        List<ApproveProcess> approveProcessList = homeService.todos();
        return AjaxResult.success(approveProcessList);
    }
src/main/java/com/ruoyi/home/service/HomeService.java
@@ -6,6 +6,7 @@
import com.ruoyi.home.dto.QualityStatisticsDto;
import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
import java.text.ParseException;
import java.util.List;
/**
@@ -22,7 +23,7 @@
    QualityStatisticsDto qualityStatistics();
    List<ApproveProcess> todos();
    List<ApproveProcess> todos() throws ParseException;
    StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type);
}
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -8,6 +8,8 @@
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.home.dto.*;
import com.ruoyi.home.service.HomeService;
import com.ruoyi.lavorissue.mapper.LavorIssueMapper;
import com.ruoyi.lavorissue.pojo.LaborIssue;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
@@ -33,6 +35,8 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
@@ -73,6 +77,9 @@
    @Autowired
    private PaymentRegistrationMapper paymentRegistrationMapper;
    @Autowired
    private LavorIssueMapper lavorIssueMapper;
    @Autowired
    private SysDeptMapper sysDeptMapper;
@@ -302,14 +309,35 @@
    }
    @Override
    public List<ApproveProcess> todos() {
    public List<ApproveProcess> todos() throws ParseException {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
        approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveDelete, 0)
                .eq(ApproveProcess::getApproveUserCurrentId, loginUser.getUserId())
                .ne(ApproveProcess::getApproveStatus, 2)
                .eq(ApproveProcess::getTenantId, loginUser.getTenantId());
        return approveProcessMapper.selectList(approveProcessLambdaQueryWrapper);
        List<ApproveProcess> approveProcesses = approveProcessMapper.selectList(approveProcessLambdaQueryWrapper);
        if(CollectionUtils.isEmpty(approveProcesses)){
            approveProcesses = new ArrayList<>();
        }
        // æŸ¥è¯¢æœªé¢†ç”¨åŠ³ä¿è®°å½•
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        LaborIssue laborIssue1 = new LaborIssue();
        laborIssue1.setAdoptedDate(new Date());
        laborIssue1.setIssueDate(sdf.parse(sdf.format(new Date())));
        List<LaborIssue> laborIssues = lavorIssueMapper.list(laborIssue1);
        if(!CollectionUtils.isEmpty(laborIssues)){
            for (LaborIssue laborIssue : laborIssues) {
                ApproveProcess approveProcess = new ApproveProcess();
                approveProcess.setApproveId(laborIssue.getOrderNo());
                approveProcess.setApproveDeptName(sysDeptMapper.selectDeptById(loginUser.getTenantId()).getDeptName());
                approveProcess.setApproveTime(laborIssue.getIssueDate());
                approveProcess.setApproveReason(laborIssue.getDictTypeName() + "-" + laborIssue.getDictName() + "超时未领取");
                approveProcesses.add(approveProcess);
            }
        }
        return approveProcesses;
    }
    /**
src/main/java/com/ruoyi/lavorissue/controller/LavorIssueController.java
@@ -1,13 +1,18 @@
package com.ruoyi.lavorissue.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.utils.DailyRedisCounter;
import com.ruoyi.approve.utils.StartAndEndDateDto;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.lavorissue.dto.StatisticsLaborIssue;
import com.ruoyi.lavorissue.mapper.LavorIssueMapper;
import com.ruoyi.lavorissue.pojo.LaborIssue;
import com.ruoyi.lavorissue.service.LavorIssueService;
@@ -17,9 +22,12 @@
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
@@ -53,6 +61,19 @@
    @ApiOperation("劳保发放-添加")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody LaborIssue laborIssue){
        String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        StartAndEndDateDto dateTime = DailyRedisCounter.getDateTime();
        Long approveId = lavorIssueMapper.selectCount(new LambdaQueryWrapper<LaborIssue>()
                .gt(LaborIssue::getCreateTime, dateTime.getStartDate())
                .lt(LaborIssue::getCreateTime, dateTime.getEndDate()));
        String formattedCount = String.format("%03d", approveId + 1);
        laborIssue.setOrderNo(today + formattedCount);
        List<LaborIssue> laborIssues = lavorIssueMapper.selectList(new LambdaQueryWrapper<LaborIssue>()
                .like(LaborIssue::getOrderNo, today));
        if(!CollectionUtils.isEmpty(laborIssues)){
            long l = Long.parseLong(laborIssues.get(laborIssues.size() - 1).getOrderNo());
            laborIssue.setOrderNo(String.format("%03d", l + 1));
        }
        boolean save = laborIssueService.save(laborIssue);
        return save ? AjaxResult.success() : AjaxResult.error();
    }
@@ -75,6 +96,14 @@
        return delete ? AjaxResult.success() : AjaxResult.error();
    }
    @GetMapping("/statistics")
    @ApiOperation("劳保发放-统计")
    public AjaxResult statistics(StatisticsLaborIssue req) throws Exception {
        StatisticsLaborIssue statisticsLaborIssue = laborIssueService.statistics(req);
        return AjaxResult.success(statisticsLaborIssue);
    }
    /**
     * åŠ³ä¿å‘æ”¾-导出
@@ -85,7 +114,7 @@
    public void export(HttpServletResponse response) {
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        ExcelUtil<LaborIssue> util = new ExcelUtil<LaborIssue>(LaborIssue.class);
        List<LaborIssue> list = lavorIssueMapper.list();
        List<LaborIssue> list = lavorIssueMapper.list(new LaborIssue());
        SysDept sysDept = sysDeptMapper.selectDeptById(tenantId);
        if(sysDept == null){
            throw new RuntimeException("部门不存在!");
src/main/java/com/ruoyi/lavorissue/dto/StatisticsLaborIssue.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.lavorissue.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author :yys
 * @date : 2025/8/14 11:53
 */
@Data
@ApiModel
public class StatisticsLaborIssue {
    private Integer season;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date issueDate;
    private Long ylqNum = 0L;
    private Long wlqNum = 0L;
    private Long csylqNum = 0L;
    private Long cswlqNum = 0L;
}
src/main/java/com/ruoyi/lavorissue/mapper/LavorIssueMapper.java
@@ -23,5 +23,5 @@
     */
    IPage<LaborIssue> listPage(Page page, @Param("req") LaborIssue laborIssue);
    List<LaborIssue> list();
    List<LaborIssue> list(@Param("req") LaborIssue laborIssue);
}
src/main/java/com/ruoyi/lavorissue/pojo/LaborIssue.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.approve.utils.StartAndEndDateDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -18,12 +19,19 @@
@Data
@TableName("labor_issue")
@ApiModel
public class LaborIssue {
public class LaborIssue extends StartAndEndDateDto {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField(exist = false)
    @ApiModelProperty("1-已领取劳保数量 2-未领取劳保数量 3-超时已领取劳保数量 4-超时未领取劳保数量")
    private Integer status;
    @TableField(exist = false)
    private Integer season;
    /**
     * éƒ¨é—¨åç§°
@@ -32,6 +40,13 @@
    @Excel(name = "部门名称")
    @TableField(exist = false)
    private String deptName;
    /**
     * åŠ³ä¿å•å·
     */
    @ApiModelProperty("劳保单号")
    @Excel(name = "劳保单号")
    private String orderNo;
    /**
     * å‘˜å·¥id
@@ -56,6 +71,20 @@
    private String staffNo;
    /**
     * åŠ³ä¿ç±»åž‹-字典
     */
    @ApiModelProperty("劳保类型-字典")
    private String dictType;
    /**
     * åŠ³ä¿ç±»åž‹
     */
    @ApiModelProperty("劳保类型")
    @Excel(name = "劳保类型")
    @TableField(exist = false)
    private String dictTypeName;
    /**
     * é˜²å…·åç§°-字典
     */
    @ApiModelProperty("防具名称-字典")
@@ -77,6 +106,24 @@
    private Long num;
    /**
     * è¿›åŽ‚æ—¥æœŸ
     */
    @ApiModelProperty("进厂日期")
    @Excel(name = "进厂日期", width = 30, dateFormat = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date factoryDate;
    /**
     * å‘放日期
     */
    @ApiModelProperty("发放日期")
    @Excel(name = "发放日期", width = 30, dateFormat = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date issueDate;
    /**
     * é¢†ç”¨æ—¥æœŸ
     */
    @ApiModelProperty("领用日期")
src/main/java/com/ruoyi/lavorissue/service/LavorIssueService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.lavorissue.dto.StatisticsLaborIssue;
import com.ruoyi.lavorissue.pojo.LaborIssue;
/**
@@ -19,4 +20,6 @@
     * @return
     */
    IPage<LaborIssue> listPage(Page page, LaborIssue laborIssue);
    StatisticsLaborIssue statistics(StatisticsLaborIssue req) throws  Exception;
}
src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java
@@ -1,14 +1,24 @@
package com.ruoyi.lavorissue.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.utils.StartAndEndDateDto;
import com.ruoyi.lavorissue.dto.StatisticsLaborIssue;
import com.ruoyi.lavorissue.mapper.LavorIssueMapper;
import com.ruoyi.lavorissue.pojo.LaborIssue;
import com.ruoyi.lavorissue.service.LavorIssueService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author :yys
@@ -23,7 +33,89 @@
    @Override
    public IPage<LaborIssue> listPage(Page page, LaborIssue laborIssue) {
        IPage<LaborIssue> listPage = lavorIssueMapper.listPage(page, laborIssue);
        return listPage;
        StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(laborIssue.getSeason(), laborIssue.getIssueDate());
        laborIssue.setStartDate(startAndEndDateDto.getStartDate());
        laborIssue.setEndDate(startAndEndDateDto.getEndDate());
        IPage<LaborIssue> laborIssueIPage = lavorIssueMapper.listPage(page, laborIssue);
        return laborIssueIPage;
    }
    public StartAndEndDateDto getStartAndEndDateDto(Integer season,Date payDate){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        StartAndEndDateDto startAndEndDateDto = new StartAndEndDateDto();
        if(season != null){
            Calendar calendar = Calendar.getInstance();
            int currentYear = calendar.get(Calendar.YEAR);
            switch (season){
                case 1:
                    startAndEndDateDto.setStartDate(currentYear + "-01-01");
                    startAndEndDateDto.setEndDate(currentYear + "-03-31");
                    break;
                case 2:
                    startAndEndDateDto.setStartDate(currentYear + "-04-01");
                    startAndEndDateDto.setEndDate(currentYear + "-06-30");
                    break;
                case 3:
                    startAndEndDateDto.setStartDate(currentYear + "-07-01");
                    startAndEndDateDto.setEndDate(currentYear + "-09-30");
                    break;
                case 4:
                    startAndEndDateDto.setStartDate(currentYear + "-10-01");
                    startAndEndDateDto.setEndDate(currentYear + "-12-31");
                    break;
            }
        }
        if(payDate != null){
            Date lastDayOfMonth = getLastDayOfMonth(payDate);
            startAndEndDateDto.setStartDate(sdf.format(payDate));
            startAndEndDateDto.setEndDate(sdf.format(lastDayOfMonth));
        }
        return startAndEndDateDto;
    }
    @Override
    public StatisticsLaborIssue statistics(StatisticsLaborIssue req) throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        StatisticsLaborIssue statisticsLaborIssue = new StatisticsLaborIssue();
        StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(req.getSeason(), req.getIssueDate());
        LambdaQueryWrapper<LaborIssue> laborIssueLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(req.getSeason() != null || req.getIssueDate() != null){
            laborIssueLambdaQueryWrapper.ge(LaborIssue::getIssueDate, startAndEndDateDto.getStartDate())
                    .le(LaborIssue::getIssueDate, startAndEndDateDto.getEndDate());
        }
        List<LaborIssue> laborIssues = lavorIssueMapper.selectList(laborIssueLambdaQueryWrapper);
        if(!CollectionUtils.isEmpty(laborIssues)){
            Long sum = laborIssues.stream()
                    .filter(laborIssue -> laborIssue.getAdoptedDate() != null)
                    .mapToLong(LaborIssue::getNum)
                    .sum();
            statisticsLaborIssue.setYlqNum(sum);
            statisticsLaborIssue.setWlqNum(laborIssues.stream()
                    .filter(laborIssue -> laborIssue.getAdoptedDate() == null)
                    .mapToLong(LaborIssue::getNum)
                    .sum());
            Date currentDate = new Date();
            Date parse = sdf.parse(sdf.format(currentDate));
            statisticsLaborIssue.setCsylqNum(laborIssues.stream()
                    .filter(laborIssue -> laborIssue.getIssueDate() != null
                            && laborIssue.getAdoptedDate() != null
                            && (laborIssue.getIssueDate().before(laborIssue.getAdoptedDate())))
                    .mapToLong(LaborIssue::getNum)
                    .sum());
            statisticsLaborIssue.setCswlqNum(laborIssues.stream()
                    .filter(laborIssue -> laborIssue.getIssueDate() != null
                            && laborIssue.getIssueDate().before(parse)
                            && laborIssue.getAdoptedDate() == null)
                    .mapToLong(LaborIssue::getNum)
                    .sum());
        }
        return statisticsLaborIssue;
    }
    public Date getLastDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // è®¾ç½®ä¼ å…¥çš„Date
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); // è®¾ç½®ä¸ºå½“月最后一天
        return calendar.getTime(); // è¿”回Date对象
    }
}
src/main/resources/mapper/lavorissue/LavorIssueMapper.xml
@@ -7,13 +7,33 @@
        t1.*,
               t2.staff_name as staffName,
               t2.staff_no as staffNo,
               t3.dict_label as dictName
               t3.dict_label as dictName,
               t4.dict_label as dictTypeName
        from labor_issue t1
        left join staff_join_leave_record t2 on t1.staff_id = t2.id
        left join sys_dict_data t3 on t1.dict_id = t3.dict_value
        left join sys_dict_data t4 on t1.dict_type = t4.dict_value
        <where>
            <if test="req.season != null and req.season != ''">
                and (t1.issue_date &gt;= #{req.startDate} and t1.issue_date &lt;= #{req.endDate})
            </if>
            <if test="req.issueDate != null">
                and (t1.issue_date &gt;= #{req.startDate} and t1.issue_date &lt;= #{req.endDate})
            </if>
            <if test="req.staffName != null and req.staffName != ''">
                and t2.staff_name like ('%',#{req.staffName},'%')
                and t2.staff_name like concat('%',#{req.staffName},'%')
            </if>
            <if test="req.status != null and req.status == 1">
                and t1.adopted_date is not null
            </if>
            <if test="req.status != null and req.status == 2">
                and t1.adopted_date is null
            </if>
            <if test="req.status != null and req.status == 3">
                and t1.adopted_date is not null and t1.issue_date &lt; t1.adopted_date
            </if>
            <if test="req.status != null and req.status == 4">
                and t1.adopted_date is null and t1.issue_date &lt; current_date()
            </if>
        </where>
    </select>
@@ -22,9 +42,19 @@
            t1.*,
            t2.staff_name as staffName,
            t2.staff_no as staffNo,
            t3.dict_label as dictName
            t3.dict_label as dictName,
            t4.dict_label as dictTypeName
        from labor_issue t1
                 left join staff_join_leave_record t2 on t1.staff_id = t2.id
                 left join sys_dict_data t3 on t1.dict_id = t3.dict_value
                 left join sys_dict_data t4 on t1.dict_type = t4.dict_value
        <where>
            <if test="req.adoptedDate != null">
                and t1.adopted_date is null
            </if>
            <if test="req.issueDate != null">
                and t1.issue_date &lt; #{req.issueDate}
            </if>
        </where>
    </select>
</mapper>