新购验收

This commit is contained in:
mashuai 2024-08-20 13:06:32 +08:00
parent 7405c26534
commit d59a67e5f3
9 changed files with 380 additions and 75 deletions

View File

@ -1,8 +1,66 @@
package com.bonus.purchase.controller;
import com.bonus.common.core.utils.poi.ExcelUtil;
import com.bonus.common.core.web.controller.BaseController;
import com.bonus.common.core.web.page.TableDataInfo;
import com.bonus.common.security.annotation.RequiresPermissions;
import com.bonus.purchase.domain.PurchaseDto;
import com.bonus.purchase.service.PurchaseAcceptService;
import com.bonus.purchase.vo.PurchaseVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 新购到货验收控制层
* @Author ma_sh
* @create 2024/8/19 16:13
*/
public class PurchaseAcceptController {
@RestController
@RequestMapping("/purchase/arrival")
public class PurchaseAcceptController extends BaseController {
@Resource
private PurchaseAcceptService purchaseAcceptService;
/**
* 分页查询数据
*/
@GetMapping(value = "/list")
@RequiresPermissions("purchase:purchaseDto:query")
public TableDataInfo getList(PurchaseDto purchaseDto) {
startPage();
List<PurchaseVo> list = purchaseAcceptService.selectAll(purchaseDto);
return getDataTable(list);
}
/**
* 查看验收单详情
*
* @param purchaseDto
* @return
*/
@GetMapping("/details")
@RequiresPermissions("purchase:purchaseDto:query")
public TableDataInfo getDetails(PurchaseDto purchaseDto) {
startPage();
List<PurchaseVo> list = purchaseAcceptService.getDetails(purchaseDto);
return getDataTable(list);
}
/**
* 导出新购验证列表
*/
@ApiOperation(value = "导出新购验证列表")
@RequiresPermissions("purchase:purchaseDto:export")
@PostMapping("/export")
public void export(HttpServletResponse response, PurchaseDto purchaseDto)
{
List<PurchaseVo> list = purchaseAcceptService.selectAll(purchaseDto);
ExcelUtil<PurchaseVo> util = new ExcelUtil<>(PurchaseVo.class);
util.exportExcel(response, list, "新购验证列表");
}
}

View File

@ -0,0 +1,36 @@
package com.bonus.purchase.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author ma_sh
* @create 2024/8/19 17:50
*/
@Data
public class PurchaseDto {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "类型id")
private Integer typeId;
@ApiModelProperty(value="供应商id")
private Integer supplierId;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "关键字")
private String keyWord;
@ApiModelProperty(value = "状态")
private String status;
@ApiModelProperty(value = "出厂日期")
private String productDate;
}

View File

@ -1,8 +1,27 @@
package com.bonus.purchase.mapper;
import com.bonus.purchase.domain.PurchaseDto;
import com.bonus.purchase.vo.PurchaseVo;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/8/19 16:13
*/
public interface PurchaseAcceptMapper {
/**
* 查询
* @param purchaseDto
* @return
*/
List<PurchaseVo> selectAll(PurchaseDto purchaseDto);
/**
* 查询详情
* @param purchaseDto
* @return
*/
List<PurchaseVo> getDetails(PurchaseDto purchaseDto);
}

View File

@ -1,8 +1,27 @@
package com.bonus.purchase.service;
import com.bonus.purchase.domain.PurchaseDto;
import com.bonus.purchase.vo.PurchaseVo;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/8/19 16:13
*/
public interface PurchaseAcceptService {
/**
* 查询所有
* @param purchaseDto
* @return
*/
List<PurchaseVo> selectAll(PurchaseDto purchaseDto);
/**
* 查询详情
* @param purchaseDto
* @return
*/
List<PurchaseVo> getDetails(PurchaseDto purchaseDto);
}

View File

