工厂管理:

规格管理、打包线管理、打包线数据管理、出入库数据管理
This commit is contained in:
furongxin 2024-05-23 11:28:26 +08:00
parent 2dc14bbaab
commit 4a5dae14a8
14 changed files with 139 additions and 15 deletions

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
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.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataSizeService;
@ -76,6 +77,14 @@ public class FactoryDataController {
return success(dataService.getData(factoryId, date));
}
@GetMapping("/get-total")
@Operation(summary = "获得出入库数据总数 | 入库总数、出库总数、破损总数")
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:query')")
public CommonResult<FactoryDataTotalVO> getDataTotal() {
return success(dataService.getDataTotal());
}
@GetMapping("/page")
@Operation(summary = "获得工厂出库入库数据分页")
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:query')")
@ -96,5 +105,4 @@ public class FactoryDataController {
ExcelUtils.write(response, "工厂出库入库数据.xls", "数据", FactoryDataDetailRespVO.class,
list);
}
}

View File

@ -17,6 +17,9 @@ public class FactoryDataDetailRespVO {
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
private Long factoryId;
@Schema(description = "工厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "新景象")
private String factoryName;
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
private LocalDate date;

View File

@ -10,9 +10,15 @@ import java.time.LocalDate;
@Data
public class FactoryDataInfoRespVO {
@Schema(description = "打包线数据id")
private Long id;
@Schema(description = "工厂id")
private Long factoryId;
@Schema(description = "打包线名称")
private String packageName;
@Schema(description = "日期")
private LocalDate date;
@ -22,6 +28,15 @@ public class FactoryDataInfoRespVO {
@Schema(description = "规格名称")
private String sizeName;
@Schema(description = "规格片数")
private Integer sizePieces;
@Schema(description = "手动打包数")
private Integer num;
@Schema(description = "自动打包数")
private Integer autoNum;
@Schema(description = "入库数量")
private Integer inNum;
@ -29,7 +44,7 @@ public class FactoryDataInfoRespVO {
private BigDecimal squareNum;
@Schema(description = "打包破损数")
private Integer packageDamageNum;
private Integer damageNum;
@Schema(description = "入库破损数id")
private Long inDamageNumId;

View File

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 工厂出库入库数据 总览 Request VO")
@Data
public class FactoryDataTotalVO {
@Schema(description = "入库总数")
private Integer inTotal;
@Schema(description = "出库总数")
private Integer outTotal;
@Schema(description = "破损总数")
private Integer damageNum;
}

View File

@ -4,6 +4,7 @@ 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.FactoryDataPageReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
@ -36,4 +37,6 @@ public interface FactoryDataMapper extends BaseMapperX<FactoryDataDO> {
.eq(FactoryDataDO::getFactoryId, factoryId)
.eq(FactoryDataDO::getDate, date));
}
FactoryDataTotalVO selectDataSum();
}

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.smartfactory.service.factorydata;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
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.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
@ -58,6 +59,12 @@ public interface FactoryDataService {
*/
PageResult<FactoryDataDetailRespVO> getDataPage(FactoryDataPageReqVO pageReqVO);
/**
* 获得工厂总数 总览
* @return
*/
FactoryDataTotalVO getDataTotal();
/**
* 获取当天的所有数据
*

View File

@ -7,13 +7,16 @@ import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
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.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeSaveReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
import cn.iocoder.yudao.module.smartfactory.convert.packageData.PackageDataConvert;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataMapper;
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@ -26,8 +29,11 @@ import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
/**
* 工厂出库入库数据 Service 实现类
@ -45,6 +51,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
@Lazy // 循环依赖避免报错
private FactoryDataSizeService dataSizeService;
@Resource
private FactoryInfoService factoryInfoService;
@Override
public Long createData(List<FactoryDataDO> factoryDataDOS) {
@ -62,7 +71,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
//校验 出入库统计数据是否存在
List<FactoryDataDO> factoryDataDOS = dataMapper.selectListByFactoryAndDate(updateReqVO.getFactoryId(), updateReqVO.getDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
if (factoryDataDOS != null) {
if (factoryDataDOS != null && !factoryDataDOS.isEmpty()) {
PackageDataCreateReqVO createReqVO = new PackageDataCreateReqVO();
createReqVO.setPackageData(updateReqVO.getPackageData());
@ -150,6 +159,11 @@ public class FactoryDataServiceImpl implements FactoryDataService {
List<FactoryDataDetailRespVO> respVOS = dataPage.getList();
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);
//获得 入库数打包破损入库破损出库数出库破损的工厂规格数据
List<FactoryDataInfoRespVO> infoDatas = dataSizeService.getDetailList(pageReqVO.getFactoryId(), pageReqVO.getDate());
@ -161,6 +175,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
.collect(Collectors.toList());
items.setItems(infoList);
items.setFactoryName(factoryMap.get(items.getFactoryId()).getName());
//移除 已处理过的数据
infoDatas.removeAll(infoList);
@ -182,15 +197,16 @@ public class FactoryDataServiceImpl implements FactoryDataService {
dataDetailRespVO.setId(respVOS.get(0).getId() + 1);
dataDetailRespVO.setFactoryId(factoryId);
dataDetailRespVO.setFactoryName(factoryMap.get(factoryId).getName());
dataDetailRespVO.setDate(date);
//设置入库总数
dataDetailRespVO.setInTotalNum(infoList.stream().mapToInt(FactoryDataInfoRespVO::getInNum).sum());
dataDetailRespVO.setInTotalNum(infoList.stream().filter(info -> info.getInNum() != null).mapToInt(FactoryDataInfoRespVO::getInNum).sum());
//设置入库平方数
dataDetailRespVO.setSquareNum(infoList.stream().map(FactoryDataInfoRespVO::getSquareNum).reduce(BigDecimal.ZERO, BigDecimal::add));
dataDetailRespVO.setSquareNum(infoList.stream().map(FactoryDataInfoRespVO::getSquareNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
//设置出库总数
dataDetailRespVO.setOutTotalNum(infoDatas.stream().mapToInt(FactoryDataInfoRespVO::getOutNum).sum());
dataDetailRespVO.setOutTotalNum(infoDatas.stream().filter(info -> info.getOutNum() != null).mapToInt(FactoryDataInfoRespVO::getOutNum).sum());
//设置 出入库破损总数
dataDetailRespVO.setDamageNum(infoDatas.stream().mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).sum());
dataDetailRespVO.setDamageNum(infoDatas.stream().filter(info -> info.getInDamageNum() != null).mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).sum());
dataDetailRespVO.setItems(infoList);
//设置 可编辑状态
dataDetailRespVO.setIsEdit(1);
@ -198,12 +214,19 @@ public class FactoryDataServiceImpl implements FactoryDataService {
respVOS.add(0, dataDetailRespVO);
});
});
dataPage.setTotal((long) respVOS.size());
}
}
return dataPage;
}
@Override
public FactoryDataTotalVO getDataTotal() {
return dataMapper.selectDataSum();
}
@Override
public List<FactoryDataDO> getTodayInboundAndOutboundOverview(Date time) {
String timeStr = null;

View File

@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSiz
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
@ -46,6 +47,7 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
private FactoryDataService factoryDataService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createData(FactoryDataSizeCreateReqVO createReqVO) {
//校验 当前日期得数据是否已经录入
@ -114,6 +116,7 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
if (!createReqVO.getPackageData().isEmpty()) {
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
packCreateReqVO.setFactoryId(createReqVO.getPackageData().get(0).getFactoryId());
packCreateReqVO.setPackageData(createReqVO.getPackageData());
packCreateReqVO.setPackageDate(createReqVO.getDate());
@ -125,6 +128,7 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
// 更新
@ -171,6 +175,8 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
if (!updateReqVO.getPackageData().isEmpty()) {
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
packCreateReqVO.setFactoryId(updateReqVO.getFactoryId());
packCreateReqVO.setPackageDate(updateReqVO.getDate());
packCreateReqVO.setPackageData(updateReqVO.getPackageData());
//插入打包线数据

View File

@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
/**
@ -47,6 +48,14 @@ public interface FactoryInfoService {
*/
FactoryInfoDO getFactoryInfo(Long id);
/**
* 获得工厂信息列表
*
* @param ids 编号
* @return 工厂信息
*/
List<FactoryInfoDO> getFactoryList(Collection<Long> ids);
/**
* 获得类型为工厂的工厂信息列表
* @return 工厂列表

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.smartfactory.service.factoryinfo;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.ip.core.Area;
import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
@ -116,6 +115,12 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
return factoryInfoMapper.selectById(id);
}
@Override
public List<FactoryInfoDO> getFactoryList(Collection<Long> ids) {
return factoryInfoMapper.selectList(FactoryInfoDO::getId, ids);
}
@Override
public List<FactoryInfoDO> getFactoryListByType() {

View File

@ -21,6 +21,7 @@
FROM
sf_factory_data
<where>
deleted = 0
<if test="reqVO.factoryId != null">
AND factory_id = #{reqVO.factoryId}
</if>
@ -46,4 +47,15 @@
</where>
ORDER BY id DESC
</select>
<select id="selectDataSum" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO">
SELECT
SUM(CASE WHEN data_type = 2 THEN total_num END) AS inTotal,
SUM(CASE WHEN data_type = 1 THEN total_num END) AS outTotal,
SUM(CASE WHEN data_type = 1 OR data_type = 2 THEN damage_num END) AS damageNum
FROM
sf_factory_data
WHERE
deleted = 0
</select>
</mapper>

View File

@ -11,13 +11,18 @@
<select id="selectDetailList" 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,
MAX(a.num) AS num,
MAX(a.auto_num) AS autoNum,
MAX(a.num + a.auto_num) AS inNum,
MAX(a.square_num) AS squareNum,
MAX(a.damage_num) AS packageDamageNum,
MAX(a.damage_num) AS damageNum,
MAX(CASE WHEN b.type = 1 THEN b.id END) AS inDamageNumId,
MAX(CASE WHEN b.type = 1 THEN b.num END) AS inDamageNum,
MAX(CASE WHEN b.type = 2 THEN b.id END) AS outNumId,
@ -30,8 +35,9 @@
sf_factory_data_size AS b
ON a.factory_id = b.factory_id and a.package_date = b.date and a.size_id = b.size_id
<where>
a.deleted = 0
<if test="factoryId != null">
AND a.factoryId = #{factoryId}
AND a.factory_id = #{factoryId}
</if>
<if test="date != null and date.length > 0">
<if test="date[0] != null">
@ -42,18 +48,23 @@
</if>
</if>
</where>
GROUP BY a.factory_id,a.package_date,a.size_id,a.size_name
GROUP BY a.id,a.factory_id,a.package_name,a.package_date,a.size_id,a.size_name,a.size_pieces
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 inNum,
NULL AS squareNum,
NULL AS packageDamageNum,
NULL AS damageNum,
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,
@ -64,15 +75,16 @@
sf_factory_data_size AS c
WHERE
NOT EXISTS (SELECT 1 FROM sf_package_data WHERE size_id = c.size_id and package_date = c.date)
AND c.deleted = 0
<if test="factoryId != null">
AND a.factoryId = #{factoryId}
AND c.factory_id = #{factoryId}
</if>
<if test="date != null and date.length > 0">
<if test="date[0] != null">
AND a.package_date &gt;= #{date[0]}
AND c.date &gt;= #{date[0]}
</if>
<if test="date[1] != null">
AND a.package_date &lt;= #{date[1]}
AND c.date &lt;= #{date[1]}
</if>
</if>
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
@ -89,6 +101,7 @@
sf_factory_data_size
WHERE
create_time BETWEEN #{dateTime[0]} AND #{dateTime[1]}
AND deleted = 0
GROUP BY
factory_id,
date

View File

@ -21,6 +21,7 @@
WHERE
a.factory_id = b.id
AND a.size_id = c.id
AND a.deleted = 0
<if test="reqVO.factoryId != null">
AND a.factory_id = #{reqVO.factoryId}
</if>

View File

@ -17,6 +17,7 @@
sf_factory_info AS b
WHERE
a.factory_id = b.id
AND a.deleted = 0
<if test="reqVO.factoryId != null">
AND a.factory_id = #{reqVO.factoryId}
</if>