rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -24,7 +24,7 @@ generator.table="man_qly_inspect"; generator.tableDesc="质检信息"; generator.packagePath="com.vincent.rsf.server.manager"; generator.packagePath="com.vincent.rsf.server.test"; generator.build(); } rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
@@ -1,18 +1,15 @@ 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 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; 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.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; @@ -17,7 +18,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.mail.Multipart; import javax.servlet.http.HttpServletResponse; import java.util.*; @@ -129,13 +132,5 @@ } else { return R.error("一键上报失败!!"); } } @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
@@ -4,18 +4,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; 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.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.controller.params.AsnOrderItemParams; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.system.controller.BaseController; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; @@ -57,7 +63,10 @@ public R save(@RequestBody AsnOrderItem asnOrderItem) { asnOrderItem.setCreateBy(getLoginUserId()); asnOrderItem.setUpdateBy(getLoginUserId()); // asnOrderItemService.getFieldsExtend String code = SerialRuleUtils.generateRuleCode("sys_ans_order", asnOrderItem); if (!Objects.isNull(code)) { asnOrderItem.setAsnCode(code); } if (!asnOrderItemService.save(asnOrderItem)) { return R.error("Save Fail"); } @@ -106,4 +115,23 @@ ExcelUtil.build(ExcelUtil.create(asnOrderItemService.list(), AsnOrderItem.class), response); } /** * ASN单据明细导入 * @param file * @return */ @PostMapping("/asnOrder/import") @ApiOperation("ASN导入接口") @PreAuthorize("hasAuthority('manager:asnOrder:update')") public R importExcel(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) throws Exception { if (Objects.isNull(file)) { throw new CoolException("文件不能为空!!"); } HashMap<String, Object> hashMap = new HashMap<>(); if (!Objects.isNull(request.getParameter("asnId"))) { hashMap.put("asnId", request.getParameter("asnId")); } return asnOrderItemService.excelImport(file, hashMap); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/AsnOrderItemParams.java
New file @@ -0,0 +1,24 @@ package com.vincent.rsf.server.manager.controller.params; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.web.multipart.MultipartFile; /** * @author Ryan * @version 1.0 * @title AsnOrderItemParams * @description * @create 2025/3/12 13:44 */ @Data @ApiModel(value = "AsnOrderItemParams", description = "ASN明细导入实例") public class AsnOrderItemParams { @ApiModelProperty("excel表格文件") private MultipartFile file; @ApiModelProperty("主单标识") private String AsnOrderId; } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -39,6 +39,12 @@ private Long asnId; /** * 平台标识(行号) */ @ApiModelProperty(value = "平台标识(行号)") private String platItemId; /** * 字段索引 */ @ApiModelProperty("字段索引") rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
New file @@ -0,0 +1,109 @@ package com.vincent.rsf.server.manager.entity.excel; import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.handler.inter.IExcelDataModel; import cn.afterturn.easypoi.handler.inter.IExcelModel; import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize; import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.experimental.Accessors; import java.io.Serializable; /** * @author Ryan * @version 1.0 * @title AsnOrderTemplate * @description * @create 2025/3/12 13:49 */ @Data @ExcelAutoColumnSize @Accessors(chain = true) @ToString(callSuper = true) @EqualsAndHashCode(callSuper = false) public class AsnOrderTemplate implements IExcelModel, IExcelDataModel, Serializable { @Excel(name = "行号") @ExcelComment(example = "1357564255478") private String platItemId; @Excel(name = "物料名称") @ExcelComment(example = "物料名称") private String matnk; @Excel(name = "数量") @ExcelComment(example = "25") private Double anfme; @Excel(name = "库存单位") @ExcelComment(example = "个") private String stockUnit; @Excel(name = "采购数量") @ExcelComment(example = "25") private Double purQty; @Excel(name = "采购单位") @ExcelComment(example = "个") private String purUnit; @Excel(name = "已完成数量") @ExcelComment(example = "25") private Double qty; @Excel(name = "供应商编码") @ExcelComment(example = "3654821") private String splrCode; @Excel(name = "供应商名称") @ExcelComment(example = "浙江中扬技术公司") private String splrName; @Excel(name = "供应商批次") @ExcelComment(example = "25251212") private String splrBatch; @Excel(name = "二维码") @ExcelComment(example = "") private String qrcode; @Excel(name = "条形码") @ExcelComment(example = "2354788") private String barcode; @Excel(name = "包装名称") @ExcelComment(example = "箱") private String packName; @Excel(name = "备注") @ExcelComment(example = "注:易碎品,轻拿放") private String memo; private Integer rowNum; private String errorMsg; @Override public Integer getRowNum() { return this.rowNum; } @Override public void setRowNum(Integer rowNum) { this.rowNum = rowNum; } @Override public String getErrorMsg() { return this.errorMsg; } @Override public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } } rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -108,6 +108,7 @@ .setSplrCode(item.getSplrCode()) .setMatnk(item.getMatnrName()) .setPoDetlId(item.getId()) .setPlatItemId(item.getPlatItemId()) .setBarcode(barcode) .setPoCode(purchase.getCode()) .setPurQty(item.getAnfme()) rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
@@ -1,8 +1,15 @@ 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.framework.exception.CoolException; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.HashMap; public interface AsnOrderItemService extends IService<AsnOrderItem> { R excelImport(MultipartFile file, HashMap<String, Object> hashMap) throws Exception; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -1,12 +1,64 @@ package com.vincent.rsf.server.manager.service.impl; 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.AsnOrder; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate; import com.vincent.rsf.server.manager.mapper.AsnOrderItemMapper; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Objects; @Service("asnOrderItemService") public class AsnOrderItemServiceImpl extends ServiceImpl<AsnOrderItemMapper, AsnOrderItem> implements AsnOrderItemService { @Resource private AsnOrderMapper asnOrderMapper; @Override @Transactional(rollbackFor = Exception.class) public R excelImport(MultipartFile file, HashMap<String, Object> hashMap) throws Exception { ExcelImportResult<AsnOrderTemplate> result = ExcelImportUtil.importExcelMore(file.getInputStream(), MatnrsTemplate.class, ExcelUtil.getDefaultImportParams()); if (result.getList().isEmpty()) { throw new CoolException("物料导入失败!!"); } if (!Objects.isNull(hashMap.get("asnId"))) { throw new CoolException("主单ID为空,无法操作!!"); } AsnOrder order = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, hashMap.get("asnId"))); if (Objects.isNull(order)) { throw new CoolException("ASN单据不存在!!"); } List<AsnOrderItem> itemList = new ArrayList<>(); result.getList().forEach(template -> { AsnOrderItem orderItem = new AsnOrderItem(); BeanUtils.copyProperties(template, orderItem); orderItem.setAsnId(order.getId()) .setAsnCode(order.getCode()); itemList.add(orderItem); }); if (!this.saveBatch(itemList)) { throw new CoolException("保存失败!!"); } return R.ok("操作成功!!"); } }