From 540820281d6b20d5fe5eaf6655f935ba05401dd5 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Wed, 15 Jan 2025 10:38:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=90=8C=E6=AD=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall/common/feignService/PayService.java | 3 + .../modules/account/AccountUserBase.java | 6 + .../common/pojo/req/SyncThirdMemberReq.java | 50 ++++ .../mall/common/utils/DateTimeUtils.java | 18 ++ .../mall/common/utils/StringUtils.java | 23 +- .../pay/controller/admin/PayController.java | 10 + .../service/ShopProductBaseService.java | 7 +- .../impl/ShopProductBaseServiceImpl.java | 1 + .../controller/SyncThirdDataController.java | 5 +- .../sync/service/SyncThirdDataService.java | 17 ++ .../impl/SyncThirdDataServiceImpl.java | 276 +++++++++++++++++- 11 files changed, 401 insertions(+), 15 deletions(-) create mode 100644 mall-common/src/main/java/com/suisung/mall/common/pojo/req/SyncThirdMemberReq.java diff --git a/mall-common/src/main/java/com/suisung/mall/common/feignService/PayService.java b/mall-common/src/main/java/com/suisung/mall/common/feignService/PayService.java index 481af4ee..0414da3a 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/feignService/PayService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/feignService/PayService.java @@ -57,6 +57,9 @@ public interface PayService { @PostMapping(value = "/admin/pay/payController/editPayConsumeTrade") boolean editPayConsumeTrade(@RequestBody Map params); + @PostMapping(value = "/admin/pay/payController/saveOrUpdatePayUserResource") + boolean saveOrUpdatePayUserResource(@RequestBody PayUserResource params); + @PostMapping(value = "/admin/pay/payController/points") boolean points(@RequestParam(name = "user_id") Integer user_id, @RequestParam(name = "points") BigDecimal points, diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/account/AccountUserBase.java b/mall-common/src/main/java/com/suisung/mall/common/modules/account/AccountUserBase.java index 81bbf8f8..32f5e936 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/account/AccountUserBase.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/account/AccountUserBase.java @@ -71,6 +71,12 @@ public class AccountUserBase implements Serializable { @ApiModelProperty(value = "快速登录码") private String user_quickcode; + @ApiModelProperty(value = "用户身份:0-个人身份;1-企业身份;") + private String user_type; + + @ApiModelProperty(value = "公司id") + private String user_company_id; + @TableField(exist = false) @ApiModelProperty(value = "用户权限集合") private List roles; diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/req/SyncThirdMemberReq.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/req/SyncThirdMemberReq.java new file mode 100644 index 00000000..a0a7a05c --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/req/SyncThirdMemberReq.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.common.pojo.req; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "第三方会员同步请求参数") +public class SyncThirdMemberReq implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("会员手机号") + private String user_mobile; + @ApiModelProperty("会员昵称") + private String user_nickname; + @ApiModelProperty("会员真实姓名") + private String user_realname; + @ApiModelProperty("会员性别:1-男;2-女;") + private Integer user_gender; + @ApiModelProperty("会员生日 yyyy-MM-dd") + private String user_birthday; + @ApiModelProperty("会员等级:v1...v9") + private String user_level; + @ApiModelProperty("会员卡号") + private String user_level_card; + @ApiModelProperty("会员积分值") + private BigDecimal user_points; + @ApiModelProperty("会员余额") + private BigDecimal user_money; + @ApiModelProperty("加入时间") + private Date join_time; +} diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java b/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java index 40788577..a773025d 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java @@ -2,8 +2,12 @@ package com.suisung.mall.common.utils; import lombok.extern.slf4j.Slf4j; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; @Slf4j public class DateTimeUtils { @@ -11,4 +15,18 @@ public class DateTimeUtils { public static String formatDateTime(LocalDateTime localDateTime, String pattern) { return localDateTime.format(DateTimeFormatter.ofPattern(pattern)); } + + public static Date parseDate(String dateString, String pattern) { + SimpleDateFormat format = new SimpleDateFormat(pattern); + try { + Date date = format.parse(dateString); + return date; + } catch (ParseException e) { + log.error(e.getMessage()); + Calendar calendar = Calendar.getInstance(); + // 设置年、月(注意:月份从 0 开始,即 0 表示一月)、日、时、分、秒 + calendar.set(2000, 0, 1, 15, 30, 0); + return calendar.getTime(); + } + } } diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java b/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java index 18f9b1f7..078fa10b 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java @@ -7,12 +7,10 @@ import org.slf4j.LoggerFactory; import java.io.*; import java.net.URLEncoder; import java.security.MessageDigest; +import java.security.SecureRandom; import java.text.MessageFormat; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.Random; -import java.util.UUID; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -223,6 +221,23 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils { } } + /** + * 生成唯一码 + * @param length + * @return + */ + public static String generateUniqueCode(int length) { + SecureRandom secureRandom = new SecureRandom(); + // 计算所需的字节数,根据 Base64 编码的特性,3 个字节编码为 4 个字符 + int numBytes = (int) Math.ceil((length * 3.0 / 4.0)); + byte[] randomBytes = new byte[numBytes]; + secureRandom.nextBytes(randomBytes); + + String base64 = Base64.getUrlEncoder().withoutPadding().encodeToString(randomBytes); + // 截取所需长度的子串 + return base64.substring(0, length); + } + /** * 全地址去除省市区,保留详细地址 * diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/controller/admin/PayController.java b/mall-pay/src/main/java/com/suisung/mall/pay/controller/admin/PayController.java index 520049fd..9c062c41 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/controller/admin/PayController.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/controller/admin/PayController.java @@ -151,7 +151,17 @@ public class PayController { return false; } return flag; + } + @RequestMapping(value = "/saveOrUpdatePayUserResource", method = RequestMethod.POST) + public boolean saveOrUpdatePayUserResource(@RequestBody PayUserResource payUserResource) { + boolean flag; + try { + flag = payUserResourceService.saveOrUpdate(payUserResource); + } catch (Exception e) { + return false; + } + return flag; } @ApiOperation(value = "获取交易订单", notes = "获取交易订单") diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java index cfb7ccae..7f12ca15 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java @@ -8,6 +8,7 @@ import com.suisung.mall.common.pojo.dto.ProductRecommendDTO; import com.suisung.mall.common.pojo.dto.ProductSearchDTO; import com.suisung.mall.core.web.service.IBaseService; import com.suisung.mall.shop.product.pojo.vo.ProductVo; +import org.springframework.data.util.Pair; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; @@ -253,6 +254,7 @@ public interface ShopProductBaseService extends IBaseService { /** * 获取一个商品基本信息 + * * @param product_id * @param store_id * @return @@ -261,6 +263,7 @@ public interface ShopProductBaseService extends IBaseService { /** * 根据店铺Id和商品货号,获取商品Id + * * @param store_id * @param product_number * @return @@ -276,6 +279,8 @@ public interface ShopProductBaseService extends IBaseService { * @param storeId * @return */ - Boolean syncSxGoodsToShopProductBase(String storeId); + Boolean syncSxGoodsToShopProductBase(String storeId); + + Pair saveProduct(ShopProductBase shopProductBase, ShopProductIndex shopProductIndex, ShopProductData shopProductData, ShopProductDetail shopProductDetail, ShopProductInfo shopProductInfo, List shopProductItemList, List shopProductImageList, ShopProductValidPeriod shopProductValidPeriod, List shopProductAssistIndexList); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java index 0c2210b7..dcd17f5c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java @@ -680,6 +680,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl saveProduct(ShopProductBase shopProductBase, ShopProductIndex shopProductIndex, ShopProductData shopProductData, ShopProductDetail shopProductDetail, ShopProductInfo shopProductInfo, List shopProductItemList, List shopProductImageList, ShopProductValidPeriod shopProductValidPeriod, List shopProductAssistIndexList) { Integer store_id = shopProductBase.getStore_id(); if (store_id == null) { diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java index 25704c9f..f9a6d536 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java @@ -9,6 +9,7 @@ package com.suisung.mall.shop.sync.controller; import cn.hutool.json.JSONArray; +import com.suisung.mall.common.pojo.req.SyncThirdMemberReq; import com.suisung.mall.common.pojo.res.ThirdApiRes; import com.suisung.mall.shop.sync.service.SyncThirdDataService; import io.swagger.annotations.Api; @@ -19,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @Api(tags = "第三方数据同步") @RestController @RequestMapping("/shop/sync/third") @@ -53,7 +56,7 @@ public class SyncThirdDataController { @ApiOperation(value = "会员数据同步", notes = "会员数据同步") @RequestMapping(value = "/member", method = RequestMethod.POST) - public ThirdApiRes syncMember(@RequestBody String reqBody) { + public ThirdApiRes syncMember(@RequestBody List memberList) { return null; } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java index d0239240..e2602b62 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java @@ -9,8 +9,11 @@ package com.suisung.mall.shop.sync.service; import cn.hutool.json.JSONArray; +import com.suisung.mall.common.pojo.req.SyncThirdMemberReq; import com.suisung.mall.common.pojo.res.ThirdApiRes; +import java.util.List; + public interface SyncThirdDataService { /** @@ -28,4 +31,18 @@ public interface SyncThirdDataService { * @return */ ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(JSONArray brandListJSON); + + /** + * 批量保存商品记录 + * @param goodsListJSON + * @return + */ + ThirdApiRes saveOrUpdateGoodsBatch(JSONArray goodsListJSON); + + /** + * 批量保存会员记录 + * @param memberList + * @return + */ + ThirdApiRes saveOrUpdateMemberBatch(List memberList); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java index 351b5293..5e822ace 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java @@ -8,29 +8,55 @@ package com.suisung.mall.shop.sync.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.suisung.mall.common.api.StateCode; +import com.suisung.mall.common.constant.CommonConstant; +import com.suisung.mall.common.exception.ApiException; +import com.suisung.mall.common.feignService.AccountService; +import com.suisung.mall.common.feignService.PayService; +import com.suisung.mall.common.modules.account.AccountUserBase; +import com.suisung.mall.common.modules.account.AccountUserInfo; import com.suisung.mall.common.modules.base.ShopBaseProductBrand; import com.suisung.mall.common.modules.base.ShopBaseProductCategory; import com.suisung.mall.common.modules.base.ShopBaseProductType; +import com.suisung.mall.common.modules.pay.PayUserResource; +import com.suisung.mall.common.modules.product.*; +import com.suisung.mall.common.modules.store.ShopStoreBase; +import com.suisung.mall.common.pojo.req.SyncThirdMemberReq; import com.suisung.mall.common.pojo.res.ThirdApiRes; +import com.suisung.mall.common.utils.DateTimeUtils; import com.suisung.mall.common.utils.I18nUtil; +import com.suisung.mall.common.utils.StringUtils; import com.suisung.mall.shop.base.service.ShopBaseProductBrandService; import com.suisung.mall.shop.base.service.ShopBaseProductCategoryService; import com.suisung.mall.shop.base.service.ShopBaseProductTypeService; +import com.suisung.mall.shop.product.service.ShopProductBaseService; +import com.suisung.mall.shop.product.service.impl.ShopProductBaseServiceImpl; +import com.suisung.mall.shop.store.service.ShopStoreBaseService; import com.suisung.mall.shop.sync.service.SyncThirdDataService; +import io.swagger.models.auth.In; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; @Service public class SyncThirdDataServiceImpl implements SyncThirdDataService { + private final Logger logger = LoggerFactory.getLogger(ShopProductBaseServiceImpl.class); + @Autowired private ShopBaseProductBrandService productBrandService; @@ -40,6 +66,20 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { @Autowired private ShopBaseProductTypeService productTypeService; + @Autowired + private AccountService accountService; + + @Autowired + private PayService payService; + + @Autowired + ShopProductBaseService shopProductBaseService; + + @Autowired + ShopStoreBaseService shopStoreBaseService; + + private int limitCnt = 300; + /** * 批量保存商品的分类 * @@ -59,13 +99,15 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { return new ThirdApiRes().fail(1004, I18nUtil._("请求参数有误!")); } - if (list != null && list.size() > 500) { - return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多500条!")); + if (list != null && list.size() > limitCnt) { + return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多"+limitCnt+"条!")); } + String storeId = "3"; + int count = 0; for (int i = 0; i < list.size(); i++) { - list.get(i).setStore_id("3"); // app 记录传进来 + list.get(i).setStore_id(storeId); // app 记录传进来 list.get(i).setData_source(2); // 思迅数据来源 list.get(i).setCategory_is_enable(1); @@ -141,13 +183,15 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { return new ThirdApiRes().fail(1004, I18nUtil._("请求参数有误!")); } - if (goodBrandList != null && goodBrandList.size() > 500) { - return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多500条!")); + if (goodBrandList != null && goodBrandList.size() > limitCnt) { + return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多"+limitCnt+"条!")); } + Integer storeId = 3; + int count = 0; for (int i = 0; i < goodBrandList.size(); i++) { - goodBrandList.get(i).setStore_id(3); // app 记录传进来 + goodBrandList.get(i).setStore_id(storeId); // app 记录传进来 // 处理大分类字段 JSONObject o = (JSONObject) brandListJSON.get(i); if (o != null && StrUtil.isNotBlank(o.getStr("category"))) { @@ -165,4 +209,218 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { return new ThirdApiRes().success("成功同步" + count + "条记录!", resp); } + + /** + * 批量保存商品记录 + * + * @param goodsListJSON + * @return + */ + @Override + public ThirdApiRes saveOrUpdateGoodsBatch(JSONArray goodsListJSON) { + // TODO 验签、appid,必要参数判断 + + if (ObjectUtil.isEmpty(goodsListJSON)) { + return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!")); + } + + List goodBrandList = JSONUtil.toList(goodsListJSON, ShopBaseProductBrand.class); + if (goodBrandList == null) { + return new ThirdApiRes().fail(1004, I18nUtil._("请求参数有误!")); + } + + if (goodsListJSON.size() > limitCnt) { + return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多"+limitCnt+"条!")); + } + + Integer storeId = 3; + + int count = 0; + for (JSONObject jsonObj : goodsListJSON.jsonIter()) { + Date currentDate = new Date(); + + Integer categoryId = Convert.toInt(jsonObj.get("first_category_name"), 0); + Integer storeIdInt = Convert.toInt(storeId); + ShopStoreBase store_row = shopStoreBaseService.get(storeId); + if (store_row == null) { + throw new ApiException(I18nUtil._("无法获取店铺信息!")); + } + + ShopProductBase shopProductBase = new ShopProductBase(); + shopProductBase.setProduct_sale_time(Convert.toDate(DateUtil.current() + 600)); //10分钟 + shopProductBase.setStore_id(storeIdInt); + shopProductBase.setProduct_number((String) jsonObj.get("first_category_name")); + shopProductBase.setProduct_name((String) jsonObj.get("first_category_name")); + shopProductBase.setStore_name(store_row.getStore_name()); + shopProductBase.setProduct_tips(""); + shopProductBase.setProduct_video(""); + shopProductBase.setTransport_type_id(StateCode.DELIVERY_TYPE_SAME_CITY); + shopProductBase.setProduct_state_id(StateCode.PRODUCT_STATE_NORMAL); + shopProductBase.setProduct_inventory_lock(1002); //库存锁定(ENUM):1001-下单锁定;1002-支付锁定; + shopProductBase.setProduct_fx_enable(0); // 供应商是否允许批发市场分销 + shopProductBase.setProduct_dist_enable(0); // 是否允许三级分销 + shopProductBase.setProduct_from(1005);// 商品来源(ENUM):1000-发布;1001-天猫;1002-淘宝;1003-阿里巴巴;1004-京东;1005-思迅; + shopProductBase.setProduct_add_time(currentDate.getTime()); + + + // ShopProductIndex + ShopProductIndex shopProductIndex = new ShopProductIndex(); + shopProductIndex.setProduct_add_time(currentDate.getTime()); + shopProductIndex.setProduct_sale_time(DateUtil.current() + 600); //10分钟 + shopProductIndex.setStore_category_ids(""); // 店铺分类编号(DOT) + shopProductIndex.setProduct_tags("");// 商品标签(DOT) + shopProductIndex.setBrand_id(0); + shopProductIndex.setProduct_name(shopProductBase.getProduct_name()); // 产品名称:店铺平台先在对用表中检索后通过id检索,检索使用 + shopProductIndex.setProduct_name_index(shopProductIndex.getProduct_name()); // 名称索引关键字(DOT) + shopProductIndex.setCategory_id(categoryId); // 商品分类 + shopProductIndex.setProduct_fx_enable(0); // 供应商是否允许批发市场分销 + shopProductIndex.setProduct_dist_enable(0); // 是否允许三级分销 + shopProductIndex.setStore_id(storeIdInt); + shopProductIndex.setStore_type(store_row.getStore_type()); + shopProductIndex.setKind_id(StateCode.PRODUCT_KIND_ENTITY);// 实体商品 + shopProductIndex.setStore_is_open(store_row.getStore_is_open()); + shopProductIndex.setStore_is_selfsupport(store_row.getStore_is_selfsupport()); + shopProductIndex.setStore_longitude(store_row.getStore_longitude()); + shopProductIndex.setStore_latitude(store_row.getStore_latitude()); + + shopProductIndex.setCard_type_id(0); + shopProductIndex.setVoucher_activity_id(""); + shopProductIndex.setCoupon_type_id(0);// product_assist_data // 辅助属性值列(DOT) + shopProductIndex.setProduct_transport_id(String.valueOf(StateCode.DELIVERY_TYPE_SAME_CITY)); + + ShopBaseProductCategory category_row = productCategoryService.get(categoryId); + if (ObjectUtil.isNotEmpty(category_row)) { + Integer type_id = category_row.getType_id(); + shopProductIndex.setType_id(type_id); + } + + // shop_product_data + ShopProductData shopProductData = new ShopProductData(); + // product_id // 产品id + shopProductData.setProduct_edit_time(currentDate); + + // shop_product_detail + ShopProductDetail shopProductDetail = new ShopProductDetail(); + shopProductDetail.setProduct_detail(""); + shopProductDetail.setProduct_param(""); + shopProductDetail.setProduct_service(""); + shopProductDetail.setProduct_tags(""); + + // shop_product_info + ShopProductInfo shopProductInfo = new ShopProductInfo(); + shopProductInfo.setProduct_number((String) jsonObj.get("first_category_name"));// SPU商家编码:货号 + shopProductInfo.setProduct_assist(""); + shopProductInfo.setProduct_spec(""); + shopProductInfo.setProduct_buy_limit(0); // 不限购 + //商品规格 + shopProductInfo.setSpec_ids(""); + + List shopProductItemList = new ArrayList<>(); + ShopProductItem shopProductItem = new ShopProductItem(); + shopProductItem.setStore_id(storeIdInt); + shopProductItem.setCategory_id(categoryId); + shopProductItem.setItem_unit_price((BigDecimal) jsonObj.get("first_category_name")); + shopProductItem.setItem_advice_price((BigDecimal) jsonObj.get("first_category_name")); + shopProductItem.setItem_market_price((BigDecimal) jsonObj.get("first_category_name")); + shopProductItem.setItem_unit_points((BigDecimal) jsonObj.get("first_category_name")); + shopProductItem.setItem_quantity((Integer) jsonObj.get("first_category_name")); // 库存 + shopProductItem.setItem_quantity_frozen(0); + shopProductItem.setItem_number((String) jsonObj.get("first_category_name"));// SKU商家编码 + shopProductItem.setItem_barcode((String) jsonObj.get("first_category_name")); // 条形码正常情况下就是货号 + shopProductItem.setItem_is_default(1); + shopProductItem.setItem_enable(1); + + shopProductItemList.add(shopProductItem); + + // 保存数据 + Pair pair = shopProductBaseService.saveProduct(shopProductBase, shopProductIndex, shopProductData, shopProductDetail, shopProductInfo, shopProductItemList, new ArrayList(), new ShopProductValidPeriod(), new ArrayList()); + if (!pair.getFirst()) { + logger.error(pair.getSecond()); + continue; + } + + count += 1; + } + + Map resp = new HashMap<>(); + resp.put("count", count); + + return new ThirdApiRes().success("成功同步" + count + "条记录!", resp); + } + + /** + * 批量保存会员记录 + * + * @param memberList + * @return + */ + @Override + public ThirdApiRes saveOrUpdateMemberBatch(List memberList) { + if (CollUtil.isEmpty(memberList)) { + return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!")); + } + + String storeId = "3"; + if (memberList.size() > limitCnt) { + return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多" + limitCnt + "条!")); + } + + int count = 0; + for (SyncThirdMemberReq member : memberList) { + // account_user_base + AccountUserBase accountUserBase = new AccountUserBase(); + accountUserBase.setUser_account(StringUtils.generateUniqueCode(8)); + accountUserBase.setUser_nickname(member.getUser_nickname()); + accountUserBase.setUser_state(2);// 状态(ENUM):0-锁定;1-未激活;2-已激活; + accountUserBase.setUser_is_admin(0); + accountUserBase.setStore_ids(storeId); + accountUserBase.setRights_group_id("0");// 普通用户 + accountUserBase.setUser_type("0"); + + String user_key = IdUtil.simpleUUID(); + String user_salt = IdUtil.simpleUUID(); + String user_token = IdUtil.simpleUUID(); + accountUserBase.setUser_salt(user_salt); + accountUserBase.setUser_token(user_token); + accountUserBase.setUser_key(user_key); + accountUserBase.setUser_password(SecureUtil.md5(user_salt + SecureUtil.md5(IdUtil.simpleUUID()))); + + Boolean success = accountService.saveOrUpdateUserBase(accountUserBase); + + Integer userId = accountUserBase.getUser_id(); + + // account_user_info + AccountUserInfo accountUserInfo = new AccountUserInfo(); + accountUserInfo.setUser_id(userId);// todo + accountUserInfo.setUser_type_id(0); + accountUserInfo.setUser_mobile(member.getUser_mobile()); + accountUserInfo.setUser_level_card(member.getUser_level_card()); + //user_level_id + accountUserInfo.setUser_level_id(1); // todo select id + accountUserInfo.setUser_gender(member.getUser_gender()); + accountUserInfo.setUser_mobile(member.getUser_mobile()); + accountUserInfo.setUser_intl(CommonConstant.IDD_ZH_CN); + accountUserInfo.setUser_birthday(DateTimeUtils.parseDate(member.getUser_birthday(), "yyyy-MM-dd")); + success = accountService.saveOrUpdateUserInfo(accountUserInfo); + + if (member.getUser_money() != null || member.getUser_points() != null) { + // 用户支付资源,积分,余额 + PayUserResource payUserResource = new PayUserResource(); + payUserResource.setUser_id(userId); + payUserResource.setUser_money(member.getUser_money()); + payUserResource.setUser_money_frozen(BigDecimal.ZERO); + payUserResource.setUser_points(member.getUser_points()); + payUserResource.setUser_points_frozen(BigDecimal.ZERO); + + success = payService.saveOrUpdatePayUserResource(payUserResource); + } + + if(success) {count += 1;} + } + + Map resp = new HashMap<>(); + resp.put("count", count); + + return new ThirdApiRes().success("成功同步" + count + "条记录!", resp); + } }