模块:实现日志阅读状态检查与分页查询优化
- 在工作日志模块中,新增日志阅读状态检查功能,以防止修改已阅读的日志。 - 优化工作日志的分页查询逻辑,使用PageParam实现灵活的分页逻辑。 - 调整相关Service接口和实现类,添加日志阅读状态的检查方法。 - 修复Excel导出中关于数据验证样式的问题。 智能工厂模块:增加工厂数据平方数计算与规格转换 - 为智能工厂模块添加工厂数据的平方数计算功能,支持根据规格名称进行转换。 - 引入规格数据校验逻辑,确保数据的一致性和准确性。 -调整数据库模型和Mapper,以支持新的平方数字段和计算逻辑。 - 优化数据导入导出功能,提升用户体验和数据处理效率。
This commit is contained in:
parent
b5edcd0197
commit
47b730c072
@ -84,6 +84,7 @@ public class SpinnerWriteHandler implements SheetWriteHandler {
|
|||||||
/*** 处理Excel兼容性问题 **/
|
/*** 处理Excel兼容性问题 **/
|
||||||
if (dataValidation instanceof XSSFDataValidation) {
|
if (dataValidation instanceof XSSFDataValidation) {
|
||||||
dataValidation.setSuppressDropDownArrow(true); //验证输入数据是否真确
|
dataValidation.setSuppressDropDownArrow(true); //验证输入数据是否真确
|
||||||
|
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
|
||||||
dataValidation.setShowErrorBox(true);
|
dataValidation.setShowErrorBox(true);
|
||||||
dataValidation.setShowPromptBox(true);
|
dataValidation.setShowPromptBox(true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -220,6 +220,8 @@ public interface ErrorCodeConstants {
|
|||||||
|
|
||||||
ErrorCode LOG_NOT_UPDATE = new ErrorCode(1_009_010_008, "已过了提交时间,不能修改");
|
ErrorCode LOG_NOT_UPDATE = new ErrorCode(1_009_010_008, "已过了提交时间,不能修改");
|
||||||
|
|
||||||
|
ErrorCode LOG_HAS_READ = new ErrorCode(1_009_010_009, "日志已被阅读,不能修改");
|
||||||
|
|
||||||
ErrorCode BANK_NOT_EXISTS = new ErrorCode(1_009_020_001, "银行卡信息不存在");
|
ErrorCode BANK_NOT_EXISTS = new ErrorCode(1_009_020_001, "银行卡信息不存在");
|
||||||
|
|
||||||
ErrorCode BANK_EXISTS = new ErrorCode(1_009_020_003, "银行卡号已存在");
|
ErrorCode BANK_EXISTS = new ErrorCode(1_009_020_003, "银行卡号已存在");
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.mysql.worklog;
|
package cn.iocoder.yudao.module.system.dal.mysql.worklog;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
@ -23,9 +25,9 @@ import java.util.List;
|
|||||||
public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
|
public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
|
||||||
|
|
||||||
|
|
||||||
default List<LogInstanceDO> getUpLog(Long userId, Long formId) {
|
default PageResult<LogInstanceDO> getUpLog(Long userId, Long formId) {
|
||||||
|
|
||||||
return selectList(new LambdaQueryWrapperX<LogInstanceDO>()
|
return selectPage(new PageParam().setPageNo(1).setPageSize(1), new LambdaQueryWrapperX<LogInstanceDO>()
|
||||||
.eq(LogInstanceDO::getStartUserId, userId)
|
.eq(LogInstanceDO::getStartUserId, userId)
|
||||||
.eqIfPresent(LogInstanceDO::getFormId, formId)
|
.eqIfPresent(LogInstanceDO::getFormId, formId)
|
||||||
.orderByDesc(LogInstanceDO::getCreateTime));
|
.orderByDesc(LogInstanceDO::getCreateTime));
|
||||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.service.worklog;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
|
||||||
@ -178,6 +179,11 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
|||||||
// 校验存在
|
// 校验存在
|
||||||
validateLogInstanceExists(updateReqVO.getId());
|
validateLogInstanceExists(updateReqVO.getId());
|
||||||
|
|
||||||
|
// 校验日志是否已被查看
|
||||||
|
if (logReadService.isReadByLogId(updateReqVO.getId())) {
|
||||||
|
throw exception(LOG_HAS_READ);
|
||||||
|
}
|
||||||
|
|
||||||
// 校验要修改的日志是否是当天发送的
|
// 校验要修改的日志是否是当天发送的
|
||||||
LogInstanceDO logInstanceDO = logInstanceMapper.selectById(updateReqVO.getId());
|
LogInstanceDO logInstanceDO = logInstanceMapper.selectById(updateReqVO.getId());
|
||||||
if (!logInstanceDO.getCreateTime().toLocalDate().equals(LocalDate.now())) {
|
if (!logInstanceDO.getCreateTime().toLocalDate().equals(LocalDate.now())) {
|
||||||
@ -185,16 +191,16 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
|||||||
throw exception(LOG_NOT_DATE);
|
throw exception(LOG_NOT_DATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(updateReqVO.getFormId());
|
// LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(updateReqVO.getFormId());
|
||||||
String endTime = logRuleDO.getEndTime();
|
// String endTime = logRuleDO.getEndTime();
|
||||||
if (logRuleDO.getType() != 1) {
|
// if (logRuleDO.getType() != 1) {
|
||||||
|
//
|
||||||
endTime = endTime.split(",")[1];
|
// endTime = endTime.split(",")[1];
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (LocalTime.now().isAfter(LocalTime.parse(endTime))) {
|
// if (LocalTime.now().isAfter(LocalTime.parse(endTime))) {
|
||||||
throw exception(LOG_NOT_UPDATE);
|
// throw exception(LOG_NOT_UPDATE);
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 更新
|
// 更新
|
||||||
LogInstanceDO updateObj = BeanUtils.toBean(updateReqVO, LogInstanceDO.class);
|
LogInstanceDO updateObj = BeanUtils.toBean(updateReqVO, LogInstanceDO.class);
|
||||||
@ -320,10 +326,10 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
|||||||
@Override
|
@Override
|
||||||
public LogInstanceDO getUpLog(Long formId) {
|
public LogInstanceDO getUpLog(Long formId) {
|
||||||
|
|
||||||
List<LogInstanceDO> logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId);
|
PageResult<LogInstanceDO> logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId);
|
||||||
if (!logInstanceDOS.isEmpty()) {
|
if (!logInstanceDOS.getList().isEmpty()) {
|
||||||
|
|
||||||
return logInstanceDOS.get(0);
|
return logInstanceDOS.getList().get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -42,4 +42,11 @@ public interface LogReadService {
|
|||||||
* @return 日志列表
|
* @return 日志列表
|
||||||
*/
|
*/
|
||||||
List<LogReadDo> getReadListByReadUserId(Long userId);
|
List<LogReadDo> getReadListByReadUserId(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得指定日志的查看状态
|
||||||
|
* @param logId 日志编号
|
||||||
|
* @return 阅读状态
|
||||||
|
*/
|
||||||
|
Boolean isReadByLogId(Long logId);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.worklog;
|
package cn.iocoder.yudao.module.system.service.worklog;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo;
|
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogReadMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogReadMapper;
|
||||||
import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO;
|
import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO;
|
||||||
@ -75,4 +76,14 @@ public class LogReadServiceImpl implements LogReadService{
|
|||||||
|
|
||||||
return logReadMapper.selectList(queryWrapper);
|
return logReadMapper.selectList(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean isReadByLogId(Long logId) {
|
||||||
|
|
||||||
|
Long count = logReadMapper.selectCount(new LambdaQueryWrapperX<LogReadDo>()
|
||||||
|
.eq(LogReadDo::getLogInstanceId, logId)
|
||||||
|
.eq(LogReadDo::getReadStatus, 1));
|
||||||
|
|
||||||
|
return count > 0L;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,8 @@ import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
|||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.*;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.*;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.size.vo.SizeRespVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
||||||
@ -28,6 +30,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -56,7 +59,7 @@ public class FactoryDataController {
|
|||||||
@PostMapping("/create-size")
|
@PostMapping("/create-size")
|
||||||
@Operation(summary = "创建工厂出库入库规格数据")
|
@Operation(summary = "创建工厂出库入库规格数据")
|
||||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:create')")
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:create')")
|
||||||
public CommonResult<Long> createSizeData(@Valid @RequestBody FactoryDataSizeCreateReqVO createReqVO) {
|
public CommonResult<Long> createSizeData(@Valid @RequestBody FactoryDataSizeCreateReqVO createReqVO) throws Exception {
|
||||||
|
|
||||||
return success(factoryDataSizeService.createData(createReqVO));
|
return success(factoryDataSizeService.createData(createReqVO));
|
||||||
}
|
}
|
||||||
@ -64,7 +67,7 @@ public class FactoryDataController {
|
|||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新工厂出库入库数据")
|
@Operation(summary = "更新工厂出库入库数据")
|
||||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:update')")
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:update')")
|
||||||
public CommonResult<Boolean> updateData(@Valid @RequestBody FactoryDataSizeCreateReqVO updateReqVO) {
|
public CommonResult<Boolean> updateData(@Valid @RequestBody FactoryDataSizeCreateReqVO updateReqVO) throws Exception {
|
||||||
|
|
||||||
dataService.updateData(updateReqVO);
|
dataService.updateData(updateReqVO);
|
||||||
return success(true);
|
return success(true);
|
||||||
@ -81,6 +84,17 @@ public class FactoryDataController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getLastSize")
|
||||||
|
@Operation(summary = "获得指定工厂上一次录入的规格信息")
|
||||||
|
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||||
|
@Parameter(name = "type", description = "出入库类型 | 入库1 出库2", required = true, example = "1")
|
||||||
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:query')")
|
||||||
|
public CommonResult<List<Long>> getLastSize(@RequestParam("factoryId") Long factoryId, @RequestParam("type") Integer type) {
|
||||||
|
|
||||||
|
List<FactoryDataSizeDO> dataSizeDOS = factoryDataSizeService.getLastSize(factoryId, type == 1 ? Arrays.asList(1,4) : Arrays.asList(2,3));
|
||||||
|
return success(convertList(dataSizeDOS, FactoryDataSizeDO::getSizeId));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得工厂出库入库数据")
|
@Operation(summary = "获得工厂出库入库数据")
|
||||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||||
@ -170,6 +184,10 @@ public class FactoryDataController {
|
|||||||
|
|
||||||
List<FactoryDataImportVO> list = ExcelUtils.read(file, FactoryDataImportVO.class);
|
List<FactoryDataImportVO> list = ExcelUtils.read(file, FactoryDataImportVO.class);
|
||||||
|
|
||||||
|
// 过滤空行
|
||||||
|
list = list.stream()
|
||||||
|
.filter(data -> data.getFactoryName() != null && data.getDate() != null)
|
||||||
|
.collect(Collectors.toList());
|
||||||
return success(dataService.importUserList(list, type));
|
return success(dataService.importUserList(list, type));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -29,7 +29,7 @@ public class FactoryDataDetailRespVO {
|
|||||||
private Integer inTotalNum;
|
private Integer inTotalNum;
|
||||||
|
|
||||||
@Schema(description = "入库总平方数")
|
@Schema(description = "入库总平方数")
|
||||||
private BigDecimal squareNum;
|
private BigDecimal squareTotalNum;
|
||||||
|
|
||||||
@Schema(description = "出库总箱数")
|
@Schema(description = "出库总箱数")
|
||||||
private Integer outTotalNum;
|
private Integer outTotalNum;
|
||||||
|
@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
|
|||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||||
@ -56,6 +57,9 @@ public class FactoryDataImportVO {
|
|||||||
@ExcelProperty("出入库数")
|
@ExcelProperty("出入库数")
|
||||||
private Integer num;
|
private Integer num;
|
||||||
|
|
||||||
|
@ExcelProperty("入库平方数")
|
||||||
|
private BigDecimal squareNum;
|
||||||
|
|
||||||
@ExcelProperty("破损数")
|
@ExcelProperty("破损数")
|
||||||
private Integer damageNum;
|
private Integer damageNum;
|
||||||
}
|
}
|
||||||
|
@ -14,15 +14,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
|||||||
@Data
|
@Data
|
||||||
public class FactoryDataInfoRespVO {
|
public class FactoryDataInfoRespVO {
|
||||||
|
|
||||||
@Schema(description = "打包线数据id")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "工厂id")
|
@Schema(description = "工厂id")
|
||||||
private Long factoryId;
|
private Long factoryId;
|
||||||
|
|
||||||
@Schema(description = "打包线名称")
|
|
||||||
private String packageName;
|
|
||||||
|
|
||||||
@Schema(description = "日期")
|
@Schema(description = "日期")
|
||||||
private LocalDate date;
|
private LocalDate date;
|
||||||
|
|
||||||
@ -32,15 +26,6 @@ public class FactoryDataInfoRespVO {
|
|||||||
@Schema(description = "规格名称")
|
@Schema(description = "规格名称")
|
||||||
private String sizeName;
|
private String sizeName;
|
||||||
|
|
||||||
@Schema(description = "规格片数")
|
|
||||||
private Integer sizePieces;
|
|
||||||
|
|
||||||
@Schema(description = "手动打包数")
|
|
||||||
private Integer num;
|
|
||||||
|
|
||||||
@Schema(description = "自动打包数")
|
|
||||||
private Integer autoNum;
|
|
||||||
|
|
||||||
@Schema(description = "入库数量Id")
|
@Schema(description = "入库数量Id")
|
||||||
private Long inNumId;
|
private Long inNumId;
|
||||||
|
|
||||||
|
@ -15,12 +15,12 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
|||||||
@Data
|
@Data
|
||||||
public class FactoryDataSizeCreateReqVO {
|
public class FactoryDataSizeCreateReqVO {
|
||||||
|
|
||||||
@Schema(description = "打包线数据信息")
|
|
||||||
private List<PackageDataSaveReqVO> packageData;
|
|
||||||
|
|
||||||
@Schema(description = "规格信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "规格信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
private List<FactoryDataSizeSaveReqVO> items;
|
private List<FactoryDataSizeSaveReqVO> items;
|
||||||
|
|
||||||
|
@Schema(description = "删除的规格信息")
|
||||||
|
private List<FactoryDataSizeSaveReqVO> deleteItems;
|
||||||
|
|
||||||
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||||
@NotNull(message = "工厂编号不能为空")
|
@NotNull(message = "工厂编号不能为空")
|
||||||
private Long factoryId;
|
private Long factoryId;
|
||||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.siz
|
|||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -19,6 +20,9 @@ public class FactoryDataSizeDetailRespVO {
|
|||||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
||||||
private LocalDate date;
|
private LocalDate date;
|
||||||
|
|
||||||
|
@Schema(description = "是否可编辑 | 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
private Integer isEdit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 入库数据
|
* 入库数据
|
||||||
*/
|
*/
|
||||||
@ -32,30 +36,21 @@ public class FactoryDataSizeDetailRespVO {
|
|||||||
@Data
|
@Data
|
||||||
public static class InItem {
|
public static class InItem {
|
||||||
|
|
||||||
@Schema(description = "打包线数据id")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "打包线名称")
|
|
||||||
private String packageName;
|
|
||||||
|
|
||||||
@Schema(description = "规格id")
|
@Schema(description = "规格id")
|
||||||
private Long sizeId;
|
private Long sizeId;
|
||||||
|
|
||||||
@Schema(description = "规格名称")
|
@Schema(description = "规格名称")
|
||||||
private String sizeName;
|
private String sizeName;
|
||||||
|
|
||||||
@Schema(description = "手动打包数")
|
|
||||||
private Integer num;
|
|
||||||
|
|
||||||
@Schema(description = "自动打包数")
|
|
||||||
private Integer autoNum;
|
|
||||||
|
|
||||||
@Schema(description = "入库数Id")
|
@Schema(description = "入库数Id")
|
||||||
private Long inNumId;
|
private Long inNumId;
|
||||||
|
|
||||||
@Schema(description = "入库数")
|
@Schema(description = "入库数")
|
||||||
private Integer inNum;
|
private Integer inNum;
|
||||||
|
|
||||||
|
@Schema(description = "入库平方数")
|
||||||
|
private BigDecimal squareNum;
|
||||||
|
|
||||||
@Schema(description = "打包破损数")
|
@Schema(description = "打包破损数")
|
||||||
private Integer damageNum;
|
private Integer damageNum;
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 工厂规格数据修改 Request VO")
|
@Schema(description = "管理后台 - 工厂规格数据修改 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@ -17,16 +18,15 @@ public class FactoryDataSizeSaveReqVO {
|
|||||||
@NotNull(message = "规格名称不能为空")
|
@NotNull(message = "规格名称不能为空")
|
||||||
private String sizeName;
|
private String sizeName;
|
||||||
|
|
||||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "4")
|
|
||||||
@NotNull(message = "规格片数不能为空")
|
|
||||||
private Integer sizePieces;
|
|
||||||
|
|
||||||
@Schema(description = "入库数量Id")
|
@Schema(description = "入库数量Id")
|
||||||
private Long inNumId;
|
private Long inNumId;
|
||||||
|
|
||||||
@Schema(description = "入库数量")
|
@Schema(description = "入库数量")
|
||||||
private Integer inNum;
|
private Integer inNum;
|
||||||
|
|
||||||
|
@Schema(description = "入库平方数")
|
||||||
|
private BigDecimal squareNum;
|
||||||
|
|
||||||
@Schema(description = "入库破损数量Id")
|
@Schema(description = "入库破损数量Id")
|
||||||
private Long inDamageNumId;
|
private Long inDamageNumId;
|
||||||
|
|
||||||
|
@ -35,6 +35,10 @@ public class FactoryInfoRespVO {
|
|||||||
@ExcelProperty("工厂业务类型")
|
@ExcelProperty("工厂业务类型")
|
||||||
private String businessType;
|
private String businessType;
|
||||||
|
|
||||||
|
@Schema(description = "结算方式", example = "1")
|
||||||
|
@ExcelProperty("结算方式")
|
||||||
|
private Integer settlementMethod;
|
||||||
|
|
||||||
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
||||||
@ExcelProperty("工厂简介")
|
@ExcelProperty("工厂简介")
|
||||||
private String description;
|
private String description;
|
||||||
|
@ -30,6 +30,9 @@ public class FactoryInfoSaveReqVO {
|
|||||||
@Schema(description = "工厂业务类型 根据字典business_type来", example = "1")
|
@Schema(description = "工厂业务类型 根据字典business_type来", example = "1")
|
||||||
private String businessType;
|
private String businessType;
|
||||||
|
|
||||||
|
@Schema(description = "工厂结算方式 | 字典值 sf_settlement_method", example = "1")
|
||||||
|
private Integer settlementMethod;
|
||||||
|
|
||||||
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
@ -21,6 +21,9 @@ public class FactorySimpleRespVO {
|
|||||||
@Schema(description = "工厂简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "第一工厂")
|
@Schema(description = "工厂简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "第一工厂")
|
||||||
private String shortName;
|
private String shortName;
|
||||||
|
|
||||||
|
@Schema(description = "结算方式")
|
||||||
|
private Integer settlementMethod;
|
||||||
|
|
||||||
@Schema(description = "监控列表")
|
@Schema(description = "监控列表")
|
||||||
private List<CameraSimpleRespVO> subsidiary;
|
private List<CameraSimpleRespVO> subsidiary;
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,9 +44,9 @@ public class FactoryDataSizeDO extends BaseDO {
|
|||||||
private String sizeName;
|
private String sizeName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 规格片数
|
* 平方数
|
||||||
*/
|
*/
|
||||||
private String sizePieces;
|
private BigDecimal squareNum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据类型
|
* 数据类型
|
||||||
|
@ -55,6 +55,10 @@ public class FactoryInfoDO extends BaseDO {
|
|||||||
* 工厂业务类型 根据字典business_type来
|
* 工厂业务类型 根据字典business_type来
|
||||||
*/
|
*/
|
||||||
private String businessType;
|
private String businessType;
|
||||||
|
/**
|
||||||
|
* 工厂结算方式 字典值 sf_settlement_method
|
||||||
|
*/
|
||||||
|
private Integer settlementMethod;
|
||||||
/**
|
/**
|
||||||
* 工厂简介
|
* 工厂简介
|
||||||
*/
|
*/
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
|
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
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.FactoryDataPageReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
@ -39,4 +42,6 @@ public interface FactoryDataMapper extends BaseMapperX<FactoryDataDO> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
FactoryDataTotalVO selectDataSum(@Param("factoryId") Long factoryId, @Param("date") LocalDate[] date);
|
FactoryDataTotalVO selectDataSum(@Param("factoryId") Long factoryId, @Param("date") LocalDate[] date);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,5 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
|
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||||
@ -49,4 +51,7 @@ public interface FactoryDataSizeMapper extends BaseMapperX<FactoryDataSizeDO> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<FactoryDataInfoRespVO> selectSUMByDateTimes(@Param("dateTime") LocalDateTime[] dateTimes);
|
List<FactoryDataInfoRespVO> selectSUMByDateTimes(@Param("dateTime") LocalDateTime[] dateTimes);
|
||||||
|
|
||||||
|
List<FactoryDataSizeDO> selectLastSize(@Param("factoryId") Long factoryId,
|
||||||
|
@Param("types") List<Integer> types);
|
||||||
}
|
}
|
||||||
|
@ -28,9 +28,6 @@ public class FactoryDataJob {
|
|||||||
@Resource
|
@Resource
|
||||||
private FactoryDataSizeService dataSizeService;
|
private FactoryDataSizeService dataSizeService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PackageDataService packageDataService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FactoryDataService factoryDataService;
|
private FactoryDataService factoryDataService;
|
||||||
|
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.framework.util;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.util.Strings;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String 工具类
|
||||||
|
*/
|
||||||
|
public class StringUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换规格片数
|
||||||
|
* @param sizeName 规格名称
|
||||||
|
* @return 片数
|
||||||
|
*/
|
||||||
|
public static Integer sizeNameAnalysis(String sizeName) {
|
||||||
|
|
||||||
|
if (Strings.isEmpty(sizeName)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] split = sizeName.split("\\*");
|
||||||
|
if (split.length >= 3) {
|
||||||
|
|
||||||
|
Pattern pattern = Pattern.compile("\\d+"); // 匹配数字的正则表达式
|
||||||
|
Matcher matcher = pattern.matcher(split[2]);
|
||||||
|
|
||||||
|
if (matcher.find()) {
|
||||||
|
|
||||||
|
return Integer.valueOf(matcher.group()); // 获取匹配的数字字符串
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.*;
|
|||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@ -31,7 +32,7 @@ public interface FactoryDataService {
|
|||||||
*
|
*
|
||||||
* @param updateReqVO 更新信息
|
* @param updateReqVO 更新信息
|
||||||
*/
|
*/
|
||||||
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO);
|
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO) throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除工厂出库入库数据
|
* 删除工厂出库入库数据
|
||||||
@ -64,6 +65,8 @@ public interface FactoryDataService {
|
|||||||
*/
|
*/
|
||||||
FactoryDataTotalVO getDataTotal(Long factoryId, LocalDate[] date);
|
FactoryDataTotalVO getDataTotal(Long factoryId, LocalDate[] date);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当天的所有数据
|
* 获取当天的所有数据
|
||||||
*
|
*
|
||||||
@ -97,4 +100,8 @@ public interface FactoryDataService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
FactoryImportRespVO importUserList(List<FactoryDataImportVO> list, Integer type);
|
FactoryImportRespVO importUserList(List<FactoryDataImportVO> list, Integer type);
|
||||||
|
|
||||||
|
String convertSquare(Object num, Integer type, String sizeName);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryIn
|
|||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
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.dal.mysql.factorydata.FactoryDataMapper;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSizeMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSizeMapper;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.framework.util.StringUtil;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.packageInfo.PackageService;
|
import cn.iocoder.yudao.module.smartfactory.service.packageInfo.PackageService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||||
@ -30,6 +31,7 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -59,15 +61,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
@Resource
|
@Resource
|
||||||
private FactoryInfoService factoryInfoService;
|
private FactoryInfoService factoryInfoService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PackageDataService packageDataService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FactoryDataSizeMapper factoryDataSizeMapper;
|
private FactoryDataSizeMapper factoryDataSizeMapper;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PackageService packageService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createData(List<FactoryDataDO> factoryDataDOS) {
|
public Long createData(List<FactoryDataDO> factoryDataDOS) {
|
||||||
|
|
||||||
@ -79,7 +75,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
|
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) throws Exception {
|
||||||
|
|
||||||
// 修改 规格明细数据
|
// 修改 规格明细数据
|
||||||
dataSizeService.updateData(updateReqVO);
|
dataSizeService.updateData(updateReqVO);
|
||||||
@ -88,13 +84,6 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
List<FactoryDataDO> factoryDataDOS = dataMapper.selectListByFactoryAndDate(updateReqVO.getFactoryId(), updateReqVO.getDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
List<FactoryDataDO> factoryDataDOS = dataMapper.selectListByFactoryAndDate(updateReqVO.getFactoryId(), updateReqVO.getDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||||
if (factoryDataDOS != null && !factoryDataDOS.isEmpty()) {
|
if (factoryDataDOS != null && !factoryDataDOS.isEmpty()) {
|
||||||
|
|
||||||
PackageDataCreateReqVO createReqVO = new PackageDataCreateReqVO();
|
|
||||||
createReqVO.setPackageData(updateReqVO.getPackageData());
|
|
||||||
createReqVO.setFactoryId(updateReqVO.getFactoryId());
|
|
||||||
createReqVO.setPackageDate(updateReqVO.getDate());
|
|
||||||
|
|
||||||
//获得 打包线数据对象
|
|
||||||
List<PackageDataDO> packageDataDOS = PackageDataConvert.INSTANCE.convertList(createReqVO);
|
|
||||||
// 更新
|
// 更新
|
||||||
factoryDataDOS.forEach(data -> {
|
factoryDataDOS.forEach(data -> {
|
||||||
|
|
||||||
@ -107,12 +96,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
break;
|
break;
|
||||||
//入库数据
|
//入库数据
|
||||||
case 2:
|
case 2:
|
||||||
Integer damageNum = packageDataDOS.stream().mapToInt(PackageDataDO::getDamageNum).sum()
|
|
||||||
+ updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getInDamageNum).sum();
|
|
||||||
|
|
||||||
data.setTotalNum(packageDataDOS.stream().mapToInt(info -> info.getNum() + info.getAutoNum()).sum());
|
data.setTotalNum(updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getInNum).sum());
|
||||||
data.setDamageNum(damageNum);
|
data.setDamageNum(updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getInDamageNum).sum());
|
||||||
data.setSquareNum(packageDataDOS.stream().map(PackageDataDO::getSquareNum).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -127,9 +113,6 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
|
|
||||||
//删除出入库 规格数据
|
//删除出入库 规格数据
|
||||||
dataSizeService.deleteData(factoryId, date);
|
dataSizeService.deleteData(factoryId, date);
|
||||||
|
|
||||||
//删除打包线数据
|
|
||||||
packageDataService.deletePackageData(factoryId, date);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -139,23 +122,17 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
respVO.setFactoryId(factoryId);
|
respVO.setFactoryId(factoryId);
|
||||||
respVO.setDate(LocalDate.parse(date));
|
respVO.setDate(LocalDate.parse(date));
|
||||||
|
|
||||||
//获得 规则明细数据
|
//获得 规格明细数据
|
||||||
List<FactoryDataInfoRespVO> infoRespVOS = dataSizeService.getDetailList(factoryId, new LocalDate[]{LocalDate.parse(date), LocalDate.parse(date)}, null);
|
List<FactoryDataInfoRespVO> infoRespVOS = dataSizeService.getDetailList(factoryId, new LocalDate[]{LocalDate.parse(date), LocalDate.parse(date)}, null);
|
||||||
|
|
||||||
List<FactoryDataSizeDetailRespVO.InItem> packageInfo = infoRespVOS.stream()
|
|
||||||
.filter(info -> (info.getInDamageNum() != null && info.getInNum() == null) || info.getNum() != null || info.getAutoNum() != null)
|
|
||||||
.map(info -> BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.InItem.class))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
List<FactoryDataSizeDetailRespVO.InItem> inItems = infoRespVOS.stream()
|
List<FactoryDataSizeDetailRespVO.InItem> inItems = infoRespVOS.stream()
|
||||||
.filter(info -> info.getInNum() != null)
|
.filter(info -> info.getInNum() != null || info.getInDamageNum() != null)
|
||||||
.map(info -> {
|
.map(info -> {
|
||||||
FactoryDataSizeDetailRespVO.InItem inItem = BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.InItem.class);
|
FactoryDataSizeDetailRespVO.InItem inItem = BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.InItem.class);
|
||||||
inItem.setIsEnable(1);
|
inItem.setIsEnable(1);
|
||||||
return inItem;
|
return inItem;
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
inItems.addAll(packageInfo);
|
|
||||||
respVO.setInItems(inItems);
|
respVO.setInItems(inItems);
|
||||||
|
|
||||||
respVO.setOutItems(
|
respVO.setOutItems(
|
||||||
@ -164,6 +141,14 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
.map(info -> BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.OutItem.class))
|
.map(info -> BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.OutItem.class))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
|
if (CollUtil.isNotEmpty(infoRespVOS)) {
|
||||||
|
LocalDate localDate = infoRespVOS.get(0).getCreateTime().toLocalDate();
|
||||||
|
if (localDate.isEqual(LocalDate.now())) {
|
||||||
|
respVO.setIsEdit(1);
|
||||||
|
}else {
|
||||||
|
respVO.setIsEdit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
return respVO;
|
return respVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,18 +183,13 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
dataDetailRespVO.setDate(date.getKey());
|
dataDetailRespVO.setDate(date.getKey());
|
||||||
//设置入库总数
|
//设置入库总数
|
||||||
int inSum = date.getValue().stream()
|
int inSum = date.getValue().stream()
|
||||||
.map(info -> {
|
.map(info -> Optional.ofNullable(info.getInNum()).orElse(0))
|
||||||
Integer num = Optional.ofNullable(info.getNum()).orElse(0);
|
|
||||||
Integer autoNum = Optional.ofNullable(info.getAutoNum()).orElse(0);
|
|
||||||
Integer inNUm = Optional.ofNullable(info.getInNum()).orElse(0);
|
|
||||||
return num + autoNum + inNUm;
|
|
||||||
})
|
|
||||||
.mapToInt(Integer::intValue).sum();
|
.mapToInt(Integer::intValue).sum();
|
||||||
dataDetailRespVO.setInTotalNum(inSum == 0 ? null : inSum);
|
dataDetailRespVO.setInTotalNum(inSum == 0 ? null : inSum);
|
||||||
|
|
||||||
// //设置入库平方数
|
//设置入库平方总数数
|
||||||
// dataDetailRespVO.setSquareNum(date.getValue().stream().map(FactoryDataInfoRespVO::getSquareNum)
|
dataDetailRespVO.setSquareTotalNum(date.getValue().stream().map(FactoryDataInfoRespVO::getSquareNum)
|
||||||
// .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||||
|
|
||||||
//设置出库总数
|
//设置出库总数
|
||||||
int outTotalNum = date.getValue().stream().filter(info -> info.getOutNum() != null)
|
int outTotalNum = date.getValue().stream().filter(info -> info.getOutNum() != null)
|
||||||
@ -223,15 +203,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
respVO.setOutDamageNum(Optional.ofNullable(info.getOutDamageNum()).orElse(0));
|
respVO.setOutDamageNum(Optional.ofNullable(info.getOutDamageNum()).orElse(0));
|
||||||
return respVO;
|
return respVO;
|
||||||
}).mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).sum();
|
}).mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).sum();
|
||||||
|
|
||||||
dataDetailRespVO.setDamageNum(sum == 0 ? null : sum);
|
dataDetailRespVO.setDamageNum(sum == 0 ? null : sum);
|
||||||
|
|
||||||
date.getValue().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));
|
|
||||||
});
|
|
||||||
dataDetailRespVO.setItems(date.getValue());
|
dataDetailRespVO.setItems(date.getValue());
|
||||||
|
|
||||||
if (date.getValue().get(0).getCreateTime().toLocalDate().equals(LocalDate.now())) {
|
if (date.getValue().get(0).getCreateTime().toLocalDate().equals(LocalDate.now())) {
|
||||||
@ -286,7 +260,8 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
throw exception(FACTORY_IMPORT_LIST_IS_EMPTY);
|
throw exception(FACTORY_IMPORT_LIST_IS_EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
FactoryImportRespVO respVO = FactoryImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
|
FactoryImportRespVO respVO = FactoryImportRespVO.builder().createUsernames(new ArrayList<>()).
|
||||||
|
updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
|
||||||
|
|
||||||
list.forEach(data -> {
|
list.forEach(data -> {
|
||||||
|
|
||||||
@ -305,39 +280,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
// 获取 规格名称
|
// 获取 规格名称
|
||||||
String sizeName = data.getSizeName().split(":")[1];
|
String sizeName = data.getSizeName().split(":")[1];
|
||||||
|
|
||||||
// PackageDO packageDO = packageService.getPackageByFactoryIdAndSize(factoryId, sizeId);
|
|
||||||
// if (packageDO != null && (data.getNum() != null || data.getAutoNum() != null)) {
|
|
||||||
//
|
|
||||||
// PackageDataDO packageDataDO = BeanUtils.toBean(packageDO, PackageDataDO.class);
|
|
||||||
// packageDataDO.setId(null);
|
|
||||||
// packageDataDO.setPackageDate(data.getDate());
|
|
||||||
// packageDataDO.setPackageId(packageDO.getId());
|
|
||||||
// packageDataDO.setPackageName(packageDO.getName());
|
|
||||||
// packageDataDO.setSizeName(sizeName);
|
|
||||||
// packageDataDO.setNum(data.getNum());
|
|
||||||
// packageDataDO.setAutoNum(data.getAutoNum());
|
|
||||||
// packageDataDO.setDamageNum(data.getDamageNum());
|
|
||||||
// packageDataDO.setCreator(getLoginUserId().toString());
|
|
||||||
// packageDataDO.setUpdater(null);
|
|
||||||
// packageDataDO.setCreateTime(LocalDateTime.now());
|
|
||||||
//
|
|
||||||
// //计算平方数
|
|
||||||
// String[] size = sizeName.split("\\*");
|
|
||||||
// BigDecimal squareNum = BigDecimal.valueOf((double) Integer.parseInt(size[0]) / 1000)
|
|
||||||
// .multiply(BigDecimal.valueOf((double) Integer.parseInt(size[1]) / 1000))
|
|
||||||
// .multiply(BigDecimal.valueOf(packageDataDO.getSizePieces()))
|
|
||||||
// .multiply(BigDecimal.valueOf(Integer.sum(packageDataDO.getNum(), packageDataDO.getAutoNum())));
|
|
||||||
//
|
|
||||||
// //设置平方数
|
|
||||||
// packageDataDO.setSquareNum(squareNum);
|
|
||||||
//
|
|
||||||
// // 插入打包线数据
|
|
||||||
// packageDataService.create(packageDataDO);
|
|
||||||
// }
|
|
||||||
|
|
||||||
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
||||||
|
|
||||||
if (data.getNum() != null) {
|
if (data.getNum() != null || data.getSquareNum() != null) {
|
||||||
|
|
||||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
//设置规格信息
|
//设置规格信息
|
||||||
@ -348,9 +293,28 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
dataSizeDO.setDate(data.getDate());
|
dataSizeDO.setDate(data.getDate());
|
||||||
// 根据type 设置入库数还是出库数
|
// 根据type 设置入库数还是出库数
|
||||||
dataSizeDO.setType(type == 1 ? 4 : 2);
|
dataSizeDO.setType(type == 1 ? 4 : 2);
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (sizeName.contains("*")) {
|
||||||
|
dataSizeDO.setNum(
|
||||||
|
data.getSquareNum() != null ? Integer.parseInt(convertSquare(data.getSquareNum(), 2, sizeName)) : data.getNum()
|
||||||
|
);
|
||||||
|
dataSizeDO.setSquareNum(
|
||||||
|
data.getNum() != null ? new BigDecimal(convertSquare(data.getNum(), 1, sizeName)) : data.getSquareNum()
|
||||||
|
);
|
||||||
|
}else {
|
||||||
dataSizeDO.setNum(data.getNum());
|
dataSizeDO.setNum(data.getNum());
|
||||||
|
dataSizeDO.setSquareNum(data.getSquareNum());
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), "请正确填写入库数或者入库平方数");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
factoryDataSizeDOs.add(dataSizeDO);
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}else {
|
||||||
|
respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), "请正确填写入库数或者入库平方数");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.getDamageNum() != null) {
|
if (data.getDamageNum() != null) {
|
||||||
@ -371,7 +335,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
|
|
||||||
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
||||||
|
|
||||||
respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate());
|
// respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate());
|
||||||
});
|
});
|
||||||
|
|
||||||
return respVO;
|
return respVO;
|
||||||
@ -394,22 +358,21 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
FactoryInfoDO factoryInfoDO = factoryInfoService.getFactoryByName(factoryName);
|
FactoryInfoDO factoryInfoDO = factoryInfoService.getFactoryByName(factoryName);
|
||||||
|
|
||||||
List<Integer> dataType = new ArrayList<>();
|
List<Integer> dataType = new ArrayList<>();
|
||||||
if (data.getNum() != null && data.getDamageNum() != null) {
|
if ((data.getNum() != null || data.getSquareNum() != null) && data.getDamageNum() != null) {
|
||||||
dataType = type == 1 ? Arrays.asList(1,4) : Arrays.asList(2,3);
|
dataType = type == 1 ? Arrays.asList(1,4) : Arrays.asList(2,3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.getNum() != null && data.getDamageNum() == null) {
|
if ((data.getNum() != null || data.getSquareNum() != null) && data.getDamageNum() == null) {
|
||||||
dataType = type == 1 ? Collections.singletonList(4) : Collections.singletonList(2);
|
dataType = type == 1 ? Collections.singletonList(4) : Collections.singletonList(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.getNum() == null && data.getDamageNum() != null) {
|
if (data.getNum() == null && data.getSquareNum() == null && data.getDamageNum() != null) {
|
||||||
dataType = type == 1 ? Collections.singletonList(1) : Collections.singletonList(3);
|
dataType = type == 1 ? Collections.singletonList(1) : Collections.singletonList(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取 规格ID
|
// 获取 规格ID
|
||||||
Long sizeId = Long.valueOf(sizeName.split(":")[0]);
|
Long sizeId = Long.valueOf(sizeName.split(":")[0]);
|
||||||
Long count = factoryDataSizeMapper.selectCountByType(factoryInfoDO.getId(), sizeId, date, dataType);
|
Long count = factoryDataSizeMapper.selectCountByType(factoryInfoDO.getId(), sizeId, date, dataType);
|
||||||
// List<PackageDataDO> packageDOs = packageDataService.getListByFactoryIdAndDate(factoryInfoDO.getId(), date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
||||||
|
|
||||||
if (count > 0L) {
|
if (count > 0L) {
|
||||||
throw exception(PACKAGE_DATA_EXISTS);
|
throw exception(PACKAGE_DATA_EXISTS);
|
||||||
@ -417,4 +380,33 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
|
|
||||||
return factoryInfoDO.getId();
|
return factoryInfoDO.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String convertSquare(Object num, Integer type, String sizeName) {
|
||||||
|
|
||||||
|
int size = Integer.parseInt(sizeName.split("\\*")[0]);
|
||||||
|
int size1 = Integer.parseInt(sizeName.split("\\*")[1]);
|
||||||
|
|
||||||
|
// 转换规格片数
|
||||||
|
int unit = StringUtil.sizeNameAnalysis(sizeName);
|
||||||
|
|
||||||
|
// 判断是箱数转换平方数的情况
|
||||||
|
if (type == 1) {
|
||||||
|
|
||||||
|
//计算平方数
|
||||||
|
return BigDecimal.valueOf((double) size / 1000)
|
||||||
|
.multiply(BigDecimal.valueOf((double) size1 / 1000))
|
||||||
|
.multiply(BigDecimal.valueOf(unit))
|
||||||
|
.multiply(BigDecimal.valueOf((Integer) num)).toString();
|
||||||
|
}else {
|
||||||
|
|
||||||
|
// 计算箱数
|
||||||
|
BigDecimal sizeNum = BigDecimal.valueOf((double) size / 1000)
|
||||||
|
.multiply(BigDecimal.valueOf((double) size1 / 1000))
|
||||||
|
.multiply(BigDecimal.valueOf(unit));
|
||||||
|
|
||||||
|
BigDecimal squareNum = new BigDecimal(String.valueOf(num));
|
||||||
|
return squareNum.divide(sizeNum, 0, RoundingMode.HALF_UP).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@ -21,14 +22,14 @@ public interface FactoryDataSizeService {
|
|||||||
* @param createReqVO 创建信息
|
* @param createReqVO 创建信息
|
||||||
* @return 编号
|
* @return 编号
|
||||||
*/
|
*/
|
||||||
Long createData(@Valid FactoryDataSizeCreateReqVO createReqVO);
|
Long createData(@Valid FactoryDataSizeCreateReqVO createReqVO) throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新工厂规格数据
|
* 更新工厂规格数据
|
||||||
*
|
*
|
||||||
* @param updateReqVO 更新信息
|
* @param updateReqVO 更新信息
|
||||||
*/
|
*/
|
||||||
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO);
|
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO) throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除工厂规格数据
|
* 删除工厂规格数据
|
||||||
@ -50,4 +51,12 @@ public interface FactoryDataSizeService {
|
|||||||
* @return 出入库规格数据之和
|
* @return 出入库规格数据之和
|
||||||
*/
|
*/
|
||||||
List<FactoryDataInfoRespVO> getSUMByDateTimes(LocalDateTime[] dateTimes);
|
List<FactoryDataInfoRespVO> getSUMByDateTimes(LocalDateTime[] dateTimes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得指定工厂上一次录入的规格信息
|
||||||
|
* @param factoryId 工厂编号
|
||||||
|
* @param dataTypes 数据类型
|
||||||
|
* @return 规格详情列表
|
||||||
|
*/
|
||||||
|
List<FactoryDataSizeDO> getLastSize(Long factoryId, List<Integer> dataTypes);
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,29 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
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.factorydata.vo.sizeData.FactoryDataSizeSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSizeMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSizeMapper;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.PACKAGE_DATA_EXISTS;
|
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.PACKAGE_DATA_EXISTS;
|
||||||
@ -36,16 +41,13 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
@Resource
|
@Resource
|
||||||
private FactoryDataSizeMapper factoryDataSizeMapper;
|
private FactoryDataSizeMapper factoryDataSizeMapper;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PackageDataService packageDataService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@Lazy // 循环依赖,避免报错
|
@Lazy // 循环依赖,避免报错
|
||||||
private FactoryDataService factoryDataService;
|
private FactoryDataService factoryDataService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createData(FactoryDataSizeCreateReqVO createReqVO) {
|
public Long createData(FactoryDataSizeCreateReqVO createReqVO) throws Exception {
|
||||||
|
|
||||||
//校验 当前日期得 入库数据是否已经录入
|
//校验 当前日期得 入库数据是否已经录入
|
||||||
if (createReqVO.getType() == 2) {
|
if (createReqVO.getType() == 2) {
|
||||||
@ -114,7 +116,7 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
factoryDataSizeDOs.add(dataSizeDO);
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reqVO.getInNum() != null) {
|
if (reqVO.getInNum() != null || reqVO.getSquareNum() != null) {
|
||||||
|
|
||||||
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
||||||
|
|
||||||
@ -124,6 +126,22 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
//设置入库数
|
//设置入库数
|
||||||
dataSizeDO.setType(4);
|
dataSizeDO.setType(4);
|
||||||
dataSizeDO.setNum(reqVO.getInNum());
|
dataSizeDO.setNum(reqVO.getInNum());
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (reqVO.getSizeName().contains("*")) {
|
||||||
|
dataSizeDO.setNum(
|
||||||
|
reqVO.getSquareNum() != null ? Integer.parseInt(factoryDataService.convertSquare(reqVO.getSquareNum(), 2, reqVO.getSizeName())) : reqVO.getInNum()
|
||||||
|
);
|
||||||
|
dataSizeDO.setSquareNum(
|
||||||
|
reqVO.getInNum() != null ? new BigDecimal(factoryDataService.convertSquare(reqVO.getInNum(), 1, reqVO.getSizeName())) : reqVO.getSquareNum()
|
||||||
|
);
|
||||||
|
}else {
|
||||||
|
dataSizeDO.setNum(reqVO.getInNum());
|
||||||
|
dataSizeDO.setSquareNum(reqVO.getSquareNum());
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new Exception(ex);
|
||||||
|
}
|
||||||
|
|
||||||
factoryDataSizeDOs.add(dataSizeDO);
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
}
|
}
|
||||||
@ -131,46 +149,39 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
|
|
||||||
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
||||||
|
|
||||||
// 判断打包线数据不为空时, 同步插入打包线数据
|
|
||||||
if (!createReqVO.getPackageData().isEmpty()) {
|
|
||||||
|
|
||||||
if (createReqVO.getPackageData().get(0).getId() != null) {
|
|
||||||
|
|
||||||
PackageDataCreateReqVO updateVO = new PackageDataCreateReqVO();
|
|
||||||
updateVO.setPackageData(createReqVO.getPackageData());
|
|
||||||
|
|
||||||
//更新 打包线数据
|
|
||||||
packageDataService.updatePackageData(updateVO);
|
|
||||||
}else {
|
|
||||||
|
|
||||||
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
|
|
||||||
packCreateReqVO.setFactoryId(createReqVO.getPackageData().get(0).getFactoryId());
|
|
||||||
packCreateReqVO.setPackageData(createReqVO.getPackageData());
|
|
||||||
packCreateReqVO.setPackageDate(createReqVO.getDate());
|
|
||||||
|
|
||||||
//插入打包线数据
|
|
||||||
packageDataService.createPackageData(packCreateReqVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (long) factoryDataSizeDOs.size();
|
return (long) factoryDataSizeDOs.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
|
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) throws Exception {
|
||||||
|
|
||||||
// 更新
|
// 更新
|
||||||
List<FactoryDataSizeDO> createSizeDos = new ArrayList<>();
|
List<FactoryDataSizeDO> createSizeDos = new ArrayList<>();
|
||||||
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
||||||
for (FactoryDataSizeSaveReqVO reqVO : updateReqVO.getItems()) {
|
for (FactoryDataSizeSaveReqVO reqVO : updateReqVO.getItems()) {
|
||||||
|
|
||||||
if (reqVO.getInNum() != null) {
|
if (reqVO.getInNum() != null || reqVO.getSquareNum() != null) {
|
||||||
|
|
||||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
|
|
||||||
//设置入库数
|
//设置入库数
|
||||||
dataSizeDO.setId(reqVO.getInNumId());
|
dataSizeDO.setId(reqVO.getInNumId());
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (reqVO.getSizeName().contains("*")) {
|
||||||
|
dataSizeDO.setNum(
|
||||||
|
reqVO.getSquareNum() != null ? Integer.parseInt(factoryDataService.convertSquare(reqVO.getSquareNum(), 2, reqVO.getSizeName())) : reqVO.getInNum()
|
||||||
|
);
|
||||||
|
dataSizeDO.setSquareNum(
|
||||||
|
reqVO.getInNum() != null ? new BigDecimal(factoryDataService.convertSquare(reqVO.getInNum(), 1, reqVO.getSizeName())) : reqVO.getSquareNum()
|
||||||
|
);
|
||||||
|
}else {
|
||||||
dataSizeDO.setNum(reqVO.getInNum());
|
dataSizeDO.setNum(reqVO.getInNum());
|
||||||
|
dataSizeDO.setSquareNum(reqVO.getSquareNum());
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new Exception(ex);
|
||||||
|
}
|
||||||
|
|
||||||
if (reqVO.getInNumId() == null) {
|
if (reqVO.getInNumId() == null) {
|
||||||
|
|
||||||
@ -249,6 +260,12 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理删除的数据
|
||||||
|
List<Long> deleteIds = updateReqVO.getDeleteItems().stream()
|
||||||
|
.flatMap(item -> Stream.of(item.getInNumId(), item.getInDamageNumId(), item.getOutNumId(), item.getOutDamageNumId()))
|
||||||
|
.filter(ObjectUtil::isNotNull)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (!factoryDataSizeDOs.isEmpty()) {
|
if (!factoryDataSizeDOs.isEmpty()) {
|
||||||
factoryDataSizeMapper.updateBatch(factoryDataSizeDOs);
|
factoryDataSizeMapper.updateBatch(factoryDataSizeDOs);
|
||||||
}
|
}
|
||||||
@ -257,17 +274,10 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
factoryDataSizeMapper.insertBatch(createSizeDos);
|
factoryDataSizeMapper.insertBatch(createSizeDos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断 是否有打包线数据
|
if (CollectionUtil.isNotEmpty(deleteIds)) {
|
||||||
if (!updateReqVO.getPackageData().isEmpty()) {
|
factoryDataSizeMapper.deleteBatchIds(deleteIds);
|
||||||
|
|
||||||
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
|
|
||||||
packCreateReqVO.setFactoryId(updateReqVO.getFactoryId());
|
|
||||||
packCreateReqVO.setPackageDate(updateReqVO.getDate());
|
|
||||||
packCreateReqVO.setPackageData(updateReqVO.getPackageData());
|
|
||||||
|
|
||||||
//插入打包线数据
|
|
||||||
packageDataService.updatePackageData(packCreateReqVO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -296,4 +306,10 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
|
|
||||||
return factoryDataSizeMapper.selectSUMByDateTimes(dateTimes);
|
return factoryDataSizeMapper.selectSUMByDateTimes(dateTimes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FactoryDataSizeDO> getLastSize(Long factoryId, List<Integer> dataTypes) {
|
||||||
|
|
||||||
|
return factoryDataSizeMapper.selectLastSize(factoryId, dataTypes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,90 +11,13 @@
|
|||||||
|
|
||||||
<select id="selectDetailPage" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
<select id="selectDetailPage" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
||||||
SELECT
|
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,
|
|
||||||
a.create_time AS createTime
|
|
||||||
FROM
|
|
||||||
sf_package_data a
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT
|
|
||||||
factory_id,
|
|
||||||
date,
|
|
||||||
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_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>
|
|
||||||
a.deleted = 0
|
|
||||||
<if test="reqVO.factoryId != null">
|
|
||||||
AND a.factory_id = #{reqVO.factoryId}
|
|
||||||
</if>
|
|
||||||
<if test="reqVO.date != null and reqVO.date.length > 0">
|
|
||||||
<if test="reqVO.date[0] != null">
|
|
||||||
AND a.package_date >= #{reqVO.date[0]}
|
|
||||||
</if>
|
|
||||||
<if test="reqVO.date[1] != null">
|
|
||||||
AND a.package_date <= #{reqVO.date[1]}
|
|
||||||
</if>
|
|
||||||
</if>
|
|
||||||
<if test="reqVO.createTime != null and reqVO.createTime.length > 0">
|
|
||||||
<if test="reqVO.createTime[0] != null">
|
|
||||||
AND a.create_time >= #{reqVO.createTime[0]}
|
|
||||||
</if>
|
|
||||||
<if test="reqVO.createTime[1] != null">
|
|
||||||
AND a.create_time <= #{reqVO.createTime[1]}
|
|
||||||
</if>
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
|
|
||||||
UNION
|
|
||||||
|
|
||||||
SELECT
|
|
||||||
NULL AS id,
|
|
||||||
c.factory_id AS factoryId,
|
c.factory_id AS factoryId,
|
||||||
NULL AS packageName,
|
|
||||||
c.date AS date,
|
c.date AS date,
|
||||||
c.size_id AS sizeId,
|
c.size_id AS sizeId,
|
||||||
c.size_name AS sizeName,
|
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.id END) AS inNumId,
|
||||||
MAX(CASE WHEN c.type = 4 THEN c.num END) AS inNum,
|
MAX(CASE WHEN c.type = 4 THEN c.num END) AS inNum,
|
||||||
|
MAX(CASE WHEN c.type = 4 THEN c.square_num END) AS squareNum,
|
||||||
MAX(CASE WHEN c.type = 1 THEN c.id END) AS inDamageNumId,
|
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 = 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.id END) AS outNumId,
|
||||||
@ -105,15 +28,7 @@
|
|||||||
FROM
|
FROM
|
||||||
sf_factory_data_size AS c
|
sf_factory_data_size AS c
|
||||||
WHERE
|
WHERE
|
||||||
NOT EXISTS (
|
c.deleted = 0
|
||||||
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">
|
<if test="reqVO.factoryId != null">
|
||||||
AND c.factory_id = #{reqVO.factoryId}
|
AND c.factory_id = #{reqVO.factoryId}
|
||||||
</if>
|
</if>
|
||||||
@ -133,8 +48,14 @@
|
|||||||
AND c.create_time <= #{reqVO.createTime[1]}
|
AND c.create_time <= #{reqVO.createTime[1]}
|
||||||
</if>
|
</if>
|
||||||
</if>
|
</if>
|
||||||
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
|
GROUP BY
|
||||||
ORDER BY date DESC
|
c.factory_id,
|
||||||
|
c.date,
|
||||||
|
c.size_name
|
||||||
|
ORDER BY
|
||||||
|
c.date DESC,
|
||||||
|
c.factory_id,
|
||||||
|
c.size_name
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectDataSum" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO">
|
<select id="selectDataSum" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO">
|
||||||
|
@ -11,89 +11,13 @@
|
|||||||
|
|
||||||
<select id="selectDetailList" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
<select id="selectDetailList" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
||||||
SELECT
|
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,
|
|
||||||
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_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>
|
|
||||||
a.deleted = 0
|
|
||||||
<if test="factoryId != null">
|
|
||||||
AND a.factory_id = #{factoryId}
|
|
||||||
</if>
|
|
||||||
<if test="date != null and date.length > 0">
|
|
||||||
<if test="date[0] != null">
|
|
||||||
AND a.package_date >= #{date[0]}
|
|
||||||
</if>
|
|
||||||
<if test="date[1] != null">
|
|
||||||
AND a.package_date <= #{date[1]}
|
|
||||||
</if>
|
|
||||||
</if>
|
|
||||||
<if test="dateTime != null and dateTime.length > 0">
|
|
||||||
<if test="dateTime[0] != null">
|
|
||||||
AND a.create_time >= #{dateTime[0]}
|
|
||||||
</if>
|
|
||||||
<if test="dateTime[1] != null">
|
|
||||||
AND a.create_time <= #{dateTime[1]}
|
|
||||||
</if>
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
|
|
||||||
UNION
|
|
||||||
|
|
||||||
SELECT
|
|
||||||
NULL AS id,
|
|
||||||
c.factory_id AS factoryId,
|
c.factory_id AS factoryId,
|
||||||
NULL AS packageName,
|
|
||||||
c.date AS date,
|
c.date AS date,
|
||||||
c.size_id AS sizeId,
|
c.size_id AS sizeId,
|
||||||
c.size_name AS sizeName,
|
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.id END) AS inNumId,
|
||||||
MAX(CASE WHEN c.type = 4 THEN c.num END) AS inNum,
|
MAX(CASE WHEN c.type = 4 THEN c.num END) AS inNum,
|
||||||
|
MAX(CASE WHEN c.type = 4 THEN c.square_num END) AS squareNum,
|
||||||
MAX(CASE WHEN c.type = 1 THEN c.id END) AS inDamageNumId,
|
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 = 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.id END) AS outNumId,
|
||||||
@ -101,17 +25,9 @@
|
|||||||
MAX(CASE WHEN c.type = 3 THEN c.id END) AS outDamageNumId,
|
MAX(CASE WHEN c.type = 3 THEN c.id END) AS outDamageNumId,
|
||||||
MAX(CASE WHEN c.type = 3 THEN c.num END) AS outDamageNum
|
MAX(CASE WHEN c.type = 3 THEN c.num END) AS outDamageNum
|
||||||
FROM
|
FROM
|
||||||
sf_factory_data_size AS c
|
sf_factory_data_size c
|
||||||
WHERE
|
WHERE
|
||||||
NOT EXISTS (
|
c.deleted = 0
|
||||||
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="factoryId != null">
|
<if test="factoryId != null">
|
||||||
AND c.factory_id = #{factoryId}
|
AND c.factory_id = #{factoryId}
|
||||||
</if>
|
</if>
|
||||||
@ -131,8 +47,14 @@
|
|||||||
AND c.create_time <= #{dateTime[1]}
|
AND c.create_time <= #{dateTime[1]}
|
||||||
</if>
|
</if>
|
||||||
</if>
|
</if>
|
||||||
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
|
GROUP BY
|
||||||
ORDER BY date DESC
|
c.factory_id,
|
||||||
|
c.date,
|
||||||
|
c.size_name
|
||||||
|
ORDER BY
|
||||||
|
c.date DESC,
|
||||||
|
c.factory_id,
|
||||||
|
c.size_name
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectSUMByDateTimes" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
<select id="selectSUMByDateTimes" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
||||||
@ -152,4 +74,21 @@
|
|||||||
factory_id,
|
factory_id,
|
||||||
date
|
date
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectLastSize" resultType="cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO">
|
||||||
|
SELECT DISTINCT
|
||||||
|
a.size_id AS sizeId,
|
||||||
|
a.size_name AS sizeName
|
||||||
|
FROM
|
||||||
|
sf_factory_data_size a,
|
||||||
|
( SELECT MAX( date ) AS d FROM sf_factory_data_size ) b
|
||||||
|
WHERE
|
||||||
|
a.date = b.d
|
||||||
|
AND a.deleted = 0
|
||||||
|
AND a.factory_id = #{ factoryId }
|
||||||
|
AND a.type IN
|
||||||
|
<foreach collection="types" item="types" open="(" close=")" separator=",">
|
||||||
|
#{types}
|
||||||
|
</foreach>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
Loading…
Reference in New Issue
Block a user