From 3170c2aca0583f801a5527c124103cfbff2bb306 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 14 七月 2025 15:01:13 +0800
Subject: [PATCH] 盘点单功能优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderItemService.java | 7
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderItemServiceImpl.java | 12 +
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java | 3
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderItemController.java | 154 +++++++++++++++
rsf-server/src/main/resources/mapper/manager/CheckOrderItemMapper.xml | 5
rsf-admin/src/page/orders/check/CheckOrderList.jsx | 45 +--
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java | 23 ++
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java | 5
rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/CheckOrderItemMapper.java | 12 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/CheckOrderTemplate.java | 135 +++++++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java | 19 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java | 100 ++++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java | 12 +
rsf-admin/src/i18n/zh.js | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java | 10
rsf-server/src/main/resources/application-dev.yml | 2
17 files changed, 509 insertions(+), 40 deletions(-)
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 8cc2781..ccda278 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -637,6 +637,7 @@
poCode: "DO鍗曞彿",
poId: "DO鏍囪瘑",
type: "绫诲瀷",
+ checkType: '鐩樼偣绫诲瀷',
wkType: "涓氬姟绫诲瀷",
anfme: "鏁伴噺",
workQty: '鎵ц鏁�',
diff --git a/rsf-admin/src/page/orders/check/CheckOrderList.jsx b/rsf-admin/src/page/orders/check/CheckOrderList.jsx
index 36a9b6d..228316d 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderList.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderList.jsx
@@ -5,39 +5,26 @@
DatagridConfigurable,
SearchInput,
TopToolbar,
- Toolbar,
SelectColumnsButton,
EditButton,
FilterButton,
- CreateButton,
- ExportButton,
- BulkDeleteButton,
- useDataProvider,
WrapperField,
useRecordContext,
useTranslate,
useNotify,
useRefresh,
useListContext,
- FunctionField,
TextField,
NumberField,
DateField,
- BooleanField,
- ReferenceField,
TextInput,
- DateTimeInput,
DateInput,
SelectInput,
NumberInput,
ReferenceInput,
- ReferenceArrayInput,
AutocompleteInput,
- DeleteButton,
Button,
useRedirect,
- useUnselectAll,
- useRecordSelection,
} from 'react-admin';
import { styled } from '@mui/material/styles';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
@@ -77,20 +64,20 @@
const filters = [
<SearchInput source="condition" alwaysOn />,
- <TextInput source="code" label="table.field.outStock.code" alwaysOn />,
- <TextInput source="poCode" label="table.field.outStock.poCode" />,
- <NumberInput source="poId" label="table.field.outStock.poId" />,
- <ReferenceInput source="type" reference="dictData" filter={{ dictTypeCode: 'sys_order_type', group: '2' }} label="table.field.outStock.type" alwaysOn>
- <AutocompleteInput label="table.field.outStock.type" optionValue="value" />
+ <TextInput source="code" label="table.field.checkOrder.code" alwaysOn />,
+ <TextInput source="poCode" label="table.field.checkOrder.poCode" />,
+ <NumberInput source="poId" label="table.field.checkOrder.poId" />,
+ <ReferenceInput source="type" reference="dictData" filter={{ dictTypeCode: 'sys_order_type', group: '3' }} label="table.field.checkOrder.type" alwaysOn>
+ <AutocompleteInput label="table.field.checkOrder.type" optionValue="value" />
</ReferenceInput>,
- <ReferenceInput source="wkType" reference="dictData" filter={{ dictTypeCode: 'sys_business_type', group: '2' }} label="table.field.outStock.wkType" alwaysOn>
- <AutocompleteInput label="table.field.outStock.wkType" optionValue="value" />
+ <ReferenceInput source="wkType" reference="dictData" filter={{ dictTypeCode: 'sys_check_order_type'}} label="table.field.checkOrder.wkType" alwaysOn>
+ <AutocompleteInput label="table.field.checkOrder.wkType" optionValue="value" />
</ReferenceInput>,
- <NumberInput source="anfme" label="table.field.outStock.anfme" />,
- <NumberInput source="qty" label="table.field.outStock.qty" />,
- <TextInput source="logisNo" label="table.field.outStock.logisNo" />,
- <DateInput source="arrTime" label="table.field.outStock.arrTime" />,
- <SelectInput source="rleStatus" label="table.field.outStock.rleStatus"
+ <NumberInput source="anfme" label="table.field.checkOrder.anfme" />,
+ <NumberInput source="qty" label="table.field.checkOrder.qty" />,
+ <TextInput source="logisNo" label="table.field.checkOrder.logisNo" />,
+ <DateInput source="arrTime" label="table.field.checkOrder.arrTime" />,
+ <SelectInput source="rleStatus" label="table.field.checkOrder.rleStatus"
choices={[
{ id: 0, name: ' 姝e父' },
{ id: 1, name: ' 宸查噴鏀�' },
@@ -99,7 +86,7 @@
<TextInput label="common.field.memo" source="memo" />,
<DictionarySelect
- label='table.field.outStock.exceStatus'
+ label='table.field.checkOrder.exceStatus'
name="exceStatus"
dictTypeCode="sys_asn_exce_status"
alwaysOn
@@ -120,7 +107,7 @@
const [modalType, setmodalType] = useState(0);
const [select, setSelect] = useState(0);
const billReload = useRef();
- const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
+ const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_check_order_type')) || [];
//鑾峰彇娉㈡瑙勫垯
// const closeDialog = async (value) => {
@@ -156,7 +143,7 @@
<CreateByOrderButton setCreateDialog={setCreateDialog} />
<MyCreateButton onClick={() => { setManualDialog(true); setmodalType(0) }} />
<SelectColumnsButton preferenceKey='check' />
- <ImportButton value={'outStockItem'} />
+ <ImportButton value={'checkItem'} />
</TopToolbar>
)}
perPage={DEFAULT_PAGE_SIZE}
@@ -172,7 +159,7 @@
<TextField source="code" label="table.field.checkOrder.code" />
<TextField source="poCode" label="table.field.checkOrder.poCode" />
<TextField source="type$" label="table.field.checkOrder.type" />
- <TextField cellClassName="wkType" source="wkType$" label="table.field.checkOrder.wkType" />
+ <TextField cellClassName="wkType" source="checkType$" label="table.field.checkOrder.wkType" />
<NumberField source="anfme" label="table.field.checkOrder.anfme" />
<NumberField source="workQty" label="table.field.checkOrder.workQty" />
<NumberField source="qty" label="table.field.checkOrder.qty" />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java
index 51845f5..48ffb18 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java
@@ -17,9 +17,12 @@
import com.vincent.rsf.server.system.controller.BaseController;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import io.swagger.annotations.Api;
+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.HttpServletResponse;
import java.util.*;
@@ -29,7 +32,6 @@
@Autowired
private CheckOrderService checkOrderService;
-
@PreAuthorize("hasAuthority('manager:check:list')")
@PostMapping("/check/page")
@@ -122,4 +124,23 @@
ExcelUtil.build(ExcelUtil.create(orders, AsnOrder.class), response);
}
+
+
+ /**
+ * 鐩樼偣鍗曞鍏�
+ * @param file
+ * @return
+ */
+ @PostMapping("/check/import")
+ @ApiOperation("ASN瀵煎叆鎺ュ彛")
+ @PreAuthorize("hasAuthority('manager:check:update')")
+ public R importExcel(@RequestParam(value = "file") MultipartFile file) throws Exception {
+ if (Objects.isNull(file)) {
+ return R.error("鏂囦欢涓嶈兘涓虹┖锛侊紒");
+ }
+ HashMap<String, Object> hashMap = new HashMap<>();
+ return checkOrderService.excelImport(file, hashMap, getLoginUserId());
+ }
+
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderItemController.java
new file mode 100644
index 0000000..470fa54
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderItemController.java
@@ -0,0 +1,154 @@
+package com.vincent.rsf.server.manager.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.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.common.utils.ExcelUtil;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
+import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
+import com.vincent.rsf.server.manager.service.CheckOrderItemService;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
+import com.vincent.rsf.server.system.controller.BaseController;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import io.swagger.annotations.Api;
+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 javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ * @author Ryan
+ * @date 2025/7/14
+ * @description: 鐩樼偣鏄庣粏
+ * @version 1.0
+ */
+@Api("鐩樼偣鏄庣粏")
+@RestController
+public class CheckOrderItemController extends BaseController {
+
+ @Autowired
+ private CheckOrderItemService checkOrderItemService;
+
+
+ @PreAuthorize("hasAuthority('manager:checkItem:list')")
+ @PostMapping("/checkItem/page")
+ public R page(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<AsnOrderItem, BaseParam> pageParam = new PageParam<>(baseParam, AsnOrderItem.class);
+ QueryWrapper<AsnOrderItem> wrapper = pageParam.buildWrapper(true);
+ return R.ok().add(checkOrderItemService.page(pageParam, wrapper));
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:list')")
+ @PostMapping("/checkItem/list")
+ public R list(@RequestBody Map<String, Object> map) {
+ return R.ok().add(checkOrderItemService.list());
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:list')")
+ @PostMapping({"/checkItem/many/{ids}", "/checkItem/many/{ids}"})
+ public R many(@PathVariable Long[] ids) {
+ return R.ok().add(checkOrderItemService.listByIds(Arrays.asList(ids)));
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:list')")
+ @GetMapping("/checkItem/{id}")
+ public R get(@PathVariable("id") Long id) {
+ return R.ok().add(checkOrderItemService.getById(id));
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:save')")
+ @OperationLog("Create 瀛楀吀鏁版嵁闆�")
+ @PostMapping("/checkItem/save")
+ public R save(@RequestBody AsnOrderItem order) {
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, order);
+ if (Objects.isNull(ruleCode)) {
+ throw new RuntimeException("鐩樼偣鍗曞彿鐢熸垚澶辫触锛侊紒");
+ }
+ if (!checkOrderItemService.save(order)) {
+ return R.error("Save Fail");
+ }
+ return R.ok("Save Success").add(order);
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:update')")
+ @OperationLog("Update 瀛楀吀鏁版嵁闆�")
+ @PostMapping("/checkItem/update")
+ public R update(@RequestBody AsnOrderItem order) {
+ order.setUpdateTime(null);
+ order.setUpdateBy(getLoginUserId());
+ if (!checkOrderItemService.updateById(order)) {
+ return R.error("Update Fail");
+ }
+ return R.ok("Update Success").add(order);
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:remove')")
+ @OperationLog("Delete 瀛楀吀鏁版嵁闆�")
+ @PostMapping("/checkItem/remove/{ids}")
+ public R remove(@PathVariable Long[] ids) {
+ if (!checkOrderItemService.removeByIds(Arrays.asList(ids))) {
+ return R.error("Delete Fail");
+ }
+ return R.ok("Delete Success").add(ids);
+ }
+
+ @PreAuthorize("hasAuthority('manager:checkItem:list')")
+ @PostMapping("/checkItem/query")
+ public R query(@RequestParam(required = false) String condition) {
+ List<KeyValVo> vos = new ArrayList<>();
+ LambdaQueryWrapper<AsnOrderItem> wrapper = new LambdaQueryWrapper<>();
+ if (!Cools.isEmpty(condition)) {
+ wrapper.like(AsnOrderItem::getAsnCode, condition);
+ }
+ checkOrderItemService.page(new Page<>(1, 20), wrapper).getRecords().forEach(
+ item -> vos.add(new KeyValVo(item.getId(), item.getAsnCode()))
+ );
+ return R.ok().add(vos);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/14
+ * @description: 鐩樼偣鍗曞鍑�
+ * @version 1.0
+ */
+ @PreAuthorize("hasAuthority('manager:checkItem:list')")
+ @PostMapping("/checkItem/export")
+ public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+ List<AsnOrderItem> orders = new ArrayList<>();
+ if (!Objects.isNull(map.get("ids"))) {
+ orders = checkOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getId, map.get("ids")));
+ } else {
+ orders = checkOrderItemService.list();
+ }
+ ExcelUtil.build(ExcelUtil.create(orders, AsnOrderItem.class), response);
+ }
+
+ /**
+ * @author Ryan
+ * @description 涓嬭浇妯℃澘
+ * @param
+ * @return
+ * @time 2025/4/18 08:17
+ */
+ @PostMapping("/checkItem/template/download")
+ @ApiOperation("涓嬭浇鐩樼偣鍗曟ā鏉�")
+ @PreAuthorize("hasAuthority('manager:checkItem:update')")
+ public void downloadTemplate(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+ CheckOrderTemplate template = ExcelUtil.mockData(CheckOrderTemplate.class);
+ List<CheckOrderTemplate> list = Arrays.asList(template);
+ ExcelUtil.build(ExcelUtil.create(list, CheckOrderTemplate.class, true), response);
+ }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java
index 989d23d..0a45890 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java
@@ -16,10 +16,8 @@
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.manager.entity.AsnOrderItem;
import com.vincent.rsf.server.manager.entity.Companys;
-import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
import com.vincent.rsf.server.manager.entity.excel.OutStockTemplate;
import com.vincent.rsf.server.manager.enums.CompanysType;
-import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.vincent.rsf.server.manager.service.CompanysService;
import com.vincent.rsf.server.manager.service.OutStockItemService;
import com.vincent.rsf.server.system.controller.BaseController;
@@ -179,7 +177,7 @@
* @return
* @time 2025/4/18 08:17
*/
- @PostMapping("/outStock/template/download")
+ @PostMapping("/outStockItem/template/download")
@ApiOperation("涓嬭浇鏀惰揣鍗曟ā鏉�")
@PreAuthorize("hasAuthority('manager:outStockItem:update')")
public void downloadTemplate(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
index 15833aa..8f573db 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
@@ -235,6 +235,18 @@
return dictData.getLabel();
}
+ public String getCheckType$(){
+ if (Cools.isEmpty(this.wkType)){
+ return "";
+ }
+ DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
+ DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.SYS_CHECK_ORDER_TYPE).eq(DictData::getValue, this.wkType));
+ if (Objects.isNull(dictData)) {
+ return null;
+ }
+ return dictData.getLabel();
+ }
+
public String getArrTime$(){
if (Cools.isEmpty(this.arrTime)){
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/CheckOrderTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/CheckOrderTemplate.java
new file mode 100644
index 0000000..7118c2b
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/CheckOrderTemplate.java
@@ -0,0 +1,135 @@
+package com.vincent.rsf.server.manager.entity.excel;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@ExcelAutoColumnSize
+@Accessors(chain = true)
+public class CheckOrderTemplate implements Serializable {
+
+ /**
+ * 缂栧彿
+ */
+ @Excel(name = "*鐩樼偣鍗曞彿")
+ @ApiModelProperty(value = "*鐩樼偣鍗曞彿")
+ @ExcelComment(value = "code", example = "CK5945272236")
+ private String code;
+
+ @Excel(name = "琛屽彿")
+ @ApiModelProperty("琛屽彿")
+ @ExcelComment(value = "platItemId", example = "1357564255478")
+ private String platItemId;
+
+ @Excel(name = "瀹㈡埛璁㈠崟鍙�")
+ @ApiModelProperty("瀹㈡埛璁㈠崟鍙�")
+ @ExcelComment(value = "platOrderCode", example = "PT202564713301")
+ private String platOrderCode;
+
+ @Excel(name = "宸ュ崟鍙�")
+ @ApiModelProperty("宸ュ崟鍙�")
+ @ExcelComment(value = "platWorkCode", example = "PWC2354894211")
+ private String platWorkCode;
+
+ @Excel(name = "椤圭洰鍙�")
+ @ApiModelProperty("椤圭洰鍙�")
+ @ExcelComment(value = "projectCode", example = "PC2365845636001")
+ private String projectCode;
+
+ /**
+ * 鍗曟嵁绫诲瀷
+ */
+ @Excel(name = "*鍗曟嵁绫诲瀷")
+ @ApiModelProperty(value = "*鍗曟嵁绫诲瀷")
+ @ExcelComment(value = "type", example = "鐩樼偣鍗�")
+ private String type;
+
+ /**
+ * 涓氬姟绫诲瀷
+ */
+ @Excel(name = "*涓氬姟绫诲瀷")
+ @ApiModelProperty(value = "*涓氬姟绫诲瀷")
+ @ExcelComment(value = "wkType", example = "瀹氭湡鐩樼偣")
+ private String wkType;
+
+
+ @Excel(name = "*鐗╂枡缂栫爜")
+ @ApiModelProperty("*鐗╂枡缂栫爜")
+ @ExcelComment(value = "matnrCode", example = "102010101545")
+ private String matnrCode;
+
+
+ @Excel(name = "鐗╂枡鍚嶇О")
+ @ApiModelProperty("鐗╂枡鍚嶇О")
+ @ExcelComment(value = "maktx", example = "澶╃憺019-澶鍨嬫敮鏋�-55椋炴満杞粦鑹诧紝涓夎杞洊鍠锋紗閾惰壊 锛堝甫鏀讳笣閽夛級鍙�")
+ private String maktx;
+
+
+ @Excel(name = "鐗╂枡瑙勬牸")
+ @ApiModelProperty("鐗╂枡瑙勬牸")
+ @ExcelComment(value = "maktx", example = "2*3*6")
+ private String spec;
+
+
+ @Excel(name = "鐗╂枡鍨嬪彿")
+ @ApiModelProperty("鐗╂枡鍨嬪彿")
+ @ExcelComment(value = "maktx", example = "abc")
+ private String model;
+
+
+ @Excel(name = "渚涘簲鍟嗙紪鐮�")
+ @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
+ @ExcelComment(value = "splrCode", example = "685947")
+ private String splrCode;
+
+ @Excel(name = "渚涘簲鍟嗗悕绉�")
+ @ApiModelProperty("渚涘簲鍟嗗悕绉�")
+ @ExcelComment(value = "splrName", example = "娴欐睙涓壃绔嬪簱鎶�鏈湁闄愬叕鍙�")
+ private String splrName;
+
+
+ @Excel(name = "宸插畬鎴愭暟閲�")
+ @ApiModelProperty("宸插畬鎴愭暟閲�")
+ @ExcelComment(value = "qty", example = "0")
+ private String qty;
+
+
+ @Excel(name = "渚涘簲鍟嗘壒娆�")
+ @ApiModelProperty("渚涘簲鍟嗘壒娆�")
+ @ExcelComment(value = "splrBatch", example = "25251212")
+ private String splrBatch;
+
+ @Excel(name = "*鏁伴噺")
+ @ApiModelProperty("*鏁伴噺")
+ @ExcelComment(value = "anfme", example = "75")
+ private String anfme;
+
+
+ @Excel(name = "鐗╂祦鍗曞彿")
+ @ApiModelProperty("鐗╂祦鍗曞彿")
+ @ExcelComment(value = "logicNo", example = "SF100064851")
+ private String logicNo;
+
+
+ @Excel(name = "棰勮閫佽揪鏃堕棿")
+ @ApiModelProperty("棰勮閫佽揪鏃堕棿")
+ @ExcelComment(value = "arrTime", example = "2025-05-21")
+ private String arrTime;
+
+ @Excel(name = "鍖呰鍚嶇О")
+ @ApiModelProperty("鍖呰鍚嶇О")
+ @ExcelComment(value = "packName", example = "涓�")
+ private String packName;
+
+ @Excel(name = "澶囨敞")
+ @ApiModelProperty("澶囨敞")
+ @ExcelComment(value = "memo", example = "娉細鏄撶鍝侊紝杞绘嬁鏀�")
+ private String memo;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java
new file mode 100644
index 0000000..ad0ab62
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java
@@ -0,0 +1,19 @@
+package com.vincent.rsf.server.manager.enums;
+
+/**
+ * @author Ryan
+ * @date 2025/7/14
+ * @description: 鐩樼偣鍗曠被鍨�
+ * @version 1.0
+ */
+public enum CheckOrderType {
+
+ CHECK_ORDER_TYPE_TEMP("1", "涓存椂鐩樼偣"),
+ CHECK_ORDER_TYPE_ROUND("2", "鎶芥牱鐩樼偣"),
+ CHECK_ORDER_TYPE_AREAS("3", "鍖哄煙鐩樼偣"),
+ CHECK_ORDER_TYPE_DIFF("4", "宸紓鐩樼偣"),
+ CHECK_ORDER_TYPE_CIRCLE("5", "寰幆鐩樼偣"),
+
+
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
index 7a53b72..583ebdf 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
@@ -27,6 +27,8 @@
return OrderType.ORDER_IN.type;
} else if (desc.equals(OrderType.ORDER_OUT.desc)) {
return OrderType.ORDER_OUT.type;
+ } else if (desc.equals(OrderType.ORDER_CHECK.desc)) {
+ return OrderType.ORDER_CHECK.type;
}
return null;
}
@@ -36,12 +38,8 @@
return OrderType.ORDER_IN.desc;
} else if (type.equals(OrderType.ORDER_OUT.type)) {
return OrderType.ORDER_OUT.desc;
-// } else if (type.equals(OrderType.ORDER_PLAT_IN.type)) {
-// return OrderType.ORDER_PLAT_IN.desc;
-// } else if (type.equals(OrderType.ORDER_RECEIPT.type)) {
-// return OrderType.ORDER_RECEIPT.desc;
-// } else if (type.equals(OrderType.ORDER_PURCHASE_IN.type)) {
-// return OrderType.ORDER_PURCHASE_IN.desc;
+ } else if (type.equals(OrderType.ORDER_CHECK.type)) {
+ return OrderType.ORDER_CHECK.desc;
}
return null;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/CheckOrderItemMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/CheckOrderItemMapper.java
new file mode 100644
index 0000000..24460a6
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/CheckOrderItemMapper.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface CheckOrderItemMapper extends BaseMapper<AsnOrderItem> {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderItemService.java
new file mode 100644
index 0000000..73b78c7
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderItemService.java
@@ -0,0 +1,7 @@
+package com.vincent.rsf.server.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+
+public interface CheckOrderItemService extends IService<AsnOrderItem> {
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java
index 6f4fa8e..aee567f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java
@@ -1,8 +1,13 @@
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.AsnOrder;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
public interface CheckOrderService extends IService<AsnOrder> {
+ R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderItemServiceImpl.java
new file mode 100644
index 0000000..e638a12
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderItemServiceImpl.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import com.vincent.rsf.server.manager.mapper.CheckOrderItemMapper;
+import com.vincent.rsf.server.manager.service.CheckOrderItemService;
+import org.springframework.stereotype.Service;
+
+@Service("checkOrderItemService")
+public class CheckOrderItemServiceImpl extends ServiceImpl<CheckOrderItemMapper, AsnOrderItem> implements CheckOrderItemService {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
index 2c31210..a481d1f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
@@ -1,12 +1,112 @@
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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.AsnOrderItem;
+import com.vincent.rsf.server.manager.entity.Matnr;
+import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
+import com.vincent.rsf.server.manager.enums.AsnExceStatus;
+import com.vincent.rsf.server.manager.enums.OrderType;
+import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.manager.mapper.CheckOrderMapper;
+import com.vincent.rsf.server.manager.service.CheckOrderItemService;
import com.vincent.rsf.server.manager.service.CheckOrderService;
+import com.vincent.rsf.server.manager.service.MatnrService;
+import org.apache.commons.lang3.StringUtils;
+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.util.*;
+import java.util.stream.Collectors;
@Service("checkOrderService")
public class CheckOrderServiceImpl extends ServiceImpl<CheckOrderMapper, AsnOrder> implements CheckOrderService {
+ @Autowired
+ private MatnrService matnrService;
+
+ @Autowired
+ private CheckOrderItemService checkOrderItemService;
+
+ /**
+ * @author Ryan
+ * @date 2025/7/14
+ * @description: 鐩樼偣鍗曞鍏�
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId) {
+ ExcelImportResult result = null;
+ try {
+ result = ExcelImportUtil.importExcelMore(file.getInputStream(), CheckOrderTemplate.class, ExcelUtil.getDefaultImportParams());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ if (result.getList().isEmpty()) {
+ throw new CoolException("琛ㄦ牸鍐呭涓嶈兘涓虹┖锛侊紒");
+ }
+ List<CheckOrderTemplate> resultList = result.getList();
+ Map<String, List<CheckOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(CheckOrderTemplate::getCode));
+ for (String key : listMap.keySet()) {
+ CheckOrderTemplate template = listMap.get(key).stream().findFirst().get();
+ AsnOrder asnOrder = this.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode()));
+ if (!Objects.isNull(asnOrder)) {
+ continue;
+ }
+ AsnOrder order = new AsnOrder();
+ order.setCode(template.getCode())
+ .setMemo(template.getMemo())
+ .setUpdateBy(loginUserId)
+ .setCreateBy(loginUserId)
+ .setType(OrderType.getTypeVal(template.getType()))
+ .setWkType(OrderWorkType.getWorkType(template.getWkType()));
+ if (!this.save(order)) {
+ throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒");
+ }
+ List<AsnOrderItem> items = new ArrayList<>();
+ for (CheckOrderTemplate orderTemplate : listMap.get(key)) {
+ AsnOrderItem orderItem = new AsnOrderItem();
+ Matnr matnr = null;
+ if (StringUtils.isNotBlank(orderTemplate.getMatnrCode())) {
+ matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>()
+ .eq(Matnr::getCode, orderTemplate.getMatnrCode()));
+ }
+ orderItem.setAsnId(order.getId())
+ .setAsnCode(order.getCode())
+ .setSplrBatch(orderTemplate.getSplrBatch())
+ .setAnfme(Double.parseDouble(orderTemplate.getAnfme()))
+ .setSplrName(orderTemplate.getSplrName())
+ .setSplrCode(orderTemplate.getSplrCode())
+ .setMaktx(orderTemplate.getMaktx())
+ .setMatnrCode(orderTemplate.getMatnrCode());
+ if (!Objects.isNull(matnr)) {
+ orderItem.setMaktx(matnr.getName()).setMatnrCode(matnr.getCode()).setMatnrId(matnr.getId());
+ }
+ items.add(orderItem);
+ if (!checkOrderItemService.saveBatch(items)) {
+ throw new CoolException("鍗曟嵁鏄庣粏淇濆瓨澶辫触锛侊紒");
+ }
+ }
+ if (!items.isEmpty()) {
+ double purQty = items.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
+ if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
+ .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
+ .set(AsnOrder::getAnfme, purQty).eq(AsnOrder::getId, order.getId()))) {
+ throw new CoolException("鍗曟嵁鏁伴噺淇敼澶辫触锛侊紒");
+ }
+ }
+ }
+
+ return R.ok("鎿嶄綔鎴愬姛锛侊紒");
+ }
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
index e7b98cb..9d1fb4f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
@@ -34,6 +34,9 @@
*/
public final static String DICT_SYS_BUSINESS_TYPE = "sys_business_type";
+ /**鐩樼偣绫诲瀷*/
+ public final static String SYS_CHECK_ORDER_TYPE = "sys_check_order_type";
+
/**
* 鍗曟嵁绫诲瀷
*/
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 95669f3..cfb08a3 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -15,7 +15,7 @@
# url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
# username: rsf
username: root
- url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+ url: jdbc:mysql://192.168.4.151:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
password: 34821015
type: com.alibaba.druid.pool.DruidDataSource
druid:
diff --git a/rsf-server/src/main/resources/mapper/manager/CheckOrderItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/CheckOrderItemMapper.xml
new file mode 100644
index 0000000..1d04222
--- /dev/null
+++ b/rsf-server/src/main/resources/mapper/manager/CheckOrderItemMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vincent.rsf.server.manager.mapper.CheckOrderItemMapper">
+
+</mapper>
--
Gitblit v1.9.1