rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -94,7 +94,6 @@ if (Objects.isNull(params)) { throw new CoolException("参数不能为空!!"); } return mobileService.otherReceipt(params); } @@ -114,4 +113,12 @@ } @PreAuthorize("hasAuthority('manager:asnOrder:list')") @GetMapping("/dynamic/fields") @ApiOperation("获取动态字段") public R getDynamicFields() { return R.ok(mobileService.getDynamicFields()); } } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java
@@ -7,6 +7,7 @@ import lombok.experimental.Accessors; import java.util.List; import java.util.Map; /** * @author Ryan rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
@@ -1,12 +1,17 @@ package com.vincent.rsf.server.api.entity.dto; import io.swagger.annotations.Api; import com.alibaba.fastjson.JSONObject; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Map; /** * @author Ryan @@ -64,4 +69,22 @@ @ApiModelProperty("供应商编码") private String splrCode; @ApiModelProperty("扩展字段") private Map<String, Object> extendFields; public static void main(String[] args) { String abc = ""; String s = CommonUtil.randomUUID16(); System.out.println("重复字符串:" + s); // for (int i = 0; i < 10000; i++) { // String s = CommonUtil.randomUUID16(); // if (abc.equals(s)) { // System.out.println("重复字符串:" + abc); // } // abc = s; // } } } rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -5,6 +5,7 @@ import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.system.controller.param.LoginParam; import com.vincent.rsf.server.system.entity.Fields; import javax.servlet.http.HttpServletRequest; import java.util.List; @@ -29,4 +30,6 @@ List<AsnOrder> getAllAsnOrders(); R getReceiptAreas(); List<Fields> getDynamicFields(); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -1,5 +1,6 @@ package com.vincent.rsf.server.api.service.impl; import com.alibaba.druid.sql.visitor.functions.If; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; @@ -12,6 +13,7 @@ import com.vincent.rsf.server.common.config.ConfigProperties; import com.vincent.rsf.server.common.enums.WarehouseAreaType; import com.vincent.rsf.server.common.security.JwtSubject; import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.JwtUtil; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.mapper.*; @@ -20,11 +22,12 @@ import com.vincent.rsf.server.system.constant.CodeRes; import com.vincent.rsf.server.system.controller.param.LoginParam; import com.vincent.rsf.server.system.controller.result.LoginResult; import com.vincent.rsf.server.system.entity.Tenant; import com.vincent.rsf.server.system.entity.User; import com.vincent.rsf.server.system.entity.UserLogin; import com.vincent.rsf.server.system.entity.*; import com.vincent.rsf.server.system.mapper.FieldsMapper; import com.vincent.rsf.server.system.mapper.TenantMapper; import com.vincent.rsf.server.system.mapper.UserMapper; import com.vincent.rsf.server.system.service.FieldsItemService; import com.vincent.rsf.server.system.service.FieldsService; import com.vincent.rsf.server.system.service.UserLoginService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.tika.utils.StringUtils; @@ -73,6 +76,11 @@ private StockItemMapper stockItemMapper; @Resource private PurchaseItemMapper purchaseItemMapper; @Resource private FieldsMapper fieldsMapper; @Autowired private FieldsItemService fieldsItemService; /** @@ -122,7 +130,7 @@ if (StringUtils.isEmpty(barcode)) { return R.error("标签码不能为空!!"); } AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode)); List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode)); if (Objects.isNull(asnOrderItem)) { throw new CoolException("单据明细不存在!!"); } @@ -146,10 +154,14 @@ if (Objects.isNull(params.getWhAreaId())) { throw new CoolException("库区标识不能为空!!"); } WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getId, params.getWhAreaId())); if (Objects.isNull(areasItem)) { throw new CoolException("数据错误:当前库区不存在!!"); } //获取已启用的动态扩展字 List<Fields> fields = fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); List<ReceiptDetlsDto> receipts = params.getReceipts(); List<WarehouseAreasItem> allOrders = new ArrayList<>(); receipts.forEach(dto -> { @@ -175,7 +187,36 @@ .setShipperId(matnr.getShipperId()); //TODO 供应商标识未设置,标识由PO单供应商编码转换 if (!Objects.isNull(fields)) { if (!Objects.isNull(dto.getExtendFields())) { //获取16位uuid String uuid16 = CommonUtil.randomUUID16(); Map<String, Object> extendFields = dto.getExtendFields(); //字段集合申明 List<FieldsItem> fieldsItems = new ArrayList<>(); extendFields.keySet().forEach(key -> { fields.forEach(obj -> { //判断key值与fields表字段是否相同 if (obj.getFields().equals(key)) { FieldsItem fieldsItem = new FieldsItem(); fieldsItem.setMatnrId(matnr.getId()).setFieldsId(obj.getId()) .setShiperId(matnr.getShipperId()) .setValue(extendFields.get(key).toString()) .setUuid(uuid16); fieldsItems.add(fieldsItem); //唯一标识入库 item.setFieldsIndex(uuid16); } }); }); if (!fieldsItemService.saveBatch(fieldsItems)) { throw new CoolException("扩展字段保存失败!!"); } } } allOrders.add(item); }); if (!warehouseAreasItemService.saveBatch(allOrders)) { @@ -196,7 +237,7 @@ if (Objects.isNull(params.getAsnCode())) { throw new CoolException("通知单不能为空!!"); } AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnCode, params.getAsnCode()) .eq(!Objects.isNull(params.getBarcode()) ,AsnOrderItem::getBarcode, params.getBarcode())); @@ -232,49 +273,67 @@ } /** * 获取ReceiptDetlsDto * @author Ryan * @description 获取所有启用动态字段 * @param * @return * @time 2025/3/12 09:23 */ private R getAsnOrderItem(AsnOrderItem asnOrderItem) { ReceiptDetlsDto detlsDto = new ReceiptDetlsDto(); @Override public List<Fields> getDynamicFields() { return fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); } detlsDto.setAsnCode(asnOrderItem.getAsnCode()) .setMatnk(asnOrderItem.getMatnk()) .setBarcode(asnOrderItem.getBarcode()) .setPoCode(asnOrderItem.getPoCode()) .setPurQty(asnOrderItem.getAnfme()) .setSplrBatch(asnOrderItem.getSplrBatch()); /** * 获取ReceiptDetlsDtos */ private R getAsnOrderItem(List<AsnOrderItem> items) { List<ReceiptDetlsDto> detlsDtos = new ArrayList<>(); items.forEach(asnOrderItem -> { ReceiptDetlsDto detlsDto = new ReceiptDetlsDto(); Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId()); if (Objects.isNull(matnr)) { throw new CoolException("数据错误:当前物料不存在!!"); } //SET 物料最大存放数量 detlsDto.setMaxQty(matnr.getMaxQty()) .setMatnrId(matnr.getId()) .setStockUnit(matnr.getStockUnit()); QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId())); if (!Objects.isNull(inspect)) { //set 质检结果 detlsDto.setInspect(inspect.getStatus$()); } //获取当前库存信息 StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>() .eq(StockItem::getAsnItemId, asnOrderItem.getId()) .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId())); //SET 当前库存数量 if (Objects.isNull(stockItem)) { detlsDto.setStockQty(0.0); } else { detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty()); } detlsDto.setAsnCode(asnOrderItem.getAsnCode()) .setMatnk(asnOrderItem.getMatnk()) .setBarcode(asnOrderItem.getBarcode()) .setPoCode(asnOrderItem.getPoCode()) .setPurQty(asnOrderItem.getAnfme()) .setSplrBatch(asnOrderItem.getSplrBatch()); //获取采购单明细信息 PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId())); //SET 平台行号 detlsDto.setPlatformId(purchaseItem.getPlatItemId()); Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId()); if (Objects.isNull(matnr)) { throw new CoolException("数据错误:当前物料不存在!!"); } //SET 物料最大存放数量 detlsDto.setMaxQty(matnr.getMaxQty()) .setMatnrId(matnr.getId()) .setStockUnit(matnr.getStockUnit()); QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId())); if (!Objects.isNull(inspect)) { //set 质检结果 detlsDto.setInspect(inspect.getStatus$()); } //获取当前库存信息 StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>() .eq(StockItem::getAsnItemId, asnOrderItem.getId()) .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId())); //SET 当前库存数量 if (Objects.isNull(stockItem)) { detlsDto.setStockQty(0.0); } else { detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty()); } return R.ok(detlsDto); //获取采购单明细信息 PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId())); //SET 平台行号 detlsDto.setPlatformId(purchaseItem.getPlatItemId()); detlsDtos.add(detlsDto); }); return R.ok(detlsDtos); } rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -22,9 +22,9 @@ // generator.username="sa"; // generator.password="Zoneyung@zy56$"; generator.table="sys_fields_item"; generator.tableDesc="扩展字段明细表"; generator.packagePath="com.vincent.rsf.server.system"; generator.table="man_qly_inspect"; generator.tableDesc="质检信息"; generator.packagePath="com.vincent.rsf.server.manager"; generator.build(); } rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
New file @@ -0,0 +1,58 @@ package com.vincent.rsf.server.common.utils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.system.entity.Fields; import com.vincent.rsf.server.system.entity.FieldsItem; import com.vincent.rsf.server.system.service.FieldsItemService; import com.vincent.rsf.server.system.service.FieldsService; import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author Ryan * @version 1.0 * @title FieldsUtils * @description * @create 2025/3/12 12:33 */ public class FieldsUtils { /** * @author Ryan * @description 通过字段唯一标识获取动态字段Map * @param * @return * @time 2025/3/12 12:50 */ public static Map<String, String> getFields(String uuid) { Map<String, String> fieldsMap = new HashMap<>(); FieldsService fieldsService = SpringUtils.getBean(FieldsService.class); List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); if (fields.isEmpty()) { return null; } FieldsItemService fieldsItemService = SpringUtils.getBean(FieldsItemService.class); List<FieldsItem> fieldsItems = fieldsItemService.list(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getUuid, uuid)); for (Fields field : fields ) { if (fieldsItems.isEmpty()) { fieldsMap.put(field.getFields(), null); continue; } fieldsItems.forEach(fieldsItem -> { if (fieldsItem.getFieldsId().equals(field.getId())) { fieldsMap.put(field.getFields(), fieldsItem.getValue()); } }); } return fieldsMap; } } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -60,9 +60,7 @@ @ApiOperation("保存") public R save(@RequestBody AsnOrder asnOrder) { asnOrder.setCreateBy(getLoginUserId()); asnOrder.setCreateTime(new Date()); asnOrder.setUpdateBy(getLoginUserId()); asnOrder.setUpdateTime(new Date()); if (!asnOrderService.save(asnOrder)) { return R.error("Save Fail"); } @@ -133,5 +131,11 @@ } } @PostMapping("/asnOrder") @ApiOperation("ASN导入接口") @PreAuthorize("hasAuthority('manager:asnOrder:update')") public R importExcel() { return R.ok(); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
@@ -56,9 +56,8 @@ @PostMapping("/asnOrderItem/save") public R save(@RequestBody AsnOrderItem asnOrderItem) { asnOrderItem.setCreateBy(getLoginUserId()); asnOrderItem.setCreateTime(new Date()); asnOrderItem.setUpdateBy(getLoginUserId()); asnOrderItem.setUpdateTime(new Date()); // asnOrderItemService.getFieldsExtend if (!asnOrderItemService.save(asnOrderItem)) { return R.error("Save Fail"); } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
@@ -137,13 +137,11 @@ @PreAuthorize("hasAuthority('manager:matnr:save')") @ApiOperation(value = "excel表格导入物料信息") @PostMapping("/matnr/import") public R listImport(@RequestParam MultipartFile file) throws Exception { public R listImport(MultipartFile file) throws Exception { if (Objects.isNull(file)) { throw new CoolException("文件不能为空!!"); } matnrService.importExcels(file); return R.ok(); return matnrService.importExcels(file); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
@@ -12,6 +12,7 @@ import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.service.WarehouseAreasItemService; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -19,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import java.util.*; @Api(tags = "库区库存明细") @RestController public class WarehouseAreasItemController extends BaseController { @@ -36,10 +38,11 @@ @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')") @PostMapping("/warehouseAreasItem/list") public R list(@RequestBody Map<String, Object> map) { return R.ok().add(warehouseAreasItemService.list()); return R.ok(warehouseAreasItemService.getList()); // return R.ok().add(warehouseAreasItemService.list()); } @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')") @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list' )") @PostMapping({"/warehouseAreasItem/many/{ids}", "/warehouseAreasItems/many/{ids}"}) public R many(@PathVariable Long[] ids) { return R.ok().add(warehouseAreasItemService.listByIds(Arrays.asList(ids))); rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -6,14 +6,10 @@ import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.vincent.rsf.framework.common.Cools; @@ -21,7 +17,6 @@ import com.vincent.rsf.server.system.service.UserService; import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; @Data @Accessors(chain = true) rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
@@ -9,6 +9,7 @@ import com.vincent.rsf.server.manager.service.CompanysService; import com.vincent.rsf.server.manager.service.MatnrGroupService; import com.vincent.rsf.server.manager.service.ShipperService; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -27,6 +28,7 @@ @Data @TableName("man_matnr") @Accessors(chain = true) @ApiModel(value = "Matnr", description = "物料所有基础属性") public class Matnr implements Serializable { @@ -67,6 +69,12 @@ private Long groupId; /** * 分组助记码 */ @ApiModelProperty(value = "分组助记码") private String groupCode; /** * 规则代码 */ @ApiModelProperty(value= "规则代码") rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
@@ -1,6 +1,7 @@ package com.vincent.rsf.server.manager.entity; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.*; import java.text.SimpleDateFormat; import java.util.Date; @@ -10,10 +11,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -23,9 +21,11 @@ import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; import java.util.Map; @Data @Accessors(chain = true) @ApiModel(value = "WarehouseAreasItem", description = "库区库存信息") @TableName("man_warehouse_areas_item") public class WarehouseAreasItem implements Serializable { @@ -55,6 +55,9 @@ */ @ApiModelProperty(value= "物料标识") private Long matnrId; @ApiModelProperty(value = "扩展字段唯一标识") private String fieldsIndex; /** * 物料名称 @@ -179,6 +182,10 @@ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; @ApiModelProperty("扩展字段") @TableField(exist = false) private Map<String, String> extendFields; /** * 备注 */ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
@@ -30,9 +30,9 @@ @ExcelComment(example = "华为手机") private String name; @Excel(name = "货主编码") @ExcelComment(example = "PO12625") private String shipperCode; @Excel(name = "分类助记码") @ExcelComment(example = "256874556") private String groupCode; @Excel(name = "分类名称") @ExcelComment(example = "移动设备") @@ -79,7 +79,7 @@ private String purUnit; @Excel(name = "ABC类") @ExcelComment(notNull = false, example = "A") @ExcelComment(notNull = false, example = "0") private String stockLevel; @Excel(name = "安全库存量") @@ -107,11 +107,11 @@ private String barcode; @Excel(name = "效期预警阈值") @ExcelComment(notNull = false, example = "2025-01-25 14:25:36") @ExcelComment(notNull = false, example = "90") private String validWarn; @Excel(name = "是否免检") @ExcelComment(notNull = false, example = "否") @ExcelComment(notNull = false, example = "0") private String flagCheck; private Integer rowNum; rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -92,7 +92,6 @@ throw new CoolException("ASN单据保存失败!!"); } List<AsnOrderItem> orderItems = new ArrayList<>(); String uuid16 = CommonUtil.randomUUID16(); items.forEach(item -> { AsnOrderItem orderItem = new AsnOrderItem(); Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, item.getMatnrCode())); @@ -115,12 +114,6 @@ .setPurUnit(item.getUnit()) .setMatnk(matnr.getName()) .setMatnrId(matnr.getId() + ""); //判断PO单是否已设置动态字段索引 if (Objects.isNull(item.getFieldsIndex())) { orderItem.setFieldsIndex(uuid16); } else { orderItem.setFieldsIndex(item.getFieldsIndex()); } orderItems.add(orderItem); }); if (!asnOrderItemService.saveBatch(orderItems)) { rsf-server/src/main/java/com/vincent/rsf/server/manager/service/MatnrService.java
@@ -1,12 +1,11 @@ package com.vincent.rsf.server.manager.service; import com.baomidou.mybatisplus.extension.service.IService; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.entity.Matnr; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; public interface MatnrService extends IService<Matnr> { void importExcels(MultipartFile file) throws Exception; R importExcels(MultipartFile file) throws Exception; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -3,6 +3,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import java.util.List; import java.util.Map; public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> { List<WarehouseAreasItem> getList(); } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/MatnrServiceImpl.java
@@ -2,33 +2,81 @@ import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.manager.entity.MatnrGroup; import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate; import com.vincent.rsf.server.manager.mapper.MatnrMapper; import com.vincent.rsf.server.manager.entity.Matnr; import com.vincent.rsf.server.manager.service.MatnrGroupService; import com.vincent.rsf.server.manager.service.MatnrService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service("matnrService") public class MatnrServiceImpl extends ServiceImpl<MatnrMapper, Matnr> implements MatnrService { @Autowired private MatnrGroupService matnrGroupService; /** * @return * @throws * @author Ryan * @description 物料数据导入接处理实现 * @throws * @return * @time 2025/3/3 13:08 */ @Override @Transactional(rollbackFor = Exception.class) public void importExcels(MultipartFile file) throws Exception { public R importExcels(MultipartFile file) throws Exception { //读取上传文件内容 ExcelImportResult<MatnrsTemplate> result = ExcelImportUtil.importExcelMore(file.getInputStream(), MatnrsTemplate.class, ExcelUtil.getDefaultImportParams()); //TODO 物料写入处理 if (result.getList().isEmpty()) { throw new CoolException("物料导入失败!!"); } List<Matnr> matnrs = new ArrayList<>(); result.getList().forEach(template -> { Matnr matnr = new Matnr(); matnr.setBarcode(template.getBarcode()) .setCode(template.getErpCode()) .setDescrible(template.getDescrible()) .setColor(template.getColor()) .setFlagCheck(Short.parseShort(template.getFlagCheck())) .setWeight(Double.parseDouble(template.getWeight())) .setValidWarn(Integer.parseInt(template.getValidWarn())) .setValid(Integer.parseInt(template.getValid())) .setUnit(template.getUnit()) .setStockUnit(template.getPurUnit()) .setSpec(template.getSpec()) .setStagn(Integer.parseInt(template.getStagn())) .setModel(template.getModel()) .setGroupCode(template.getGroupCode()) .setPurUnit(template.getPurUnit()) .setStockLevel(Short.parseShort(template.getStockLevel())) .setSafeQty(Double.parseDouble(template.getSafeQty())) .setMinQty(Double.parseDouble(template.getMinQty())); if (Objects.isNull(template.getGroupCode()) && Objects.isNull(template.getGroupName())) { MatnrGroup matnrGroups = matnrGroupService.getOne(new LambdaQueryWrapper<MatnrGroup>() .eq(!Objects.isNull(template.getGroupCode()), MatnrGroup::getCode, template.getGroupCode()) .eq(!Objects.isNull(template.getGroupName()),MatnrGroup::getName, template.getName())); matnr.setGroupId(matnrGroups.getId()); } matnrs.add(matnr); }); if (!this.saveBatch(matnrs)) { throw new CoolException("导入失败!!"); } return R.ok("导入成功!!"); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
@@ -1,12 +1,27 @@ package com.vincent.rsf.server.manager.service.impl; import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.mapper.WarehouseAreasItemMapper; import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.service.WarehouseAreasItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import java.util.List; import java.util.Objects; @Service("warehouseAreasItemService") public class WarehouseAreasItemServiceImpl extends ServiceImpl<WarehouseAreasItemMapper, WarehouseAreasItem> implements WarehouseAreasItemService { @Override public List<WarehouseAreasItem> getList() { List<WarehouseAreasItem> areasItems = this.list(); for (WarehouseAreasItem areasItem : areasItems) { if (Objects.isNull(areasItem.getFieldsIndex())) { continue; } areasItem.setExtendFields(FieldsUtils.getFields(areasItem.getFieldsIndex())); } return areasItems; } } rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Fields.java
@@ -21,6 +21,7 @@ @Data @TableName("sys_fields") @ApiModel(value = "Fields", description = "动态字段") public class Fields implements Serializable { private static final long serialVersionUID = 1L; rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FieldsItem.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import java.text.SimpleDateFormat; import java.util.Date; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -22,6 +24,7 @@ import java.util.Date; @Data @Accessors(chain = true) @TableName("sys_fields_item") public class FieldsItem implements Serializable {