@ -1,12 +1,41 @@
package com.bonus.purchase.service.impl;
import com.bonus.purchase.domain.PurchaseDto;
import com.bonus.purchase.mapper.PurchaseAcceptMapper;
import com.bonus.purchase.service.PurchaseAcceptService;
import com.bonus.purchase.vo.PurchaseVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/8/19 16:48
*/
@Service
public class PurchaseAcceptServiceImpl implements PurchaseAcceptService {
@Resource
private PurchaseAcceptMapper mapper;
/**
* 查询采购单
* @param purchaseDto
* @return
*/
@Override
public List<PurchaseVo> selectAll(PurchaseDto purchaseDto) {
return mapper.selectAll(purchaseDto);
}
/**
* 查询采购单详情
* @param purchaseDto
* @return
*/
@Override
public List<PurchaseVo> getDetails(PurchaseDto purchaseDto) {
return mapper.getDetails(purchaseDto);
}
}

View File

@ -0,0 +1,79 @@
package com.bonus.purchase.vo;
import com.bonus.common.core.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 新购验收一级列表返回vo
* @Author ma_sh
* @create 2024/8/19 17:36
*/
@Data
public class PurchaseVo {
@ApiModelProperty(value="任务id")
private Integer id;
@ApiModelProperty("物资名称")
private String materialName;
@ApiModelProperty("规格型号")
private String specificationCode;
@ApiModelProperty(value="单位")
private String unitName;
@ApiModelProperty(value="供应商名称")
private String supplierName;
@ApiModelProperty(value="出厂日期")
private String productDate;
@ApiModelProperty(value="到货时间")
@Excel(name = "到货时间")
private String arrivalTime;
@ApiModelProperty(value="采购单号")
@Excel(name = "采购单号")
private String purchaseCode;
@ApiModelProperty(value="采购物资")
@Excel(name = "采购物资")
private String purchaseMaterial;
@ApiModelProperty(value="采购数量")
@Excel(name = "采购数量")
private Integer purchaseNum;
@ApiModelProperty(value="采购价格(元含税)")
@Excel(name = "采购价格(元含税)")
private Integer purchasePrice;
@ApiModelProperty(value="采购价格(元不含税)")
@Excel(name = "采购价格(元不含税)")
private Integer notaxPrice;
@ApiModelProperty(value="税率")
@Excel(name = "税率")
private Integer taxRate;
@ApiModelProperty(value="操作人")
@Excel(name = "操作人")
private String createBy;
@ApiModelProperty(value="操作时间")
@Excel(name = "操作时间")
private String createTime;
@ApiModelProperty(value="状态")
private Integer status;
@ApiModelProperty(value="状态名称")
@Excel(name = "状态")
private String statusName;
@ApiModelProperty(value="备注")
@Excel(name = "备注")
private String remark;
}

View File

@ -1,86 +1,74 @@
<?xml version='1.0' encoding='UTF-8'?>
<configuration>
<springProperty name="logFile" source="log.file"/>
<springProperty name="rootlevel" source="log.level.root"/>
<springProperty name="mylevel" source="log.level.my"/>
<springProperty name="maxFileSize" source="log.maxsize"/>
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/bonus-purchase" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %-5level %logger{50} -[%file:%line]- %msg%n
</pattern>
<charset>UTF-8</charset>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<appender name="adminLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logFile}</file>
<encoder>
<pattern>%d [%thread] %-5level -[%file:%line]- %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i</fileNamePattern>
<maxFileSize>30MB</maxFileSize>
<!-- 每产生一个日志文件该日志文件的保存期限为15天 -->
<maxHistory>15</maxHistory>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
</appender>
<appender name="errorLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logFile}.error</file>
<encoder>
<pattern>%d [%thread] %-5level %logger{36} -[%file:%line]- %msg%n
</pattern>
<charset>UTF-8</charset>
<pattern>${log.pattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logFile}.error.%d{yyyy-MM-dd}.%i</fileNamePattern>
<maxFileSize>30MB</maxFileSize>
<!-- 每产生一个日志文件该日志文件的保存期限为15天 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="sqlLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logFile}.sql</file>
<encoder>
<pattern>%d [%thread] %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logFile}.sql.%d{yyyy-MM-dd}.%i</fileNamePattern>
<maxFileSize>30MB</maxFileSize>
<!-- 每产生一个日志文件该日志文件的保存期限为15天 -->
<maxHistory>15</maxHistory>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="adminLogger" level="${mylevel}" additivity="true">
<appender-ref ref="adminLog"/>
</logger>
<!-- 系统模块日志级别控制 -->
<logger name="com.bonus" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<logger name="com.bonus.system" level="info" additivity="true">
<appender-ref ref="sqlLog"/>
</logger>
<logger name="org.springframework.scheduling.quartz" level="error" additivity="true">
<appender-ref ref="adminLog"/>
</logger>
<root level="${rootlevel}">
<appender-ref ref="STDOUT"/>
<appender-ref ref="errorLog"/>
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>

