mirror of https://github.com/jeecgboot/jeecg-boot
Merge pull request #150 from LQYBill/fix/purchaseOrderStatus
fix: Change Order status to "preparing" after creating purchase order…pull/8523/head
commit
d1eb759631
|
@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
||||
|
@ -14,6 +15,7 @@ import org.jeecg.common.system.query.QueryGenerator;
|
|||
import org.jeecg.common.system.vo.LoginUser;
|
||||
import org.jeecg.common.util.oConvertUtils;
|
||||
import org.jeecg.modules.business.controller.UserException;
|
||||
import org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder.UpdateResult;
|
||||
import org.jeecg.modules.business.domain.job.ThrottlingExecutorService;
|
||||
import org.jeecg.modules.business.entity.*;
|
||||
import org.jeecg.modules.business.service.*;
|
||||
|
@ -45,8 +47,6 @@ import java.util.concurrent.TimeUnit;
|
|||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.jeecg.modules.business.entity.Invoice.isInvoiceNumber;
|
||||
|
||||
/**
|
||||
* @Description: API Handler related admin purchase order
|
||||
* @Author: Wenke
|
||||
|
@ -208,6 +208,7 @@ public class PurchaseOrderController {
|
|||
@ApiOperation(value="purchase_order-编辑", notes="purchase_order-编辑")
|
||||
@RequestMapping(value = "/editPurchaseAndOrder", method = {RequestMethod.PUT,RequestMethod.POST})
|
||||
public Result<?> editPurchaseAndOrder(@RequestBody PurchaseOrderPage purchaseOrderPage) {
|
||||
// TODO : refacto using Reponses
|
||||
PurchaseOrder purchaseOrder = new PurchaseOrder();
|
||||
BeanUtils.copyProperties(purchaseOrderPage, purchaseOrder);
|
||||
purchaseOrder.setPaymentDocumentString(new String(purchaseOrderPage.getPaymentDocument()));
|
||||
|
@ -601,7 +602,7 @@ public class PurchaseOrderController {
|
|||
responsesMappedByInvoiceNumber.get(invoiceNumber).getFailures().addAll(results.getFailures());
|
||||
responsesMappedByInvoiceNumber.get(invoiceNumber).getSuccesses().addAll(results.getSuccesses());
|
||||
} else {
|
||||
responsesMappedByInvoiceNumber.put(invoiceNumber, results);
|
||||
responsesMappedByInvoiceNumber.put(invoiceNumber, results);
|
||||
}
|
||||
return results.getFailures().isEmpty();
|
||||
},throttlingExecutorService))
|
||||
|
@ -621,6 +622,28 @@ public class PurchaseOrderController {
|
|||
log.info("Deleting purchase orders that have been incompletely created in Mabang : {}", groupIdsToDelete);
|
||||
Responses groupIdsDeleteResult = providerMabangService.deletePurchaseOrderFromMabang(groupIdsToDelete);
|
||||
responsesMappedByInvoiceNumber.put("groupIdDelete", groupIdsDeleteResult);
|
||||
} else {
|
||||
log.info("Updating order erp status to 2 in Mabang");
|
||||
List<String> platformOrderIds = platformOrderService.getPlatformOrderIdsByInvoiceNumbers(invoiceNumbers);
|
||||
Response<List<UpdateResult>, List<UpdateResult>> updateResponse = providerMabangService.updateOrderStatusToPreparing(platformOrderIds);
|
||||
Responses updateOrderStatusResponse = new Responses();
|
||||
if(updateResponse.getStatus() == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
|
||||
String errMsg = updateResponse.getError().get(0).getReason();
|
||||
updateOrderStatusResponse.addFailure(errMsg);
|
||||
responsesMappedByInvoiceNumber.put("UpdateOrderStatusError", updateOrderStatusResponse);
|
||||
}
|
||||
else {
|
||||
List<String> updateOrderStatusSuccess = updateResponse.getData().stream()
|
||||
.map(UpdateResult::getPlatformOrderId)
|
||||
.collect(Collectors.toList());
|
||||
List<String> updateOrderStatusFailure = updateResponse.getError().stream()
|
||||
.map(UpdateResult::getPlatformOrderId)
|
||||
.collect(Collectors.toList());
|
||||
log.info("Update order errors : {}", updateResponse.getError());
|
||||
updateOrderStatusResponse.getSuccesses().addAll(updateOrderStatusSuccess);
|
||||
updateOrderStatusResponse.getFailures().addAll(updateOrderStatusFailure);
|
||||
responsesMappedByInvoiceNumber.put("UpdateOrderStatus", updateOrderStatusResponse);
|
||||
}
|
||||
}
|
||||
return Result.OK(responsesMappedByInvoiceNumber);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder;
|
||||
|
||||
import org.jeecg.modules.business.domain.api.mabang.Request;
|
||||
|
||||
public class OrderUpdateOrderNewOrderRequest extends Request {
|
||||
public OrderUpdateOrderNewOrderRequest(OrderUpdateOrderNewOrderRequestBody body) {
|
||||
super(body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderUpdateOrderNewOrderResponse send() {
|
||||
String jsonString = rawSend().getBody();
|
||||
return OrderUpdateOrderNewOrderResponse.parse(jsonString);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.jeecg.modules.business.domain.api.mabang.RequestBody;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Updates order from erp status 1 to 2
|
||||
*/
|
||||
public class OrderUpdateOrderNewOrderRequestBody implements RequestBody {
|
||||
private final List<String> platformOrderIds;
|
||||
|
||||
public OrderUpdateOrderNewOrderRequestBody(List<String> platformOrderIds) {
|
||||
this.platformOrderIds = platformOrderIds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String api() {
|
||||
return "order-update-order-new-order";
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject parameters() {
|
||||
JSONObject json = new JSONObject();
|
||||
JSONArray platformOrderIdsArray = new JSONArray();
|
||||
if (platformOrderIds != null) {
|
||||
platformOrderIdsArray.addAll(platformOrderIds);
|
||||
} else {
|
||||
platformOrderIdsArray = new JSONArray(Collections.emptyList());
|
||||
}
|
||||
putNonNull(json,"platformOrderIds", platformOrderIdsArray);
|
||||
return json;
|
||||
}
|
||||
|
||||
private <E> void putNonNull(JSONObject json, String key, E value) {
|
||||
if (value != null) {
|
||||
json.put(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
private <E, T> void putNonNull(JSONObject json, String key, E value, Function<E, T> mapper) {
|
||||
if (value != null) {
|
||||
json.put(key, mapper.apply(value));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.Getter;
|
||||
import org.jeecg.modules.business.domain.api.mabang.Response;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
public class OrderUpdateOrderNewOrderResponse extends Response {
|
||||
private final String message;
|
||||
private final List<UpdateResult> ordersNotFound;
|
||||
private final List<UpdateResult> successOrders;
|
||||
|
||||
|
||||
private OrderUpdateOrderNewOrderResponse(Code status, String message, List<UpdateResult> ordersNotFound, List<UpdateResult> successOrders) {
|
||||
super(status);
|
||||
this.message = message;
|
||||
this.ordersNotFound = ordersNotFound;
|
||||
this.successOrders = successOrders;
|
||||
}
|
||||
|
||||
public static OrderUpdateOrderNewOrderResponse parse(String json) {
|
||||
JSONObject jsonObject = JSON.parseObject(json);
|
||||
String code = jsonObject.getString("code");
|
||||
String message = jsonObject.getString("message");
|
||||
if (code.equals("200")) {
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONArray notFoundPlatformOrderIds = data.getJSONArray("notFoundPlatformOrderIds");
|
||||
List<UpdateResult> notFoundPlatformOrderIdsList = notFoundPlatformOrderIds.toJavaList(UpdateResult.class);
|
||||
JSONArray platformOrderIdsForSuccess = data.getJSONArray("platformOrderIdsForSuccess");
|
||||
List<UpdateResult> platformOrderIdsForSuccessList = platformOrderIdsForSuccess.toJavaList(UpdateResult.class);
|
||||
return new OrderUpdateOrderNewOrderResponse(Code.SUCCESS, message, notFoundPlatformOrderIdsList, platformOrderIdsForSuccessList);
|
||||
} else {
|
||||
return new OrderUpdateOrderNewOrderResponse(Code.ERROR, message, null, null);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AddPurchaseOrderResponse{" +
|
||||
"message='" + message + '\'' +
|
||||
", order not found='" + ordersNotFound + '\'' +
|
||||
", success orders='" + successOrders + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class UpdateResult {
|
||||
@JSONField(name = "platformOrderId")
|
||||
private String platformOrderId;
|
||||
@JSONField(name = "platformOrderNumber")
|
||||
private String platformOrderNumber;
|
||||
@JSONField(name = "reason")
|
||||
private String reason;
|
||||
}
|
|
@ -241,4 +241,6 @@ public interface PlatformOrderMapper extends BaseMapper<PlatformOrder> {
|
|||
List<PlatformOrderPage> pagePotentialShoumanOrders(long pageNo, long pageSize, String column, String order);
|
||||
|
||||
Integer countPotentialShoumanOrders();
|
||||
|
||||
List<String> getPlatformOrderIdsByInvoiceNumbers(@Param("invoiceNumbers") List<String> invoiceNumbers);
|
||||
}
|
||||
|
|
|
@ -1259,4 +1259,16 @@
|
|||
AND p.platform_order_id NOT IN (SELECT platform_order_id FROM shouman_order)
|
||||
AND p.create_time > '2024-10-01'
|
||||
</select>
|
||||
<select id="getPlatformOrderIdsByInvoiceNumbers" resultType="java.lang.String">
|
||||
SELECT platform_order_id
|
||||
FROM platform_order
|
||||
WHERE shipping_invoice_number IN
|
||||
<foreach collection="invoiceNumbers" separator="," open="(" close=")" index="index" item="invoiceNumber">
|
||||
#{invoiceNumber}
|
||||
</foreach>
|
||||
OR purchase_invoice_number IN
|
||||
<foreach collection="invoiceNumbers" separator="," open="(" close=")" index="index" item="invoiceNumber">
|
||||
#{invoiceNumber}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
@ -284,4 +284,6 @@ public interface IPlatformOrderService extends IService<PlatformOrder> {
|
|||
void updateLocalTrackingNumber(List<YDTrackingNumberData> data);
|
||||
|
||||
void pagePotentialShoumanOrders(IPage<PlatformOrderPage> page, String column, String order);
|
||||
|
||||
List<String> getPlatformOrderIdsByInvoiceNumbers(List<String> invoiceNumbers);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
package org.jeecg.modules.business.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder.UpdateResult;
|
||||
import org.jeecg.modules.business.domain.api.mabang.purDoGetProvider.ProviderData;
|
||||
import org.jeecg.modules.business.vo.InvoiceMetaData;
|
||||
import org.jeecg.modules.business.vo.Response;
|
||||
import org.jeecg.modules.business.vo.Responses;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
@ -21,4 +23,6 @@ public interface IProviderMabangService extends IService<ProviderData> {
|
|||
Responses addPurchaseOrderToMabang(Map<String, Integer> skuQuantities, InvoiceMetaData metaData, AtomicReference<Map<String, LocalDateTime>> providersHistory);
|
||||
|
||||
Responses deletePurchaseOrderFromMabang(List<String> groupIds);
|
||||
|
||||
Response<List<UpdateResult>, List<UpdateResult>> updateOrderStatusToPreparing(List<String> platformOrderIds);
|
||||
}
|
||||
|
|
|
@ -551,4 +551,9 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
|
|||
page.setTotal(platformOrderMap.countPotentialShoumanOrders());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getPlatformOrderIdsByInvoiceNumbers(List<String> invoiceNumbers) {
|
||||
return platformOrderMap.getPlatformOrderIdsByInvoiceNumbers(invoiceNumbers);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
package org.jeecg.modules.business.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.jeecg.common.system.vo.LoginUser;
|
||||
import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.*;
|
||||
import org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder.OrderUpdateOrderNewOrderRequest;
|
||||
import org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder.OrderUpdateOrderNewOrderRequestBody;
|
||||
import org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder.OrderUpdateOrderNewOrderResponse;
|
||||
import org.jeecg.modules.business.domain.api.mabang.orderUpdateOrderNewOrder.UpdateResult;
|
||||
import org.jeecg.modules.business.domain.api.mabang.purDoAddPurchase.AddPurchaseOrderRequest;
|
||||
import org.jeecg.modules.business.domain.api.mabang.purDoAddPurchase.AddPurchaseOrderRequestBody;
|
||||
import org.jeecg.modules.business.domain.api.mabang.purDoAddPurchase.AddPurchaseOrderResponse;
|
||||
|
@ -20,6 +26,7 @@ import org.jeecg.modules.business.service.IProviderMabangService;
|
|||
import org.jeecg.modules.business.service.IProviderService;
|
||||
import org.jeecg.modules.business.service.IPurchaseOrderService;
|
||||
import org.jeecg.modules.business.vo.InvoiceMetaData;
|
||||
import org.jeecg.modules.business.vo.Response;
|
||||
import org.jeecg.modules.business.vo.Responses;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -236,4 +243,42 @@ public class ProviderMabangServiceImpl extends ServiceImpl<ProviderMabangMapper,
|
|||
log.info("{}/{} purchase orders deleted successfully from Mabang. GroupIds : {}", nbSuccesses, groupIds.size(), groupIds);
|
||||
return groupIdsDeleteResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<List<UpdateResult>, List<UpdateResult>> updateOrderStatusToPreparing(List<String> platformOrderIds) {
|
||||
Response<List<UpdateResult>, List<UpdateResult>> updateResponse = new Response<>();
|
||||
updateResponse.setData(new ArrayList<>());
|
||||
updateResponse.setError(new ArrayList<>());
|
||||
List<List<String>> platformOrderIdsPartition = Lists.partition(platformOrderIds, 50);
|
||||
|
||||
ExecutorService throttlingExecutorService = ThrottlingExecutorService.createExecutorService(DEFAULT_NUMBER_OF_THREADS,
|
||||
MABANG_API_RATE_LIMIT_PER_MINUTE, TimeUnit.MINUTES);
|
||||
List<CompletableFuture<Boolean>> updateOrderFutures = platformOrderIdsPartition.stream()
|
||||
.map(platformOrderIdList -> CompletableFuture.supplyAsync(() -> {
|
||||
log.info("Updating order status on Mabang for PlatformOrderIds : {}", platformOrderIdList);
|
||||
OrderUpdateOrderNewOrderRequestBody body = new OrderUpdateOrderNewOrderRequestBody(platformOrderIdList);
|
||||
OrderUpdateOrderNewOrderRequest request = new OrderUpdateOrderNewOrderRequest(body);
|
||||
OrderUpdateOrderNewOrderResponse response = request.send();
|
||||
|
||||
if(!response.success()) {
|
||||
log.error("Failed to update order status on Mabang. PlatformOrderIds : {} - Reason : {}", platformOrderIdList, response.getMessage());
|
||||
UpdateResult error = new UpdateResult();
|
||||
error.setReason(response.getMessage());
|
||||
updateResponse.setError(Collections.singletonList(error));
|
||||
updateResponse.setStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR);
|
||||
return false;
|
||||
} else {
|
||||
updateResponse.getData().addAll(response.getSuccessOrders());
|
||||
updateResponse.getError().addAll(response.getOrdersNotFound());
|
||||
updateResponse.setStatus(!response.getOrdersNotFound().isEmpty() ? HttpStatus.SC_NOT_FOUND : HttpStatus.SC_OK);
|
||||
return true;
|
||||
}
|
||||
}, throttlingExecutorService)).collect(Collectors.toList());
|
||||
|
||||
List<Boolean> results = updateOrderFutures.stream().map(CompletableFuture::join).collect(Collectors.toList());
|
||||
long nbSuccesses = results.stream().filter(b -> b).count();
|
||||
log.info("{}/{} platform orders status updated successfully on Mabang. PlatformOrderIds : {}", nbSuccesses, platformOrderIds.size(), platformOrderIds);
|
||||
|
||||
return updateResponse;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue