diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java index 606fcc9bc..e004dd2bd 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java @@ -1,9 +1,6 @@ package org.jeecg.modules.business.controller.admin; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -15,6 +12,7 @@ import org.jeecg.modules.business.entity.Sku; import org.jeecg.modules.business.entity.SkuWeight; import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.ISecurityService; +import org.jeecg.modules.business.service.ISkuListMabangService; import org.jeecg.modules.business.service.ISkuService; import org.jeecg.modules.business.service.ISkuWeightService; @@ -24,6 +22,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.modules.business.vo.Responses; import org.jeecg.modules.business.vo.SkuWeightParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -45,6 +44,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; @RequestMapping("/skuWeight") @Slf4j public class SkuWeightController extends JeecgController { + @Autowired + private ISkuListMabangService skuListMabangService; @Autowired private ISkuService skuService; @Autowired @@ -164,7 +165,8 @@ public class SkuWeightController extends JeecgController updateBatch(@RequestBody SkuWeightParam param) { + public Result updateBatch(@RequestBody SkuWeightParam param) { boolean isEmployee = securityService.checkIsEmployee(); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if(!isEmployee){ log.info("User {}, tried to access /skuWeight/updateBatch but is not authorized.", sysUser.getUsername()); return Result.error(403,"Forbidden."); } - List skuWeights = new ArrayList<>(); + Map skuWeightsMap = new HashMap<>(); for(String skuId : param.getIds()){ Sku sku = skuService.getById(skuId); if(sku == null){ @@ -208,10 +217,15 @@ public class SkuWeightController extends JeecgController skuWeights = new ArrayList<>(skuWeightsMap.values()); + Responses responses = skuListMabangService.mabangSkuWeightUpdate(skuWeights); + List skuWeightSuccesses = new ArrayList<>(); + responses.getSuccesses().forEach(skuErpCode -> skuWeightSuccesses.add(skuWeightsMap.get(skuErpCode))); + + skuWeightSuccesses.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight)); skuWeightService.saveBatch(skuWeights); - return Result.OK("data.invoice.effectiveDate"); + return Result.OK(responses); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/doSearchSkuListNew/SkuData.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/doSearchSkuListNew/SkuData.java index b69934545..953e2c858 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/doSearchSkuListNew/SkuData.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/doSearchSkuListNew/SkuData.java @@ -75,7 +75,7 @@ public class SkuData { @JSONField(name="height") private String height; @JSONField(name="weight") - private Double weight; + private Integer weight; /** * saleRemark contains the weight */ diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequest.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequest.java new file mode 100644 index 000000000..2ac7c4330 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequest.java @@ -0,0 +1,33 @@ +package org.jeecg.modules.business.domain.api.mabang.stockDoChangeStock; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.business.domain.api.mabang.Request; +import org.springframework.http.ResponseEntity; + +/** + * This class contains some key information and necessary procedures + * to send a request to mabang "get order list" API, for example: target URL, + * correspondent HTTP method, procedure to generate authorization. + *

+ * One can use static method {@code sendRequest} to send request with body, + * and then get respective response. Or use instance of this class, see below. + *

+ * Because data returned by target API is paginated. One can retrieve all data + * by calling next and hasNext. + */ +@Slf4j +public class SkuChangeRequest extends Request { + private final SkuChangeRequestBody body; + public SkuChangeRequest(SkuChangeRequestBody body) { + super(body); + this.body = body; + } + + + @Override + public SkuChangeResponse send() { + ResponseEntity res = rawSend(); + return SkuChangeResponse.parse(JSON.parseObject(res.getBody()), body.getStockSku()); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequestBody.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequestBody.java new file mode 100644 index 000000000..e8bff7207 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequestBody.java @@ -0,0 +1,72 @@ +package org.jeecg.modules.business.domain.api.mabang.stockDoChangeStock; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.Getter; +import lombok.Setter; +import org.jeecg.modules.business.domain.api.mabang.RequestBody; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData; + +import java.math.BigDecimal; +import java.util.function.Function; + +@Getter +@Setter +public class SkuChangeRequestBody implements RequestBody { + + private String stockSku; + private String nameCn; + private String nameEn; + private Integer status; + private BigDecimal salePrice; + private String declareName; + private String declareEname; + private String warehouse; + private String remark; + private Integer weight; + private Integer isGift; + + @Override + public String api() { + return "stock-do-change-stock"; + } + + @Override + public JSONObject parameters() { + JSONObject json = new JSONObject(); + putNonNull(json, "stockSku", stockSku); + putNonNull(json, "nameCN", nameCn); + putNonNull(json, "nameEN", nameEn); + putNonNull(json, "status", status); + putNonNull(json, "salePrice", salePrice); + putNonNull(json, "declareName", declareName); + putNonNull(json, "declareEname", declareEname); + putNonNull(json, "weight", weight); + putNonNull(json, "saleRemark", remark); + putNonNull(json, "isGift", isGift); + return json; + } + + public SkuChangeRequestBody(SkuData data) { + this.stockSku = data.getErpCode(); + this.nameCn = data.getNameCN(); + this.nameEn = data.getNameEN(); + this.salePrice = data.getSalePrice(); + this.declareName = data.getDeclareNameZh(); + this.declareEname = data.getDeclareNameEn(); + this.remark = data.getSaleRemark(); + this.weight = data.getWeight(); + this.isGift = data.getIsGift(); + } + + private void putNonNull(JSONObject json, String key, E value) { + if (value != null) { + json.put(key, value); + } + } + private void putNonNull(JSONObject json, String key, E value, Function mapper) { + if (value != null) { + json.put(key, mapper.apply(value)); + } + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequestErrorException.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequestErrorException.java new file mode 100644 index 000000000..96dc78085 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeRequestErrorException.java @@ -0,0 +1,11 @@ +package org.jeecg.modules.business.domain.api.mabang.stockDoChangeStock; + +/** + * This class represents error that is returned by target stock-do-change-stock API + * Message will contain error details. + */ +public class SkuChangeRequestErrorException extends RuntimeException { + public SkuChangeRequestErrorException(String msg) { + super(msg); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeResponse.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeResponse.java new file mode 100644 index 000000000..c70eb1152 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/stockDoChangeStock/SkuChangeResponse.java @@ -0,0 +1,63 @@ +package org.jeecg.modules.business.domain.api.mabang.stockDoChangeStock; + +import com.alibaba.fastjson.JSONObject; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.business.domain.api.mabang.Response; + +/** + * Immutable object + */ +@Slf4j +@Getter +public class SkuChangeResponse extends Response { + /** + * Current page data + */ + private final JSONObject data; + + private final String stockId; + + private final String stockSku; + + public SkuChangeResponse(Code code, JSONObject data, String stockId, String stockSku) { + super(code); + this.data = data; + this.stockId = stockId; + this.stockSku = stockSku; + } + + /** + * Make an instance by parsing json, it only checks validity of code. + * if json is not valid, return null + * + * @param json the json to parse + * @return Instance + * @throws SkuChangeRequestErrorException if response code represents error. + */ + public static SkuChangeResponse parse(JSONObject json, String erpCode) throws SkuChangeRequestErrorException { + log.debug("Constructing a response by json."); + String code = json.getString("code"); + if (code.equals(Code.ERROR.value)) + throw new SkuChangeRequestErrorException(json.getString("message")); + + JSONObject data = json.getJSONObject("data"); + String stockId = data.getString("stockId"); + if(data != null) { + log.info("Constructed response: data contained {}", data); + } + else { + log.info("Data is null"); + } + return new SkuChangeResponse(Code.SUCCESS, data, stockId, erpCode); + } + + + + @Override + public String toString() { + return "SkuChangeResponse{" + + ", data=" + data + + '}'; + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java index ef0cb1cf8..4f45420e7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java @@ -25,10 +25,11 @@ public class CreateFulfillmentRequest extends ShopifyRequest { DHL_PACKET("https://www.dhl.de/en/privatkunden/pakete-empfangen/verfolgen.html?piececode=%s", "DHL Packet", "0034[0-9]{16}"), GLS_NL("https://www.gls-info.nl/tracking", "GLS", "[0-9]{20}"), GLS_NL_2("https://www.gls-info.nl/tracking", "GLS", "(1437|1000)[0-9]{10}"), -// USPS("https://tools.usps.com/go/TrackConfirmAction?qtc_tLabels1=%s", "USPS", "[0-9]{22,34}"), + USPS("https://tools.usps.com/go/TrackConfirmAction?tRef=fullpage&tLc=2&text28777=&tLabels=%s&tABt=false", "USPS", "926[0-9]{23}|420[0-9]{5}926[0-9]{23}"), AUSTRIAN_POST("https://www.post.at/s/sendungsdetails?snr=%s", "Austrian Post", "15828030053[0-9]{13}"), DHL_PACKET_WIA("https://www.dhl.de/en/privatkunden/pakete-empfangen/verfolgen.html?piececode=%s", "DHL Packet", "CD[0-9]{9}DE"), DHL_PARCEL_WIA_NL("https://my.dhlparcel.nl/home/tracktrace/%s/%s?lang=nl_NL", "DHL Parcel", "3S[A-Z]{4}[0-9]{9}"), + DHL_PARCEL_NL("https://my.dhlecommerce.nl/home/tracktrace/%s/%s?lang=nl_NL", "DHL Parcel", "JVGL[0-9]{20}"), GLS_IT("https://gls-group.com/IT/it/servizi-online/ricerca-spedizioni.html?match=%s&type=NAT", "GLS", "LT[0-9]{9}"), COLIS_PRIVE_BE("https://colisprive.com/moncolis/pages/detailColis.aspx?numColis=%s&lang=fr", "Colis Privé", "Q[0-9]{11}[B][0-9]{4}|801000[0-9]{6}|R6700035[0-9]{4}B[0-9]{4}"), COLIS_PRIVE_LU("https://colisprive.com/moncolis/pages/detailColis.aspx?numColis=%s", "Colis Privé", "Q[0-9]{11}[L][0-9]{4}"), @@ -49,6 +50,7 @@ public class CreateFulfillmentRequest extends ShopifyRequest { QUICKPAC("https://quickpac.ch/de/tracking", "Quickpac", "44001091[0-9]{10}"), CTT_EXPRESS("https://www.cttexpress.com/localizador-de-envios/", "CTT Express", "0082800082909[0-9]{9}"), PDN_Express("https://pdn.express/nl/track/%s", "PDN Express", "PDN0003[0-9]{6}"), + UNI_EXPRESS("https://www.uniuni.com/tracking/#tracking-detail?no=%s", "Uni Express", "GV24CA[0-9A-Z]{12}"), ; private final String trackingUrl; diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml index e42722914..277125c69 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml @@ -55,6 +55,7 @@ ON s.owner_id = c.id WHERE s.active = '1' AND c.active = '1' + ORDER BY c.internal_code, s.erp_code