Administrator
2024-01-25 371591d64d37a57e2866e6f0729cf7054b8744ba
2024-01-25 朱宝民 总账生成功能、总账审核功能
10个文件已添加
2个文件已修改
960 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeAuditsMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeAudits.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeAuditsMapper.xml 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/dto/DtoGeneral.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoGeneral.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeAuditsMapper.java
New file
@@ -0,0 +1,27 @@
package com.dy.pipIrrGlobal.daoSe;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoSe.SeAudits;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 18:57
 * @LastEditTime 2024-01-24 18:57
 * @Description
 */
@Mapper
public interface SeAuditsMapper extends BaseMapper<SeAudits> {
    int deleteByPrimaryKey(Long id);
    int insert(SeAudits record);
    int insertSelective(SeAudits record);
    SeAudits selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(SeAudits record);
    int updateByPrimaryKey(SeAudits record);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java
New file
@@ -0,0 +1,59 @@
package com.dy.pipIrrGlobal.daoSe;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
import com.dy.pipIrrGlobal.voSe.VoGeneral;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 18:57
 * @LastEditTime 2024-01-24 18:57
 * @Description
 */
@Mapper
public interface SeGeneralMapper extends BaseMapper<SeGeneral> {
    int deleteByPrimaryKey(Long id);
    int insert(SeGeneral record);
    int insertSelective(SeGeneral record);
    SeGeneral selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(SeGeneral record);
    int updateByPrimaryKey(SeGeneral record);
    /**
     * 获取未生成总账的交易日期列表(当天的交易记录不生成总账)
     * @return
     */
    List<Map<String, Object>> getDatesOfNotInGenerals();
    /**
     * 根据交易日期获取总账记录列表(待生成的)
     * @param operateDate
     * @return
     */
    List<SeGeneral> getGeneralByOperateDate(@Param("operateDate") String operateDate);
    /**
     * 根据指定条件获取总账记录数
     * @param params
     * @return
     */
    Long getRecordCount(Map<?, ?> params);
    /**
     * 根据指定条件获取总账记录
     * @param params
     * @return
     */
    List<VoGeneral> getGenerals(Map<?, ?> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeAudits.java
New file
@@ -0,0 +1,76 @@
package com.dy.pipIrrGlobal.pojoSe;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dy.common.po.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 18:57
 * @LastEditTime 2024-01-24 18:57
 * @Description
 */
@TableName(value="se_audits", autoResultMap = true)
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "总账审核记录实体")
public class SeAudits implements BaseEntity {
    public static final long serialVersionUID = 202401251043001L;
    /**
    * 主键
    */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @TableId(type = IdType.INPUT)
    @Schema(description = "实体id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Long id;
    /**
    * 总账ID
    */
    @Schema(description = "总账ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "总账ID不能为空")
    private Long generalId;
    /**
    * 审核状态;1-未审核,2-同意,3-驳回
    */
    @Schema(description = "审核状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "审核状态不能为空")
    private Byte auditStatus;
    /**
    * 审核意见
    */
    @Schema(description = "审核意见", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @Length(max = 200, message = "审核意见最多200字")
    private String auditOpinion;
    /**
    * 操作人编号
    */
    @Schema(description = "操作人ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "操作人ID不能为空")
    @Positive(message = "操作人ID必须为大于0的整数")
    private Long operator;
    /**
    * 操作时间
    */
    @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Date operateDt;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeGeneral.java
New file
@@ -0,0 +1,85 @@
package com.dy.pipIrrGlobal.pojoSe;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dy.common.po.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import java.util.Date;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 18:57
 * @LastEditTime 2024-01-24 18:57
 * @Description
 */
@TableName(value="se_general", autoResultMap = true)
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "总账实体")
public class SeGeneral implements BaseEntity {
    public static final long serialVersionUID = 202401241912001L;
    /**
    * 主键
    */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @TableId(type = IdType.INPUT)
    @Schema(description = "实体id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Long id;
    /**
    * 收银员姓名
    */
    @Schema(description = "收银员姓名", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotBlank(message = "收银员姓名不能为空")
    private String cashierName;
    /**
    * 实收金额
    */
    @Schema(description = "实收金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "实收金额不能为空")
    private Double tradeAmount;
    /**
    * 赠送金额
    */
    @Schema(description = "赠送金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "赠送金额不能为空")
    private Double gift;
    /**
    * 总额
    */
    @Schema(description = "总额", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "总额不能为空")
    private Double totalAmount;
    /**
    * 交易日期
    */
    @Schema(description = "交易日期", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "交易日期不能为空")
    private Date operateDate;
    /**
    * 审核状态;1-未审核,2-同意,3-驳回
    */
    @Schema(description = "审核状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @Max(message = "审核状态最大为3", value = 3)
    @Min(message = "审核状态最小为1",value = 1)
    private Byte auditStatus;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoGeneral.java
@@ -4,8 +4,6 @@
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 17:00
@@ -18,8 +16,11 @@
public class VoGeneral implements BaseEntity {
    private static final long serialVersionUID = 202401241706001L;
    @Schema(title = "总账ID")
    private Long generalId;
    @Schema(title = "收银员姓名")
    private String clientNum;
    private String cashierName;
    @Schema(title = "实收金额")
    private Float tradeAmount;
@@ -30,7 +31,10 @@
    @Schema(title = "总额")
    private Float totalAmount;
    @Schema(title = "日期")
    private Date operateDate;
    @Schema(title = "交易日期")
    private String operateDate;
    @Schema(title = "审核状态")
    private String auditStatus;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeAuditsMapper.xml
New file
@@ -0,0 +1,115 @@
<?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.dy.pipIrrGlobal.daoSe.SeAuditsMapper">
  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeAudits">
    <!--@mbg.generated-->
    <!--@Table se_audits-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="general_id" jdbcType="BIGINT" property="generalId" />
    <result column="audit_status" jdbcType="TINYINT" property="auditStatus" />
    <result column="audit_opinion" jdbcType="VARCHAR" property="auditOpinion" />
    <result column="operator" jdbcType="BIGINT" property="operator" />
    <result column="operate_dt" jdbcType="TIMESTAMP" property="operateDt" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, general_id, audit_status, audit_opinion, `operator`, operate_dt
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select
    <include refid="Base_Column_List" />
    from se_audits
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    <!--@mbg.generated-->
    delete from se_audits
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
    <!--@mbg.generated-->
    insert into se_audits (id, general_id, audit_status,
      audit_opinion, `operator`, operate_dt
      )
    values (#{id,jdbcType=BIGINT}, #{generalId,jdbcType=BIGINT}, #{auditStatus,jdbcType=TINYINT},
      #{auditOpinion,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
    <!--@mbg.generated-->
    insert into se_audits
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="generalId != null">
        general_id,
      </if>
      <if test="auditStatus != null">
        audit_status,
      </if>
      <if test="auditOpinion != null">
        audit_opinion,
      </if>
      <if test="operator != null">
        `operator`,
      </if>
      <if test="operateDt != null">
        operate_dt,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="generalId != null">
        #{generalId,jdbcType=BIGINT},
      </if>
      <if test="auditStatus != null">
        #{auditStatus,jdbcType=TINYINT},
      </if>
      <if test="auditOpinion != null">
        #{auditOpinion,jdbcType=VARCHAR},
      </if>
      <if test="operator != null">
        #{operator,jdbcType=BIGINT},
      </if>
      <if test="operateDt != null">
        #{operateDt,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
    <!--@mbg.generated-->
    update se_audits
    <set>
      <if test="generalId != null">
        general_id = #{generalId,jdbcType=BIGINT},
      </if>
      <if test="auditStatus != null">
        audit_status = #{auditStatus,jdbcType=TINYINT},
      </if>
      <if test="auditOpinion != null">
        audit_opinion = #{auditOpinion,jdbcType=VARCHAR},
      </if>
      <if test="operator != null">
        `operator` = #{operator,jdbcType=BIGINT},
      </if>
      <if test="operateDt != null">
        operate_dt = #{operateDt,jdbcType=TIMESTAMP},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeAudits">
    <!--@mbg.generated-->
    update se_audits
    set general_id = #{generalId,jdbcType=BIGINT},
      audit_status = #{auditStatus,jdbcType=TINYINT},
      audit_opinion = #{auditOpinion,jdbcType=VARCHAR},
      `operator` = #{operator,jdbcType=BIGINT},
      operate_dt = #{operateDt,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml
New file
@@ -0,0 +1,204 @@
<?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.dy.pipIrrGlobal.daoSe.SeGeneralMapper">
  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
    <!--@mbg.generated-->
    <!--@Table se_general-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="cashier_name" jdbcType="VARCHAR" property="cashierName" />
    <result column="trade_amount" jdbcType="FLOAT" property="tradeAmount" />
    <result column="gift" jdbcType="FLOAT" property="gift" />
    <result column="total_amount" jdbcType="FLOAT" property="totalAmount" />
    <result column="operate_date" jdbcType="TIMESTAMP" property="operateDate" />
    <result column="audit_status" jdbcType="TINYINT" property="auditStatus" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, cashier_name, trade_amount, gift, total_amount, operate_date, audit_status
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select
    <include refid="Base_Column_List" />
    from se_general
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    <!--@mbg.generated-->
    delete from se_general
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
    <!--@mbg.generated-->
    insert into se_general (id, cashier_name, trade_amount,
      gift, total_amount, operate_date,
      audit_status)
    values (#{id,jdbcType=BIGINT}, #{cashierName,jdbcType=VARCHAR}, #{tradeAmount,jdbcType=FLOAT},
      #{gift,jdbcType=FLOAT}, #{totalAmount,jdbcType=FLOAT}, #{operateDate,jdbcType=TIMESTAMP},
      #{auditStatus,jdbcType=TINYINT})
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
    <!--@mbg.generated-->
    insert into se_general
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="cashierName != null">
        cashier_name,
      </if>
      <if test="tradeAmount != null">
        trade_amount,
      </if>
      <if test="gift != null">
        gift,
      </if>
      <if test="totalAmount != null">
        total_amount,
      </if>
      <if test="operateDate != null">
        operate_date,
      </if>
      <if test="auditStatus != null">
        audit_status,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="cashierName != null">
        #{cashierName,jdbcType=VARCHAR},
      </if>
      <if test="tradeAmount != null">
        #{tradeAmount,jdbcType=FLOAT},
      </if>
      <if test="gift != null">
        #{gift,jdbcType=FLOAT},
      </if>
      <if test="totalAmount != null">
        #{totalAmount,jdbcType=FLOAT},
      </if>
      <if test="operateDate != null">
        #{operateDate,jdbcType=TIMESTAMP},
      </if>
      <if test="auditStatus != null">
        #{auditStatus,jdbcType=TINYINT},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
    <!--@mbg.generated-->
    update se_general
    <set>
      <if test="cashierName != null">
        cashier_name = #{cashierName,jdbcType=VARCHAR},
      </if>
      <if test="tradeAmount != null">
        trade_amount = #{tradeAmount,jdbcType=FLOAT},
      </if>
      <if test="gift != null">
        gift = #{gift,jdbcType=FLOAT},
      </if>
      <if test="totalAmount != null">
        total_amount = #{totalAmount,jdbcType=FLOAT},
      </if>
      <if test="operateDate != null">
        operate_date = #{operateDate,jdbcType=TIMESTAMP},
      </if>
      <if test="auditStatus != null">
        audit_status = #{auditStatus,jdbcType=TINYINT},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
    <!--@mbg.generated-->
    update se_general
    set cashier_name = #{cashierName,jdbcType=VARCHAR},
      trade_amount = #{tradeAmount,jdbcType=FLOAT},
      gift = #{gift,jdbcType=FLOAT},
      total_amount = #{totalAmount,jdbcType=FLOAT},
      operate_date = #{operateDate,jdbcType=TIMESTAMP},
      audit_status = #{auditStatus,jdbcType=TINYINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--获取未生成总账的交易日期列表(当天的交易记录不生成总账)-->
  <select id="getDatesOfNotInGenerals" resultType="java.util.HashMap">
    SELECT
      DISTINCT Date(ope.operate_dt) AS operateDate
    FROM se_card_operate ope
    WHERE Date(ope.operate_dt) NOT IN(SELECT operate_date FROM se_general) AND Date(ope.operate_dt) != CURDATE()
  </select>
  <!--根据交易日期获取总账记录列表(待生成的)  -->
  <select id="getGeneralByOperateDate" resultType="com.dy.pipIrrGlobal.pojoSe.SeGeneral">
    SELECT
      us.`name` AS cashierName,
      IFNULL(SUM(ope.trade_amount),0) AS tradeAmount,
      IFNULL(SUM(ope.gift),0) AS gift,
      IFNULL((SUM(ope.trade_amount) + SUM(ope.gift)),0) AS totalAmount,
      Date(ope.operate_dt) AS operateDate,
      1 AS auditStatus
    FROM se_card_operate ope
      INNER JOIN ba_user us ON ope.operator = us.id
    WHERE Date(ope.operate_dt) = #{operateDate}
    GROUP BY ope.operator, Date(ope.operate_dt)
  </select>
  <!--根据指定条件获取总账记录数-->
  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
    SELECT
        COUNT(*) AS recordCount
    FROM se_general
    <where>
      <if test = "cashierName != null and cashierName !=''">
        AND cashier_name like CONCAT('%',#{cashierName},'%')
      </if>
      <if test = "auditStatus != null and auditStatus > 0">
        AND audit_status = ${auditStatus}
      </if>
      <if test = "operateDateStart != null and operateDateStop != null">
        AND Date(operate_date) BETWEEN #{operateDateStart} AND #{operateDateStop}
      </if>
    </where>
  </select>
  <!--根据指定条件获取总账记录-->
  <select id="getGenerals" resultType="com.dy.pipIrrGlobal.voSe.VoGeneral">
    SELECT
      id AS generalId,
      cashier_name AS cashierName,
      trade_amount AS tradeAmount,
      gift,
      total_amount AS totalAmount,
      Date(operate_date) AS operateDate,
      (CASE
         WHEN audit_status = 1 THEN "未审核"
         WHEN audit_status = 2 THEN "同意"
         WHEN audit_status = 3 THEN "驳回"
        END) AS auditStatus
    FROM se_general
    <where>
      <if test = "cashierName != null and cashierName !=''">
        AND cashier_name like CONCAT('%',#{cashierName},'%')
      </if>
      <if test = "auditStatus != null and auditStatus > 0">
        AND audit_status = ${auditStatus}
      </if>
      <if test = "operateDateStart != null and operateDateStop != null">
        AND Date(operate_date) BETWEEN #{operateDateStart} AND #{operateDateStop}
      </if>
    </where>
    ORDER BY Date(operate_date) DESC
    <if test="pageCurr != null and pageSize != null">
      LIMIT ${pageCurr}, ${pageSize}
    </if>
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
New file
@@ -0,0 +1,167 @@
package com.dy.pipIrrSell.general;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.common.webUtil.ResultCodeMsg;
import com.dy.pipIrrGlobal.pojoBa.BaClient;
import com.dy.pipIrrGlobal.pojoSe.SeAudits;
import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
import com.dy.pipIrrGlobal.voSe.VoGeneral;
import com.dy.pipIrrSell.general.dto.DtoGeneral;
import com.dy.pipIrrSell.general.qo.QoGeneral;
import com.dy.pipIrrSell.result.SellResultCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 19:01
 * @LastEditTime 2024-01-24 19:01
 * @Description
 */
@Slf4j
@Tag(name = "总账管理", description = "总账管理")
@RestController
@RequestMapping(path="general")
@RequiredArgsConstructor
public class GeneralCtrl {
    private final GeneralSv generalSv;
    /**
     * 根据指定条件获取总账记录
     * 查询前先生成未生成的总账记录
     * @param vo
     * @return
     */
    @Operation(summary = "获取总账记录", description = "获取总账记录")
    @ApiResponses(value = {
            @ApiResponse(
                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
                    description = "返回一页农户数据(BaseResponse.content:QueryResultVo[{}])",
                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
                            schema = @Schema(implementation = BaClient.class))}
            )
    })
    @GetMapping(path = "get_generals")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoGeneral>>> getOperates(QoGeneral vo){
        try {
            add_general();
            QueryResultVo<List<VoGeneral>> res = generalSv.getGenerals(vo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("查询交易记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * 生成总账
     *      获取未生成总账的交易日期列表(当天的交易记录不生成总账)
     *      将指定日期的交易记录汇总到总账表
     * @return
     */
    public void add_general(){
        // 获取未生成总账的交易日期列表(当天的交易记录不生成总账)
        List<Map<String, Object>> list_operateDate = Optional.ofNullable(generalSv.getDatesOfNotInGenerals()).orElse(new ArrayList<>());
        if(list_operateDate.size() > 0) {
            for(int i = 0; i < list_operateDate.size(); i++) {
                String operateDate = list_operateDate.get(i).get("operateDate").toString();
                // 根据交易日期获取总账记录列表(待生成的)
                List<SeGeneral> list_general = Optional.ofNullable(generalSv.getGeneralByOperateDate(operateDate)).orElse(new ArrayList<>());
                if(list_general.size() > 0) {
                    for(int j = 0; j < list_general.size(); j++) {
                        SeGeneral general = list_general.get(j);
                        generalSv.addGeneral(general);
                    }
                }
            }
        }
    }
    /**
     * 审核总账
     *  1. 修改总账审核状态
     *  2. 添加总账审核记录
     * @param po
     * @param bindingResult
     * @return
     */
    @Operation(summary = "审核总账", description = "审核总账")
    @ApiResponses(value = {
            @ApiResponse(
                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
                    description = "操作结果:true:成功,false:失败(BaseResponse.content)",
                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
                            schema = @Schema(implementation = Boolean.class))}
            )
    })
    @PostMapping(path = "audit", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> audit(@RequestBody @Valid DtoGeneral po, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Long generalId = po.getGeneralId();
        Byte auditStatus = po.getAuditStatus();
        String auditOpinion = po.getAuditOpinion();
        Long operator = po.getOperator();
        Date auditTime = new Date();
        if(generalId == null) {
            return BaseResponseUtils.buildFail(SellResultCode.GENERAL_ID_CANNOT_BE_NULL.getMessage());
        }
        /**
         * 判断总账是否存在
         */
        if(generalSv.getGeneralById(generalId) == null) {
            return BaseResponseUtils.buildFail(SellResultCode.GENERAL_NOT_EXIST.getMessage());
        }
        /**
         * 修改总账审核状态
         */
        SeGeneral seGeneral = new SeGeneral();
        seGeneral.setId(generalId);
        seGeneral.setAuditStatus(auditStatus);
        Integer rec_updateGeneral = Optional.ofNullable(generalSv.updateGeneral(seGeneral)).orElse(0);
        if(rec_updateGeneral == 0) {
            return BaseResponseUtils.buildFail(SellResultCode.GENERAL_AUDIT_FAIL.getMessage());
        }
        /**
         * 添加总账审核记录
         */
        SeAudits seAudits = new SeAudits();
        seAudits.setGeneralId(generalId);
        seAudits.setAuditStatus(auditStatus);
        seAudits.setAuditOpinion(auditOpinion);
        seAudits.setOperator(operator);
        seAudits.setOperateDt(auditTime);
        Integer rec_addAucits = Optional.ofNullable(generalSv.addAudits(seAudits)).orElse(0);
        if(rec_addAucits == 0) {
            return BaseResponseUtils.buildFail(SellResultCode.AUDITS_ADD_FAIL.getMessage());
        }
        return BaseResponseUtils.buildSuccess() ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
New file
@@ -0,0 +1,115 @@
package com.dy.pipIrrSell.general;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoSe.SeAuditsMapper;
import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper;
import com.dy.pipIrrGlobal.pojoSe.SeAudits;
import com.dy.pipIrrGlobal.pojoSe.SeGeneral;
import com.dy.pipIrrGlobal.voSe.VoGeneral;
import com.dy.pipIrrSell.general.qo.QoGeneral;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 19:02
 * @LastEditTime 2024-01-24 19:02
 * @Description
 */
@Slf4j
@Service
public class GeneralSv {
    @Autowired
    private SeGeneralMapper seGeneralMapper;
    @Autowired
    private SeAuditsMapper seAuditsMapper;
    /**
     * 获取未生成总账的交易日期列表(当天的交易记录不生成总账)
     * @return
     */
    public List<Map<String, Object>> getDatesOfNotInGenerals() {
        return seGeneralMapper.getDatesOfNotInGenerals();
    }
    /**
     * 添加总账
     * @param po 总账对象
     * @return
     */
    public Integer addGeneral(SeGeneral po) {
        return seGeneralMapper.insert(po);
    }
    /**
     * 根据交易日期获取总账记录列表(待生成的)
     * @param operateDate 交易日期
     * @return 取总账记录列表
     */
    public List<SeGeneral> getGeneralByOperateDate(String operateDate) {
        return seGeneralMapper.getGeneralByOperateDate(operateDate);
    }
    /**
     * 根据指定条件获取总账记录
     * @param queryVo
     * @return
     */
    public QueryResultVo<List<VoGeneral>> getGenerals(QoGeneral queryVo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
        Long itemTotal = seGeneralMapper.getRecordCount(params);
        QueryResultVo<List<VoGeneral>> rsVo = new QueryResultVo<>() ;
        Integer pageCurr = 0;
        Integer pageSize = 10000;
        rsVo.pageCurr = 1;
        rsVo.pageSize = 10000;
        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
            rsVo.pageSize = queryVo.pageSize ;
            rsVo.pageCurr = queryVo.pageCurr;
            pageSize = queryVo.pageSize ;
            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
        }
        params.put("pageCurr", pageCurr);
        params.put("pageSize", pageSize);
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = seGeneralMapper.getGenerals(params);
        return rsVo ;
    }
    /**
     * 修改总账审核意见
     * @param po
     * @return
     */
    public Integer updateGeneral(SeGeneral po) {
        return seGeneralMapper.updateByPrimaryKeySelective(po);
    }
    /**
     * 根据编号查询总账
     * @param id
     * @return
     */
    public SeGeneral getGeneralById(Long id) {
        return seGeneralMapper.selectByPrimaryKey(id);
    }
    /**
     * t添加总账审核记录
     * @param po
     * @return
     */
    public Integer addAudits(SeAudits po) {
        return seAuditsMapper.insert(po);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/dto/DtoGeneral.java
New file
@@ -0,0 +1,54 @@
package com.dy.pipIrrSell.general.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.*;
import org.hibernate.validator.constraints.Length;
/**
 * @author ZhuBaoMin
 * @date 2024-01-25 10:19
 * @LastEditTime 2024-01-25 10:19
 * @Description
 */
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "总账审核传入对象")
public class DtoGeneral {
    public static final long serialVersionUID = 202401251020001L;
    /**
     * 总账ID
     */
    @Schema(description = "总账ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "总账ID不能为空")
    @Positive(message = "总账编号必须为大于0的整数")
    private Long generalId;
    /**
     * 审核状态
     */
    @Schema(description = "审核状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "审核状态不能为空")
    private Byte auditStatus;
    /**
     * 审核意见
     */
    @Schema(description = "审核意见", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @Length(max = 200, message = "审核意见最多200字")
    private String auditOpinion;
    /**
     * 操作人编号
     */
    @Schema(description = "操作人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @NotNull(message = "操作人编号不能为空")
    @Positive(message = "操作人编号必须为大于0的整数")
    private Long operator;
}
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoGeneral.java
New file
@@ -0,0 +1,34 @@
package com.dy.pipIrrSell.general.qo;
import com.dy.common.webUtil.QueryConditionVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
/**
 * @author ZhuBaoMin
 * @date 2024-01-24 20:25
 * @LastEditTime 2024-01-24 20:25
 * @Description
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(name = "总账查询条件")
public class QoGeneral extends QueryConditionVo {
    @Schema(description = "收银员姓名")
    public String cashierName;
    @Schema(description = "交易查询起始日期")
    public String operateDateStart;
    @Schema(description = "交易查询截止日期")
    public String operateDateStop;
    @Schema(description = "审核状态")
    private Byte auditStatus;
}
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
@@ -60,7 +60,15 @@
    /**
     * 补扣
     */
    REFUND_FAIL_WRITE_REFUND_ERROR(70001, "补扣失败-补扣记录写入异常");
    REFUND_FAIL_WRITE_REFUND_ERROR(70001, "补扣失败-补扣记录写入异常"),
    /**
     * 总账
     */
    GENERAL_ID_CANNOT_BE_NULL(80001, "总账编号不能为空"),
    GENERAL_NOT_EXIST(80001, "总账不存在"),
    GENERAL_AUDIT_FAIL(80001, "总账审核失败"),
    AUDITS_ADD_FAIL(80001, "总账审核记录添加失败");
    private final Integer code;
    private final String message;