模块:实现日志阅读状态检查与分页查询优化
- 在工作日志模块中,新增日志阅读状态检查功能,以防止修改已阅读的日志。 - 优化工作日志的分页查询逻辑,使用PageParam实现灵活的分页逻辑。 - 调整相关Service接口和实现类,添加日志阅读状态的检查方法。 - 修复Excel导出中关于数据验证样式的问题。 智能工厂模块:增加工厂数据平方数计算与规格转换 - 为智能工厂模块添加工厂数据的平方数计算功能,支持根据规格名称进行转换。 - 引入规格数据校验逻辑,确保数据的一致性和准确性。 -调整数据库模型和Mapper,以支持新的平方数字段和计算逻辑。 - 优化数据导入导出功能,提升用户体验和数据处理效率。
This commit is contained in:
parent
b5edcd0197
commit
47b730c072
@ -84,6 +84,7 @@ public class SpinnerWriteHandler implements SheetWriteHandler {
|
||||
/*** 处理Excel兼容性问题 **/
|
||||
if (dataValidation instanceof XSSFDataValidation) {
|
||||
dataValidation.setSuppressDropDownArrow(true); //验证输入数据是否真确
|
||||
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
|
||||
dataValidation.setShowErrorBox(true);
|
||||
dataValidation.setShowPromptBox(true);
|
||||
} else {
|
||||
|
@ -220,6 +220,8 @@ public interface ErrorCodeConstants {
|
||||
|
||||
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_EXISTS = new ErrorCode(1_009_020_003, "银行卡号已存在");
|
||||
|
@ -1,5 +1,7 @@
|
||||
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.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
@ -23,9 +25,9 @@ import java.util.List;
|
||||
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)
|
||||
.eqIfPresent(LogInstanceDO::getFormId, formId)
|
||||
.orderByDesc(LogInstanceDO::getCreateTime));
|
||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.service.worklog;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
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.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
|
||||
@ -178,23 +179,28 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
||||
// 校验存在
|
||||
validateLogInstanceExists(updateReqVO.getId());
|
||||
|
||||
//校验要修改的日志是否是当天发送的
|
||||
// 校验日志是否已被查看
|
||||
if (logReadService.isReadByLogId(updateReqVO.getId())) {
|
||||
throw exception(LOG_HAS_READ);
|
||||
}
|
||||
|
||||
// 校验要修改的日志是否是当天发送的
|
||||
LogInstanceDO logInstanceDO = logInstanceMapper.selectById(updateReqVO.getId());
|
||||
if (!logInstanceDO.getCreateTime().toLocalDate().equals(LocalDate.now())) {
|
||||
|
||||
throw exception(LOG_NOT_DATE);
|
||||
}
|
||||
|
||||
LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(updateReqVO.getFormId());
|
||||
String endTime = logRuleDO.getEndTime();
|
||||
if (logRuleDO.getType() != 1) {
|
||||
|
||||
endTime = endTime.split(",")[1];
|
||||
}
|
||||
|
||||
if (LocalTime.now().isAfter(LocalTime.parse(endTime))) {
|
||||
throw exception(LOG_NOT_UPDATE);
|
||||
}
|
||||
// LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(updateReqVO.getFormId());
|
||||
// String endTime = logRuleDO.getEndTime();
|
||||
// if (logRuleDO.getType() != 1) {
|
||||
//
|
||||
// endTime = endTime.split(",")[1];
|
||||
// }
|
||||
//
|
||||
// if (LocalTime.now().isAfter(LocalTime.parse(endTime))) {
|
||||
// throw exception(LOG_NOT_UPDATE);
|
||||
// }
|
||||
|
||||
// 更新
|
||||
LogInstanceDO updateObj = BeanUtils.toBean(updateReqVO, LogInstanceDO.class);
|
||||
@ -320,10 +326,10 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
||||
@Override
|
||||
public LogInstanceDO getUpLog(Long formId) {
|
||||
|
||||
List<LogInstanceDO> logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId);
|
||||
if (!logInstanceDOS.isEmpty()) {
|
||||
PageResult<LogInstanceDO> logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId);
|
||||
if (!logInstanceDOS.getList().isEmpty()) {
|
||||
|
||||
return logInstanceDOS.get(0);
|
||||
return logInstanceDOS.getList().get(0);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -42,4 +42,11 @@ public interface LogReadService {
|
||||
* @return 日志列表
|
||||
*/
|
||||
List<LogReadDo> getReadListByReadUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 获得指定日志的查看状态
|
||||
* @param logId 日志编号
|
||||
* @return 阅读状态
|
||||
*/
|
||||
Boolean isReadByLogId(Long logId);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
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.mysql.worklog.LogReadMapper;
|
||||
import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO;
|
||||
@ -75,4 +76,14 @@ public class LogReadServiceImpl implements LogReadService{
|
||||
|
||||
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.sizeData.FactoryDataSizeCreateReqVO;
|
||||
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.size.SizeDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
||||
@ -28,6 +30,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -56,7 +59,7 @@ public class FactoryDataController {
|
||||
@PostMapping("/create-size")
|
||||
@Operation(summary = "创建工厂出库入库规格数据")
|
||||
@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));
|
||||
}
|
||||
@ -64,7 +67,7 @@ public class FactoryDataController {
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新工厂出库入库数据")
|
||||
@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);
|
||||
return success(true);
|
||||
@ -81,6 +84,17 @@ public class FactoryDataController {
|
||||
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")
|
||||
@Operation(summary = "获得工厂出库入库数据")
|
||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||
@ -170,6 +184,10 @@ public class FactoryDataController {
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
@ -29,7 +29,7 @@ public class FactoryDataDetailRespVO {
|
||||
private Integer inTotalNum;
|
||||
|
||||
@Schema(description = "入库总平方数")
|
||||
private BigDecimal squareNum;
|
||||
private BigDecimal squareTotalNum;
|
||||
|
||||
@Schema(description = "出库总箱数")
|
||||
private Integer outTotalNum;
|
||||
|
@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
@ -56,6 +57,9 @@ public class FactoryDataImportVO {
|
||||
@ExcelProperty("出入库数")
|
||||
private Integer num;
|
||||
|
||||
@ExcelProperty("入库平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@ExcelProperty("破损数")
|
||||
private Integer damageNum;
|
||||
}
|
||||
|
@ -14,15 +14,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
||||
@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;
|
||||
|
||||
@ -32,15 +26,6 @@ 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 = "入库数量Id")
|
||||
private Long inNumId;
|
||||
|
||||
|
@ -15,12 +15,12 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
||||
@Data
|
||||
public class FactoryDataSizeCreateReqVO {
|
||||
|
||||
@Schema(description = "打包线数据信息")
|
||||
private List<PackageDataSaveReqVO> packageData;
|
||||
|
||||
@Schema(description = "规格信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<FactoryDataSizeSaveReqVO> items;
|
||||
|
||||
@Schema(description = "删除的规格信息")
|
||||
private List<FactoryDataSizeSaveReqVO> deleteItems;
|
||||
|
||||
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
@NotNull(message = "工厂编号不能为空")
|
||||
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 lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
@ -19,6 +20,9 @@ public class FactoryDataSizeDetailRespVO {
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "是否可编辑 | 0否 1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Integer isEdit;
|
||||
|
||||
/**
|
||||
* 入库数据
|
||||
*/
|
||||
@ -32,30 +36,21 @@ public class FactoryDataSizeDetailRespVO {
|
||||
@Data
|
||||
public static class InItem {
|
||||
|
||||
@Schema(description = "打包线数据id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "打包线名称")
|
||||
private String packageName;
|
||||
|
||||
@Schema(description = "规格id")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "手动打包数")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "自动打包数")
|
||||
private Integer autoNum;
|
||||
|
||||
@Schema(description = "入库数Id")
|
||||
private Long inNumId;
|
||||
|
||||
@Schema(description = "入库数")
|
||||
private Integer inNum;
|
||||
|
||||
@Schema(description = "入库平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "打包破损数")
|
||||
private Integer damageNum;
|
||||
|
||||
|
@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂规格数据修改 Request VO")
|
||||
@Data
|
||||
@ -17,16 +18,15 @@ public class FactoryDataSizeSaveReqVO {
|
||||
@NotNull(message = "规格名称不能为空")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "4")
|
||||
@NotNull(message = "规格片数不能为空")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "入库数量Id")
|
||||
private Long inNumId;
|
||||
|
||||
@Schema(description = "入库数量")
|
||||
private Integer inNum;
|
||||
|
||||
@Schema(description = "入库平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "入库破损数量Id")
|
||||
private Long inDamageNumId;
|
||||
|
||||
|
@ -35,6 +35,10 @@ public class FactoryInfoRespVO {
|
||||
@ExcelProperty("工厂业务类型")
|
||||
private String businessType;
|
||||
|
||||
@Schema(description = "结算方式", example = "1")
|
||||
@ExcelProperty("结算方式")
|
||||
private Integer settlementMethod;
|
||||
|
||||
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
||||
@ExcelProperty("工厂简介")
|
||||
private String description;
|
||||
|
@ -30,6 +30,9 @@ public class FactoryInfoSaveReqVO {
|
||||
@Schema(description = "工厂业务类型 根据字典business_type来", example = "1")
|
||||
private String businessType;
|
||||
|
||||
@Schema(description = "工厂结算方式 | 字典值 sf_settlement_method", example = "1")
|
||||
private Integer settlementMethod;
|
||||
|
||||
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
||||
private String description;
|
||||
|
||||
|
@ -21,6 +21,9 @@ public class FactorySimpleRespVO {
|
||||
@Schema(description = "工厂简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "第一工厂")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "结算方式")
|
||||
private Integer settlementMethod;
|
||||
|
||||
@Schema(description = "监控列表")
|
||||
private List<CameraSimpleRespVO> subsidiary;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
@ -43,9 +44,9 @@ public class FactoryDataSizeDO extends BaseDO {
|
||||
private String sizeName;
|
||||
|
||||
/**
|
||||
* 规格片数
|
||||
* 平方数
|
||||
*/
|
||||
private String sizePieces;
|
||||
private BigDecimal squareNum;
|
||||
|
||||
/**
|
||||
* 数据类型
|
||||
|
@ -55,6 +55,10 @@ public class FactoryInfoDO extends BaseDO {
|
||||
* 工厂业务类型 根据字典business_type来
|
||||
*/
|
||||
private String businessType;
|
||||
/**
|
||||
* 工厂结算方式 字典值 sf_settlement_method
|
||||
*/
|
||||
private Integer settlementMethod;
|
||||
/**
|
||||
* 工厂简介
|
||||
*/
|
||||
|
@ -1,11 +1,14 @@
|
||||
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.query.LambdaQueryWrapperX;
|
||||
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;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
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);
|
||||
|
||||
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
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.query.LambdaQueryWrapperX;
|
||||
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<FactoryDataSizeDO> selectLastSize(@Param("factoryId") Long factoryId,
|
||||
@Param("types") List<Integer> types);
|
||||
}
|
||||
|
@ -28,9 +28,6 @@ public class FactoryDataJob {
|
||||
@Resource
|
||||
private FactoryDataSizeService dataSizeService;
|
||||
|
||||
@Resource
|
||||
private PackageDataService packageDataService;
|
||||
|
||||
@Resource
|
||||
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.FactoryDataSizeDetailRespVO;
|
||||
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 java.time.LocalDate;
|
||||
@ -31,7 +32,7 @@ public interface FactoryDataService {
|
||||
*
|
||||
* @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);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取当天的所有数据
|
||||
*
|
||||
@ -97,4 +100,8 @@ public interface FactoryDataService {
|
||||
* @return 结果
|
||||
*/
|
||||
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.mysql.factorydata.FactoryDataMapper;
|
||||
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.packageInfo.PackageService;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||
@ -30,6 +31,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
@ -59,15 +61,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
@Resource
|
||||
private FactoryInfoService factoryInfoService;
|
||||
|
||||
@Resource
|
||||
private PackageDataService packageDataService;
|
||||
|
||||
@Resource
|
||||
private FactoryDataSizeMapper factoryDataSizeMapper;
|
||||
|
||||
@Resource
|
||||
private PackageService packageService;
|
||||
|
||||
@Override
|
||||
public Long createData(List<FactoryDataDO> factoryDataDOS) {
|
||||
|
||||
@ -79,7 +75,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
|
||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) throws Exception {
|
||||
|
||||
// 修改 规格明细数据
|
||||
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")));
|
||||
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 -> {
|
||||
|
||||
@ -107,12 +96,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
break;
|
||||
//入库数据
|
||||
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.setDamageNum(damageNum);
|
||||
data.setSquareNum(packageDataDOS.stream().map(PackageDataDO::getSquareNum).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
data.setTotalNum(updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getInNum).sum());
|
||||
data.setDamageNum(updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getInDamageNum).sum());
|
||||
}
|
||||
});
|
||||
|
||||
@ -127,9 +113,6 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
|
||||
//删除出入库 规格数据
|
||||
dataSizeService.deleteData(factoryId, date);
|
||||
|
||||
//删除打包线数据
|
||||
packageDataService.deletePackageData(factoryId, date);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -139,23 +122,17 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
respVO.setFactoryId(factoryId);
|
||||
respVO.setDate(LocalDate.parse(date));
|
||||
|
||||
//获得 规则明细数据
|
||||
//获得 规格明细数据
|
||||
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()
|
||||
.filter(info -> info.getInNum() != null)
|
||||
.filter(info -> info.getInNum() != null || info.getInDamageNum() != null)
|
||||
.map(info -> {
|
||||
FactoryDataSizeDetailRespVO.InItem inItem = BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.InItem.class);
|
||||
inItem.setIsEnable(1);
|
||||
return inItem;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
inItems.addAll(packageInfo);
|
||||
respVO.setInItems(inItems);
|
||||
|
||||
respVO.setOutItems(
|
||||
@ -164,6 +141,14 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
.map(info -> BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.OutItem.class))
|
||||
.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;
|
||||
}
|
||||
|
||||
@ -198,18 +183,13 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
dataDetailRespVO.setDate(date.getKey());
|
||||
//设置入库总数
|
||||
int inSum = date.getValue().stream()
|
||||
.map(info -> {
|
||||
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;
|
||||
})
|
||||
.map(info -> Optional.ofNullable(info.getInNum()).orElse(0))
|
||||
.mapToInt(Integer::intValue).sum();
|
||||
dataDetailRespVO.setInTotalNum(inSum == 0 ? null : inSum);
|
||||
|
||||
// //设置入库平方数
|
||||
// dataDetailRespVO.setSquareNum(date.getValue().stream().map(FactoryDataInfoRespVO::getSquareNum)
|
||||
// .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
//设置入库平方总数数
|
||||
dataDetailRespVO.setSquareTotalNum(date.getValue().stream().map(FactoryDataInfoRespVO::getSquareNum)
|
||||
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
|
||||
//设置出库总数
|
||||
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));
|
||||
return respVO;
|
||||
}).mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).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());
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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 -> {
|
||||
|
||||
@ -305,39 +280,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
// 获取 规格名称
|
||||
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<>();
|
||||
|
||||
if (data.getNum() != null) {
|
||||
if (data.getNum() != null || data.getSquareNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||
//设置规格信息
|
||||
@ -348,9 +293,28 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
dataSizeDO.setDate(data.getDate());
|
||||
// 根据type 设置入库数还是出库数
|
||||
dataSizeDO.setType(type == 1 ? 4 : 2);
|
||||
dataSizeDO.setNum(data.getNum());
|
||||
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.setSquareNum(data.getSquareNum());
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), "请正确填写入库数或者入库平方数");
|
||||
return;
|
||||
}
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}else {
|
||||
respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), "请正确填写入库数或者入库平方数");
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.getDamageNum() != null) {
|
||||
@ -371,7 +335,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
|
||||
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
||||
|
||||
respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate());
|
||||
// respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate());
|
||||
});
|
||||
|
||||
return respVO;
|
||||
@ -394,22 +358,21 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
FactoryInfoDO factoryInfoDO = factoryInfoService.getFactoryByName(factoryName);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
// 获取 规格ID
|
||||
Long sizeId = Long.valueOf(sizeName.split(":")[0]);
|
||||
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) {
|
||||
throw exception(PACKAGE_DATA_EXISTS);
|
||||
@ -417,4 +380,33 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
|
||||
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.sizeData.FactoryDataSizeCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.time.LocalDate;
|
||||
@ -21,14 +22,14 @@ public interface FactoryDataSizeService {
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createData(@Valid FactoryDataSizeCreateReqVO createReqVO);
|
||||
Long createData(@Valid FactoryDataSizeCreateReqVO createReqVO) throws Exception;
|
||||
|
||||
/**
|
||||
* 更新工厂规格数据
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO);
|
||||
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO) throws Exception;
|
||||
|
||||
/**
|
||||
* 删除工厂规格数据
|
||||
@ -50,4 +51,12 @@ public interface FactoryDataSizeService {
|
||||
* @return 出入库规格数据之和
|
||||
*/
|
||||
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;
|
||||
|
||||
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.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.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.FactoryDataSizeDO;
|
||||
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.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
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.module.smartfactory.enums.ErrorCodeConstants.PACKAGE_DATA_EXISTS;
|
||||
@ -36,16 +41,13 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
@Resource
|
||||
private FactoryDataSizeMapper factoryDataSizeMapper;
|
||||
|
||||
@Resource
|
||||
private PackageDataService packageDataService;
|
||||
|
||||
@Resource
|
||||
@Lazy // 循环依赖,避免报错
|
||||
private FactoryDataService factoryDataService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createData(FactoryDataSizeCreateReqVO createReqVO) {
|
||||
public Long createData(FactoryDataSizeCreateReqVO createReqVO) throws Exception {
|
||||
|
||||
//校验 当前日期得 入库数据是否已经录入
|
||||
if (createReqVO.getType() == 2) {
|
||||
@ -114,7 +116,7 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
|
||||
if (reqVO.getInNum() != null) {
|
||||
if (reqVO.getInNum() != null || reqVO.getSquareNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
||||
|
||||
@ -124,6 +126,22 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
//设置入库数
|
||||
dataSizeDO.setType(4);
|
||||
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);
|
||||
}
|
||||
@ -131,46 +149,39 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
|
||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) throws Exception {
|
||||
|
||||
// 更新
|
||||
List<FactoryDataSizeDO> createSizeDos = new ArrayList<>();
|
||||
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
||||
for (FactoryDataSizeSaveReqVO reqVO : updateReqVO.getItems()) {
|
||||
|
||||
if (reqVO.getInNum() != null) {
|
||||
if (reqVO.getInNum() != null || reqVO.getSquareNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||
|
||||
//设置入库数
|
||||
dataSizeDO.setId(reqVO.getInNumId());
|
||||
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);
|
||||
}
|
||||
|
||||
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()) {
|
||||
factoryDataSizeMapper.updateBatch(factoryDataSizeDOs);
|
||||
}
|
||||
@ -257,17 +274,10 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
factoryDataSizeMapper.insertBatch(createSizeDos);
|
||||
}
|
||||
|
||||
// 判断 是否有打包线数据
|
||||
if (!updateReqVO.getPackageData().isEmpty()) {
|
||||
|
||||
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
|
||||
packCreateReqVO.setFactoryId(updateReqVO.getFactoryId());
|
||||
packCreateReqVO.setPackageDate(updateReqVO.getDate());
|
||||
packCreateReqVO.setPackageData(updateReqVO.getPackageData());
|
||||
|
||||
//插入打包线数据
|
||||
packageDataService.updatePackageData(packCreateReqVO);
|
||||
if (CollectionUtil.isNotEmpty(deleteIds)) {
|
||||
factoryDataSizeMapper.deleteBatchIds(deleteIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -296,4 +306,10 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
|
||||
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
|
||||
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,
|
||||
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 = 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.num END) AS inDamageNum,
|
||||
MAX(CASE WHEN c.type = 2 THEN c.id END) AS outNumId,
|
||||
@ -105,15 +28,7 @@
|
||||
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
|
||||
c.deleted = 0
|
||||
<if test="reqVO.factoryId != null">
|
||||
AND c.factory_id = #{reqVO.factoryId}
|
||||
</if>
|
||||
@ -133,8 +48,14 @@
|
||||
AND c.create_time <= #{reqVO.createTime[1]}
|
||||
</if>
|
||||
</if>
|
||||
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
|
||||
ORDER BY date DESC
|
||||
GROUP BY
|
||||
c.factory_id,
|
||||
c.date,
|
||||
c.size_name
|
||||
ORDER BY
|
||||
c.date DESC,
|
||||
c.factory_id,
|
||||
c.size_name
|
||||
</select>
|
||||
|
||||
<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
|
||||
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,
|
||||
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 = 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.num END) AS inDamageNum,
|
||||
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.num END) AS outDamageNum
|
||||
FROM
|
||||
sf_factory_data_size AS c
|
||||
sf_factory_data_size 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
|
||||
c.deleted = 0
|
||||
<if test="factoryId != null">
|
||||
AND c.factory_id = #{factoryId}
|
||||
</if>
|
||||
@ -131,8 +47,14 @@
|
||||
AND c.create_time <= #{dateTime[1]}
|
||||
</if>
|
||||
</if>
|
||||
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
|
||||
ORDER BY date DESC
|
||||
GROUP BY
|
||||
c.factory_id,
|
||||
c.date,
|
||||
c.size_name
|
||||
ORDER BY
|
||||
c.date DESC,
|
||||
c.factory_id,
|
||||
c.size_name
|
||||
</select>
|
||||
|
||||
<select id="selectSUMByDateTimes" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO">
|
||||
@ -152,4 +74,21 @@
|
||||
factory_id,
|
||||
date
|
||||
</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>
|
Loading…
Reference in New Issue
Block a user