mirror of https://github.com/jeecgboot/jeecg-boot
(WIP) invoiced order remark
parent
55eea18803
commit
007fecf9b6
|
@ -2,20 +2,24 @@ package org.jeecg.modules.business.domain.api.mabang.dochangeorder;
|
|||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.Getter;
|
||||
import org.jeecg.modules.business.domain.api.mabang.Response;
|
||||
|
||||
@Getter
|
||||
public class ChangeOrderResponse extends Response {
|
||||
private final String message;
|
||||
/**
|
||||
* Erp order number
|
||||
*/
|
||||
private final String orderId;
|
||||
private final String platformOrderId;
|
||||
|
||||
|
||||
private ChangeOrderResponse(Code status, String message, String orderId) {
|
||||
private ChangeOrderResponse(Code status, String message, String orderId, String platformOrderId) {
|
||||
super(status);
|
||||
this.message = message;
|
||||
this.orderId = orderId;
|
||||
this.platformOrderId = platformOrderId;
|
||||
}
|
||||
|
||||
public static ChangeOrderResponse parse(String json) {
|
||||
|
@ -25,25 +29,19 @@ public class ChangeOrderResponse extends Response {
|
|||
if (code.equals("200")) {
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
String orderId = data.getString("orderId");
|
||||
return new ChangeOrderResponse(Code.SUCCESS, message, orderId);
|
||||
String platformOrderId = data.getString("platformOrderId");
|
||||
return new ChangeOrderResponse(Code.SUCCESS, message, orderId, platformOrderId);
|
||||
} else {
|
||||
return new ChangeOrderResponse(Code.ERROR, message, null);
|
||||
return new ChangeOrderResponse(Code.ERROR, message, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public String getOrderId() {
|
||||
return orderId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ChangeOrderResponse{" +
|
||||
"message='" + message + '\'' +
|
||||
", orderId='" + orderId + '\'' +
|
||||
", platformOrderId='" + platformOrderId + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package org.jeecg.modules.business.domain.api.mabang.dochangeorder;
|
||||
|
||||
import org.jeecg.modules.business.domain.api.mabang.Request;
|
||||
|
||||
public class EditRemarkRequest extends Request {
|
||||
public EditRemarkRequest(EditRemarkRequestBody body) {
|
||||
super(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChangeOrderResponse send() {
|
||||
String jsonString = rawSend().getBody();
|
||||
return ChangeOrderResponse.parse(jsonString);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package org.jeecg.modules.business.domain.api.mabang.dochangeorder;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.Getter;
|
||||
import org.jeecg.modules.business.domain.api.mabang.RequestBody;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public class EditRemarkRequestBody implements RequestBody {
|
||||
private final String platformOrderId;
|
||||
private final String remark;
|
||||
|
||||
public EditRemarkRequestBody(String platformOrderId, String remark) {
|
||||
this.platformOrderId = platformOrderId;
|
||||
this.remark = remark;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String api() {
|
||||
return "order-do-change-order";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> parameters() {
|
||||
JSONObject json = new JSONObject();
|
||||
putNonNull(json, "platformOrderId", platformOrderId);
|
||||
putNonNull(json, "remark", remark);
|
||||
return json;
|
||||
}
|
||||
private <E> void putNonNull(JSONObject json, String key, E value) {
|
||||
if (value != null) {
|
||||
json.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -125,6 +125,12 @@ public class Order {
|
|||
@JSONField(name = "isNewOrder")
|
||||
private String isNewOrder;
|
||||
|
||||
/**
|
||||
* 订单备注
|
||||
*/
|
||||
@JSONField(name = "remark")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 1 = 有货
|
||||
* 2 = 缺货
|
||||
|
|
|
@ -218,6 +218,7 @@ public interface PlatformOrderMapper extends BaseMapper<PlatformOrder> {
|
|||
List<ShippingFeeBillableOrders> fetchShippingFeeBillableOrders();
|
||||
|
||||
List<PlatformOrder> getPlatformOrdersByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber);
|
||||
List<String> getPlatformOrderIdsByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber);
|
||||
|
||||
OrderKpi countPlatformOrders(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("showAllData") boolean showAllData, @Param("username") String username);
|
||||
|
||||
|
|
|
@ -962,6 +962,11 @@
|
|||
FROM platform_order
|
||||
WHERE shipping_invoice_number = #{invoiceNumber};
|
||||
</select>
|
||||
<select id="getPlatformOrderIdsByInvoiceNumber" resultType="java.lang.String">
|
||||
SELECT platform_order_id
|
||||
FROM platform_order
|
||||
WHERE shipping_invoice_number = #{invoiceNumber};
|
||||
</select>
|
||||
<select id="countPlatformOrders" resultType="org.jeecg.modules.business.vo.OrderKpi">
|
||||
WITH processedByUser AS (
|
||||
SELECT invoice_number
|
||||
|
|
|
@ -7,6 +7,7 @@ import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order;
|
|||
import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderListRequestBody;
|
||||
import org.jeecg.modules.business.vo.PlatformOrderOperation;
|
||||
import org.jeecg.modules.business.vo.Responses;
|
||||
import org.jeecg.modules.business.vo.ResponsesWithMsg;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
@ -44,4 +45,6 @@ public interface IPlatformOrderMabangService extends IService<Order> {
|
|||
String stripAccents(String input);
|
||||
|
||||
JSONObject syncOrdersFromMabang(List<String> platformOrderIds) throws JSONException;
|
||||
|
||||
ResponsesWithMsg<String> editOrdersRemark(String invoiceNumber);
|
||||
}
|
||||
|
|
|
@ -261,6 +261,7 @@ public interface IPlatformOrderService extends IService<PlatformOrder> {
|
|||
List<ShippingFeeBillableOrders> fetchShippingFeeBillableOrders();
|
||||
|
||||
List<PlatformOrder> getPlatformOrdersByInvoiceNumber(String invoiceNumber);
|
||||
List<String> getPlatformOrderIdsByInvoiceNumber(String invoiceNumber);
|
||||
|
||||
Map<String, String> fetchShippingPeriodAndType(String invoiceNumber);
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.apache.shiro.SecurityUtils;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.jeecg.common.system.api.ISysBaseAPI;
|
||||
import org.jeecg.common.system.vo.LoginUser;
|
||||
import org.jeecg.modules.business.domain.api.mabang.dochangeorder.*;
|
||||
import org.jeecg.modules.business.domain.api.mabang.getorderlist.*;
|
||||
|
@ -20,6 +19,7 @@ import org.jeecg.modules.business.service.IPlatformOrderMabangService;
|
|||
import org.jeecg.modules.business.service.IPlatformOrderService;
|
||||
import org.jeecg.modules.business.vo.PlatformOrderOperation;
|
||||
import org.jeecg.modules.business.vo.Responses;
|
||||
import org.jeecg.modules.business.vo.ResponsesWithMsg;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
@ -31,6 +31,8 @@ import java.util.concurrent.ExecutorService;
|
|||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
@ -49,10 +51,12 @@ public class PlatformOrderMabangServiceImpl extends ServiceImpl<PlatformOrderMab
|
|||
@Autowired
|
||||
private IPlatformOrderService orderservice;
|
||||
@Autowired
|
||||
private ISysBaseAPI ISysBaseApi;
|
||||
private IPlatformOrderService platformOrderService;
|
||||
|
||||
private static final Integer DEFAULT_NUMBER_OF_THREADS = 2;
|
||||
private static final Integer MABANG_API_RATE_LIMIT_PER_MINUTE = 10;
|
||||
private static final Pattern INVOICE_NUMBER_REMARK_PATTERN = Pattern.compile("^([0-9]{4}-[0-9]{2}-[1278][0-9]{3})?(.*)$");
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void saveOrderFromMabang(List<Order> orders) {
|
||||
|
@ -379,4 +383,56 @@ public class PlatformOrderMabangServiceImpl extends ServiceImpl<PlatformOrderMab
|
|||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponsesWithMsg<String> editOrdersRemark(String invoiceNumber) {
|
||||
ResponsesWithMsg<String> responses = new ResponsesWithMsg<>();
|
||||
List<String> platformOrderIds = platformOrderService.getPlatformOrderIdsByInvoiceNumber(invoiceNumber);
|
||||
ExecutorService executor = ThrottlingExecutorService.createExecutorService(DEFAULT_NUMBER_OF_THREADS,
|
||||
MABANG_API_RATE_LIMIT_PER_MINUTE, TimeUnit.MINUTES);
|
||||
List<OrderListRequestBody> Ordersrequests = new ArrayList<>();
|
||||
List<List<String>> orderIdsPartition = Lists.partition(platformOrderIds, 10);
|
||||
for (List<String> platformOrderIdList : orderIdsPartition) {
|
||||
Ordersrequests.add(new OrderListRequestBody().setPlatformOrderIds(platformOrderIdList));
|
||||
}
|
||||
List<Order> ordersFromMabang = getOrdersFromMabang(Ordersrequests, executor);
|
||||
List<EditRemarkRequestBody> editRemarkRequests = new ArrayList<>();
|
||||
for(Order order: ordersFromMabang) {
|
||||
String orderRemark = order.getRemark();
|
||||
StringBuilder remark = new StringBuilder();
|
||||
remark.append(invoiceNumber);
|
||||
Matcher invoiceMatcher = INVOICE_NUMBER_REMARK_PATTERN.matcher(order.getRemark());
|
||||
// TODO : do we override the invoice number if one is present ? Ask
|
||||
if (orderRemark != null && !orderRemark.isEmpty()) {
|
||||
if(invoiceMatcher.matches() && !invoiceMatcher.group(2).isEmpty()) {
|
||||
log.info("Order {} has remark {}", order.getPlatformOrderId(), invoiceMatcher.group(2));
|
||||
remark.append(invoiceMatcher.group(2));
|
||||
}
|
||||
}
|
||||
editRemarkRequests.add(new EditRemarkRequestBody(order.getPlatformOrderId(), remark.toString()));
|
||||
}
|
||||
List<CompletableFuture<Boolean>> editRemarkFutures = editRemarkRequests.stream()
|
||||
.map(request -> CompletableFuture.supplyAsync(() -> {
|
||||
boolean success = false;
|
||||
try {
|
||||
EditRemarkRequest editRemarkRequest = new EditRemarkRequest(request);
|
||||
ChangeOrderResponse response = editRemarkRequest.send();
|
||||
success = response.success();
|
||||
if (success) {
|
||||
responses.addSuccess(request.getPlatformOrderId());
|
||||
} else {
|
||||
responses.addFailure(request.getPlatformOrderId(), response.getMessage());
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
log.error("Error editing order remark {} : {}", request.getPlatformOrderId(), e.getMessage());
|
||||
responses.addFailure(request.getPlatformOrderId(), e.getMessage());
|
||||
}
|
||||
return success;
|
||||
}, executor))
|
||||
.collect(Collectors.toList());
|
||||
List<Boolean> results = editRemarkFutures.stream().map(CompletableFuture::join).collect(Collectors.toList());
|
||||
long nbSuccesses = results.stream().filter(b -> b).count();
|
||||
log.info("{}/{} order remarks updated successfully.", nbSuccesses, editRemarkRequests.size());
|
||||
return responses;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -494,6 +494,10 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
|
|||
public List<PlatformOrder> getPlatformOrdersByInvoiceNumber(String invoiceNumber) {
|
||||
return platformOrderMap.getPlatformOrdersByInvoiceNumber(invoiceNumber);
|
||||
}
|
||||
@Override
|
||||
public List<String> getPlatformOrderIdsByInvoiceNumber(String invoiceNumber) {
|
||||
return platformOrderMap.getPlatformOrderIdsByInvoiceNumber(invoiceNumber);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> fetchShippingPeriodAndType(String invoiceNumber) {
|
||||
|
|
Loading…
Reference in New Issue