diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index 061634297..67856520d 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -317,9 +317,10 @@ DROP TABLE IF EXISTS hard_spu; CREATE TABLE hard_spu ( id bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - spu_category_id bigint NOT NULL COMMENT '商品分类id', + spu_category_id bigint DEFAULT NULL COMMENT '商品分类id', name varchar(64) NOT NULL COMMENT '商品名', - pic varchar(256) NOT NULL COMMENT '商品图片', + cover varchar(256) NOT NULL COMMENT '商品封面图片', + pic varchar(1024) NOT NULL COMMENT '商品图片用于识别', price int NOT NULL COMMENT '单价(分)', sales_count int DEFAULT 0 NOT NULL COMMENT '销量', repertory_count int DEFAULT 0 NOT NULL COMMENT '库存', @@ -329,10 +330,12 @@ CREATE TABLE hard_spu specs_taste varchar(128) DEFAULT NULL COMMENT '规格-口味', specs_capacity varchar(128) DEFAULT NULL COMMENT '规格-容量', specs_weight varchar(128) DEFAULT NULL COMMENT '规格-重量', - sku_type varchar(32) DEFAULT NULL COMMENT 'sku类型,0:标准库;1:私有库 ', + sku_type varchar(32) DEFAULT NULL COMMENT 'sku类型,0:标准库;1:私有库', + ks_sku_id varchar(32) DEFAULT NULL COMMENT '旷世skuid', + ks_res_sku_id varchar(32) DEFAULT NULL COMMENT '旷世返回的业务方sku_id', ks_barcode varchar(32) DEFAULT NULL COMMENT '69码', ks_has_sub_sku varchar(128) DEFAULT NULL COMMENT '是否为集合SKU', - ks_sub_sku text DEFAULT NULL COMMENT '集合SKU的子SKU信息', + ks_sub_sku_json text DEFAULT NULL COMMENT '集合SKU的子SKU信息JSON', ks_status char(1) DEFAULT NULL COMMENT '旷世审核状态', ks_status_title varchar(64) DEFAULT NULL COMMENT '旷世审核状态标题', ks_comments varchar(512) DEFAULT NULL COMMENT '旷世审核状态描述', diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java index dc5fbface..d5940b6d3 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java @@ -1,18 +1,12 @@ package com.bsd.pjcloud.hard.api.dto.spu; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; -import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; import java.time.LocalDateTime; import java.util.List; @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor public class HardSpuDto extends HardSpuEntity { private List spuIdList; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java index 0cb22e5b4..d2f959ecd 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java @@ -7,8 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; +import lombok.*; import com.bsd.pjcloud.common.core.util.TenantTable; import java.time.LocalDateTime; @@ -16,6 +15,9 @@ import java.time.LocalDateTime; /** * 硬件商品 */ +@Builder +@AllArgsConstructor +@NoArgsConstructor @Data @TenantTable @TableName("hard_spu") @@ -46,9 +48,15 @@ public class HardSpuEntity extends Model { private String name; /** - * 商品图片 + * 商品封面图片 */ - @Schema(description = "商品图片") + @Schema(description = "商品封面图片") + private String cover; + + /** + * 商品图片用于识别 + */ + @Schema(description = "商品图片用于识别") private String pic; /** @@ -109,11 +117,24 @@ public class HardSpuEntity extends Model { /** * sku类型,0:标准库;1:私有库 + * * @see HardKsSkuTypeEnum */ @Schema(description = "sku类型,0:标准库;1:私有库") private String skuType; + /** + * 旷世skuid + */ + @Schema(description = "旷世skuid") + private String ksSkuId; + + /** + * 旷世返回的业务方sku_id + */ + @Schema(description = "旷世返回的业务方sku_id") + private String ksResSkuId; + /** * 69码 */ @@ -130,7 +151,7 @@ public class HardSpuEntity extends Model { * 是否为集合SKU */ @Schema(description = "是否为集合SKU") - private String ksSubSku; + private String ksSubSkuJson; /** * 旷世审核状态 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuJoinServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuJoinServiceImpl.java index 150416d7e..2fcc50fec 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuJoinServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuJoinServiceImpl.java @@ -42,7 +42,8 @@ public class HardSpuJoinServiceImpl extends ServiceImpl spuIds = joinList.stream().map(HardSpuJoinVo::getSpuId).toList(); // 查询商品 if (ObjectUtil.isNotEmpty(spuIds)) { - List spuList = hardSpuMapper.scopPageList(HardSpuDto.builder().build(), null); + HardSpuDto spuDto = new HardSpuDto(); + List spuList = hardSpuMapper.scopPageList(spuDto, null); for (HardSpuJoinVo v : joinList) { spuList.stream().filter(i -> ObjectUtil.equals(i.getId(), v.getSpuId())).findFirst().ifPresent(v::setSpuDetail); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 8cd3ea97f..5dd4697cf 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -1,15 +1,20 @@ package com.bsd.pjcloud.hard.service.impl.spu; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.hard.api.constant.spu.HardKsCheckStatusEnum; import com.bsd.pjcloud.hard.api.constant.spu.HardKsSkuTypeEnum; import com.bsd.pjcloud.hard.api.dto.spu.HardPutawayDto; import com.bsd.pjcloud.hard.api.dto.spu.HardSpuDto; import com.bsd.pjcloud.hard.api.dto.spu.HardSpuJoinDto; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; +import com.bsd.pjcloud.hard.api.entity.spu.HardSpuJoinEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuJoinVo; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuVo; @@ -21,6 +26,7 @@ import com.bsd.pjcloud.hard.service.HardSpuService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdKsService; import com.bsd.pjcloud.thirdparty.dto.ks.KsBarcodeLikeDto; import com.bsd.pjcloud.thirdparty.vo.ks.KsBarcodeLikeVo; +import com.bsd.pjcloud.thirdparty.vo.ks.KsSpuVo; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,6 +44,8 @@ import java.util.*; @Service public class HardSpuServiceImpl extends ServiceImpl implements HardSpuService { + private static final String TAG = "硬件商品"; + private final HardManagerService hardManagerService; private final HardDoorManagerService hardDoorManagerService; private final HardSpuJoinService hardSpuJoinService; @@ -115,10 +123,12 @@ public class HardSpuServiceImpl extends ServiceImpl> addMap = new HashMap<>(); addMap.put(i, storeySpu); @@ -144,16 +154,102 @@ public class HardSpuServiceImpl extends ServiceImpl spuList = new ArrayList<>(); + for (KsSpuVo i : data.getResultList()) { + try { + HardSpuEntity entity = HardSpuEntity + .builder() + .spuCategoryId(null) + .name(i.getSku_name()) + .cover(i.getCover()) + .skuType(i.getSku_type()) + .ksSkuId(i.getKs_sku_id()) + .ksResSkuId(i.getSku_id()) + .ksBarcode(i.getBarcode()) + .ksHasSubSku(i.getHas_sub_sku()) + .build(); + // 图片 + if (ObjectUtil.isNotEmpty(i.getImg_urls())) { + entity.setPic(String.join(",", i.getImg_urls())); + } + // 审核状态 + entity.setKsStatus(HardKsCheckStatusEnum.CHECK_DONE.getType()); + entity.setKsStatusTitle(HardKsCheckStatusEnum.CHECK_DONE.getDescription()); + entity.setKsComments("API同步"); + // 处理规格 + KsSpuVo.KsSpuSpecsVo specs = i.getSpecs(); + if (ObjectUtil.isNotEmpty(specs)) { + if (ObjectUtil.isNotEmpty(specs.getTaste())) entity.setSpecsTaste(specs.getTaste()); + if (ObjectUtil.isNotEmpty(specs.getCapacity())) entity.setSpecsCapacity(specs.getCapacity()); + if (ObjectUtil.isNotEmpty(specs.getWeight())) entity.setSpecsWeight(specs.getWeight()); + } + // 处理集合SKU的子SKU信息 + if (ObjectUtil.isEmpty(i.getSub_sku())) { + entity.setKsSubSkuJson(""); + spuList.add(entity); + } else { + HardSpuEntity entityCopy = BeanUtil.toBean(entity, HardSpuEntity.class); + for (KsSpuVo j : i.getSub_sku()) { + entityCopy.setKsSkuId(j.getKs_sku_id()); + entityCopy.setKsResSkuId(j.getSku_id()); + entityCopy.setKsBarcode(j.getBarcode()); + entityCopy.setName(j.getSku_name()); + entityCopy.setSkuType(j.getSku_type()); + entityCopy.setCover(i.getCover()); + entityCopy.setKsSubSkuJson(JSONUtil.toJsonStr(j.getSub_sku())); + // 图片 + if (ObjectUtil.isNotEmpty(j.getImg_urls())) { + entityCopy.setPic(String.join(",", j.getImg_urls())); + } + spuList.add(entityCopy); + } + } + } catch (Exception e) { + log.error("|{}|添加旷世商品错误|{}|", TAG, e.getMessage()); + } } + if (ObjectUtil.isNotEmpty(spuList)) { + List insertList = new ArrayList<>(); + List updateList = new ArrayList<>(); + for (HardSpuEntity i : spuList) { + HardSpuEntity entity = baseMapper.selectOne(new LambdaQueryWrapper() + .eq(HardSpuEntity::getKsResSkuId, i.getKsResSkuId()) + .eq(HardSpuEntity::getKsSkuId, i.getKsSkuId()) + ); + if (ObjectUtil.isEmpty(entity)) { + i.setPrice(0); + i.setSalesCount(0); + i.setRepertoryCount(0); + i.setSort(0); + i.setIsDefault(YesNoEnum.YES.getCode()); + i.setStatus(YesNoEnum.YES.getCode()); + insertList.add(i); + } else { + i.setId(entity.getId()); + updateList.add(i); + } + } + if (ObjectUtil.isNotEmpty(insertList)) { + baseMapper.insert(insertList); + } + if (ObjectUtil.isNotEmpty(updateList)) { + baseMapper.updateById(updateList); + } + } + return false; } /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml index 0fe7da6d4..71329ef84 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml @@ -6,6 +6,7 @@ + @@ -17,9 +18,11 @@ + + - + @@ -35,6 +38,7 @@ select a.id, a.spu_category_id, a.name, + a.cover, a.pic, a.price, a.sales_count, @@ -46,9 +50,11 @@ a.specs_capacity, a.specs_weight, a.sku_type, + a.ks_res_sku_id, + a.ks_sku_id, a.ks_barcode, a.ks_has_sub_sku, - a.ks_sub_sku, + a.ks_sub_sku_json, a.ks_status, a.ks_status_title, a.ks_comments, @@ -106,7 +112,7 @@