Browse Source

项目暂停与启动审核

anderx 5 months ago
parent
commit
c2a2f4b5a2

+ 85 - 0
src/main/java/com/goafanti/common/dao/LegalHolidaysMapper.java

@@ -0,0 +1,85 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.LegalHolidays;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 法定节假日(LegalHolidays)表数据库访问层
+ *
+ * @author makejava
+ * @since 2025-08-06 17:04:31
+ */
+public interface LegalHolidaysMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    LegalHolidays selectById(Integer id);
+
+
+    /**
+     * 查询指定行数据
+     *
+     * @param legalHolidays 查询条件
+     * @param pageable      分页对象
+     * @return 对象列表
+     */
+    List<LegalHolidays> findLegalHolidaysList(LegalHolidays legalHolidays);
+
+    /**
+     * 统计总行数
+     *
+     * @param legalHolidays 查询条件
+     * @return 总行数
+     */
+    int findLegalHolidaysCount(LegalHolidays legalHolidays);
+
+    /**
+     * 新增数据
+     *
+     * @param legalHolidays 实例对象
+     * @return 影响行数
+     */
+    int insert(LegalHolidays legalHolidays);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<LegalHolidays> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<LegalHolidays> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<LegalHolidays> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<LegalHolidays> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param legalHolidays 实例对象
+     * @return 影响行数
+     */
+    int update(LegalHolidays legalHolidays);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    List<LegalHolidays> selectAll();
+}
+

+ 118 - 0
src/main/java/com/goafanti/common/mapper/LegalHolidaysMapper.xml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.goafanti.common.dao.LegalHolidaysMapper">
+
+    <resultMap type="com.goafanti.common.model.LegalHolidays" id="LegalHolidaysMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="holidays" column="holidays" jdbcType="TIMESTAMP"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="LegalHolidaysAllSql">
+        id, holidays, status
+    </sql>
+
+    <!--查询单个-->
+    <select id="selectById" resultMap="LegalHolidaysMap">
+        select
+        <include refid="LegalHolidaysAllSql"/>
+        from legal_holidays
+        where id = #{id}
+    </select>
+
+    <!--新增所有列-->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into legal_holidays(holidays, status)
+        values (#{holidays}, #{status})
+    </insert>
+
+    <insert id="insertBatch">
+        insert into legal_holidays(holidays, status)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.holidays}, #{entity.status})
+        </foreach>
+    </insert>
+
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into legal_holidays(holidays, status)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.holidays}, #{entity.status})
+        </foreach>
+        on duplicate key update
+        holidays = values(holidays),
+        status = values(status)
+    </insert>
+
+    <!--通过主键修改数据-->
+    <update id="update">
+        update legal_holidays
+        <set>
+            <if test="holidays != null">
+                holidays = #{holidays},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--查询指定行数据-->
+    <select id="findLegalHolidaysList" resultMap="LegalHolidaysMap">
+        select
+        <include refid="LegalHolidaysAllSql"/>
+
+        from legal_holidays
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="holidays != null">
+                and holidays = #{holidays}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+        </where>
+        <if test="page_sql != null">
+            ${page_sql}
+        </if>
+    </select>
+
+    <!--统计总行数-->
+    <select id="findLegalHolidaysCount" resultType="java.lang.Integer">
+        select count(1)
+        from legal_holidays
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="holidays != null">
+                and holidays = #{holidays}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+        </where>
+    </select>
+
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from legal_holidays
+        where id = #{id}
+    </delete>
+
+
+
+    <select id="selectAll" resultMap="LegalHolidaysMap">
+        select
+        <include refid="LegalHolidaysAllSql"/>
+        from legal_holidays
+    </select>
+
+</mapper>
+

+ 54 - 0
src/main/java/com/goafanti/common/model/LegalHolidays.java

