diff --git a/gear-oa/src/main/java/com/gear/oa/domain/GearReturnExchange.java b/gear-oa/src/main/java/com/gear/oa/domain/GearReturnExchange.java index 9941d1e..03cc283 100644 --- a/gear-oa/src/main/java/com/gear/oa/domain/GearReturnExchange.java +++ b/gear-oa/src/main/java/com/gear/oa/domain/GearReturnExchange.java @@ -52,6 +52,11 @@ public class GearReturnExchange extends BaseEntity { * 涉及金额 */ private BigDecimal amount; + + /** + * 销售员ID + */ + private Long salesmanId; /** * 删除标志(0=正常,1=已删除) */ diff --git a/gear-oa/src/main/java/com/gear/oa/domain/bo/GearReturnExchangeBo.java b/gear-oa/src/main/java/com/gear/oa/domain/bo/GearReturnExchangeBo.java index 1185e08..4d0dbec 100644 --- a/gear-oa/src/main/java/com/gear/oa/domain/bo/GearReturnExchangeBo.java +++ b/gear-oa/src/main/java/com/gear/oa/domain/bo/GearReturnExchangeBo.java @@ -58,6 +58,11 @@ public class GearReturnExchangeBo extends BaseEntity { */ private BigDecimal amount; + /** + * 销售员ID + */ + private Long salesmanId; + //订单id private Long orderId; diff --git a/gear-oa/src/main/java/com/gear/oa/domain/vo/GearReturnExchangeVo.java b/gear-oa/src/main/java/com/gear/oa/domain/vo/GearReturnExchangeVo.java index 8553827..a35ab48 100644 --- a/gear-oa/src/main/java/com/gear/oa/domain/vo/GearReturnExchangeVo.java +++ b/gear-oa/src/main/java/com/gear/oa/domain/vo/GearReturnExchangeVo.java @@ -41,6 +41,16 @@ public class GearReturnExchangeVo { @ExcelProperty(value = "订单ID") private Long orderId; + /** + * 销售员ID + */ + private Long salesmanId; + + /** + * 销售员姓名 + */ + private String salesmanName; + /** * 客户ID */ diff --git a/gear-oa/src/main/java/com/gear/oa/service/impl/GearReturnExchangeServiceImpl.java b/gear-oa/src/main/java/com/gear/oa/service/impl/GearReturnExchangeServiceImpl.java index 618e9b6..137cbd7 100644 --- a/gear-oa/src/main/java/com/gear/oa/service/impl/GearReturnExchangeServiceImpl.java +++ b/gear-oa/src/main/java/com/gear/oa/service/impl/GearReturnExchangeServiceImpl.java @@ -12,7 +12,11 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.gear.oa.domain.bo.GearReturnExchangeBo; import com.gear.oa.domain.vo.GearReturnExchangeVo; +import com.gear.oa.domain.GearOrder; +import com.gear.oa.domain.GearOrderDetail; import com.gear.oa.domain.GearReturnExchange; +import com.gear.oa.mapper.GearOrderDetailMapper; +import com.gear.oa.mapper.GearOrderMapper; import com.gear.oa.mapper.GearReturnExchangeMapper; import com.gear.oa.service.IGearReturnExchangeService; @@ -31,6 +35,8 @@ import java.util.Collection; public class GearReturnExchangeServiceImpl implements IGearReturnExchangeService { private final GearReturnExchangeMapper baseMapper; + private final GearOrderDetailMapper orderDetailMapper; + private final GearOrderMapper orderMapper; /** * 查询退换货管理 @@ -103,6 +109,9 @@ public class GearReturnExchangeServiceImpl implements IGearReturnExchangeService */ @Override public Boolean insertByBo(GearReturnExchangeBo bo) { + if (bo.getSalesmanId() == null) { + bo.setSalesmanId(resolveSalesmanIdByOrderDetail(bo.getOrderDetailId())); + } GearReturnExchange add = BeanUtil.toBean(bo, GearReturnExchange.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; @@ -117,11 +126,29 @@ public class GearReturnExchangeServiceImpl implements IGearReturnExchangeService */ @Override public Boolean updateByBo(GearReturnExchangeBo bo) { + if (bo.getSalesmanId() == null) { + bo.setSalesmanId(resolveSalesmanIdByOrderDetail(bo.getOrderDetailId())); + } GearReturnExchange update = BeanUtil.toBean(bo, GearReturnExchange.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } + private Long resolveSalesmanIdByOrderDetail(Long orderDetailId) { + if (orderDetailId == null) { + return null; + } + GearOrderDetail detail = orderDetailMapper.selectById(orderDetailId); + if (detail == null || detail.getOrderId() == null) { + return null; + } + GearOrder order = orderMapper.selectById(detail.getOrderId()); + if (order == null) { + return null; + } + return order.getSalesmanId(); + } + /** * 保存前的数据校验 */ diff --git a/gear-oa/src/main/resources/mapper/oa/GearReturnExchangeMapper.xml b/gear-oa/src/main/resources/mapper/oa/GearReturnExchangeMapper.xml index 9a0dfed..e8f7b80 100644 --- a/gear-oa/src/main/resources/mapper/oa/GearReturnExchangeMapper.xml +++ b/gear-oa/src/main/resources/mapper/oa/GearReturnExchangeMapper.xml @@ -12,6 +12,7 @@ + @@ -28,12 +29,17 @@ gre.reason, gre.status, gre.amount, + (CASE + WHEN o.salesman_id IS NOT NULL THEN o.salesman_id + ELSE gre.salesman_id + END) AS salesmanId, gre.del_flag, gre.create_time, gre.create_by, gre.update_time, gre.update_by, god.order_id, + gs.name AS salesmanName, gp.product_id AS productId, gp.product_code AS productCode, gp.product_name AS productName, @@ -44,6 +50,8 @@ god.no_tax_price AS noTaxPrice FROM gear_return_exchange gre LEFT JOIN gear_order_detail god ON gre.order_detail_id = god.detail_id + LEFT JOIN gear_order o ON god.order_id = o.order_id AND o.del_flag = 0 + LEFT JOIN gear_salesman gs ON o.salesman_id = gs.salesman_id AND gs.del_flag = 0 LEFT JOIN gear_product gp ON god.product_id = gp.product_id LEFT JOIN gear_customer gc ON gre.customer_id = gc.customer_id ${ew.customSqlSegment} diff --git a/gear-ui3/src/views/oms/order/panels/orderPage.vue b/gear-ui3/src/views/oms/order/panels/orderPage.vue index d82e79d..520c2c0 100644 --- a/gear-ui3/src/views/oms/order/panels/orderPage.vue +++ b/gear-ui3/src/views/oms/order/panels/orderPage.vue @@ -354,14 +354,17 @@ - - - +
+ + + + 新增成品 +
@@ -392,6 +395,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -686,7 +725,7 @@ import Receive from './receive.vue'; import { listSalesman } from "@/api/oms/salesman"; import { listShippingOrder, addShippingOrder, delShippingOrder } from "@/api/oms/shippingOrder"; import { listOrderDetail, addOrderDetail, updateOrderDetail } from "@/api/oms/orderDetail"; -import { listProductBase } from "@/api/mat/product"; +import { listProductBase, addProduct } from "@/api/mat/product"; import { sumStockQuantityByItemIds } from "@/api/wms/stock"; import { listReceivable } from "@/api/finance/receivable"; import { listOrderProduction, initOrderProduction, updateOrderProduction } from "@/api/oms/orderProduction"; @@ -830,6 +869,15 @@ export default { model: "", remark: "" }, + productQuickAddOpen: false, + productQuickAddLoading: false, + productQuickAddForm: { + productName: "", + spec: "", + model: "", + unitPrice: 0, + remark: "" + }, productionLoading: false, productionInitLoading: false, productionOnlyProduct: true, @@ -1696,6 +1744,57 @@ export default { }); }, + openQuickAddProduct() { + this.productQuickAddForm = { + productName: "", + spec: "", + model: "", + unitPrice: 0, + remark: "" + }; + this.productQuickAddOpen = true; + }, + + submitQuickAddProduct() { + const name = this.productQuickAddForm && this.productQuickAddForm.productName != null + ? String(this.productQuickAddForm.productName).trim() + : ""; + if (!name) { + this.$modal.msgError("请输入成品名称"); + return; + } + this.productQuickAddLoading = true; + const payload = { + productName: name, + spec: this.productQuickAddForm.spec != null ? String(this.productQuickAddForm.spec).trim() : "", + model: this.productQuickAddForm.model != null ? String(this.productQuickAddForm.model).trim() : "", + unitPrice: this.productQuickAddForm.unitPrice != null ? this.productQuickAddForm.unitPrice : 0, + remark: this.productQuickAddForm.remark != null ? String(this.productQuickAddForm.remark).trim() : "", + productType: "product" + }; + addProduct(payload).then(() => { + this.$modal.msgSuccess("已新增成品"); + this.productQuickAddOpen = false; + return listProductBase({ pageNum: 1, pageSize: 9999, productType: "product" }); + }).then(res => { + this.productBaseOptions = (res && res.rows) ? res.rows : []; + const list = Array.isArray(this.productBaseOptions) ? this.productBaseOptions : []; + const hit = list.find(p => { + if (!p) return false; + const n = p.productName != null ? String(p.productName).trim() : ""; + const s = p.spec != null ? String(p.spec).trim() : ""; + const m = p.model != null ? String(p.model).trim() : ""; + return n === payload.productName && s === payload.spec && m === payload.model; + }); + if (hit && hit.productId != null) { + this.orderDetailAddForm.productId = hit.productId; + this.handleOrderDetailProductPicked(hit.productId); + } + }).finally(() => { + this.productQuickAddLoading = false; + }); + }, + /** 订单明细:选中产品后自动带出单位/单价(不涉及库存) */ handleOrderDetailProductPicked(productId) { const list = Array.isArray(this.productBaseOptions) ? this.productBaseOptions : []; diff --git a/gear-ui3/src/views/oms/order/panels/return.vue b/gear-ui3/src/views/oms/order/panels/return.vue index d6dd8a2..80e0020 100644 --- a/gear-ui3/src/views/oms/order/panels/return.vue +++ b/gear-ui3/src/views/oms/order/panels/return.vue @@ -68,12 +68,32 @@ - - - + + +
+
+
+ {{ item.productName || '-' }} +
+
+ {{ item.productCode || '-' }} +
+
+
+ {{ (item.spec || '-') + (item.model ? (' / ' + item.model) : '') }} +
+
+ + + @@ -100,8 +120,8 @@