feat(biz): 优化采购入库流程并新增库存管理功能

This commit is contained in:
zxy 2026-05-25 15:16:58 +08:00
parent 423118e774
commit 1820d623ce
9 changed files with 28 additions and 70 deletions

View File

@ -112,4 +112,6 @@ public class ProStorageInventoryRespVO {
@ExcelProperty("生产计划号") @ExcelProperty("生产计划号")
private String proNo; private String proNo;
private String inventBillNo;
} }

View File

@ -57,4 +57,6 @@ public class SaleDeliveryDetailSaveReqVO {
private Integer stockBag; private Integer stockBag;
private String inventBillNo;
} }

View File

@ -142,4 +142,6 @@ public class ProStorageLogDO extends BaseDO {
*/ */
private String dpstNo; private String dpstNo;
private String inventBillNo;
} }

View File

@ -53,5 +53,4 @@ public interface ProStorageLogService {
PageResult<ProStorageLogDO> getProStorageLogPage(ProStorageLogPageReqVO pageReqVO); PageResult<ProStorageLogDO> getProStorageLogPage(ProStorageLogPageReqVO pageReqVO);
void saveProStorageLog(ProStorageLogDO saveReqVO); void saveProStorageLog(ProStorageLogDO saveReqVO);
} }

View File

@ -77,12 +77,8 @@ public class ProStorageLogServiceImpl implements ProStorageLogService {
private String generatePurReceiptNo(String operatorType) { private String generatePurReceiptNo(String operatorType) {
String prefix = "RK";
if ("2".equals(operatorType)) {
prefix = "CK";
}
String maxPurReceiptNo = proStorageLogMapper.selectMaxPurReceiptNo(operatorType); String maxPurReceiptNo = proStorageLogMapper.selectMaxPurReceiptNo(operatorType);
return CodeGenerateUtils.generateBillNo(prefix, "yyyyMM", 3, maxPurReceiptNo); return CodeGenerateUtils.generateBillNo("CK", maxPurReceiptNo);
} }
} }

View File

@ -22,11 +22,11 @@ import com.ningxia.yunxi.chemmes.module.biz.service.prostorage.ProStorageService
import com.ningxia.yunxi.chemmes.module.biz.service.prostoragelog.ProStorageLogService; import com.ningxia.yunxi.chemmes.module.biz.service.prostoragelog.ProStorageLogService;
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO; import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
import com.ningxia.yunxi.chemmes.module.system.dal.mysql.user.AdminUserMapper; import com.ningxia.yunxi.chemmes.module.system.dal.mysql.user.AdminUserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -42,37 +42,19 @@ import static com.ningxia.yunxi.chemmes.framework.security.core.util.SecurityFra
*/ */
@Service @Service
@Validated @Validated
@RequiredArgsConstructor
public class SaleDeliveryServiceImpl implements SaleDeliveryService { public class SaleDeliveryServiceImpl implements SaleDeliveryService {
@Resource private final SaleDeliveryMapper saleDeliveryMapper;
private SaleDeliveryMapper saleDeliveryMapper; private final SaleDeliveryDetailMapper saleDeliveryDetailMapper;
private final AdminUserMapper adminUserMapper;
@Resource private final ProStorageInventoryMapper proStorageInventoryMapper;
private SaleDeliveryDetailMapper saleDeliveryDetailMapper; private final ProStorageMapper proStorageMapper;
private final ProStorageMatMapper proStorageMatMapper;
@Resource private final OrderItemMapper orderItemMapper;
private AdminUserMapper adminUserMapper; private final OrderMapper orderMapper;
private final ProStorageService proStorageService;
@Resource private final ProStorageLogService proStorageLogService;
private ProStorageInventoryMapper proStorageInventoryMapper;
@Resource
private ProStorageMapper proStorageMapper;
@Resource
private ProStorageMatMapper proStorageMatMapper;
@Resource
private OrderItemMapper orderItemMapper;
@Resource
private OrderMapper orderMapper;
@Resource
private ProStorageService proStorageService;
@Resource
private ProStorageLogService proStorageLogService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -123,7 +105,6 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
List<SaleDeliveryDetailDO> saleDeliveryDetails = BeanUtils.toBean(list, SaleDeliveryDetailDO.class); List<SaleDeliveryDetailDO> saleDeliveryDetails = BeanUtils.toBean(list, SaleDeliveryDetailDO.class);
saleDeliveryDetails.forEach(detail -> saleDeliveryDetails.forEach(detail ->
detail.setSaleDeliveryId(saleDeliveryId) detail.setSaleDeliveryId(saleDeliveryId)
.setInventBillNo(detail.getInventBillNo())
.setId(null) .setId(null)
); );
saleDeliveryDetailMapper.insertBatch(saleDeliveryDetails); saleDeliveryDetailMapper.insertBatch(saleDeliveryDetails);
@ -235,7 +216,6 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
} }
// 存入 proStorageLogService // 存入 proStorageLogService
for (SaleDeliveryDetailDO saleDeliveryDetailDO : detailList) { for (SaleDeliveryDetailDO saleDeliveryDetailDO : detailList) {
ProStorageLogDO proStorageLogDO = ProStorageLogDO.builder() ProStorageLogDO proStorageLogDO = ProStorageLogDO.builder()
.stockId(saleDeliveryDetailDO.getId()) .stockId(saleDeliveryDetailDO.getId())
.description("销售出库") .description("销售出库")
@ -262,6 +242,7 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
.relarionNo(saleDelivery.getSaleDeliveryNo()) .relarionNo(saleDelivery.getSaleDeliveryNo())
.relarionId(saleDelivery.getId()) .relarionId(saleDelivery.getId())
.relarionDetailId(saleDeliveryDetailDO.getId()) .relarionDetailId(saleDeliveryDetailDO.getId())
.inventBillNo(saleDeliveryDetailDO.getInventBillNo())
.build(); .build();
proStorageLogService.saveProStorageLog(proStorageLogDO); proStorageLogService.saveProStorageLog(proStorageLogDO);
} }
@ -370,5 +351,7 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
saleDelivery.setDeliveryStatus("2"); saleDelivery.setDeliveryStatus("2");
// saleDelivery.setTwmStorageId(proStorage.getId()); // saleDelivery.setTwmStorageId(proStorage.getId());
saleDeliveryMapper.updateById(saleDelivery); saleDeliveryMapper.updateById(saleDelivery);
} }
} }

