diff --git a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java index 58112eb2..919d0217 100644 --- a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java +++ b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java @@ -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 { diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 9f5e2d31..690d3328 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -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, "银行卡号已存在"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java index 803e4014..41d0ed72 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java @@ -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 { - default List getUpLog(Long userId, Long formId) { + default PageResult getUpLog(Long userId, Long formId) { - return selectList(new LambdaQueryWrapperX() + return selectPage(new PageParam().setPageNo(1).setPageSize(1), new LambdaQueryWrapperX() .eq(LogInstanceDO::getStartUserId, userId) .eqIfPresent(LogInstanceDO::getFormId, formId) .orderByDesc(LogInstanceDO::getCreateTime)); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java index bf0ddc5c..7dd02141 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java @@ -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 logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId); - if (!logInstanceDOS.isEmpty()) { + PageResult logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId); + if (!logInstanceDOS.getList().isEmpty()) { - return logInstanceDOS.get(0); + return logInstanceDOS.getList().get(0); } return null; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java index b5088150..b95522bb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java @@ -42,4 +42,11 @@ public interface LogReadService { * @return 日志列表 */ List getReadListByReadUserId(Long userId); + + /** + * 获得指定日志的查看状态 + * @param logId 日志编号 + * @return 阅读状态 + */ + Boolean isReadByLogId(Long logId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java index a9574072..6f72b9eb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java @@ -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() + .eq(LogReadDo::getLogInstanceId, logId) + .eq(LogReadDo::getReadStatus, 1)); + + return count > 0L; + } } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/FactoryDataController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/FactoryDataController.java index 7ebf143b..1f496b11 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/FactoryDataController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/FactoryDataController.java @@ -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 createSizeData(@Valid @RequestBody FactoryDataSizeCreateReqVO createReqVO) { + public CommonResult 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 updateData(@Valid @RequestBody FactoryDataSizeCreateReqVO updateReqVO) { + public CommonResult 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> getLastSize(@RequestParam("factoryId") Long factoryId, @RequestParam("type") Integer type) { + + List 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 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)); } } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataDetailRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataDetailRespVO.java index 21fe7baa..bd9da431 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataDetailRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataDetailRespVO.java @@ -29,7 +29,7 @@ public class FactoryDataDetailRespVO { private Integer inTotalNum; @Schema(description = "入库总平方数") - private BigDecimal squareNum; + private BigDecimal squareTotalNum; @Schema(description = "出库总箱数") private Integer outTotalNum; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataImportVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataImportVO.java index 3d6da298..27f6d44d 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataImportVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataImportVO.java @@ -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; } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataInfoRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataInfoRespVO.java index 91f99354..4bbbe9a4 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataInfoRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/FactoryDataInfoRespVO.java @@ -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; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeCreateReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeCreateReqVO.java index 4bbf1673..1d28426d 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeCreateReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeCreateReqVO.java @@ -15,12 +15,12 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @Data public class FactoryDataSizeCreateReqVO { - @Schema(description = "打包线数据信息") - private List packageData; - @Schema(description = "规格信息", requiredMode = Schema.RequiredMode.REQUIRED) private List items; + @Schema(description = "删除的规格信息") + private List deleteItems; + @Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078") @NotNull(message = "工厂编号不能为空") private Long factoryId; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeDetailRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeDetailRespVO.java index f5b751a6..6fa671f0 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeDetailRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeDetailRespVO.java @@ -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; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeSaveReqVO.java index a1cf7836..acc5366f 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeSaveReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorydata/vo/sizeData/FactoryDataSizeSaveReqVO.java @@ -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; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java index 3fc6d043..2fa9dd50 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java @@ -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; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java index 7f90241e..09d4e117 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java @@ -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; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactorySimpleRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactorySimpleRespVO.java index 804e13dc..a6fe24eb 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactorySimpleRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactorySimpleRespVO.java @@ -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 subsidiary; } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorydata/FactoryDataSizeDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorydata/FactoryDataSizeDO.java index 9083f135..4da944d3 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorydata/FactoryDataSizeDO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorydata/FactoryDataSizeDO.java @@ -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; /** * 数据类型 diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java index 1139411c..36a718f7 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java @@ -55,6 +55,10 @@ public class FactoryInfoDO extends BaseDO { * 工厂业务类型 根据字典business_type来 */ private String businessType; + /** + * 工厂结算方式 字典值 sf_settlement_method + */ + private Integer settlementMethod; /** * 工厂简介 */ diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataMapper.java index fd07155c..76bdff90 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataMapper.java @@ -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 { } FactoryDataTotalVO selectDataSum(@Param("factoryId") Long factoryId, @Param("date") LocalDate[] date); + + } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataSizeMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataSizeMapper.java index 4f386b04..cdae92c7 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataSizeMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorydata/FactoryDataSizeMapper.java @@ -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 { } List selectSUMByDateTimes(@Param("dateTime") LocalDateTime[] dateTimes); + + List selectLastSize(@Param("factoryId") Long factoryId, + @Param("types") List types); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/job/factoryData/FactoryDataJob.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/job/factoryData/FactoryDataJob.java index 1339cc6f..bba6d182 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/job/factoryData/FactoryDataJob.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/job/factoryData/FactoryDataJob.java @@ -28,9 +28,6 @@ public class FactoryDataJob { @Resource private FactoryDataSizeService dataSizeService; - @Resource - private PackageDataService packageDataService; - @Resource private FactoryDataService factoryDataService; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/StringUtil.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/StringUtil.java new file mode 100644 index 00000000..5891b11a --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/StringUtil.java @@ -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; + } +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataService.java index cf225e96..6136ecce 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataService.java @@ -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 list, Integer type); + + String convertSquare(Object num, Integer type, String sizeName); + + } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataServiceImpl.java index b9dda46c..3a4f6779 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataServiceImpl.java @@ -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 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 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 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 infoRespVOS = dataSizeService.getDetailList(factoryId, new LocalDate[]{LocalDate.parse(date), LocalDate.parse(date)}, null); - List 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 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 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 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 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(); + } + } } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeService.java index 5dce046f..60d0e051 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeService.java @@ -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 getSUMByDateTimes(LocalDateTime[] dateTimes); + + /** + * 获得指定工厂上一次录入的规格信息 + * @param factoryId 工厂编号 + * @param dataTypes 数据类型 + * @return 规格详情列表 + */ + List getLastSize(Long factoryId, List dataTypes); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeServiceImpl.java index 344526c0..bfedefe5 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorydata/FactoryDataSizeServiceImpl.java @@ -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 createSizeDos = new ArrayList<>(); List 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 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 getLastSize(Long factoryId, List dataTypes) { + + return factoryDataSizeMapper.selectLastSize(factoryId, dataTypes); + } } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorydata/FactoryDataMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorydata/FactoryDataMapper.xml index eb0b521b..bbdffbef 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorydata/FactoryDataMapper.xml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorydata/FactoryDataMapper.xml @@ -11,90 +11,13 @@ 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 - - a.deleted = 0 - - AND a.factory_id = #{factoryId} - - - - AND a.package_date >= #{date[0]} - - - AND a.package_date <= #{date[1]} - - - - - AND a.create_time >= #{dateTime[0]} - - - AND a.create_time <= #{dateTime[1]} - - - - - 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 AND c.factory_id = #{factoryId} @@ -131,8 +47,14 @@ AND c.create_time <= #{dateTime[1]} - 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 + + \ No newline at end of file