出入库导入功能修改, 查询修改

This commit is contained in:
furongxin 2024-06-08 08:35:57 +08:00
parent a1a3d94f71
commit 07a78e6ef9
16 changed files with 171 additions and 114 deletions

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.device.controller.admin.cameradevice;
package cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
@ -25,13 +24,13 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo.*;
import cn.iocoder.yudao.module.device.dal.dataobject.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.module.device.service.cameradevice.CameraDeviceService;
import cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo.*;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.module.smartfactory.service.device.cameradevice.CameraDeviceService;
@Tag(name = "管理后台 - 设备-监控摄像头")
@RestController
@RequestMapping("/device/camera-device")
@RequestMapping("/smartfactory/camera-device")
@Validated
public class CameraDeviceController {
@ -40,14 +39,14 @@ public class CameraDeviceController {
@PostMapping("/create")
@Operation(summary = "创建设备-监控摄像头")
@PreAuthorize("@ss.hasPermission('device:camera-device:create')")
@PreAuthorize("@ss.hasPermission('smartfactory:camera-device:create')")
public CommonResult<Long> createCameraDevice(@Valid @RequestBody CameraDeviceSaveReqVO createReqVO) {
return success(cameraDeviceService.createCameraDevice(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新设备-监控摄像头")
@PreAuthorize("@ss.hasPermission('device:camera-device:update')")
@PreAuthorize("@ss.hasPermission('smartfactory:camera-device:update')")
public CommonResult<Boolean> updateCameraDevice(@Valid @RequestBody CameraDeviceSaveReqVO updateReqVO) {
cameraDeviceService.updateCameraDevice(updateReqVO);
return success(true);
@ -56,7 +55,7 @@ public class CameraDeviceController {
@DeleteMapping("/delete")
@Operation(summary = "删除设备-监控摄像头")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('device:camera-device:delete')")
@PreAuthorize("@ss.hasPermission('smartfactory:camera-device:delete')")
public CommonResult<Boolean> deleteCameraDevice(@RequestParam("id") Long id) {
cameraDeviceService.deleteCameraDevice(id);
return success(true);
@ -65,7 +64,7 @@ public class CameraDeviceController {
@GetMapping("/get")
@Operation(summary = "获得设备-监控摄像头")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('device:camera-device:query')")
@PreAuthorize("@ss.hasPermission('smartfactory:camera-device:query')")
public CommonResult<CameraDeviceRespVO> getCameraDevice(@RequestParam("id") Long id) {
CameraDeviceDO cameraDevice = cameraDeviceService.getCameraDevice(id);
return success(BeanUtils.toBean(cameraDevice, CameraDeviceRespVO.class));
@ -73,7 +72,7 @@ public class CameraDeviceController {
@GetMapping("/page")
@Operation(summary = "获得设备-监控摄像头分页")
@PreAuthorize("@ss.hasPermission('device:camera-device:query')")
@PreAuthorize("@ss.hasPermission('smartfactory:camera-device:query')")
public CommonResult<PageResult<CameraDeviceRespVO>> getCameraDevicePage(@Valid CameraDevicePageReqVO pageReqVO) {
PageResult<CameraDeviceDO> pageResult = cameraDeviceService.getCameraDevicePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, CameraDeviceRespVO.class));
@ -81,7 +80,7 @@ public class CameraDeviceController {
@GetMapping("/export-excel")
@Operation(summary = "导出设备-监控摄像头 Excel")
@PreAuthorize("@ss.hasPermission('device:camera-device:export')")
@PreAuthorize("@ss.hasPermission('smartfactory:camera-device:export')")
@OperateLog(type = EXPORT)
public void exportCameraDeviceExcel(@Valid CameraDevicePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo;
package cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;

View File

@ -1,10 +1,8 @@
package cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo;
package cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;

View File

@ -1,10 +1,9 @@
package cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo;
package cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
@Schema(description = "管理后台 - 设备-监控摄像头新增/修改 Request VO")
@Data

View File

@ -1,10 +1,10 @@
package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 工厂信息新增/修改 Request VO")
@ -22,7 +22,7 @@ public class FactoryInfoSaveReqVO {
@NotEmpty(message = "工厂简称不能为空")
private String shortName;
@Schema(description = "工厂类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@Schema(description = "工厂类型 | 字典值 参考 sf_factory_type", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotEmpty(message = "工厂类型不能为空")
private String type;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.device.dal.dataobject.cameradevice;
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;

View File

@ -47,6 +47,7 @@ public class FactoryInfoDO extends BaseDO {
private String shortName;
/**
* 工厂类型
* 字典值 参考 sf_factory_type
*/
private String type;
/**

View File

@ -1,13 +1,11 @@
package cn.iocoder.yudao.module.device.dal.mysql.cameradevice;
import java.util.*;
package cn.iocoder.yudao.module.smartfactory.dal.mysql.device.cameradevice;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.device.dal.dataobject.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice.CameraDeviceDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo.*;
import cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo.*;
/**
* 设备-监控摄像头 Mapper

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
@ -21,7 +21,7 @@ import java.util.List;
@Mapper
public interface FactoryDataMapper extends BaseMapperX<FactoryDataDO> {
IPage<FactoryDataDetailRespVO> selectDetailPage(@Param("page") IPage<FactoryDataDetailRespVO> mpPage, @Param("reqVO") FactoryDataPageReqVO pageReqVO);
IPage<FactoryDataInfoRespVO> selectDetailPage(@Param("page") IPage<FactoryDataInfoRespVO> mpPage, @Param("reqVO") FactoryDataPageReqVO pageReqVO);
default FactoryDataDO selectListByType(Long factoryId, LocalDate date, Integer type) {

View File

@ -1,11 +1,9 @@
package cn.iocoder.yudao.module.device.service.cameradevice;
package cn.iocoder.yudao.module.smartfactory.service.device.cameradevice;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo.*;
import cn.iocoder.yudao.module.device.dal.dataobject.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo.*;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 设备-监控摄像头 Service 接口

View File

@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.device.service.cameradevice;
package cn.iocoder.yudao.module.smartfactory.service.device.cameradevice;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo.CameraDevicePageReqVO;
import cn.iocoder.yudao.module.device.controller.admin.cameradevice.vo.CameraDeviceSaveReqVO;
import cn.iocoder.yudao.module.device.dal.dataobject.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.module.device.dal.mysql.cameradevice.CameraDeviceMapper;
import cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo.CameraDevicePageReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.device.cameradevice.vo.CameraDeviceSaveReqVO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice.CameraDeviceDO;
import cn.iocoder.yudao.module.smartfactory.dal.mysql.device.cameradevice.CameraDeviceMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

View File

@ -175,53 +175,19 @@ public class FactoryDataServiceImpl implements FactoryDataService {
public PageResult<FactoryDataDetailRespVO> getDataPage(FactoryDataPageReqVO pageReqVO) {
//获得 出入库数据分页列表
IPage<FactoryDataDetailRespVO> mpPage = MyBatisUtils.buildPage(pageReqVO);
IPage<FactoryDataDetailRespVO> page = dataMapper.selectDetailPage(mpPage, pageReqVO);
PageResult<FactoryDataDetailRespVO> dataPage = new PageResult<>(page.getRecords(), page.getTotal());
IPage<FactoryDataInfoRespVO> mpPage = MyBatisUtils.buildPage(pageReqVO);
IPage<FactoryDataInfoRespVO> page = dataMapper.selectDetailPage(mpPage, pageReqVO);
//获得 入库数打包破损入库破损出库数出库破损的工厂规格数据
List<FactoryDataInfoRespVO> infoDatas = dataSizeService.getDetailList(pageReqVO.getFactoryId(), pageReqVO.getDate(), pageReqVO.getCreateTime());
List<FactoryDataDetailRespVO> respVOS = dataPage.getList();
List<FactoryDataInfoRespVO> respVOS = page.getRecords();
List<FactoryDataDetailRespVO> toDayData = new ArrayList<>();
if (!respVOS.isEmpty()) {
//获得工厂信息列表
List<Long> factoryIdS = respVOS.stream().map(FactoryDataDetailRespVO::getFactoryId).collect(Collectors.toList());
List<FactoryInfoDO> factoryInfoDOS = factoryInfoService.getFactoryList(factoryIdS);
Map<Long, FactoryInfoDO> factoryMap = convertMap(factoryInfoDOS, FactoryInfoDO::getId);
respVOS.forEach(items -> {
//规格明细数据
List<FactoryDataInfoRespVO> infoList = infoDatas.stream()
.filter(data -> data.getFactoryId().equals(items.getFactoryId()) && data.getDate().equals(items.getDate()))
.collect(Collectors.toList());
infoList.forEach(info -> {
int num = Optional.ofNullable(info.getNum()).orElse(0);
int autoNum = Optional.ofNullable(info.getAutoNum()).orElse(0);
int inNum = Optional.ofNullable(info.getInNum()).orElse(0);
info.setInNum((num + autoNum + inNum) == 0 ? null : (num + autoNum + inNum));
});
items.setItems(infoList);
items.setFactoryName(factoryMap.get(items.getFactoryId()).getName());
//移除 已处理过的数据
infoDatas.removeAll(infoList);
});
}else {
respVOS = new ArrayList<>();
}
List<FactoryDataDetailRespVO> toDayData = new ArrayList<>();
// 展示当天录入的数据
if (!infoDatas.isEmpty()) {
// 工厂id和日期 进行分组
Map<Long, Map<LocalDate, List<FactoryDataInfoRespVO>>> groupedByFactoryIdAndDate = infoDatas.stream()
Map<Long, Map<LocalDate, List<FactoryDataInfoRespVO>>> groupedByFactoryIdAndDate = respVOS.stream()
.collect(Collectors.groupingBy(FactoryDataInfoRespVO::getFactoryId,
Collectors.groupingBy(FactoryDataInfoRespVO::getDate)));
//获得工厂信息列表
Map<Long, FactoryInfoDO> factoryMaps = convertMap(factoryInfoService.getFactoryList(groupedByFactoryIdAndDate.keySet())
, FactoryInfoDO::getId);
groupedByFactoryIdAndDate.forEach((factoryId, dateMap) -> {
@ -277,11 +243,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
toDayData.add(dataDetailRespVO);
});
});
respVOS.addAll(0, toDayData);
dataPage.setTotal((long) respVOS.size());
}
return new PageResult<>(respVOS, dataPage.getTotal());
return new PageResult<>(toDayData, page.getTotal());
}
@Override
@ -323,6 +287,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
}
FactoryImportRespVO respVO = FactoryImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
list.forEach(data -> {
//校验判断是否有不符合的原因
@ -331,7 +296,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
factoryId = validateFactoryForCreate(data.getFactoryName(), data.getSizeName(), data.getDate());
} catch (ServiceException ex) {
respVO.getFailureUsernames().put(data.getFactoryName(), ex.getMessage());
respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), ex.getMessage());
return;
}
@ -373,13 +338,13 @@ public class FactoryDataServiceImpl implements FactoryDataService {
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
if (data.getInDamageNum() != null || data.getInNum() != null || data.getOutNum() != null) {
if (data.getInDamageNum() != null) {
if (data.getInDamageNum() != null && data.getInDamageNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
dataSizeDO.setSizeId(sizeId);
dataSizeDO.setSizeName(sizeName);
dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
// dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
//设置工厂和日期
dataSizeDO.setFactoryId(factoryId);
dataSizeDO.setDate(data.getDate());
@ -390,13 +355,13 @@ public class FactoryDataServiceImpl implements FactoryDataService {
factoryDataSizeDOs.add(dataSizeDO);
}
if (data.getInNum() != null) {
if (data.getInNum() != null && data.getInNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
dataSizeDO.setSizeId(sizeId);
dataSizeDO.setSizeName(sizeName);
dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
// dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
//设置工厂和日期
dataSizeDO.setFactoryId(factoryId);
dataSizeDO.setDate(data.getDate());
@ -407,7 +372,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
factoryDataSizeDOs.add(dataSizeDO);
}
if (data.getOutNum() != null) {
if (data.getOutNum() != null && data.getOutNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
@ -423,7 +388,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
factoryDataSizeDOs.add(dataSizeDO);
}
if (data.getOutDamageNum() != null) {
if (data.getOutDamageNum() != null && data.getOutDamageNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
@ -442,7 +407,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
}
respVO.getCreateUsernames().add(data.getFactoryName());
respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate());
});
return respVO;

View File

@ -48,6 +48,13 @@ public interface FactoryInfoService {
*/
FactoryInfoDO getFactoryInfo(Long id);
/**
* 获得工厂信息列表
*
* @return 工厂信息
*/
List<FactoryInfoDO> getFactoryList();
/**
* 获得工厂信息列表
*

View File

@ -122,6 +122,12 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
return factoryInfoMapper.selectById(id);
}
@Override
public List<FactoryInfoDO> getFactoryList() {
return factoryInfoMapper.selectList();
}
@Override
public List<FactoryInfoDO> getFactoryList(Collection<Long> ids) {

View File

@ -1,6 +1,6 @@
<?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="cn.iocoder.yudao.module.device.dal.mysql.cameradevice.CameraDeviceMapper">
<mapper namespace="cn.iocoder.yudao.module.smartfactory.dal.mysql.device.cameradevice.CameraDeviceMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。

View File

@ -9,42 +9,129 @@
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectDetailPage" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO">
<select id="selectDetailPage" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
SELECT
a.id AS id,
a.factory_id AS factoryId,
a.package_name AS packageName,
a.package_date AS date,
a.size_id AS sizeId,
a.size_name AS sizeName,
a.size_pieces AS sizePieces,
a.num AS num,
a.auto_num AS autoNum,
a.square_num AS squareNum,
a.damage_num AS damageNum,
b.inNumId,
b.inNum,
b.inDamageNumId,
b.inDamageNum,
b.outNumId,
b.outNum,
b.outDamageNumId,
b.outDamageNum
FROM
sf_package_data a
LEFT JOIN (
SELECT
factory_id,
date,
SUM(CASE WHEN data_type = 2 THEN total_num END) AS inTotalNum,
SUM(CASE WHEN data_type = 1 THEN square_num END) AS squareNum,
SUM(CASE WHEN data_type = 1 THEN total_num END) AS outTotalNum,
SUM(CASE WHEN data_type = 1 or data_type = 2 THEN damage_num END) AS damageNum
size_pieces,
MAX( CASE WHEN type = 4 THEN id END ) AS inNumId,
MAX( CASE WHEN type = 4 THEN num END ) AS inNum,
MAX( CASE WHEN type = 1 THEN id END ) AS inDamageNumId,
MAX( CASE WHEN type = 1 THEN num END ) AS inDamageNum,
MAX( CASE WHEN type = 2 THEN id END ) AS outNumId,
MAX( CASE WHEN type = 2 THEN num END ) AS outNum,
MAX( CASE WHEN type = 3 THEN id END ) AS outDamageNumId,
MAX( CASE WHEN type = 3 THEN num END ) AS outDamageNum
FROM
sf_factory_data
sf_factory_data_size
GROUP BY
factory_id,
date,
size_pieces
) b
ON a.factory_id = b.factory_id
AND a.package_date = b.date
and a.size_pieces = b.size_pieces
<where>
deleted = 0
a.deleted = 0
<if test="reqVO.factoryId != null">
AND factory_id = #{reqVO.factoryId}
</if>
<if test="reqVO.dataType != null">
AND data_type = #{reqVO.dataType}
AND a.factory_id = #{reqVO.factoryId}
</if>
<if test="reqVO.date != null and reqVO.date.length > 0">
<if test="reqVO.date[0] != null">
AND date &gt;= #{reqVO.date[0]}
AND a.package_date &gt;= #{reqVO.date[0]}
</if>
<if test="reqVO.date[1] != null">
AND date &lt;= #{reqVO.date[1]}
AND a.package_date &lt;= #{reqVO.date[1]}
</if>
</if>
<if test="reqVO.createTime != null and reqVO.createTime.length > 0">
<if test="reqVO.createTime[0] != null">
AND create_time &gt;= #{reqVO.createTime[0]}
AND a.create_time &gt;= #{reqVO.createTime[0]}
</if>
<if test="reqVO.createTime[1] != null">
AND create_time &lt;= #{reqVO.createTime[1]}
AND a.create_time &lt;= #{reqVO.createTime[1]}
</if>
</if>
</where>
GROUP BY factory_id,date
UNION
SELECT
NULL AS id,
c.factory_id AS factoryId,
NULL AS packageName,
c.date AS date,
c.size_id AS sizeId,
c.size_name AS sizeName,
NULL AS sizePieces,
NULL AS num,
NULL AS autoNum,
NULL AS squareNum,
NULL AS damageNum,
MAX(CASE WHEN c.type = 4 THEN c.id END) AS inNumId,
MAX(CASE WHEN c.type = 4 THEN c.num END) AS inNum,
MAX(CASE WHEN c.type = 1 THEN c.id END) AS inDamageNumId,
MAX(CASE WHEN c.type = 1 THEN c.num END) AS inDamageNum,
MAX(CASE WHEN c.type = 2 THEN c.id END) AS outNumId,
MAX(CASE WHEN c.type = 2 THEN c.num END) AS outNum,
MAX(CASE WHEN c.type = 3 THEN c.id END) AS outDamageNumId,
MAX(CASE WHEN c.type = 3 THEN c.num END) AS outDamageNum
FROM
sf_factory_data_size AS c
WHERE
NOT EXISTS (
SELECT 1
FROM sf_package_data
WHERE
size_id = c.size_id
AND size_pieces = c.size_pieces
AND package_date = c.date
)
AND c.deleted = 0
<if test="reqVO.factoryId != null">
AND c.factory_id = #{reqVO.factoryId}
</if>
<if test="reqVO.date != null and reqVO.date.length > 0">
<if test="reqVO.date[0] != null">
AND c.date &gt;= #{reqVO.date[0]}
</if>
<if test="reqVO.date[1] != null">
AND c.date &lt;= #{reqVO.date[1]}
</if>
</if>
<if test="reqVO.createTime != null and reqVO.createTime.length > 0">
<if test="reqVO.createTime[0] != null">
AND c.create_time &gt;= #{reqVO.createTime[0]}
</if>
<if test="reqVO.createTime[1] != null">
AND c.create_time &lt;= #{reqVO.createTime[1]}
</if>
</if>
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
ORDER BY date DESC
</select>