diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountController.java index 2d6e280e..fac9296b 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountController.java @@ -342,6 +342,16 @@ public class AccountController { return accountUserBaseService.saveOrUpdate(accountUserBase); } + @RequestMapping(value = "/saveOrUpdateUserBase2", method = RequestMethod.POST) + public AccountUserBase saveOrUpdateUserBase2(@RequestBody AccountUserBase accountUserBase) { + return accountUserBaseService.saveOrUpdate2(accountUserBase).getSecond(); + } + + @RequestMapping(value = "/existByNickname", method = RequestMethod.POST) + public Boolean existByNickname(@RequestParam(name = "nickname") String nickname, @RequestParam(name = "storeId") String storeId) { + return accountUserBaseService.existByNickname(nickname, storeId); + } + @RequestMapping(value = "/editPassword", method = RequestMethod.POST) public CommonResult editPassword(@RequestParam(name = "user_id") Integer user_id, @RequestParam(name = "user_password") String user_password) { diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java index c5a0eb0b..aa55d8ff 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java @@ -4,6 +4,7 @@ import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.domain.UserDto; import com.suisung.mall.common.modules.account.AccountUserBase; import com.suisung.mall.core.web.service.IBaseService; +import org.springframework.data.util.Pair; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -143,4 +144,14 @@ public interface AccountUserBaseService extends IBaseService { void callbackGoogle(HttpServletResponse response, String code); boolean changePassword(String old_password, String password); + + /** + * 判断店铺某个昵称是否存在 + * @param nickname + * @param storeId + * @return + */ + Boolean existByNickname(String nickname, String storeId); + + Pair saveOrUpdate2(AccountUserBase entity); } diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index 62501034..f7de8b53 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -11,8 +11,13 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baomidou.mybatisplus.core.toolkit.Assert; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.api.client.auth.oauth2.AuthorizationCodeFlow; import com.google.api.client.auth.oauth2.AuthorizationCodeRequestUrl; @@ -54,11 +59,13 @@ import com.suisung.mall.common.utils.pojo.dto.EmailDTO; import com.suisung.mall.core.web.service.CloundService; import com.suisung.mall.core.web.service.RedisService; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; +import com.sun.javafx.geom.ConcentricShapePair; import io.seata.common.util.StringUtils; import io.seata.spring.annotation.GlobalTransactional; 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 org.springframework.transaction.annotation.Transactional; @@ -2935,4 +2942,39 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AccountUserBase::getUser_nickname, nickname); + queryWrapper.eq(AccountUserBase::getStore_ids, storeId); + return count(queryWrapper) > 0; + } + + @Override + public Pair saveOrUpdate2(AccountUserBase entity) { + Boolean flag = false; + if (null != entity) { + Class cls = entity.getClass(); + TableInfo tableInfo = TableInfoHelper.getTableInfo(cls); + Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!", new Object[0]); + String keyProperty = tableInfo.getKeyProperty(); + Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!", new Object[0]); + Object idVal = ReflectionKit.getFieldValue(entity, tableInfo.getKeyProperty()); + flag = !com.baomidou.mybatisplus.core.toolkit.StringUtils.checkValNull(idVal) && !Objects.isNull(this.getById((Serializable)idVal)) ? this.edit(entity) : this.add(entity); + } + + return Pair.of(flag, entity); + } } diff --git a/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java b/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java index a24bceaf..5bb66d81 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java @@ -4,10 +4,7 @@ import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.modules.account.*; import com.suisung.mall.common.pojo.output.TimelineOutput; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; @@ -134,6 +131,18 @@ public interface AccountService { @PostMapping(value = "/admin/account/accountController/saveOrUpdateUserBase") boolean saveOrUpdateUserBase(@RequestBody AccountUserBase accountUserBase); + @RequestMapping(value = "/admin/account/accountController/saveOrUpdateUserBase2", method = RequestMethod.POST) + AccountUserBase saveOrUpdateUserBase2(@RequestBody AccountUserBase accountUserBase); + + /** + * 判断一个店铺是否存在某个昵称的会员 + * @param nickname + * @param storeId + * @return + */ + @PostMapping(value = "/admin/account/accountController/existByNickname") + boolean existByNickname(@RequestParam(name = "nickname") String nickname, @RequestParam(name = "storeId") String storeId); + @PostMapping(value = "/admin/account/accountController/editPassword") CommonResult editPassword(@RequestParam(name = "user_id") Integer user_id, @RequestParam(name = "user_password") String user_password); diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/res/PayAccRespFieldsRes.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/res/PayAccRespFieldsRes.java new file mode 100644 index 00000000..92f278ea --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/res/PayAccRespFieldsRes.java @@ -0,0 +1,39 @@ +/* + * 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.res; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 微信场景下返回acc_resp_fields域 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PayAccRespFieldsRes implements Serializable { + private String prepay_id; + private String pay_sign; + private String app_id; + private String time_stamp; + private String nonce_str; + @JsonProperty("package") + private String pkg; + private String sign_type; + private String partner_id; + private String sub_mch_id; + private String code_image; + private String code; + private String redirect_url; + private String best_pay_info; +} diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java index 3ef84b18..d6df9e5f 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java @@ -9,11 +9,34 @@ package com.suisung.mall.pay.service; import cn.hutool.json.JSONObject; +import com.suisung.mall.common.pojo.res.PayAccRespFieldsRes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface LakalaService { + /** + * 初始化拉卡拉支付参数 + */ + void doInit(); + JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId); + + /** + * 拉卡拉预下单 + * + * @param merchantNo 商户号 + * @param termNo 终端号 + * @param xcxAppId 小程序appid + * @param openId openid + * @param orderId 订单号 + * @param subject 订单标题 + * @param totalAmount 订单金额 + * @param notifyURL 回调地址 + * @param requestIP 请求ip + * @param remark 备注 + * @return + */ + PayAccRespFieldsRes transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark); } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java index bbe8eac4..4d249344 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java @@ -9,6 +9,7 @@ package com.suisung.mall.pay.service.impl; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.ijpay.core.kit.IpKit; import com.lkl.laop.sdk.Config2; @@ -18,6 +19,8 @@ import com.lkl.laop.sdk.request.V3LabsTransPreorderRequest; import com.lkl.laop.sdk.request.model.V3LabsTradeLocationInfo; import com.lkl.laop.sdk.request.model.V3LabsTradePreorderWechatBus; import com.suisung.mall.common.exception.ApiException; +import com.suisung.mall.common.pojo.res.PayAccRespFieldsRes; +import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.pay.service.LakalaService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -154,7 +157,77 @@ public class LakalaServiceImpl implements LakalaService { return JSONUtil.parseObj(responseStr); } catch (SDKException e) { log.error("transPreOrder error", e); - throw new ApiException("支付失败:",e); + throw new ApiException(I18nUtil._("获取公众号绑定信息失败!"), e); + } + + } + + /** + * 拉卡拉预下单 + * + * @param merchantNo 商户号 + * @param termNo 终端号 + * @param xcxAppId 小程序appid + * @param openId openid + * @param orderId 订单号 + * @param subject 订单标题 + * @param totalAmount 订单金额 + * @param notifyURL 回调地址 + * @param requestIP 请求ip + * @param remark 备注 + * @return + * */ + @Override + public PayAccRespFieldsRes transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark) { + // 1. 配置初始化 + doInit(); + + if (StrUtil.isBlank(merchantNo)) { + merchantNo = this.merchantNo; + } + + if (StrUtil.isBlank(termNo)) { + termNo = this.termNo; + } + + //2. 装配数据 + /*** 微信主扫场景示例 */ + V3LabsTransPreorderRequest v3LabsTransPreorderWechatReq = new V3LabsTransPreorderRequest(); + v3LabsTransPreorderWechatReq.setMerchantNo(merchantNo); + v3LabsTransPreorderWechatReq.setTermNo(termNo); + v3LabsTransPreorderWechatReq.setOutTradeNo(orderId); + v3LabsTransPreorderWechatReq.setSubject(subject); + //微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 翼支付: BESTPAY 苏宁易付宝: SUNING 拉卡拉支付账户:LKLACC 网联小钱包:NUCSPAY 京东钱包:JD + v3LabsTransPreorderWechatReq.setAccountType("WECHAT"); + // 41:NATIVE((ALIPAY,云闪付支持,京东白条分期)51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,翼支付JS支付、拉卡拉钱包支付)71:微信小程序支付 61:APP支付(微信APP支付) + v3LabsTransPreorderWechatReq.setTransType("51"); + v3LabsTransPreorderWechatReq.setTotalAmount(totalAmount); + v3LabsTransPreorderWechatReq.setNotifyUrl(notifyURL); + v3LabsTransPreorderWechatReq.setRemark(remark); + + //地址位置信息 + V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo = new V3LabsTradeLocationInfo(requestIP); + v3LabsTransPreorderWechatReq.setLocationInfo(v3LabsTradePreorderLocationInfo); + + //微信主扫场景下 acc_busi_fields 域内容 + V3LabsTradePreorderWechatBus wechatBus = new V3LabsTradePreorderWechatBus(); + wechatBus.setSubAppid(xcxAppId); // 小程序appId + wechatBus.setUserId(openId); // 微信 openId + v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus); + + try { + //3. 发送请求 + String responseStr = LKLSDK.httpPost(v3LabsTransPreorderWechatReq); + if (StrUtil.isBlank(responseStr)) { + return null; + } + + PayAccRespFieldsRes res = JSONUtil.parseObj(responseStr).get("acc_resp_fields", PayAccRespFieldsRes.class); + //4. 响应 + return res; + } catch (SDKException e) { + log.error("拉卡拉支付出错:", e); + throw new ApiException(I18nUtil._("支付失败:"), e); } } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java index dced6c35..40e0550c 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java @@ -32,7 +32,6 @@ import com.ijpay.wxpay.WxPayApi; import com.ijpay.wxpay.WxPayApiConfig; import com.ijpay.wxpay.WxPayApiConfigKit; import com.ijpay.wxpay.enums.WxApiType; -import com.ijpay.wxpay.enums.WxDomain; import com.ijpay.wxpay.model.RefundModel; import com.ijpay.wxpay.model.UnifiedOrderModel; import com.suisung.mall.common.api.*; @@ -48,6 +47,7 @@ import com.suisung.mall.common.modules.order.ShopOrderInfo; import com.suisung.mall.common.modules.order.ShopOrderReturn; import com.suisung.mall.common.modules.pay.*; import com.suisung.mall.common.modules.pay.dto.ItemActivityInfoDTO; +import com.suisung.mall.common.pojo.res.PayAccRespFieldsRes; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.LogUtil; @@ -113,6 +113,8 @@ public class PayUserPayServiceImpl extends BaseServiceImpl params = UnifiedOrderModel.builder() + .appid(field.getApp_id()) + .mch_id(field.getSub_mch_id()) + .openid(openId) + .out_trade_no(out_trade_no) + .total_fee(total_fee) // 订单总金额,单位为分 + .notify_url(notifyUrl) + .trade_type(TradeType.JSAPI.getTradeType()) + .spbill_create_ip(requestIP) + .time_start(DateUtil.format(new Date(), "yyyyMMddHHmmss")) + .nonce_str(field.getNonce_str()) + .body(subject) // 商品描述 + .goods_tag(trade_remark)// 订单优惠标记 + .attach("") //自定义数据说明 + .build() + .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + + String xmlResult = WxPayApi.pushOrder(false, params); + Map resultMap = WxPayKit.xmlToMap(xmlResult); + String returnCode = resultMap.get("return_code"); + String returnMsg = resultMap.get("return_msg"); + + Map data = new HashMap(); + data.put("code", 1); + data.put("data", new Object()); + data.put("message", returnMsg); + + if (!WxPayKit.codeIsOk(returnCode)) { + setResponseBody(response, data); + return; + } + + String resultCode = resultMap.get("result_code"); + if (!WxPayKit.codeIsOk(resultCode)) { + setResponseBody(response, data); + return; + } + + // 预支付订单 Id + String prepayId = resultMap.get("prepay_id"); + Map packageParams = Convert.toMap(String.class, Object.class, WxPayKit.prepayIdCreateSign(prepayId, appId, wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256)); + data.put("status", 200); + + Map result = new HashMap(); + result.put("data", packageParams); + result.put("statusCode", 200); + data.put("data", result); + setResponseBody(response, data); + } + /** * 设置响应 body * @@ -578,7 +663,7 @@ public class PayUserPayServiceImpl extends BaseServiceImpl memberList) { - return null; + return syncThirdDataService.saveOrUpdateMemberBatch(appKey, sign, memberList); } 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 a1aee86e..fc909f48 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 @@ -22,7 +22,7 @@ public interface SyncThirdDataService { * @param categoryListJSON * @return */ - ThirdApiRes saveOrUpdateShopBaseProductCategoryBatch(String appId, String sign, JSONArray categoryListJSON); + ThirdApiRes saveOrUpdateShopBaseProductCategoryBatch(String appKey, String sign, JSONArray categoryListJSON); /** * 批量保存商品品牌记录 @@ -30,19 +30,19 @@ public interface SyncThirdDataService { * @param brandListJSON * @return */ - ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(String appId, String sign, JSONArray brandListJSON); + ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(String appKey, String sign, JSONArray brandListJSON); /** * 批量保存商品记录 * @param goodsListJSON * @return */ - ThirdApiRes saveOrUpdateGoodsBatch(String appId, String sign, JSONArray goodsListJSON); + ThirdApiRes saveOrUpdateGoodsBatch(String appKey, String sign, JSONArray goodsListJSON); /** * 批量保存会员记录 * @param memberList * @return */ - ThirdApiRes saveOrUpdateMemberBatch(String appId, String sign, List memberList); + ThirdApiRes saveOrUpdateMemberBatch(String appKey, String sign, 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 cd922480..79bb600f 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 @@ -92,13 +92,13 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { * @return */ @Override - public ThirdApiRes saveOrUpdateShopBaseProductCategoryBatch(String appId, String sign, JSONArray categoryListJSON) { - if (StrUtil.isBlank(appId) || StrUtil.isBlank(sign) || ObjectUtil.isEmpty(categoryListJSON)) { + public ThirdApiRes saveOrUpdateShopBaseProductCategoryBatch(String appKey, String sign, JSONArray categoryListJSON) { + if (StrUtil.isBlank(appKey) || StrUtil.isBlank(sign) || ObjectUtil.isEmpty(categoryListJSON)) { return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!")); } // 验签、appid,必要参数判断 - SyncApp syncApp = syncAppService.checkAppSign(appId, sign, categoryListJSON.toString()); + SyncApp syncApp = syncAppService.checkAppSign(appKey, sign, categoryListJSON.toString()); if (syncApp == null) { return new ThirdApiRes().fail(1001, I18nUtil._("签名有误!")); } @@ -179,13 +179,13 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { * @return */ @Override - public ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(String appId, String sign, JSONArray brandListJSON) { - if (StrUtil.isBlank(appId) || StrUtil.isBlank(sign) || ObjectUtil.isEmpty(brandListJSON)) { + public ThirdApiRes saveOrUpdateShopBaseProductBrandBatch(String appKey, String sign, JSONArray brandListJSON) { + if (StrUtil.isBlank(appKey) || StrUtil.isBlank(sign) || ObjectUtil.isEmpty(brandListJSON)) { return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!")); } // 验签、appid,必要参数判断 - SyncApp syncApp = syncAppService.checkAppSign(appId, sign, brandListJSON.toString()); + SyncApp syncApp = syncAppService.checkAppSign(appKey, sign, brandListJSON.toString()); if (syncApp == null) { return new ThirdApiRes().fail(1001, I18nUtil._("签名有误!")); } @@ -230,23 +230,18 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { * @return */ @Override - public ThirdApiRes saveOrUpdateGoodsBatch(String appId, String sign, JSONArray goodsListJSON) { - if (StrUtil.isBlank(appId) || StrUtil.isBlank(sign) || ObjectUtil.isEmpty(goodsListJSON)) { + public ThirdApiRes saveOrUpdateGoodsBatch(String appKey, String sign, JSONArray goodsListJSON) { + if (StrUtil.isBlank(appKey) || StrUtil.isBlank(sign) || ObjectUtil.isEmpty(goodsListJSON)) { return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!")); } // 验签、appid,必要参数判断 - SyncApp syncApp = syncAppService.checkAppSign(appId, sign, goodsListJSON.toString()); + SyncApp syncApp = syncAppService.checkAppSign(appKey, sign, goodsListJSON.toString()); if (syncApp == null) { return new ThirdApiRes().fail(1001, I18nUtil._("签名有误!")); } String storeId = syncApp.getStore_id(); - 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 + "条!")); } @@ -279,7 +274,6 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { 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()); @@ -372,19 +366,18 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { * @return */ @Override - public ThirdApiRes saveOrUpdateMemberBatch(String appId, String sign, List memberList) { - if (StrUtil.isBlank(appId) || StrUtil.isBlank(sign) || CollUtil.isEmpty(memberList)) { + public ThirdApiRes saveOrUpdateMemberBatch(String appKey, String sign, List memberList) { + if (StrUtil.isBlank(appKey) || StrUtil.isBlank(sign) || CollUtil.isEmpty(memberList)) { return new ThirdApiRes().fail(1003, I18nUtil._("缺少必要参数!")); } // 验签、appid,必要参数判断 - SyncApp syncApp = syncAppService.checkAppSign(appId, sign, JSONUtil.toJsonStr(memberList)); + SyncApp syncApp = syncAppService.checkAppSign(appKey, sign, JSONUtil.toJsonStr(memberList)); if (syncApp == null) { return new ThirdApiRes().fail(1001, I18nUtil._("签名有误!")); } String storeId = syncApp.getStore_id(); - if (memberList.size() > limitCnt) { return new ThirdApiRes().fail(1004, I18nUtil._("单次同步记录最多" + limitCnt + "条!")); } @@ -398,9 +391,10 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { accountUserBase.setUser_state(2);// 状态(ENUM):0-锁定;1-未激活;2-已激活; accountUserBase.setUser_is_admin(0); accountUserBase.setStore_ids(storeId); - accountUserBase.setRights_group_id("0");// 普通用户 + accountUserBase.setRights_group_id("0");// 普通用户,不是商家 accountUserBase.setUser_type("0"); + // 默认给了随机密码和盐,token String user_key = IdUtil.simpleUUID(); String user_salt = IdUtil.simpleUUID(); String user_token = IdUtil.simpleUUID(); @@ -409,9 +403,19 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { accountUserBase.setUser_key(user_key); accountUserBase.setUser_password(SecureUtil.md5(user_salt + SecureUtil.md5(IdUtil.simpleUUID()))); - Boolean success = accountService.saveOrUpdateUserBase(accountUserBase); + // 判断店铺是不是存在该昵称的会员了? + Boolean exists = accountService.existByNickname(member.getUser_nickname(), storeId); + if (exists) { + continue; + } - Integer userId = accountUserBase.getUser_id(); + AccountUserBase accountUserBase2 = accountService.saveOrUpdateUserBase2(accountUserBase); + + // 新增用户记录后,不知道有没有返回 userId ? + Integer userId = accountUserBase2.getUser_id(); + if(userId==null || userId<=0){ + continue; + } // account_user_info AccountUserInfo accountUserInfo = new AccountUserInfo(); @@ -425,7 +429,7 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { 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); + boolean success = accountService.saveOrUpdateUserInfo(accountUserInfo); if (member.getUser_money() != null || member.getUser_points() != null) { // 用户支付资源,积分,余额