Merge branch 'dev' of http://47.97.8.94:19527/yj/zn-cloud into dev
This commit is contained in:
commit
e6292c3ae2
@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.excel.core.util;
|
|||||||
|
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.alibaba.excel.converters.longconverter.LongStringConverter;
|
import com.alibaba.excel.converters.longconverter.LongStringConverter;
|
||||||
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
@ -37,7 +38,9 @@ public class ExcelUtils {
|
|||||||
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
|
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
|
||||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
|
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
|
||||||
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
|
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
|
||||||
.sheet(sheetName).doWrite(data);
|
.excelType(ExcelTypeEnum.XLSX)
|
||||||
|
.sheet(sheetName)
|
||||||
|
.doWrite(data);
|
||||||
|
|
||||||
// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
|
// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
|
||||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name()));
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name()));
|
||||||
@ -45,13 +48,15 @@ public class ExcelUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T> void write(HttpServletResponse response, String filename, String sheetName,
|
public static <T> void write(HttpServletResponse response, String filename, String sheetName,
|
||||||
Class<T> head, List<T> data, List<String> deptName, List<String> postName) throws IOException {
|
Class<T> head, List<T> data,
|
||||||
|
int col, List<String> value,
|
||||||
|
int col1,List<String> value1) throws IOException {
|
||||||
|
|
||||||
// 输出excel
|
// 输出excel
|
||||||
EasyExcel.write(response.getOutputStream(), head)
|
EasyExcel.write(response.getOutputStream(), head)
|
||||||
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
|
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
|
||||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
|
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
|
||||||
.registerWriteHandler(new SpinnerWriteHandler(deptName, postName))
|
.registerWriteHandler(new SpinnerWriteHandler(col, value, col1, value1))
|
||||||
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
|
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
|
||||||
.sheet(sheetName).doWrite(data);
|
.sheet(sheetName).doWrite(data);
|
||||||
|
|
||||||
|
@ -16,6 +16,10 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class SpinnerWriteHandler implements SheetWriteHandler {
|
public class SpinnerWriteHandler implements SheetWriteHandler {
|
||||||
|
|
||||||
|
private int col;
|
||||||
|
|
||||||
|
private int col1;
|
||||||
|
|
||||||
private List<String> deptName;
|
private List<String> deptName;
|
||||||
|
|
||||||
private List<String> postName;
|
private List<String> postName;
|
||||||
@ -23,8 +27,11 @@ public class SpinnerWriteHandler implements SheetWriteHandler {
|
|||||||
public SpinnerWriteHandler() {
|
public SpinnerWriteHandler() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpinnerWriteHandler(List<String> deptName, List<String> postName) {
|
public SpinnerWriteHandler(int col, List<String> deptName,
|
||||||
|
int col1, List<String> postName) {
|
||||||
|
|
||||||
|
this.col = col;
|
||||||
|
this.col1 = col1;
|
||||||
this.deptName = deptName;
|
this.deptName = deptName;
|
||||||
this.postName = postName;
|
this.postName = postName;
|
||||||
}
|
}
|
||||||
@ -35,8 +42,8 @@ public class SpinnerWriteHandler implements SheetWriteHandler {
|
|||||||
|
|
||||||
Map<Integer, String[]> mapDropDown = new HashMap<>();
|
Map<Integer, String[]> mapDropDown = new HashMap<>();
|
||||||
// 这里的key值 对应导出列的顺序 从0开始
|
// 这里的key值 对应导出列的顺序 从0开始
|
||||||
mapDropDown.put(1, deptName.toArray(new String[0]));
|
mapDropDown.put(col, deptName.toArray(new String[0]));
|
||||||
mapDropDown.put(2, postName.toArray(new String[0]));
|
mapDropDown.put(col1, postName.toArray(new String[0]));
|
||||||
Sheet sheet = writeSheetHolder.getSheet();
|
Sheet sheet = writeSheetHolder.getSheet();
|
||||||
/// 开始设置下拉框
|
/// 开始设置下拉框
|
||||||
DataValidationHelper helper = sheet.getDataValidationHelper();// 设置下拉框
|
DataValidationHelper helper = sheet.getDataValidationHelper();// 设置下拉框
|
||||||
|
@ -66,6 +66,11 @@ public interface DeptApi {
|
|||||||
@Parameter(name = "factoryId", description = "工厂编号", example = "100001", required = true)
|
@Parameter(name = "factoryId", description = "工厂编号", example = "100001", required = true)
|
||||||
CommonResult<DeptRespDTO> getDeptByFactoryId(@RequestParam("factoryId") Long factoryId);
|
CommonResult<DeptRespDTO> getDeptByFactoryId(@RequestParam("factoryId") Long factoryId);
|
||||||
|
|
||||||
|
@GetMapping(PREFIX + "/getListByLeader")
|
||||||
|
@Operation(summary = "获取所有部门信息")
|
||||||
|
@Parameter(name = "userId", description = "用户编号", example = "146", required = true)
|
||||||
|
CommonResult<List<DeptRespDTO>> getDeptListByLeader(@RequestParam("userId") Long userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得指定编号的部门 Map
|
* 获得指定编号的部门 Map
|
||||||
*
|
*
|
||||||
|
@ -101,4 +101,11 @@ public class DeptApiImpl implements DeptApi {
|
|||||||
DeptDO deptDO = deptService.getDeptByFactoryId(factoryId);
|
DeptDO deptDO = deptService.getDeptByFactoryId(factoryId);
|
||||||
return success(BeanUtils.toBean(deptDO, DeptRespDTO.class));
|
return success(BeanUtils.toBean(deptDO, DeptRespDTO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<List<DeptRespDTO>> getDeptListByLeader(Long userId) {
|
||||||
|
|
||||||
|
List<DeptDO> deptDOS = deptService.getDeptByLeaderId(userId);
|
||||||
|
return success(BeanUtils.toBean(deptDOS, DeptRespDTO.class));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,9 @@ public class UserController {
|
|||||||
|
|
||||||
// 输出 Excel
|
// 输出 Excel
|
||||||
ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class,
|
ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class,
|
||||||
UserConvert.INSTANCE.convertList(list, deptMap, postMap), getDeptNameFun(deptDO), getPostNameFun(postDO));
|
UserConvert.INSTANCE.convertList(list, deptMap, postMap),
|
||||||
|
1, getDeptNameFun(deptDO),
|
||||||
|
2, getPostNameFun(postDO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/get-import-template")
|
@GetMapping("/get-import-template")
|
||||||
@ -237,7 +239,10 @@ public class UserController {
|
|||||||
postDO.sort(Comparator.comparing(PostDO::getSort));
|
postDO.sort(Comparator.comparing(PostDO::getSort));
|
||||||
|
|
||||||
// 输出
|
// 输出
|
||||||
ExcelUtils.write(response, "用户导入模板.xlsx", "用户列表", UserImportExcelVO.class, null, getDeptNameFun(deptDO), getPostNameFun(postDO));
|
ExcelUtils.write(response, "用户导入模板.xlsx", "用户列表",
|
||||||
|
UserImportExcelVO.class, null,
|
||||||
|
1, getDeptNameFun(deptDO),
|
||||||
|
2, getPostNameFun(postDO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/import")
|
@PostMapping("/import")
|
||||||
|
@ -24,4 +24,6 @@ public interface ErrorCodeConstants {
|
|||||||
//出入库数据模块
|
//出入库数据模块
|
||||||
ErrorCode SIZEDATA_NOT_EXISTS = new ErrorCode(1_000_002_001, "不能操作非当天录入得数据");
|
ErrorCode SIZEDATA_NOT_EXISTS = new ErrorCode(1_000_002_001, "不能操作非当天录入得数据");
|
||||||
|
|
||||||
|
ErrorCode FACTORY_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_002_002, "导入出入库数据不能为空!");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
// TODO 待办:请将下面的错误码复制到 yudao-module-smartfactory-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!!
|
|
||||||
// ========== 工厂信息 TODO 补充编号 ==========
|
|
||||||
ErrorCode FACTORY_INFO_NOT_EXISTS = new ErrorCode(TODO 补充编号, "工厂信息不存在");
|
|
@ -3,27 +3,33 @@ package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.*;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataSizeService;
|
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataSizeService;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.service.size.SizeService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
@ -40,6 +46,12 @@ public class FactoryDataController {
|
|||||||
@Resource
|
@Resource
|
||||||
private FactoryDataSizeService factoryDataSizeService;
|
private FactoryDataSizeService factoryDataSizeService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FactoryInfoService factoryInfoService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SizeService sizeService;
|
||||||
|
|
||||||
@PostMapping("/create-size")
|
@PostMapping("/create-size")
|
||||||
@Operation(summary = "创建工厂出库入库规格数据")
|
@Operation(summary = "创建工厂出库入库规格数据")
|
||||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:create')")
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:create')")
|
||||||
@ -110,8 +122,51 @@ public class FactoryDataController {
|
|||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
List<FactoryDataDetailRespVO> list = dataService.getDataPage(pageReqVO).getList();
|
List<FactoryDataDetailRespVO> list = dataService.getDataPage(pageReqVO).getList();
|
||||||
|
List<FactoryDataExportVO> exportVOS = new ArrayList<>();
|
||||||
|
for (FactoryDataDetailRespVO respVO : list) {
|
||||||
|
|
||||||
|
exportVOS.addAll(
|
||||||
|
respVO.getItems().stream().map(info -> {
|
||||||
|
FactoryDataExportVO exportVO = BeanUtils.toBean(info, FactoryDataExportVO.class);
|
||||||
|
exportVO.setFactoryName(respVO.getFactoryName());
|
||||||
|
exportVO.setDate(respVO.getDate());
|
||||||
|
exportVO.setInTotalNum(respVO.getInTotalNum());
|
||||||
|
exportVO.setOutTotalNum(respVO.getOutTotalNum());
|
||||||
|
exportVO.setDamageTotalNum(respVO.getDamageNum());
|
||||||
|
return exportVO;
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
// 导出 Excel
|
// 导出 Excel
|
||||||
ExcelUtils.write(response, "工厂出库入库数据.xls", "数据", FactoryDataDetailRespVO.class,
|
ExcelUtils.write(response, "工厂出库入库数据.xlsx", "数据", FactoryDataExportVO.class, exportVOS);
|
||||||
list);
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get-import-template")
|
||||||
|
@Operation(summary = "获得导入模板")
|
||||||
|
public void importTemplate(HttpServletResponse response) throws IOException {
|
||||||
|
|
||||||
|
// 获取工厂信息
|
||||||
|
List<FactoryInfoDO> factoryInfoDOS = factoryInfoService.getFactoryListByType();
|
||||||
|
List<String> factory = factoryInfoDOS.stream().map(info -> info.getId() + ":" + info.getShortName()).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 获取规格信息
|
||||||
|
List<SizeDO> sizeDOS = sizeService.getListSize();
|
||||||
|
List<String> size = sizeDOS.stream().map(info -> info.getId() + ":" + info.getName()).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 输出
|
||||||
|
ExcelUtils.write(response, "出入库数据导入模板.xlsx", "详情",
|
||||||
|
FactoryDataExportVO.class, null,
|
||||||
|
0, factory,
|
||||||
|
2, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/import")
|
||||||
|
@Operation(summary = "导入出入库数据")
|
||||||
|
@Parameter(name = "file", description = "Excel 文件", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:import')")
|
||||||
|
public CommonResult<FactoryImportRespVO> importExcel(@RequestParam("file") MultipartFile file) throws Exception {
|
||||||
|
|
||||||
|
List<FactoryDataImportVO> list = ExcelUtils.read(file, FactoryDataImportVO.class);
|
||||||
|
|
||||||
|
return success(dataService.importUserList(list));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,6 +20,11 @@ public class FactoryDataDetailRespVO {
|
|||||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
||||||
private LocalDate date;
|
private LocalDate date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格明细
|
||||||
|
*/
|
||||||
|
private List<FactoryDataInfoRespVO> items;
|
||||||
|
|
||||||
@Schema(description = "入库总箱数")
|
@Schema(description = "入库总箱数")
|
||||||
private Integer inTotalNum;
|
private Integer inTotalNum;
|
||||||
|
|
||||||
@ -34,9 +39,4 @@ public class FactoryDataDetailRespVO {
|
|||||||
|
|
||||||
@Schema(description = "是否可编辑 | 1可 ")
|
@Schema(description = "是否可编辑 | 1可 ")
|
||||||
private Integer isEdit;
|
private Integer isEdit;
|
||||||
|
|
||||||
/**
|
|
||||||
* 规格明细
|
|
||||||
*/
|
|
||||||
private List<FactoryDataInfoRespVO> items;
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Schema(description = "出入库数据导出excel VO")
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class FactoryDataExportVO {
|
||||||
|
|
||||||
|
@ExcelProperty("工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
|
||||||
|
@ExcelProperty("日期")
|
||||||
|
private LocalDate date;
|
||||||
|
|
||||||
|
@ExcelProperty("规格")
|
||||||
|
private String sizeName;
|
||||||
|
|
||||||
|
@ExcelProperty("入库数")
|
||||||
|
private Integer inNum;
|
||||||
|
|
||||||
|
@ExcelProperty("入库平方数")
|
||||||
|
private BigDecimal squareNum;
|
||||||
|
|
||||||
|
@ExcelProperty("打包破损数")
|
||||||
|
private Integer damageNum;
|
||||||
|
|
||||||
|
@ExcelProperty("入库破损数")
|
||||||
|
private Integer inDamageNum;
|
||||||
|
|
||||||
|
@ExcelProperty("出库数")
|
||||||
|
private Integer outNum;
|
||||||
|
|
||||||
|
@ExcelProperty("出库破损数")
|
||||||
|
private Integer outDamageNum;
|
||||||
|
|
||||||
|
@ExcelProperty("入库总数")
|
||||||
|
private Integer inTotalNum;
|
||||||
|
|
||||||
|
@ExcelProperty("出库总数")
|
||||||
|
private Integer outTotalNum;
|
||||||
|
|
||||||
|
@ExcelProperty("破损总数")
|
||||||
|
private Integer damageTotalNum;
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出入库数据导入 VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
|
||||||
|
public class FactoryDataImportVO {
|
||||||
|
|
||||||
|
@ExcelProperty("工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
|
||||||
|
@ExcelProperty("日期")
|
||||||
|
private LocalDate date;
|
||||||
|
|
||||||
|
@ExcelProperty("规格")
|
||||||
|
private String sizeName;
|
||||||
|
|
||||||
|
@ExcelProperty("手动打包数")
|
||||||
|
private Integer num;
|
||||||
|
|
||||||
|
@ExcelProperty("自动打包数")
|
||||||
|
private Integer autoNum;
|
||||||
|
|
||||||
|
@ExcelProperty("入库数")
|
||||||
|
private Integer inNum;
|
||||||
|
|
||||||
|
@ExcelProperty("打包破损数")
|
||||||
|
private Integer damageNum;
|
||||||
|
|
||||||
|
@ExcelProperty("入库破损数")
|
||||||
|
private Integer inDamageNum;
|
||||||
|
|
||||||
|
@ExcelProperty("出库数")
|
||||||
|
private Integer outNum;
|
||||||
|
|
||||||
|
@ExcelProperty("出库破损数")
|
||||||
|
private Integer outDamageNum;
|
||||||
|
}
|
@ -37,6 +37,9 @@ public class FactoryDataInfoRespVO {
|
|||||||
@Schema(description = "自动打包数")
|
@Schema(description = "自动打包数")
|
||||||
private Integer autoNum;
|
private Integer autoNum;
|
||||||
|
|
||||||
|
@Schema(description = "入库数量Id")
|
||||||
|
private Long inNumId;
|
||||||
|
|
||||||
@Schema(description = "入库数量")
|
@Schema(description = "入库数量")
|
||||||
private Integer inNum;
|
private Integer inNum;
|
||||||
|
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 出入库数据导入 Response VO")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FactoryImportRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "创建成功的用户名数组", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private List<String> createUsernames;
|
||||||
|
|
||||||
|
@Schema(description = "更新成功的用户名数组", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private List<String> updateUsernames;
|
||||||
|
|
||||||
|
@Schema(description = "导入失败的用户集合,key 为用户名,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private Map<String, String> failureUsernames;
|
||||||
|
}
|
@ -50,6 +50,12 @@ public class FactoryDataSizeDetailRespVO {
|
|||||||
@Schema(description = "自动打包数")
|
@Schema(description = "自动打包数")
|
||||||
private Integer autoNum;
|
private Integer autoNum;
|
||||||
|
|
||||||
|
@Schema(description = "入库数Id")
|
||||||
|
private Long inNumId;
|
||||||
|
|
||||||
|
@Schema(description = "入库数")
|
||||||
|
private Integer inNum;
|
||||||
|
|
||||||
@Schema(description = "打包破损数")
|
@Schema(description = "打包破损数")
|
||||||
private Integer damageNum;
|
private Integer damageNum;
|
||||||
|
|
||||||
@ -58,6 +64,9 @@ public class FactoryDataSizeDetailRespVO {
|
|||||||
|
|
||||||
@Schema(description = "入库破损数")
|
@Schema(description = "入库破损数")
|
||||||
private Integer inDamageNum;
|
private Integer inDamageNum;
|
||||||
|
|
||||||
|
@Schema(description = "是否可编辑 | 0否 1是")
|
||||||
|
private Integer isEnable = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -21,6 +21,12 @@ public class FactoryDataSizeSaveReqVO {
|
|||||||
@NotNull(message = "规格片数不能为空")
|
@NotNull(message = "规格片数不能为空")
|
||||||
private Integer sizePieces;
|
private Integer sizePieces;
|
||||||
|
|
||||||
|
@Schema(description = "入库数量Id")
|
||||||
|
private Long inNumId;
|
||||||
|
|
||||||
|
@Schema(description = "入库数量")
|
||||||
|
private Integer inNum;
|
||||||
|
|
||||||
@Schema(description = "入库破损数量Id")
|
@Schema(description = "入库破损数量Id")
|
||||||
private Long inDamageNumId;
|
private Long inDamageNumId;
|
||||||
|
|
||||||
|
@ -79,6 +79,15 @@ public class FactoryInfoController {
|
|||||||
return success(BeanUtils.toBean(factoryInfo, FactorySimpleRespVO.class));
|
return success(BeanUtils.toBean(factoryInfo, FactorySimpleRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/simple-list-authority")
|
||||||
|
@Operation(summary = "获得工厂列表(权限检验) | 用于前端下拉框")
|
||||||
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
||||||
|
public CommonResult<List<FactorySimpleRespVO>> getFactoryListByAuthority() {
|
||||||
|
|
||||||
|
List<FactoryInfoDO> factoryInfo = factoryInfoService.getFactoryListByAuthority();
|
||||||
|
return success(BeanUtils.toBean(factoryInfo, FactorySimpleRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得工厂信息分页")
|
@Operation(summary = "获得工厂信息分页")
|
||||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
||||||
|
@ -20,7 +20,9 @@ import java.util.List;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface FactoryDataSizeMapper extends BaseMapperX<FactoryDataSizeDO> {
|
public interface FactoryDataSizeMapper extends BaseMapperX<FactoryDataSizeDO> {
|
||||||
|
|
||||||
List<FactoryDataInfoRespVO> selectDetailList(@Param("factoryId") Long factoryId, @Param("date") LocalDate[] date);
|
List<FactoryDataInfoRespVO> selectDetailList(@Param("factoryId") Long factoryId,
|
||||||
|
@Param("date") LocalDate[] date,
|
||||||
|
@Param("dateTime") LocalDateTime[] createTime);
|
||||||
|
|
||||||
default void deleteByFactoryId(Long factoryId, String date) {
|
default void deleteByFactoryId(Long factoryId, String date) {
|
||||||
|
|
||||||
|
@ -29,11 +29,11 @@ public interface FactoryInfoMapper extends BaseMapperX<FactoryInfoDO> {
|
|||||||
.orderByAsc(FactoryInfoDO::getSort));
|
.orderByAsc(FactoryInfoDO::getSort));
|
||||||
}
|
}
|
||||||
|
|
||||||
default List<FactoryInfoDO> selectListByType(Long factoryId) {
|
default List<FactoryInfoDO> selectListByType(List<Long> factoryId) {
|
||||||
|
|
||||||
return selectList(new LambdaQueryWrapperX<FactoryInfoDO>()
|
return selectList(new LambdaQueryWrapperX<FactoryInfoDO>()
|
||||||
.eq(FactoryInfoDO::getType, 3)
|
.eq(FactoryInfoDO::getType, 3)
|
||||||
.eqIfPresent(FactoryInfoDO::getId, factoryId));
|
.inIfPresent(FactoryInfoDO::getId, factoryId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -71,6 +71,12 @@ public class FactoryDataJob {
|
|||||||
data.setDamageNum(data.getDamageNum() + infos.get(0).getInDamageNum());
|
data.setDamageNum(data.getDamageNum() + infos.get(0).getInDamageNum());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (infos.get(0).getInNum() != null) {
|
||||||
|
|
||||||
|
// 设置 入库总数数
|
||||||
|
data.setTotalNum(data.getTotalNum() + infos.get(0).getInNum());
|
||||||
|
}
|
||||||
|
|
||||||
// 如果存在出库数时
|
// 如果存在出库数时
|
||||||
if (infos.get(0).getOutNum() != null) {
|
if (infos.get(0).getOutNum() != null) {
|
||||||
|
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.*;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||||
@ -92,4 +90,11 @@ public interface FactoryDataService {
|
|||||||
* @return 出入库数据
|
* @return 出入库数据
|
||||||
*/
|
*/
|
||||||
FactoryDataDO getListByType(Long factoryId, LocalDate date, Integer type);
|
FactoryDataDO getListByType(Long factoryId, LocalDate date, Integer type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入出入库数据
|
||||||
|
* @param list 数据
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
FactoryImportRespVO importUserList(List<FactoryDataImportVO> list);
|
||||||
}
|
}
|
@ -1,25 +1,28 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.*;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeDetailRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeSaveReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.convert.packageData.PackageDataConvert;
|
import cn.iocoder.yudao.module.smartfactory.convert.packageData.PackageDataConvert;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packageInfo.PackageDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataMapper;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSizeMapper;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.service.packageInfo.PackageService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
@ -34,7 +37,9 @@ import java.time.format.DateTimeFormatter;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||||
|
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,6 +64,12 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
@Resource
|
@Resource
|
||||||
private PackageDataService packageDataService;
|
private PackageDataService packageDataService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FactoryDataSizeMapper factoryDataSizeMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PackageService packageService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createData(List<FactoryDataDO> factoryDataDOS) {
|
public Long createData(List<FactoryDataDO> factoryDataDOS) {
|
||||||
|
|
||||||
@ -131,13 +142,23 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
respVO.setDate(LocalDate.parse(date));
|
respVO.setDate(LocalDate.parse(date));
|
||||||
|
|
||||||
//获得 规则明细数据
|
//获得 规则明细数据
|
||||||
List<FactoryDataInfoRespVO> infoRespVOS = dataSizeService.getDetailList(factoryId, new LocalDate[]{LocalDate.parse(date), LocalDate.parse(date)});
|
List<FactoryDataInfoRespVO> infoRespVOS = dataSizeService.getDetailList(factoryId, new LocalDate[]{LocalDate.parse(date), LocalDate.parse(date)}, null);
|
||||||
|
|
||||||
respVO.setInItems(
|
List<FactoryDataSizeDetailRespVO.InItem> packageInfo = infoRespVOS.stream()
|
||||||
infoRespVOS.stream()
|
.filter(info -> (info.getInDamageNum() != null && info.getInNum() == null) || info.getNum() != null || info.getAutoNum() != null)
|
||||||
.filter(info -> info.getInNum() != null || info.getInDamageNum() != null)
|
.map(info -> BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.InItem.class))
|
||||||
.map(info -> BeanUtil.toBean(info, FactoryDataSizeDetailRespVO.InItem.class))
|
.collect(Collectors.toList());
|
||||||
.collect(Collectors.toList()));
|
|
||||||
|
List<FactoryDataSizeDetailRespVO.InItem> inItems = infoRespVOS.stream()
|
||||||
|
.filter(info -> info.getInNum() != 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(
|
respVO.setOutItems(
|
||||||
infoRespVOS.stream()
|
infoRespVOS.stream()
|
||||||
@ -156,6 +177,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
IPage<FactoryDataDetailRespVO> page = dataMapper.selectDetailPage(mpPage, pageReqVO);
|
IPage<FactoryDataDetailRespVO> page = dataMapper.selectDetailPage(mpPage, pageReqVO);
|
||||||
PageResult<FactoryDataDetailRespVO> dataPage = new PageResult<>(page.getRecords(), page.getTotal());
|
PageResult<FactoryDataDetailRespVO> dataPage = new PageResult<>(page.getRecords(), page.getTotal());
|
||||||
|
|
||||||
|
//获得 入库数、打包破损、入库破损、出库数、出库破损的工厂规格数据
|
||||||
|
List<FactoryDataInfoRespVO> infoDatas = dataSizeService.getDetailList(pageReqVO.getFactoryId(), pageReqVO.getDate(), pageReqVO.getCreateTime());
|
||||||
|
|
||||||
List<FactoryDataDetailRespVO> respVOS = dataPage.getList();
|
List<FactoryDataDetailRespVO> respVOS = dataPage.getList();
|
||||||
if (!respVOS.isEmpty()) {
|
if (!respVOS.isEmpty()) {
|
||||||
|
|
||||||
@ -164,15 +188,18 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
List<FactoryInfoDO> factoryInfoDOS = factoryInfoService.getFactoryList(factoryIdS);
|
List<FactoryInfoDO> factoryInfoDOS = factoryInfoService.getFactoryList(factoryIdS);
|
||||||
Map<Long, FactoryInfoDO> factoryMap = convertMap(factoryInfoDOS, FactoryInfoDO::getId);
|
Map<Long, FactoryInfoDO> factoryMap = convertMap(factoryInfoDOS, FactoryInfoDO::getId);
|
||||||
|
|
||||||
//获得 入库数、打包破损、入库破损、出库数、出库破损的工厂规格数据
|
|
||||||
List<FactoryDataInfoRespVO> infoDatas = dataSizeService.getDetailList(pageReqVO.getFactoryId(), pageReqVO.getDate());
|
|
||||||
|
|
||||||
respVOS.forEach(items -> {
|
respVOS.forEach(items -> {
|
||||||
|
|
||||||
//规格明细数据
|
//规格明细数据
|
||||||
List<FactoryDataInfoRespVO> infoList = infoDatas.stream()
|
List<FactoryDataInfoRespVO> infoList = infoDatas.stream()
|
||||||
.filter(data -> data.getFactoryId().equals(items.getFactoryId()) && data.getDate().equals(items.getDate()))
|
.filter(data -> data.getFactoryId().equals(items.getFactoryId()) && data.getDate().equals(items.getDate()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
infoList.forEach(info -> {
|
||||||
|
int num = Optional.ofNullable(info.getNum()).orElse(0);
|
||||||
|
int autoNum = Optional.ofNullable(info.getAutoNum()).orElse(0);
|
||||||
|
int inNum = Optional.ofNullable(info.getInNum()).orElse(0);
|
||||||
|
info.setInNum((num + autoNum + inNum) == 0 ? null : (num + autoNum + inNum));
|
||||||
|
});
|
||||||
|
|
||||||
items.setItems(infoList);
|
items.setItems(infoList);
|
||||||
items.setFactoryName(factoryMap.get(items.getFactoryId()).getName());
|
items.setFactoryName(factoryMap.get(items.getFactoryId()).getName());
|
||||||
@ -180,53 +207,79 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
//移除 已处理过的数据
|
//移除 已处理过的数据
|
||||||
infoDatas.removeAll(infoList);
|
infoDatas.removeAll(infoList);
|
||||||
});
|
});
|
||||||
|
}else {
|
||||||
// 展示当天录入的数据
|
respVOS = new ArrayList<>();
|
||||||
if (!infoDatas.isEmpty()) {
|
|
||||||
|
|
||||||
// 按 工厂id和日期 进行分组
|
|
||||||
Map<Long, Map<LocalDate, List<FactoryDataInfoRespVO>>> groupedByFactoryIdAndDate = infoDatas.stream()
|
|
||||||
.collect(Collectors.groupingBy(FactoryDataInfoRespVO::getFactoryId,
|
|
||||||
Collectors.groupingBy(FactoryDataInfoRespVO::getDate)));
|
|
||||||
|
|
||||||
groupedByFactoryIdAndDate.forEach((factoryId, dateMap) -> {
|
|
||||||
|
|
||||||
//按日期倒叙 并遍历
|
|
||||||
dateMap.entrySet().stream().sorted(Map.Entry.comparingByKey())
|
|
||||||
.forEach((date) -> {
|
|
||||||
|
|
||||||
FactoryDataDetailRespVO dataDetailRespVO = new FactoryDataDetailRespVO();
|
|
||||||
|
|
||||||
dataDetailRespVO.setFactoryId(factoryId);
|
|
||||||
dataDetailRespVO.setFactoryName(factoryMap.get(factoryId).getName());
|
|
||||||
dataDetailRespVO.setDate(date.getKey());
|
|
||||||
//设置入库总数
|
|
||||||
dataDetailRespVO.setInTotalNum(date.getValue().stream().filter(info -> info.getInNum() != null).mapToInt(FactoryDataInfoRespVO::getInNum).sum());
|
|
||||||
//设置入库平方数
|
|
||||||
dataDetailRespVO.setSquareNum(date.getValue().stream().map(FactoryDataInfoRespVO::getSquareNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
||||||
//设置出库总数
|
|
||||||
dataDetailRespVO.setOutTotalNum(infoDatas.stream().filter(info -> info.getOutNum() != null).mapToInt(FactoryDataInfoRespVO::getOutNum).sum());
|
|
||||||
//设置 出入库破损总数
|
|
||||||
Integer sum = infoDatas.stream().map(info -> {
|
|
||||||
FactoryDataInfoRespVO respVO = BeanUtils.toBean(info, FactoryDataInfoRespVO.class);
|
|
||||||
respVO.setInDamageNum(Optional.ofNullable(info.getInDamageNum()).orElse(0));
|
|
||||||
respVO.setOutDamageNum(Optional.ofNullable(info.getOutDamageNum()).orElse(0));
|
|
||||||
return respVO;
|
|
||||||
}).mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).sum();
|
|
||||||
|
|
||||||
dataDetailRespVO.setDamageNum(sum == 0 ? null : sum);
|
|
||||||
dataDetailRespVO.setItems(date.getValue());
|
|
||||||
//设置 可编辑状态
|
|
||||||
dataDetailRespVO.setIsEdit(1);
|
|
||||||
|
|
||||||
respVOS.add(0, dataDetailRespVO);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
dataPage.setTotal((long) respVOS.size());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return dataPage;
|
List<FactoryDataDetailRespVO> toDayData = new ArrayList<>();
|
||||||
|
// 展示当天录入的数据
|
||||||
|
if (!infoDatas.isEmpty()) {
|
||||||
|
|
||||||
|
// 按 工厂id和日期 进行分组
|
||||||
|
Map<Long, Map<LocalDate, List<FactoryDataInfoRespVO>>> groupedByFactoryIdAndDate = infoDatas.stream()
|
||||||
|
.collect(Collectors.groupingBy(FactoryDataInfoRespVO::getFactoryId,
|
||||||
|
Collectors.groupingBy(FactoryDataInfoRespVO::getDate)));
|
||||||
|
|
||||||
|
Map<Long, FactoryInfoDO> factoryMaps = convertMap(factoryInfoService.getFactoryList(groupedByFactoryIdAndDate.keySet())
|
||||||
|
, FactoryInfoDO::getId);
|
||||||
|
groupedByFactoryIdAndDate.forEach((factoryId, dateMap) -> {
|
||||||
|
|
||||||
|
//按日期倒叙 并遍历
|
||||||
|
dateMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach((date) -> {
|
||||||
|
|
||||||
|
FactoryDataDetailRespVO dataDetailRespVO = new FactoryDataDetailRespVO();
|
||||||
|
|
||||||
|
dataDetailRespVO.setFactoryId(factoryId);
|
||||||
|
dataDetailRespVO.setFactoryName(factoryMaps.get(factoryId).getName());
|
||||||
|
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;
|
||||||
|
})
|
||||||
|
.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));
|
||||||
|
|
||||||
|
//设置出库总数
|
||||||
|
int outTotalNum = date.getValue().stream().filter(info -> info.getOutNum() != null)
|
||||||
|
.mapToInt(FactoryDataInfoRespVO::getOutNum).sum();
|
||||||
|
dataDetailRespVO.setOutTotalNum(outTotalNum == 0 ? null : outTotalNum);
|
||||||
|
|
||||||
|
//设置 出入库破损总数
|
||||||
|
int sum = date.getValue().stream().map(info -> {
|
||||||
|
FactoryDataInfoRespVO respVO = BeanUtils.toBean(info, FactoryDataInfoRespVO.class);
|
||||||
|
respVO.setInDamageNum(Optional.ofNullable(info.getInDamageNum()).orElse(0));
|
||||||
|
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());
|
||||||
|
//设置 可编辑状态
|
||||||
|
dataDetailRespVO.setIsEdit(1);
|
||||||
|
|
||||||
|
toDayData.add(dataDetailRespVO);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
respVOS.addAll(0, toDayData);
|
||||||
|
dataPage.setTotal((long) respVOS.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PageResult<>(respVOS, dataPage.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -258,4 +311,155 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
|||||||
|
|
||||||
return dataMapper.selectListByType(factoryId, date, type);
|
return dataMapper.selectListByType(factoryId, date, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
|
||||||
|
public FactoryImportRespVO importUserList(List<FactoryDataImportVO> list) {
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(list)) {
|
||||||
|
throw exception(FACTORY_IMPORT_LIST_IS_EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
FactoryImportRespVO respVO = FactoryImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
|
||||||
|
list.forEach(data -> {
|
||||||
|
|
||||||
|
//校验,判断是否有不符合的原因
|
||||||
|
try {
|
||||||
|
validateFactoryForCreate(data.getFactoryName(), data.getSizeName(), data.getDate());
|
||||||
|
} catch (ServiceException ex) {
|
||||||
|
|
||||||
|
respVO.getFailureUsernames().put(data.getFactoryName(), ex.getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取 工厂ID
|
||||||
|
Long factoryId = Long.valueOf(data.getFactoryName().split(":")[0]);
|
||||||
|
// 获取 规格ID
|
||||||
|
Long sizeId = Long.valueOf(data.getSizeName().split(":")[0]);
|
||||||
|
// 获取 规格名称
|
||||||
|
String sizeName = data.getSizeName().split(":")[1];
|
||||||
|
|
||||||
|
PackageDO packageDO = packageService.getPackageByFactoryIdAndSize(factoryId, sizeId);
|
||||||
|
if (data.getNum() != null || data.getAutoNum() != null) {
|
||||||
|
|
||||||
|
PackageDataDO packageDataDO = BeanUtils.toBean(packageDO, PackageDataDO.class);
|
||||||
|
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());
|
||||||
|
|
||||||
|
//计算平方数
|
||||||
|
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.getInDamageNum() != null || data.getInNum() != null || data.getOutNum() != null) {
|
||||||
|
|
||||||
|
if (data.getInDamageNum() != null) {
|
||||||
|
|
||||||
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
|
//设置规格信息
|
||||||
|
dataSizeDO.setId(sizeId);
|
||||||
|
dataSizeDO.setSizeName(sizeName);
|
||||||
|
dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
|
||||||
|
//设置工厂和日期
|
||||||
|
dataSizeDO.setFactoryId(factoryId);
|
||||||
|
dataSizeDO.setDate(data.getDate());
|
||||||
|
//设置入库破损数
|
||||||
|
dataSizeDO.setType(1);
|
||||||
|
dataSizeDO.setNum(data.getInDamageNum());
|
||||||
|
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.getInNum() != null) {
|
||||||
|
|
||||||
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
|
//设置规格信息
|
||||||
|
dataSizeDO.setId(sizeId);
|
||||||
|
dataSizeDO.setSizeName(sizeName);
|
||||||
|
dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
|
||||||
|
//设置工厂和日期
|
||||||
|
dataSizeDO.setFactoryId(factoryId);
|
||||||
|
dataSizeDO.setDate(data.getDate());
|
||||||
|
//设置入库破损数
|
||||||
|
dataSizeDO.setType(4);
|
||||||
|
dataSizeDO.setNum(data.getInNum());
|
||||||
|
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.getOutNum() != null) {
|
||||||
|
|
||||||
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
|
//设置规格信息
|
||||||
|
dataSizeDO.setId(sizeId);
|
||||||
|
dataSizeDO.setSizeName(sizeName);
|
||||||
|
//设置工厂和日期
|
||||||
|
dataSizeDO.setFactoryId(factoryId);
|
||||||
|
dataSizeDO.setDate(data.getDate());
|
||||||
|
//设置入库破损数
|
||||||
|
dataSizeDO.setType(2);
|
||||||
|
dataSizeDO.setNum(data.getOutNum());
|
||||||
|
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.getOutDamageNum() != null) {
|
||||||
|
|
||||||
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
|
//设置规格信息
|
||||||
|
dataSizeDO.setId(sizeId);
|
||||||
|
dataSizeDO.setSizeName(sizeName);
|
||||||
|
//设置工厂和日期
|
||||||
|
dataSizeDO.setFactoryId(factoryId);
|
||||||
|
dataSizeDO.setDate(data.getDate());
|
||||||
|
//设置入库破损数
|
||||||
|
dataSizeDO.setType(3);
|
||||||
|
dataSizeDO.setNum(data.getOutDamageNum());
|
||||||
|
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
||||||
|
}
|
||||||
|
|
||||||
|
respVO.getCreateUsernames().add(data.getFactoryName());
|
||||||
|
});
|
||||||
|
|
||||||
|
return respVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateFactoryForCreate(String factoryName, String sizeName, LocalDate date) {
|
||||||
|
|
||||||
|
if (factoryName == null) {
|
||||||
|
throw exception(FACTORY_INFO_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sizeName == null) {
|
||||||
|
throw exception(SIZE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
String factoryId = factoryName.split(":")[0];
|
||||||
|
|
||||||
|
Long count = factoryDataSizeMapper.selectCountByType(Long.valueOf(factoryId), date, Arrays.asList(1,2,3,4));
|
||||||
|
List<PackageDataDO> packageDOs = packageDataService.getListByFactoryIdAndDate(Long.valueOf(factoryId), date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||||
|
|
||||||
|
if (count > 0L || !packageDOs.isEmpty()) {
|
||||||
|
throw exception(PACKAGE_DATA_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -42,7 +42,7 @@ public interface FactoryDataSizeService {
|
|||||||
* 获得出入库规格数据 列表
|
* 获得出入库规格数据 列表
|
||||||
* @return 出入库规格数据
|
* @return 出入库规格数据
|
||||||
*/
|
*/
|
||||||
List<FactoryDataInfoRespVO> getDetailList(Long factoryId, LocalDate[] date);
|
List<FactoryDataInfoRespVO> getDetailList(Long factoryId, LocalDate[] date, LocalDateTime[] createTime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得指定时间段内 出入库规格数据之和
|
* 获得指定时间段内 出入库规格数据之和
|
||||||
|
@ -50,7 +50,7 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
//校验 当前日期得 入库数据是否已经录入
|
//校验 当前日期得 入库数据是否已经录入
|
||||||
if (createReqVO.getType() == 2) {
|
if (createReqVO.getType() == 2) {
|
||||||
|
|
||||||
Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), createReqVO.getDate(), Collections.singletonList(1));
|
Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), createReqVO.getDate(), Arrays.asList(1,4));
|
||||||
if (count > 0L) {
|
if (count > 0L) {
|
||||||
throw exception(PACKAGE_DATA_EXISTS);
|
throw exception(PACKAGE_DATA_EXISTS);
|
||||||
}
|
}
|
||||||
@ -113,6 +113,20 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
|
|
||||||
factoryDataSizeDOs.add(dataSizeDO);
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reqVO.getInNum() != null) {
|
||||||
|
|
||||||
|
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
||||||
|
|
||||||
|
//设置工厂和日期
|
||||||
|
dataSizeDO.setFactoryId(createReqVO.getFactoryId());
|
||||||
|
dataSizeDO.setDate(createReqVO.getDate());
|
||||||
|
//设置入库数
|
||||||
|
dataSizeDO.setType(4);
|
||||||
|
dataSizeDO.setNum(reqVO.getInNum());
|
||||||
|
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
||||||
@ -150,6 +164,27 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
||||||
for (FactoryDataSizeSaveReqVO reqVO : updateReqVO.getItems()) {
|
for (FactoryDataSizeSaveReqVO reqVO : updateReqVO.getItems()) {
|
||||||
|
|
||||||
|
if (reqVO.getInNum() != null) {
|
||||||
|
|
||||||
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
|
|
||||||
|
//设置入库数
|
||||||
|
dataSizeDO.setId(reqVO.getInNumId());
|
||||||
|
dataSizeDO.setNum(reqVO.getInNum());
|
||||||
|
|
||||||
|
if (reqVO.getInNumId() == null) {
|
||||||
|
|
||||||
|
dataSizeDO.setFactoryId(updateReqVO.getFactoryId());
|
||||||
|
dataSizeDO.setDate(updateReqVO.getDate());
|
||||||
|
dataSizeDO.setSizeId(reqVO.getSizeId());
|
||||||
|
dataSizeDO.setSizeName(reqVO.getSizeName());
|
||||||
|
dataSizeDO.setType(4);
|
||||||
|
createSizeDos.add(dataSizeDO);
|
||||||
|
}else {
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (reqVO.getInDamageNum() != null) {
|
if (reqVO.getInDamageNum() != null) {
|
||||||
|
|
||||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||||
@ -158,7 +193,17 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
dataSizeDO.setId(reqVO.getInDamageNumId());
|
dataSizeDO.setId(reqVO.getInDamageNumId());
|
||||||
dataSizeDO.setNum(reqVO.getInDamageNum());
|
dataSizeDO.setNum(reqVO.getInDamageNum());
|
||||||
|
|
||||||
factoryDataSizeDOs.add(dataSizeDO);
|
if (reqVO.getInDamageNumId() == null) {
|
||||||
|
|
||||||
|
dataSizeDO.setFactoryId(updateReqVO.getFactoryId());
|
||||||
|
dataSizeDO.setDate(updateReqVO.getDate());
|
||||||
|
dataSizeDO.setSizeId(reqVO.getSizeId());
|
||||||
|
dataSizeDO.setSizeName(reqVO.getSizeName());
|
||||||
|
dataSizeDO.setType(1);
|
||||||
|
createSizeDos.add(dataSizeDO);
|
||||||
|
}else {
|
||||||
|
factoryDataSizeDOs.add(dataSizeDO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reqVO.getOutNum() != null) {
|
if (reqVO.getOutNum() != null) {
|
||||||
@ -241,9 +286,9 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<FactoryDataInfoRespVO> getDetailList(Long factoryId, LocalDate[] date) {
|
public List<FactoryDataInfoRespVO> getDetailList(Long factoryId, LocalDate[] date, LocalDateTime[] createTime) {
|
||||||
|
|
||||||
return factoryDataSizeMapper.selectDetailList(factoryId, date);
|
return factoryDataSizeMapper.selectDetailList(factoryId, date, createTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -99,4 +99,10 @@ public interface FactoryInfoService {
|
|||||||
* @return 返回与给定工厂ID相关联的天气代码,类型为String。
|
* @return 返回与给定工厂ID相关联的天气代码,类型为String。
|
||||||
*/
|
*/
|
||||||
String getWeatherCodeByFactoryId(Long factoryId, String areaCode);
|
String getWeatherCodeByFactoryId(Long factoryId, String areaCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得类型为工厂的工厂信息列表
|
||||||
|
* @return 工厂列表
|
||||||
|
*/
|
||||||
|
List<FactoryInfoDO> getFactoryListByAuthority();
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,8 @@ import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryIn
|
|||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryinfo.FactoryInfoMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryinfo.FactoryInfoMapper;
|
||||||
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
||||||
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -24,6 +26,7 @@ import java.util.*;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.FACTORY_INFO_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.FACTORY_INFO_NOT_EXISTS;
|
||||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.FACTOYRY_EXISTS_STAFF;
|
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.FACTOYRY_EXISTS_STAFF;
|
||||||
@ -46,6 +49,9 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
@Resource
|
@Resource
|
||||||
private AdminUserApi userApi;
|
private AdminUserApi userApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PermissionApi permissionApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createFactoryInfo(FactoryInfoSaveReqVO createReqVO) {
|
public Long createFactoryInfo(FactoryInfoSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -125,9 +131,7 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
@Override
|
@Override
|
||||||
public List<FactoryInfoDO> getFactoryListByType() {
|
public List<FactoryInfoDO> getFactoryListByType() {
|
||||||
|
|
||||||
DeptRespDTO deptRespDTO = deptApi.getDept(userApi.getUser(getLoginUserId()).getCheckedData().getDeptId()).getCheckedData();
|
return factoryInfoMapper.selectListByType(null);
|
||||||
|
|
||||||
return factoryInfoMapper.selectListByType(deptRespDTO.getFactoryId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -189,4 +193,27 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
public String getWeatherCodeByFactoryId(Long factoryId, String areaCode) {
|
public String getWeatherCodeByFactoryId(Long factoryId, String areaCode) {
|
||||||
return factoryInfoMapper.getWeatherCodeByFactoryId(factoryId, areaCode);
|
return factoryInfoMapper.getWeatherCodeByFactoryId(factoryId, areaCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FactoryInfoDO> getFactoryListByAuthority() {
|
||||||
|
|
||||||
|
List<Long> factoryIds = null;
|
||||||
|
DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(getLoginUserId()).getCheckedData();
|
||||||
|
// 如果当前登录用户数据权限 不是查看全部数据
|
||||||
|
if (!deptDataPermission.getAll()) {
|
||||||
|
|
||||||
|
List<DeptRespDTO> deptRespDTO = deptApi.getDeptListByLeader(getLoginUserId()).getCheckedData();
|
||||||
|
|
||||||
|
if (deptRespDTO != null) {
|
||||||
|
|
||||||
|
factoryIds = convertList(deptRespDTO, DeptRespDTO::getFactoryId);
|
||||||
|
}else {
|
||||||
|
|
||||||
|
DeptRespDTO respDTO = deptApi.getDept(userApi.getUser(getLoginUserId()).getCheckedData().getDeptId()).getCheckedData();
|
||||||
|
factoryIds = Collections.singletonList(respDTO.getFactoryId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return factoryInfoMapper.selectListByType(factoryIds);
|
||||||
|
}
|
||||||
}
|
}
|
@ -53,6 +53,14 @@ public interface PackageService {
|
|||||||
*/
|
*/
|
||||||
List<PackageRespVO> getPackageByFactoryId(Long factoryId);
|
List<PackageRespVO> getPackageByFactoryId(Long factoryId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得指定工厂的打包线
|
||||||
|
* @param factoryId 工厂编号
|
||||||
|
* @param sizeId 规格编号
|
||||||
|
* @return 打包线信息
|
||||||
|
*/
|
||||||
|
PackageDO getPackageByFactoryIdAndSize(Long factoryId, Long sizeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得打包线分页
|
* 获得打包线分页
|
||||||
*
|
*
|
||||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.service.packageInfo;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackagePageReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageRespVO;
|
||||||
@ -106,6 +107,14 @@ public class PackageServiceImpl implements PackageService {
|
|||||||
return respVOS;
|
return respVOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PackageDO getPackageByFactoryIdAndSize(Long factoryId, Long sizeId) {
|
||||||
|
|
||||||
|
return packageMapper.selectOne(new LambdaQueryWrapperX<PackageDO>()
|
||||||
|
.eq(PackageDO::getFactoryId, factoryId)
|
||||||
|
.eq(PackageDO::getSizeId, sizeId));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<PackageRespVO> getPackagePage(PackagePageReqVO pageReqVO) {
|
public PageResult<PackageRespVO> getPackagePage(PackagePageReqVO pageReqVO) {
|
||||||
|
|
||||||
|
@ -19,6 +19,13 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface PackageDataService {
|
public interface PackageDataService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建打包线数据
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
*/
|
||||||
|
void create(@Valid PackageDataDO createReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建打包线数据
|
* 创建打包线数据
|
||||||
*
|
*
|
||||||
|
@ -46,6 +46,12 @@ public class PackageDataServiceImpl implements PackageDataService {
|
|||||||
@Lazy // 循环依赖,避免报错
|
@Lazy // 循环依赖,避免报错
|
||||||
private FactoryDataService factoryDataService;
|
private FactoryDataService factoryDataService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create(PackageDataDO createReqVO) {
|
||||||
|
|
||||||
|
packageDataMapper.insert(createReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createPackageData(PackageDataCreateReqVO createReqVO) {
|
public Long createPackageData(PackageDataCreateReqVO createReqVO) {
|
||||||
|
|
||||||
|
@ -18,22 +18,43 @@
|
|||||||
a.size_id AS sizeId,
|
a.size_id AS sizeId,
|
||||||
a.size_name AS sizeName,
|
a.size_name AS sizeName,
|
||||||
a.size_pieces AS sizePieces,
|
a.size_pieces AS sizePieces,
|
||||||
MAX(a.num) AS num,
|
a.num AS num,
|
||||||
MAX(a.auto_num) AS autoNum,
|
a.auto_num AS autoNum,
|
||||||
MAX(a.num + a.auto_num) AS inNum,
|
a.square_num AS squareNum,
|
||||||
MAX(a.square_num) AS squareNum,
|
a.damage_num AS damageNum,
|
||||||
MAX(a.damage_num) AS damageNum,
|
b.inNumId,
|
||||||
MAX(CASE WHEN b.type = 1 THEN b.id END) AS inDamageNumId,
|
b.inNum,
|
||||||
MAX(CASE WHEN b.type = 1 THEN b.num END) AS inDamageNum,
|
b.inDamageNumId,
|
||||||
MAX(CASE WHEN b.type = 2 THEN b.id END) AS outNumId,
|
b.inDamageNum,
|
||||||
MAX(CASE WHEN b.type = 2 THEN b.num END) AS outNum,
|
b.outNumId,
|
||||||
MAX(CASE WHEN b.type = 3 THEN b.id END) AS outDamageNumId,
|
b.outNum,
|
||||||
MAX(CASE WHEN b.type = 3 THEN b.num END) AS outDamageNum
|
b.outDamageNumId,
|
||||||
|
b.outDamageNum
|
||||||
FROM
|
FROM
|
||||||
sf_package_data AS a
|
sf_package_data a
|
||||||
LEFT JOIN
|
LEFT JOIN (
|
||||||
sf_factory_data_size AS b
|
SELECT
|
||||||
ON a.factory_id = b.factory_id and a.package_date = b.date and a.size_id = b.size_id
|
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>
|
<where>
|
||||||
a.deleted = 0
|
a.deleted = 0
|
||||||
<if test="factoryId != null">
|
<if test="factoryId != null">
|
||||||
@ -47,6 +68,14 @@
|
|||||||
AND a.package_date <= #{date[1]}
|
AND a.package_date <= #{date[1]}
|
||||||
</if>
|
</if>
|
||||||
</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>
|
</where>
|
||||||
GROUP BY a.id,a.factory_id,a.package_name,a.package_date,a.size_id,a.size_name,a.size_pieces
|
GROUP BY a.id,a.factory_id,a.package_name,a.package_date,a.size_id,a.size_name,a.size_pieces
|
||||||
|
|
||||||
@ -62,9 +91,10 @@
|
|||||||
NULL AS sizePieces,
|
NULL AS sizePieces,
|
||||||
NULL AS num,
|
NULL AS num,
|
||||||
NULL AS autoNum,
|
NULL AS autoNum,
|
||||||
NULL AS inNum,
|
|
||||||
NULL AS squareNum,
|
NULL AS squareNum,
|
||||||
NULL AS damageNum,
|
NULL AS damageNum,
|
||||||
|
MAX(CASE WHEN c.type = 4 THEN c.id END) AS inNumId,
|
||||||
|
MAX(CASE WHEN c.type = 4 THEN c.num END) AS inNum,
|
||||||
MAX(CASE WHEN c.type = 1 THEN c.id END) AS inDamageNumId,
|
MAX(CASE WHEN c.type = 1 THEN c.id END) AS inDamageNumId,
|
||||||
MAX(CASE WHEN c.type = 1 THEN c.num END) AS inDamageNum,
|
MAX(CASE WHEN c.type = 1 THEN c.num END) AS inDamageNum,
|
||||||
MAX(CASE WHEN c.type = 2 THEN c.id END) AS outNumId,
|
MAX(CASE WHEN c.type = 2 THEN c.id END) AS outNumId,
|
||||||
@ -74,7 +104,14 @@
|
|||||||
FROM
|
FROM
|
||||||
sf_factory_data_size AS c
|
sf_factory_data_size AS c
|
||||||
WHERE
|
WHERE
|
||||||
NOT EXISTS (SELECT 1 FROM sf_package_data WHERE size_id = c.size_id and package_date = c.date)
|
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
|
AND c.deleted = 0
|
||||||
<if test="factoryId != null">
|
<if test="factoryId != null">
|
||||||
AND c.factory_id = #{factoryId}
|
AND c.factory_id = #{factoryId}
|
||||||
@ -87,6 +124,14 @@
|
|||||||
AND c.date <= #{date[1]}
|
AND c.date <= #{date[1]}
|
||||||
</if>
|
</if>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="dateTime != null and dateTime.length > 0">
|
||||||
|
<if test="dateTime[0] != null">
|
||||||
|
AND c.create_time >= #{dateTime[0]}
|
||||||
|
</if>
|
||||||
|
<if test="dateTime[1] != null">
|
||||||
|
AND c.create_time <= #{dateTime[1]}
|
||||||
|
</if>
|
||||||
|
</if>
|
||||||
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
|
GROUP BY c.factory_id,c.date,c.size_id,c.size_name
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@ -94,6 +139,7 @@
|
|||||||
SELECT
|
SELECT
|
||||||
factory_id AS factoryId,
|
factory_id AS factoryId,
|
||||||
date AS date,
|
date AS date,
|
||||||
|
SUM( CASE WHEN type = 4 THEN num END ) AS inNum,
|
||||||
SUM( CASE WHEN type = 1 THEN num END ) AS inDamageNum,
|
SUM( CASE WHEN type = 1 THEN num END ) AS inDamageNum,
|
||||||
SUM( CASE WHEN type = 2 THEN num END ) AS outNum,
|
SUM( CASE WHEN type = 2 THEN num END ) AS outNum,
|
||||||
SUM( CASE WHEN type = 3 THEN num END ) AS outDamageNum
|
SUM( CASE WHEN type = 3 THEN num END ) AS outDamageNum
|
||||||
|
Loading…
Reference in New Issue
Block a user