@@ -0,0 +1,54 @@
+package com.goafanti.common.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 法定节假日(LegalHolidays)实体类
+ *
+ * @author makejava
+ * @since 2025-08-06 17:04:31
+ */
+public class LegalHolidays implements Serializable {
+    private static final long serialVersionUID = -87380437999170496L;
+    /**
+     * 编号
+     */
+    private Integer id;
+    /**
+     * 日期时间
+     */
+    private Date holidays;
+    /**
+     * 项目状态 1=法定节假日,2=补班
+     */
+    private Integer status;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getHolidays() {
+        return holidays;
+    }
+
+    public void setHolidays(Date holidays) {
+        this.holidays = holidays;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+}
+

+ 14 - 10
src/main/java/com/goafanti/common/utils/DateUtils.java

@@ -9,8 +9,10 @@ import java.text.SimpleDateFormat;
 import java.time.*;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 
@@ -576,17 +578,19 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 
 
 	public static void main(String[] args) {
-		Date date = StringToDate("2023-08-08 09:00:00", AFTConstants.YYYYMMDDHHMMSS);
-		Date date1 = StringToDate("2023-08-12 06:00:00", AFTConstants.YYYYMMDDHHMMSS);
-		long daysBetween = getDaysBetween(date, date1);
-		daysBetween+=1;
-		System.out.println(daysBetween);
-		for (int i = 0; i <daysBetween; i++) {
-			LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
-			LocalDate localDate1 = localDate.plusDays(i);
-			System.out.println(localDate1);
+		Date start =DateUtils.StringToDate("2025-08-05 09:00:00", AFTConstants.YYYYMMDDHHMMSS);
+		Date end =DateUtils.StringToDate("2025-08-08 06:00:00", AFTConstants.YYYYMMDDHHMMSS);
+		long holidays = DateUtils.getDaysBetween(start,end);
+		System.out.println("holidays="+holidays);
+		List<Date> list = new ArrayList<>();
+		for (int i = 0; i <= holidays; i++) {
+			LocalDate date = LocalDate.from(start.toInstant().atZone(ZoneId.systemDefault()));
+			LocalDate localDate = date.plusDays(i);
+			System.out.println(localDate);
+			System.out.println(localDate.getDayOfWeek().getValue()-1);
+			list.add(Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
+			//获取星期
 		}
-
 	}
 
 }

+ 9 - 0
src/main/java/com/goafanti/expenseAccount/bo/OutExpenseAccountDetailsList.java

@@ -22,6 +22,9 @@ public class OutExpenseAccountDetailsList {
     private Double duration ;
     @Excel(name = "天数",width = 5)
     private Integer days;
+    @Excel(name = "节假日",width = 5)
+    private Integer statutoryDays;
+
     private Integer sonId;
     private Integer sonType;
     private String  sonTypeOther;
@@ -94,7 +97,13 @@ public class OutExpenseAccountDetailsList {
     private Date releaseStart;
     private Date releaseEnd;
 
+    public Integer getStatutoryDays() {
+        return statutoryDays;
+    }
 
+    public void setStatutoryDays(Integer statutoryDays) {
+        this.statutoryDays = statutoryDays;
+    }
 
     public String getReleaseTimeStr() {
         return releaseTimeStr;

+ 53 - 0
src/main/java/com/goafanti/expenseAccount/service/impl/ExpenseAccountServiceImpl.java

@@ -53,6 +53,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -100,6 +102,8 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
     private TOrderMidMapper tOrderMidMapper;
     @Resource
     private AdminPublicReviewerMapper adminPublicReviewerMapper;
+    @Resource
+    private LegalHolidaysMapper legalHolidaysMapper;
 
 
 
@@ -402,6 +406,10 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
     public Object detailsListExport(InputDetailsListBo in) {
         List<OutExpenseAccountDetailsList> list = (List<OutExpenseAccountDetailsList>) detailsList(in).getList();
         for (OutExpenseAccountDetailsList e : list) {
+            //新增计算法定
+            Integer statutoryDays = pushDtailsDays(e);
+            e.setStatutoryDays(statutoryDays);
+
             if (e.getTargetType()!=null){
                 if (e.getTargetType()==0){
                     e.setTargetName("固定费用");
@@ -432,6 +440,51 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
         return excelUtil.exportExcel(list,"费用详细列表",uploadPath);
     }
 
+    private Integer pushDtailsDays(OutExpenseAccountDetailsList e) {
+        Integer statutoryDays = 0;
+        //获取俩个日期之间的所有日期
+        long days = DateUtils.getDaysBetween(e.getReleaseStart(),e.getReleaseEnd());
+        if (days>0){
+            List<LegalHolidays> legalHolidays = legalHolidaysMapper.selectAll();
+            //法定节假日
+            Set<String> holidaysSet = legalHolidays.stream()
+                    .filter(et -> et.getStatus() == 1)
+                    .map(holiday -> DateUtils.formatDateYYYYMMdd(holiday.getHolidays()))
+                    .collect(Collectors.toSet());
+            //需要补班
+            Set<String> workDaysSet = legalHolidays.stream()
+                    .filter(et -> et.getStatus() == 2)
+                    .map(holiday -> DateUtils.formatDateYYYYMMdd(holiday.getHolidays()))
+                    .collect(Collectors.toSet());
+
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate startDate = LocalDate.from(e.getReleaseStart().toInstant().atZone(ZoneId.systemDefault()));
+
+            for (int i = 0; i <= days; i++) {
+                LocalDate currentDate = startDate.plusDays(i);
+                int dayOfWeek = currentDate.getDayOfWeek().getValue();
+                String dateString = currentDate.format(formatter);
+
+                // 周六(6)和周日(7)默认为节假日
+                if (dayOfWeek > 5) {
+                    // 如果是补班日,则不是节假日
+                    if (!workDaysSet.contains(dateString)) {
+                        statutoryDays++;
+                    }
+                } else {
+                    // 工作日如果是法定节假日,则是节假日
+                    if (holidaysSet.contains(dateString)) {
+                        statutoryDays++;
+                    }
+                }
+            }
+
+        }
+        return statutoryDays;
+    }
+
+
+
     @Override
     public Object getDepDetails(Integer id) {
         OutExpenseAccount outExpenseAccount = expenseAccountMapper.selectByid(id);