| | |
| | | import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper; |
| | | import com.ruoyi.procurementrecord.pojo.ReturnManagement; |
| | | import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct; |
| | | import com.ruoyi.sales.dto.SalesLedgerDto; |
| | | import com.ruoyi.sales.mapper.SalesLedgerMapper; |
| | | import com.ruoyi.sales.mapper.ShippingInfoMapper; |
| | | import com.ruoyi.sales.pojo.SalesLedger; |
| | |
| | | private ShippingInfoMapper shippingInfoMapper; |
| | | private SalesLedgerMapper salesLedgerMapper; |
| | | |
| | | /** |
| | | * 入库类别:代储入库。只有这个类别要求绑定销售订单 |
| | | */ |
| | | private static final String INBOUND_CATEGORY_DEPOSIT = "代储入库"; |
| | | |
| | | /** |
| | | * 销售台账的销售类型:代储。代储入库只能绑这个类型的台账 |
| | | */ |
| | | private static final String LEDGER_TYPE_DEPOSIT = "代储"; |
| | | |
| | | @Override |
| | | public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) { |
| | | return stockInRecordMapper.listPage(page, stockInRecordDto); |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int add(StockInRecordDto stockInRecordDto) { |
| | | resolveDepositSalesLedger(stockInRecordDto); |
| | | LocalDateTime createTime = stockInRecordDto.getCreateTime(); |
| | | if (createTime == null) { |
| | | createTime = LocalDateTime.now(); |
| | |
| | | return stockInRecordMapper.insert(stockInRecord); |
| | | } |
| | | |
| | | /** |
| | | * 代储入库(inboundCategory=代储入库)必须绑定一张「代储」类型的销售台账(销售订单)。 |
| | | * 只做校验与落库,**不用台账覆盖**入库单上的客户/油库/储罐 —— 那几项仍以现场填写为准。 |
| | | * 非代储入库不绑台账,即使前端传了也置空,避免落下无意义的关联。 |
| | | */ |
| | | private void resolveDepositSalesLedger(StockInRecordDto stockInRecordDto) { |
| | | if (!INBOUND_CATEGORY_DEPOSIT.equals(stockInRecordDto.getInboundCategory())) { |
| | | stockInRecordDto.setSalesLedgerId(null); |
| | | return; |
| | | } |
| | | Long salesLedgerId = stockInRecordDto.getSalesLedgerId(); |
| | | if (salesLedgerId == null) { |
| | | throw new BaseException("代储入库必须绑定销售订单"); |
| | | } |
| | | SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId); |
| | | if (salesLedger == null) { |
| | | throw new BaseException("所选销售订单不存在,销售订单id:" + salesLedgerId); |
| | | } |
| | | if (!LEDGER_TYPE_DEPOSIT.equals(salesLedger.getLedgerType())) { |
| | | throw new BaseException("代储入库只能绑定代储类型的销售订单,销售合同号:" + salesLedger.getSalesContractNo()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public IPage<SalesLedger> listBindableSalesLedger(Page page, SalesLedgerDto salesLedgerDto) { |
| | | // 该查询用 /*data_scope*/ 跳过数据权限,而 MP 默认会把 count 语句优化成「SELECT COUNT(*) FROM sales_ledger |
| | | // WHERE ...」,优化后标记丢失,count 反而被追加权限条件,total 会比实际记录少。关掉 count 优化后 |
| | | // count 退化成「SELECT COUNT(*) FROM (原句) TOTAL」,标记原样保留 |
| | | page.setOptimizeCountSql(false); |
| | | return stockInRecordMapper.bindableSalesLedgerPage(page, salesLedgerDto); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int update(Long id, StockInRecordDto stockInRecordDto) { |