View File

@ -32,27 +32,11 @@ declare module 'vue' {
Echart: typeof import('./../components/Echart/src/Echart.vue')['default'] Echart: typeof import('./../components/Echart/src/Echart.vue')['default']
Editor: typeof import('./../components/Editor/src/Editor.vue')['default'] Editor: typeof import('./../components/Editor/src/Editor.vue')['default']
ElAlert: typeof import('element-plus/es')['ElAlert'] ElAlert: typeof import('element-plus/es')['ElAlert']
ElAside: typeof import('element-plus/es')['ElAside']
ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer']
ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBadge: typeof import('element-plus/es')['ElBadge']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElCollapseTransition: typeof import('element-plus/es')['ElCollapseTransition']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog'] ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider'] ElDivider: typeof import('element-plus/es')['ElDivider']
ElDrawer: typeof import('element-plus/es')['ElDrawer'] ElDrawer: typeof import('element-plus/es')['ElDrawer']
@ -68,41 +52,25 @@ declare module 'vue' {
ElementTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/ElementTask.vue')['default'] ElementTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/ElementTask.vue')['default']
ElForm: typeof import('element-plus/es')['ElForm'] ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElHeader: typeof import('element-plus/es')['ElHeader']
ElIcon: typeof import('element-plus/es')['ElIcon'] ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMain: typeof import('element-plus/es')['ElMain']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover'] ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElSpace: typeof import('element-plus/es')['ElSpace']
ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable'] ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTableV2: typeof import('element-plus/es')['ElTableV2']
ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag'] ElTag: typeof import('element-plus/es')['ElTag']
ElText: typeof import('element-plus/es')['ElText']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTimeSelect: typeof import('element-plus/es')['ElTimeSelect']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTransfer: typeof import('element-plus/es')['ElTransfer']
ElTree: typeof import('element-plus/es')['ElTree'] ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload'] ElUpload: typeof import('element-plus/es')['ElUpload']

View File

@ -272,6 +272,7 @@ const handleSave = () => {
spec: row.spec, spec: row.spec,
unit: row.unit, unit: row.unit,
materialId: row.materialId, materialId: row.materialId,
inventBillNo: row.inventBillNo,
})) }))
emit('select', selectData) emit('select', selectData)

View File

@ -697,6 +697,7 @@ const handleInventorySelect = (data: any[]) => {
deliveriedBag: '', // deliveriedBag: '', //
deliveriedQty: '', // deliveriedQty: '', //
remark: '', // remark: '', //
inventBillNo: inventory.inventBillNo, //
}) })
} }
// //
@ -833,6 +834,8 @@ const submitForm = async () => {
deliveriedBagQty: item.deliveriedBag, deliveriedBagQty: item.deliveriedBag,
deliveriedQty: item.deliveriedQty, deliveriedQty: item.deliveriedQty,
remark: item.remark, remark: item.remark,
inventBillNo: item.inventBillNo,
//
})) }))
// //
@ -884,6 +887,8 @@ const submitAudit = async () => {
deliveriedBagQty: item.deliveriedBag, deliveriedBagQty: item.deliveriedBag,
deliveriedQty: item.deliveriedQty, deliveriedQty: item.deliveriedQty,
remark: item.remark, remark: item.remark,
inventBillNo: item.inventBillNo,
//
})) }))
// //