View File

@ -1,8 +0,0 @@
<?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.bonus.purchase.mapper.PurchaseAcceptMapper">
</mapper>

View File

@ -0,0 +1,85 @@
<?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.bonus.purchase.mapper.PurchaseAcceptMapper">
<select id="selectAll" resultType="com.bonus.purchase.vo.PurchaseVo">
SELECT
bt.id AS id,
bt.arrival_time AS arrivalTime,
bt.`code` AS purchaseCode,
GROUP_CONCAT( mt.`name` ) AS purchaseMaterial,
SUM( bp.purchase_num ) AS purchaseNum,
SUM( bp.purchase_price ) AS purchasePrice,
SUM( bp.notax_price ) AS notaxPrice,
bp.tax_rate AS taxRate,
bt.creator AS createBy,
bt.create_time AS createTime,
bt.`status` AS STATUS,
sda.dict_label AS statusName,
bt.remark AS remark
FROM
bpm_purchase_info bp
LEFT JOIN bpm_task bt ON bp.task_id = bt.id
LEFT JOIN ma_type mt ON bp.type_id = mt.id
LEFT JOIN sys_dict_data sda ON sda.dict_code = bt.`status`
WHERE
bp.is_acvtive = '1'
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND bt.arrival_time BETWEEN #{startTime} AND #{endTime}
</if>
<if test="keyWord != null and keyWord != ''">
AND (
bt.`code` LIKE CONCAT('%',#{keyWord},'%')
OR mt1.`name` LIKE CONCAT('%',#{keyWord},'%')
OR bp.tax_rate = #{keyWord}
OR bt.creator LIKE CONCAT('%',#{keyWord},'%')
OR bt.remark LIKE CONCAT('%',#{keyWord},'%')
)
</if>
<if test="status != null and status != ''">
AND bt.`status` = #{status}
</if>
GROUP BY
bp.task_id
ORDER BY
bt.arrival_time DESC
</select>
<select id="getDetails" resultType="com.bonus.purchase.vo.PurchaseVo">
SELECT
bp.id AS id,
mt1.`name` AS materialName,
mt.`name` AS specificationCode,
sda.dict_label AS unitName,
bp.purchase_price AS purchasePrice,
bp.notax_price AS notaxPrice,
bp.purchase_num AS purchaseNum,
bs.`name` AS supplierName,
bp.product_date AS productDate,
bp.`status` AS STATUS,
sda1.dict_label AS statusName
FROM
bpm_purchase_info bp
LEFT JOIN bpm_task bt ON bp.task_id = bt.id
LEFT JOIN ma_type mt ON bp.type_id = mt.id
LEFT JOIN ma_type mt1 ON mt.parent_id = mt1.id
LEFT JOIN sys_dict_data sda ON mt.unit_id = sda.dict_code
LEFT JOIN bm_supplier bs ON bp.supplier_id = bs.id
LEFT JOIN sys_dict_data sda1 ON sda1.dict_code = bp.`status`
WHERE
bp.is_acvtive = '1'
<if test="typeId != null and typeId != ''">
AND (
mt1.id = #{typeId}
OR mt.id = #{typeId}
)
</if>
<if test="supplierId != null and supplierId != ''">
AND bs.id = #{supplierId}
</if>
<if test="productDate != null and productDate != ''">
AND bp.product_date = #{productDate}
</if>
</select>
</mapper>