Compare commits

..
68 Commits
Author SHA1 Message Date
timi 1b221b13d1 Merge pull request 'v1.0.53' (#65) from dev into master
Reviewed-on: #65
2026-09-21 17:32:02 +00:00
Timi 48eaf2356f v1.0.53
CI / build-deploy (pull_request) Successful in 26s
CI / notify-on-failure (pull_request) Skipped
2026-09-22 01:31:15 +08:00
Timi 970952d9fa clone fulfillment attach to stock out 2026-09-21 23:59:13 +08:00
timi 135996ce19 Merge pull request 'v1.0.52' (#64) from dev into master
Reviewed-on: #64
2026-09-20 17:22:39 +00:00
Timi e5bfb59a1c v1.0.52
CI / build-deploy (pull_request) Successful in 27s
CI / notify-on-failure (pull_request) Skipped
2026-09-21 01:18:35 +08:00
Timi 51c1d20d3c more filter for sales order 2026-09-20 15:40:03 +08:00
timi 6b85cddede Merge pull request 'v1.0.51' (#63) from dev into master
Reviewed-on: #63
2026-09-18 17:27:14 +00:00
timi e486f850f2 Merge pull request 'v1.0.50' (#62) from dev into master
Reviewed-on: #62
2026-09-17 17:52:23 +00:00
timi 76c2f3a5fd Merge pull request 'v1.0.49' (#61) from dev into master
Reviewed-on: #61
2026-09-16 17:34:23 +00:00
timi bb542e7510 Merge pull request 'v1.0.48' (#60) from dev into master
Reviewed-on: #60
2026-09-15 17:39:14 +00:00
timi eba4461381 Merge pull request 'v1.0.47' (#59) from dev into master
Reviewed-on: #59
2026-09-14 17:30:09 +00:00
timi f5ad238015 Merge pull request 'v1.0.46' (#58) from dev into master
Reviewed-on: #58
2026-09-14 06:14:05 +00:00
timi 4bdb24e9ac Merge pull request 'v1.0.45' (#57) from dev into master
Reviewed-on: #57
2026-09-13 18:13:38 +00:00
timi 425922fd04 Merge pull request 'v1.0.44' (#56) from dev into master
Reviewed-on: #56
2026-09-12 17:42:51 +00:00
timi d65424e5bf Merge pull request 'v1.0.43' (#55) from dev into master
Reviewed-on: #55
2026-09-11 17:26:21 +00:00
timi 2a35793baf Merge pull request 'v1.0.42' (#54) from dev into master
Reviewed-on: #54
2026-09-11 16:16:04 +00:00
timi d22df698b6 Merge pull request 'v1.0.41' (#53) from dev into master
Reviewed-on: #53
2026-09-11 15:55:02 +00:00
timi 1771bf9909 Merge pull request 'v1.0.40' (#52) from dev into master
Reviewed-on: #52
2026-09-10 16:29:28 +00:00
timi 15d69f9361 Merge pull request 'v1.0.39' (#51) from dev into master
Reviewed-on: #51
2026-09-10 06:10:30 +00:00
timi 2b4089ef59 Merge pull request 'v1.0.38' (#50) from dev into master
Reviewed-on: #50
2026-09-09 17:33:25 +00:00
timi 20c3e1f422 Merge pull request 'v1.0.37' (#49) from dev into master
Reviewed-on: #49
2026-09-09 06:21:55 +00:00
timi 3b19d9e930 Merge pull request 'v1.0.36' (#48) from dev into master
Reviewed-on: #48
2026-09-08 17:52:47 +00:00
timi 5fd11e9caf Merge pull request 'v1.0.35' (#47) from dev into master
Reviewed-on: #47
2026-09-07 17:06:28 +00:00
timi 0b98dcdfe9 Merge pull request 'v1.0.34' (#46) from dev into master
Reviewed-on: #46
2026-09-07 15:11:06 +00:00
timi b373cbbe46 Merge pull request 'v1.0.33' (#45) from dev into master
Reviewed-on: #45
2026-09-07 09:40:39 +00:00
timi acd97c7b9b Merge pull request 'v1.0.32' (#44) from dev into master
Reviewed-on: #44
2026-09-07 08:42:29 +00:00
timi 118bdb1666 Merge pull request 'v1.0.31' (#43) from dev into master
Reviewed-on: #43
2026-09-07 07:40:03 +00:00
timi 944de228f7 Merge pull request 'v1.0.30' (#42) from dev into master
Reviewed-on: #42
2026-09-01 17:44:48 +00:00
timi 25c9cd4dfc Merge pull request 'v1.0.30' (#41) from dev into master
Reviewed-on: #41
2026-09-01 17:42:44 +00:00
timi 882cd226ec Merge pull request 'v1.0.30' (#40) from dev into master
Reviewed-on: #40
2026-09-01 17:38:50 +00:00
timi feb4d7af66 Merge pull request 'v1.0.28' (#38) from dev into master
Reviewed-on: #38
2026-08-30 15:51:37 +00:00
timi d75ab1ed5f Merge pull request 'v1.0.27' (#37) from dev into master
Reviewed-on: #37
2026-08-29 17:49:23 +00:00
timi a501eb7443 Merge pull request 'v1.0.26' (#36) from dev into master
Reviewed-on: #36
2026-08-28 16:52:15 +00:00
timi 19941d9480 Merge pull request 'v1.0.25' (#35) from dev into master
Reviewed-on: #35
2026-08-23 17:50:25 +00:00
timi cd3d522d4f Merge pull request 'v1.0.24' (#34) from dev into master
Reviewed-on: #34
2026-08-22 09:56:13 +00:00
timi 181c5078e9 Merge pull request 'v1.0.23' (#33) from dev into master
Reviewed-on: #33
2026-08-22 09:51:37 +00:00
timi e97f46e6b4 Merge pull request 'v1.0.22' (#32) from dev into master
Reviewed-on: #32
2026-08-21 17:31:33 +00:00
timi c0f89deb83 Merge pull request 'v1.0.22' (#31) from dev into master
Reviewed-on: #31
2026-08-21 17:28:32 +00:00
timi ce695463d3 Merge pull request 'v1.0.21' (#30) from dev into master
Reviewed-on: #30
2026-08-21 07:29:34 +00:00
timi 83c683d473 Merge pull request 'v1.0.20' (#29) from dev into master
Reviewed-on: #29
2026-08-21 07:25:32 +00:00
timi 9555474b0b Merge pull request 'v1.0.19' (#28) from dev into master
Reviewed-on: #28
2026-08-21 05:52:36 +00:00
timi a150f9e017 Merge pull request 'v1.0.18' (#27) from dev into master
Reviewed-on: #27
2026-08-20 17:40:22 +00:00
timi ecd2fa1c33 Merge pull request 'v1.0.17' (#26) from dev into master
Reviewed-on: #26
2026-08-19 17:30:35 +00:00
timi e3236d262d Merge pull request 'v1.0.16' (#25) from dev into master
Reviewed-on: #25
2026-08-16 03:37:08 +00:00
timi c8e2e16ba5 Merge pull request 'v1.0.15' (#24) from dev into master
Reviewed-on: #24
2026-08-15 17:49:51 +00:00
timi 99b44faf09 Merge pull request 'v1.0.15' (#23) from dev into master
Reviewed-on: #23
2026-08-15 17:45:26 +00:00
timi b3e3cbf84b Merge pull request 'v1.0.14' (#22) from dev into master
Reviewed-on: #22
2026-08-14 17:31:11 +00:00
timi 0aee11d824 Merge pull request 'v1.0.14' (#21) from dev into master
Reviewed-on: #21
2026-08-14 17:26:10 +00:00
timi fcf358a768 Merge pull request 'v1.0.13' (#20) from dev into master
Reviewed-on: #20
2026-08-13 09:52:26 +00:00
timi 619369104c Merge pull request 'v1.0.12' (#19) from dev into master
Reviewed-on: #19
2026-08-12 17:02:43 +00:00
timi 4f1408b9d0 Merge pull request 'v1.0.11' (#18) from dev into master
Reviewed-on: #18
2026-08-11 16:49:08 +00:00
timi 029eea70cc Merge pull request 'v1.0.10' (#17) from dev into master
Reviewed-on: #17
2026-08-11 16:45:36 +00:00
timi 22b1e65385 Merge pull request 'v1.0.9' (#16) from dev into master
Reviewed-on: #16
2026-08-11 16:01:10 +00:00
timi 2170c48763 Merge pull request 'v1.0.8' (#15) from dev into master
Reviewed-on: #15
2026-08-03 16:36:19 +00:00
timi c2d1c48aae Merge pull request 'v0.0.18' (#14) from dev into master
Reviewed-on: #14
2026-08-03 11:59:20 +00:00
timi e14958c643 Merge pull request 'v0.0.18' (#13) from dev into master
Reviewed-on: #13
2026-08-03 11:58:16 +00:00
timi da288338cd Merge pull request 'v1.0.7' (#12) from dev into master
Reviewed-on: #12
2026-08-01 09:34:18 +00:00
timi ea430f2468 Merge pull request 'v1.0.6' (#11) from dev into master
Reviewed-on: #11
2026-08-01 09:03:48 +00:00
timi f76f79744a Merge pull request 'v1.0.5' (#10) from dev into master
Reviewed-on: #10
2026-08-01 08:52:52 +00:00
timi 19daaff907 Merge pull request 'v1.0.4' (#9) from dev into master
Reviewed-on: #9
2026-08-01 03:13:00 +00:00
timi db94d8f932 Merge pull request 'v1.0.3' (#8) from dev into master
Reviewed-on: #8
2026-07-31 17:19:48 +00:00
timi 53618fe362 Merge pull request 'v1.0.3' (#7) from dev into master
Reviewed-on: #7
2026-07-31 17:13:37 +00:00
timi 523edffc4e Merge pull request 'v1.0.2' (#6) from dev into master
Reviewed-on: #6
2026-04-13 10:28:11 +00:00
timi c7ddb1a8b0 Merge pull request 'v1.0.1' (#5) from dev into master
Reviewed-on: #5
2026-04-12 16:17:02 +00:00
timi 45c9fc814a Merge pull request 'v1.0.0' (#4) from dev into master
Reviewed-on: #4
2026-04-09 05:16:04 +00:00
timi 407dc13ac4 Merge pull request 'v1.0.0' (#3) from dev into master
Reviewed-on: #3
2026-04-09 04:09:16 +00:00
timi 0c06bf16c2 Merge pull request 'v1.0.0' (#2) from dev into master
Reviewed-on: #2
2026-04-09 04:03:43 +00:00
timi 1db39e77d3 Merge pull request 'v1.0.0' (#1) from dev into master
Reviewed-on: #1
2026-04-08 08:48:12 +00:00
7 changed files with 90 additions and 7 deletions
+1 -1
View File
@@ -11,7 +11,7 @@
<groupId>com.imyeyu.timiserverapi</groupId> <groupId>com.imyeyu.timiserverapi</groupId>
<artifactId>TimiServerAPI</artifactId> <artifactId>TimiServerAPI</artifactId>
<version>1.0.51</version> <version>1.0.53</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>TimiServerAPI</name> <name>TimiServerAPI</name>
<description>imyeyu.com API</description> <description>imyeyu.com API</description>
@@ -184,6 +184,7 @@ public class AttachmentServiceImplement extends AbstractEntityService<Attachment
try (InputStream inputStream = getInputStreamByMongoId(source.getMongoId())) { try (InputStream inputStream = getInputStreamByMongoId(source.getMongoId())) {
target.setInputStream(inputStream); target.setInputStream(inputStream);
create(target); create(target);
target.setInputStream(null);
return target; return target;
} catch (IOException e) { } catch (IOException e) {
if (target.getMongoId() != null) { if (target.getMongoId() != null) {
@@ -1,5 +1,6 @@
package com.imyeyu.api.modules.gao.service; package com.imyeyu.api.modules.gao.service;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.gao.entity.GaoProductStock; import com.imyeyu.api.modules.gao.entity.GaoProductStock;
import com.imyeyu.api.modules.gao.entity.GaoProductStockRecord; import com.imyeyu.api.modules.gao.entity.GaoProductStockRecord;
import com.imyeyu.api.modules.gao.vo.GaoProductStockChangeRequest; import com.imyeyu.api.modules.gao.vo.GaoProductStockChangeRequest;
@@ -62,6 +63,10 @@ public interface GaoProductStockService {
/// 履约出库 /// 履约出库
List<GaoProductStock> outForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo, String operatorUserId); List<GaoProductStock> outForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo, String operatorUserId);
/// 履约出库并复制履约附件到出库流水
List<GaoProductStock> outForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo,
String operatorUserId, List<Attachment> attachmentList);
/// 履约库存冲正入库 /// 履约库存冲正入库
List<GaoProductStock> revokeForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo, String operatorUserId); List<GaoProductStock> revokeForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo, String operatorUserId);
@@ -261,8 +261,10 @@ public class GaoOrderFulfillmentServiceImplement extends AbstractEntityService<G
applySkuSpecSnapshots(stockItems, fulfillmentItemList); applySkuSpecSnapshots(stockItems, fulfillmentItemList);
String verifierUserId = userLoginService.getRequireLoginUserId(); String verifierUserId = userLoginService.getRequireLoginUserId();
if (!stockItems.isEmpty()) { if (!stockItems.isEmpty()) {
List<Attachment> attachmentList = attachmentService.listByBizId(
Attachment.BizType.GAO_ORDER_FULFILLMENT, fulfillment.getId());
productStockService.outForFulfillment(order.getStoreId(), fulfillment.getId(), stockItems, productStockService.outForFulfillment(order.getStoreId(), fulfillment.getId(), stockItems,
stockRequestNo(fulfillment, "OUT"), verifierUserId); stockRequestNo(fulfillment, "OUT"), verifierUserId, attachmentList);
} }
TimiException.requiredTrue(1 == mapper.updateStatus(fulfillment.getId(), GaoOrderFulfillment.Status.VERIFIED, TimiException.requiredTrue(1 == mapper.updateStatus(fulfillment.getId(), GaoOrderFulfillment.Status.VERIFIED,
verifierUserId, Time.now(), request.getReason()), "履约状态已变化"); verifierUserId, Time.now(), request.getReason()), "履约状态已变化");
@@ -232,6 +232,14 @@ public class GaoProductStockServiceImplement implements GaoProductStockService {
return executeInternal(storeId, bizId, items, requestNo, operatorUserId, GaoProductStockRecord.OperationType.ORDER_OUT, null); return executeInternal(storeId, bizId, items, requestNo, operatorUserId, GaoProductStockRecord.OperationType.ORDER_OUT, null);
} }
@Override
@Transactional(TimiServerDBConfig.ROLLBACKER)
public List<GaoProductStock> outForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo,
String operatorUserId, List<Attachment> attachmentList) {
return executeInternal(storeId, bizId, items, requestNo, operatorUserId,
GaoProductStockRecord.OperationType.ORDER_OUT, null, null, attachmentList);
}
@Override @Override
@Transactional(TimiServerDBConfig.ROLLBACKER) @Transactional(TimiServerDBConfig.ROLLBACKER)
public List<GaoProductStock> revokeForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo, String operatorUserId) { public List<GaoProductStock> revokeForFulfillment(String storeId, String bizId, List<GaoStockChangeItem> items, String requestNo, String operatorUserId) {
@@ -445,7 +453,11 @@ public class GaoProductStockServiceImplement implements GaoProductStockService {
record.setOperatorUserId(operatorUserId); record.setOperatorUserId(operatorUserId);
record.setOccurredAt(TimiJava.defaultIfNull(occurredAt, Time.now())); record.setOccurredAt(TimiJava.defaultIfNull(occurredAt, Time.now()));
record.setRemark(remark); record.setRemark(remark);
recordService.createOperationRecord(record, attachmentList); recordService.createOperationRecord(record,
operationType == GaoProductStockRecord.OperationType.ORDER_OUT ? null : attachmentList);
if (operationType == GaoProductStockRecord.OperationType.ORDER_OUT) {
copyAttachments(record.getId(), attachmentList);
}
stock.setOnHandQuantity(onHandAfter); stock.setOnHandQuantity(onHandAfter);
stock.setReservedQuantity(reservedAfter); stock.setReservedQuantity(reservedAfter);
stock.setUpdatedBy(operatorUserId); stock.setUpdatedBy(operatorUserId);
@@ -455,6 +467,23 @@ public class GaoProductStockServiceImplement implements GaoProductStockService {
return result; return result;
} }
/// 复制履约附件到出库流水
///
/// @param recordId 出库流水 ID
/// @param sourceAttachmentList 履约附件
private void copyAttachments(String recordId, List<Attachment> sourceAttachmentList) {
for (Attachment source : TimiJava.safeIterable(sourceAttachmentList)) {
if (source == null) {
continue;
}
TimiException.required(source.getId(), "履约附件 ID 不能为空");
Attachment copy = attachmentService.clone(source.getId());
copy.setBizType(Attachment.BizType.GAO_STOCK_RECORD);
copy.setBizId(recordId);
attachmentService.update(copy);
}
}
private GaoProductStock lockOrCreateStock(String storeId, String skuId) { private GaoProductStock lockOrCreateStock(String storeId, String skuId) {
GaoProductStock stock = stockMapper.selectForUpdate(storeId, skuId); GaoProductStock stock = stockMapper.selectForUpdate(storeId, skuId);
if (stock != null) { if (stock != null) {
@@ -5,6 +5,8 @@ import com.imyeyu.java.bean.BasePage;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/// GAO 销售订单分页请求 /// GAO 销售订单分页请求
/// ///
/// @author Codex /// @author Codex
@@ -25,15 +27,27 @@ public class GaoSalesOrderPage extends BasePage {
/// 订单类型 /// 订单类型
private GaoSalesOrder.OrderType orderType; private GaoSalesOrder.OrderType orderType;
/// 订单类型列表
private List<GaoSalesOrder.OrderType> orderTypeList;
/// 订单状态 /// 订单状态
private GaoSalesOrder.Status status; private GaoSalesOrder.Status status;
/// 订单状态列表
private List<GaoSalesOrder.Status> statusList;
/// 付款状态 /// 付款状态
private GaoSalesOrder.PaymentStatus paymentStatus; private GaoSalesOrder.PaymentStatus paymentStatus;
/// 付款状态列表
private List<GaoSalesOrder.PaymentStatus> paymentStatusList;
/// 退款状态 /// 退款状态
private GaoSalesOrder.RefundStatus refundStatus; private GaoSalesOrder.RefundStatus refundStatus;
/// 退款状态列表
private List<GaoSalesOrder.RefundStatus> refundStatusList;
/// true 为筛选可收款且未付清订单 /// true 为筛选可收款且未付清订单
private Boolean pendingReceive; private Boolean pendingReceive;
@@ -31,10 +31,42 @@
AND cp.`deleted_at` IS NULL AND cp.`deleted_at` IS NULL
) )
</if> </if>
<if test="orderType != null">AND o.`order_type` = #{orderType}</if> <choose>
<if test="status != null">AND o.`status` = #{status}</if> <when test="orderTypeList != null and 0 &lt; orderTypeList.size()">
<if test="paymentStatus != null">AND o.`payment_status` = #{paymentStatus}</if> AND o.`order_type` IN
<if test="refundStatus != null">AND o.`refund_status` = #{refundStatus}</if> <foreach collection="orderTypeList" item="orderTypeItem" open="(" separator="," close=")">
#{orderTypeItem}
</foreach>
</when>
<when test="orderType != null">AND o.`order_type` = #{orderType}</when>
</choose>
<choose>
<when test="statusList != null and 0 &lt; statusList.size()">
AND o.`status` IN
<foreach collection="statusList" item="statusItem" open="(" separator="," close=")">
#{statusItem}
</foreach>
</when>
<when test="status != null">AND o.`status` = #{status}</when>
</choose>
<choose>
<when test="paymentStatusList != null and 0 &lt; paymentStatusList.size()">
AND o.`payment_status` IN
<foreach collection="paymentStatusList" item="paymentStatusItem" open="(" separator="," close=")">
#{paymentStatusItem}
</foreach>
</when>
<when test="paymentStatus != null">AND o.`payment_status` = #{paymentStatus}</when>
</choose>
<choose>
<when test="refundStatusList != null and 0 &lt; refundStatusList.size()">
AND o.`refund_status` IN
<foreach collection="refundStatusList" item="refundStatusItem" open="(" separator="," close=")">
#{refundStatusItem}
</foreach>
</when>
<when test="refundStatus != null">AND o.`refund_status` = #{refundStatus}</when>
</choose>
<if test="pendingReceive != null and pendingReceive">AND o.`status` IN ('ACTIVE', 'FULFILLED') AND o.`payment_status` IN ('UNPAID', 'PARTIALLY_PAID')</if> <if test="pendingReceive != null and pendingReceive">AND o.`status` IN ('ACTIVE', 'FULFILLED') AND o.`payment_status` IN ('UNPAID', 'PARTIALLY_PAID')</if>
<if test="fulfilledButUnpaid != null and fulfilledButUnpaid">AND o.`status` = 'FULFILLED' AND o.`paid_amount` &lt; o.`sale_amount`</if> <if test="fulfilledButUnpaid != null and fulfilledButUnpaid">AND o.`status` = 'FULFILLED' AND o.`paid_amount` &lt; o.`sale_amount`</if>
<if test="keyword != null and keyword.trim() != ''">AND (o.`order_no` LIKE CONCAT('%', #{keyword}, '%') OR c.`name` LIKE CONCAT('%', #{keyword}, '%') OR c.`code` LIKE CONCAT('%', #{keyword}, '%'))</if> <if test="keyword != null and keyword.trim() != ''">AND (o.`order_no` LIKE CONCAT('%', #{keyword}, '%') OR c.`name` LIKE CONCAT('%', #{keyword}, '%') OR c.`code` LIKE CONCAT('%', #{keyword}, '%'))</if>