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/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