| @@ -0,0 +1,40 @@ | |||||
| package com.iformall.controller.base; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.RestController; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.domain.po.WxMallVersion; | |||||
| import com.iformall.enums.EnumDouyinApplicationVersion; | |||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.service.WxMallService; | |||||
| @RestController | |||||
| public class DouyinBaseController extends BaseController{ | |||||
| @Autowired | |||||
| private WxMallService wxMallService; | |||||
| private Integer getCurrentApplicationVersion() { | |||||
| WxMallVersion mallVersion = wxMallService.getMallVersion(getTenantInfo()); | |||||
| if (null == mallVersion) { | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"mallVersion未查询到配置"); | |||||
| } | |||||
| Integer v = mallVersion.getDouyinApplicationVersion() ; | |||||
| if (v == null) { | |||||
| return 0; | |||||
| } | |||||
| return v; | |||||
| } | |||||
| public boolean isGoodLifeSaas() throws Exception{ | |||||
| Integer _e = getCurrentApplicationVersion(); | |||||
| if (_e.intValue() == EnumDouyinApplicationVersion.GOODLIFE_SAAS.getCode().intValue()) { | |||||
| return true; | |||||
| }else if (_e.intValue() == EnumDouyinApplicationVersion.WEB.getCode().intValue()) { | |||||
| return false; | |||||
| }else { | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"mallVersion[douyinApplicationVersion]配置错误"); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -4,13 +4,22 @@ package com.iformall.controller.basic; | |||||
| import com.iformall.annotation.SystemControllerLog; | import com.iformall.annotation.SystemControllerLog; | ||||
| import com.iformall.annotation.TenantIgnore; | import com.iformall.annotation.TenantIgnore; | ||||
| import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
| import com.iformall.common.Result; | |||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.controller.base.BaseController; | import com.iformall.controller.base.BaseController; | ||||
| import com.iformall.controller.base.DouyinBaseController; | |||||
| import com.iformall.domain.po.TtGoodsCategory; | import com.iformall.domain.po.TtGoodsCategory; | ||||
| import com.iformall.domain.po.TtGoodsCategoryNew; | |||||
| import com.iformall.enums.EnumDouyinApplicationVersion; | |||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.service.TtGoodsCategoryService; | import com.iformall.service.TtGoodsCategoryService; | ||||
| import com.iformall.utils.DateUtils; | import com.iformall.utils.DateUtils; | ||||
| import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import java.lang.reflect.InvocationTargetException; | |||||
| import org.apache.commons.beanutils.BeanUtils; | |||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| @@ -23,7 +32,7 @@ import org.springframework.web.bind.annotation.*; | |||||
| */ | */ | ||||
| @RestController | @RestController | ||||
| @RequestMapping("goodsCategory") | @RequestMapping("goodsCategory") | ||||
| public class TtGoodsCategoryController extends BaseController { | |||||
| public class TtGoodsCategoryController extends DouyinBaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | private final Logger logger = LoggerFactory.getLogger(this.getClass()); | ||||
| @Autowired | @Autowired | ||||
| @@ -36,7 +45,18 @@ public class TtGoodsCategoryController extends BaseController { | |||||
| @SystemControllerLog(description = "列表") | @SystemControllerLog(description = "列表") | ||||
| public ResultData treeList() { | public ResultData treeList() { | ||||
| logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::treeList"); | logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::treeList"); | ||||
| return new ResultData(ttGoodsCategoryService.findTreeList()); | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| return new ResultData(ttGoodsCategoryService.findTreeList()); | |||||
| }else { | |||||
| return new ResultData(ttGoodsCategoryService.findTreeListForNew()); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("treeList error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| @TenantIgnore | @TenantIgnore | ||||
| @@ -49,7 +69,17 @@ public class TtGoodsCategoryController extends BaseController { | |||||
| if(categoryId == null){ | if(categoryId == null){ | ||||
| categoryId = 0; | categoryId = 0; | ||||
| } | } | ||||
| return new ResultData(ttGoodsCategoryService.categoryGet(categoryId)); | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| return new ResultData(ttGoodsCategoryService.categoryGet(categoryId,false)); | |||||
| }else { | |||||
| return new ResultData(ttGoodsCategoryService.categoryGet(categoryId,true)); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("categoryGet error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| @TenantIgnore | @TenantIgnore | ||||
| @@ -59,7 +89,17 @@ public class TtGoodsCategoryController extends BaseController { | |||||
| @SystemControllerLog(description = "同步") | @SystemControllerLog(description = "同步") | ||||
| public ResultData syncGetTt() { | public ResultData syncGetTt() { | ||||
| logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::syncGetTt"); | logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::syncGetTt"); | ||||
| ttGoodsCategoryService.syncGet(); | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| ttGoodsCategoryService.syncGet(false); | |||||
| }else { | |||||
| ttGoodsCategoryService.syncGet(true); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("syncGetTt error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| return new ResultData(); | return new ResultData(); | ||||
| } | } | ||||
| @@ -70,7 +110,18 @@ public class TtGoodsCategoryController extends BaseController { | |||||
| @SystemControllerLog(description = "列表") | @SystemControllerLog(description = "列表") | ||||
| public ResultData allTreeList() { | public ResultData allTreeList() { | ||||
| logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::allTreeList"); | logger.debug("[" + getIpAddr() + "] TtMerchantPoiController::allTreeList"); | ||||
| return new ResultData(ttGoodsCategoryService.findAllTreeList()); | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| return new ResultData(ttGoodsCategoryService.findAllTreeList()); | |||||
| }else { | |||||
| return new ResultData(ttGoodsCategoryService.findAllTreeListForNew()); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("allTreeList error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| @TenantIgnore | @TenantIgnore | ||||
| @@ -84,8 +135,27 @@ public class TtGoodsCategoryController extends BaseController { | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | ||||
| } | } | ||||
| record.setSoftwareFee(null); | record.setSoftwareFee(null); | ||||
| ttGoodsCategoryService.updateFee(record); | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| ttGoodsCategoryService.updateFee(record); | |||||
| }else { | |||||
| try { | |||||
| TtGoodsCategoryNew gn = new TtGoodsCategoryNew(); | |||||
| BeanUtils.copyProperties(gn, record); | |||||
| ttGoodsCategoryService.updateFeeForNew(gn); | |||||
| } catch (IllegalAccessException e) { | |||||
| logger.error("setServiceFee error",e); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage()); | |||||
| } catch (InvocationTargetException e) { | |||||
| logger.error("setServiceFee error",e); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage()); | |||||
| } | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("setServiceFee error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| return new ResultData(); | return new ResultData(); | ||||
| } | } | ||||
| @@ -100,8 +170,28 @@ public class TtGoodsCategoryController extends BaseController { | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | ||||
| } | } | ||||
| record.setServiceFee(null); | record.setServiceFee(null); | ||||
| ttGoodsCategoryService.updateFee(record); | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| ttGoodsCategoryService.updateFee(record); | |||||
| }else { | |||||
| try { | |||||
| TtGoodsCategoryNew gn = new TtGoodsCategoryNew(); | |||||
| BeanUtils.copyProperties(gn, record); | |||||
| ttGoodsCategoryService.updateFeeForNew(gn); | |||||
| } catch (IllegalAccessException e) { | |||||
| logger.error("setServiceFee error",e); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage()); | |||||
| } catch (InvocationTargetException e) { | |||||
| logger.error("setServiceFee error",e); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getMessage()); | |||||
| } | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("setSoftwareFee error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| return new ResultData(); | return new ResultData(); | ||||
| } | } | ||||
| @@ -7,6 +7,7 @@ import com.iformall.common.ErrorCode; | |||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.controller.base.BaseController; | import com.iformall.controller.base.BaseController; | ||||
| import com.iformall.controller.base.DouyinBaseController; | |||||
| import com.iformall.controller.mem.AsyncTask; | import com.iformall.controller.mem.AsyncTask; | ||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.po.base.BaseEntity; | import com.iformall.domain.po.base.BaseEntity; | ||||
| @@ -44,7 +45,7 @@ import javax.servlet.http.HttpServletResponse; | |||||
| */ | */ | ||||
| @RestController | @RestController | ||||
| @RequestMapping("merchantPoi") | @RequestMapping("merchantPoi") | ||||
| public class TtMerchantPoiController extends BaseController { | |||||
| public class TtMerchantPoiController extends DouyinBaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | private final Logger logger = LoggerFactory.getLogger(this.getClass()); | ||||
| @Autowired | @Autowired | ||||
| @@ -53,9 +54,6 @@ public class TtMerchantPoiController extends BaseController { | |||||
| @Autowired | @Autowired | ||||
| private TtMerchantPoiService ttMerchantPoiService; | private TtMerchantPoiService ttMerchantPoiService; | ||||
| @Autowired | |||||
| private WxMallService wxMallService; | |||||
| @Autowired | @Autowired | ||||
| StringRedisTemplate stringRedisTemplate; | StringRedisTemplate stringRedisTemplate; | ||||
| @@ -234,43 +232,37 @@ public class TtMerchantPoiController extends BaseController { | |||||
| // return ttMerchantPoiService.spuStockSync(getTenantInfo(),couponChannelId); | // return ttMerchantPoiService.spuStockSync(getTenantInfo(),couponChannelId); | ||||
| // } | // } | ||||
| private Integer getCurrentApplicationVersion() { | |||||
| WxMallVersion mallVersion = wxMallService.getMallVersion(getTenantInfo()); | |||||
| if (null == mallVersion) { | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"mallVersion未查询到配置"); | |||||
| } | |||||
| Integer v = mallVersion.getDouyinApplicationVersion() ; | |||||
| if (v == null) { | |||||
| return 0; | |||||
| } | |||||
| return v; | |||||
| } | |||||
| @TenantIgnore | @TenantIgnore | ||||
| @RequestMapping("/exportTemplate") | @RequestMapping("/exportTemplate") | ||||
| public void exportTemplate(HttpServletRequest request, HttpServletResponse response) { | public void exportTemplate(HttpServletRequest request, HttpServletResponse response) { | ||||
| Integer _e = getCurrentApplicationVersion(); | |||||
| if (_e.intValue() == EnumDouyinApplicationVersion.WEB.getCode().intValue()) { | |||||
| ttMerchantPoiService.exportTemplate(request, response,false); | |||||
| }else if (_e.intValue() == EnumDouyinApplicationVersion.MINIAPP.getCode().intValue()) { | |||||
| ttMerchantPoiService.exportTemplate(request, response,true); | |||||
| }else { | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"mallVersion[douyinApplicationVersion]配置错误"); | |||||
| } | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| ttMerchantPoiService.exportTemplate(request, response,false); | |||||
| }else { | |||||
| ttMerchantPoiService.exportTemplate(request, response,true); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("allTreeList error.",e); | |||||
| throw new MallinkException(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| @TenantIgnore | @TenantIgnore | ||||
| @PostMapping(value = "/importPoi", consumes = "multipart/*") | @PostMapping(value = "/importPoi", consumes = "multipart/*") | ||||
| @SystemControllerLog(description = "poi-导入数据") | @SystemControllerLog(description = "poi-导入数据") | ||||
| public ResultData importPoi(@RequestParam("file") MultipartFile mFile) { | public ResultData importPoi(@RequestParam("file") MultipartFile mFile) { | ||||
| Integer _e = getCurrentApplicationVersion(); | |||||
| if (_e.intValue() == EnumDouyinApplicationVersion.WEB.getCode().intValue()) { | |||||
| return processImport(mFile,false); | |||||
| }else if (_e.intValue() == EnumDouyinApplicationVersion.MINIAPP.getCode().intValue()) { | |||||
| return processImport(mFile,true); | |||||
| }else { | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"mallVersion[douyinApplicationVersion]配置错误"); | |||||
| } | |||||
| try { | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| return processImport(mFile,false); | |||||
| }else { | |||||
| return processImport(mFile,true); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("allTreeList error.",e); | |||||
| throw new MallinkException(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| private ResultData processImport(MultipartFile mFile,boolean isNew) { | private ResultData processImport(MultipartFile mFile,boolean isNew) { | ||||
| @@ -3,8 +3,10 @@ package com.iformall.controller.market; | |||||
| import com.iformall.annotation.SystemControllerLog; | import com.iformall.annotation.SystemControllerLog; | ||||
| import com.iformall.annotation.TenantIgnore; | import com.iformall.annotation.TenantIgnore; | ||||
| import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
| import com.iformall.common.Result; | |||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.controller.base.BaseController; | import com.iformall.controller.base.BaseController; | ||||
| import com.iformall.controller.base.DouyinBaseController; | |||||
| import com.iformall.domain.po.WxCoupon; | import com.iformall.domain.po.WxCoupon; | ||||
| import com.iformall.domain.po.base.BaseEntity; | import com.iformall.domain.po.base.BaseEntity; | ||||
| import com.iformall.domain.vo.TtCouponChannelVo; | import com.iformall.domain.vo.TtCouponChannelVo; | ||||
| @@ -27,7 +29,7 @@ import org.springframework.web.bind.annotation.*; | |||||
| @RestController | @RestController | ||||
| @RequestMapping("ttgoods") | @RequestMapping("ttgoods") | ||||
| @Api(description = "抖音商品库") | @Api(description = "抖音商品库") | ||||
| public class TtCouponGoodsController extends BaseController { | |||||
| public class TtCouponGoodsController extends DouyinBaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | private final Logger logger = LoggerFactory.getLogger(this.getClass()); | ||||
| @Autowired | @Autowired | ||||
| @@ -107,17 +109,23 @@ public class TtCouponGoodsController extends BaseController { | |||||
| if(coupon == null){ | if(coupon == null){ | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | ||||
| } | } | ||||
| try { | try { | ||||
| GoodsTemplateGet goodsTemplateGet = ttMerchantPoiService.getTtWebService(getTenantInfo()).getGoodsService().templateGet(categoryId, productType); | |||||
| ttGoodsCategoryService.adminIsShow(goodsTemplateGet); | |||||
| ttGoodsCategoryService.handTemplate(goodsTemplateGet,coupon); | |||||
| return new ResultData(goodsTemplateGet); | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | |||||
| } | |||||
| boolean isSaas = this.isGoodLifeSaas(); | |||||
| if (!isSaas) { | |||||
| GoodsTemplateGet goodsTemplateGet = ttMerchantPoiService.getTtWebService(getTenantInfo()).getGoodsService().templateGet(categoryId, productType); | |||||
| ttGoodsCategoryService.adminIsShow(goodsTemplateGet); | |||||
| ttGoodsCategoryService.handTemplate(goodsTemplateGet,coupon); | |||||
| return new ResultData(goodsTemplateGet); | |||||
| }else { | |||||
| GoodsTemplateGet goodsTemplateGet = ttMerchantPoiService.getTtGoodLifeSassService(getTenantInfo()).getGoodLifeSaasGoodsService().templateGet(categoryId, productType); | |||||
| ttGoodsCategoryService.adminIsShow(goodsTemplateGet); | |||||
| ttGoodsCategoryService.handTemplate(goodsTemplateGet,coupon); | |||||
| return new ResultData(goodsTemplateGet); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("allTreeList error.",e); | |||||
| return new ResultData(Result.ERROR,e.getMessage()); | |||||
| } | |||||
| } | } | ||||
| @TenantIgnore | @TenantIgnore | ||||
| @@ -5,3 +5,6 @@ CREATE TABLE `wx_mall_version` ( | |||||
| `douyin_application_version` int(3) NOT NULL COMMENT '抖音应用版本', | `douyin_application_version` int(3) NOT NULL COMMENT '抖音应用版本', | ||||
| PRIMARY KEY (`id`) | PRIMARY KEY (`id`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='商场'; | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='商场'; | ||||
| create table tt_goods_category_new like tt_goods_category; | |||||
| @@ -0,0 +1,57 @@ | |||||
| package com.iformall.domain.po; | |||||
| import com.baomidou.mybatisplus.annotation.TableField; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import com.iformall.domain.po.base.BaseEntity; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| @TableName(value = "tt_goods_category_new") | |||||
| @Data | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| public class TtGoodsCategoryNew extends BaseEntity { | |||||
| protected Integer id;//category_id | |||||
| @io.swagger.annotations.ApiModelProperty(value="层级",name="level") | |||||
| private Integer level; | |||||
| @io.swagger.annotations.ApiModelProperty(value="",name="name") | |||||
| private String name; | |||||
| @io.swagger.annotations.ApiModelProperty(value="",name="parentId") | |||||
| private Integer parentId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="类目是否开放",name="enable") | |||||
| private Integer enable; | |||||
| @io.swagger.annotations.ApiModelProperty(value="是否是叶子结点",name="isLeaf") | |||||
| private Integer isLeaf; | |||||
| @io.swagger.annotations.ApiModelProperty(value="",name="serviceFee") | |||||
| private Integer serviceFee; | |||||
| @io.swagger.annotations.ApiModelProperty(value="",name="softwareFee") | |||||
| private Integer softwareFee; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||||
| private Date createDate; | |||||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||||
| private Date updateDate; | |||||
| @io.swagger.annotations.ApiModelProperty(value="",name="isDel") | |||||
| private Integer isDel; | |||||
| @TableField(exist = false) | |||||
| protected List<TtGoodsCategoryNew> child; | |||||
| @TableField(exist = false) | |||||
| private List<Integer> categoryIds;//ids | |||||
| @TableField(exist = false) | |||||
| private List<Integer> parentIds; | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.basic; | |||||
| import cn.binarywang.wx.miniapp.config.WxMaConfig; | import cn.binarywang.wx.miniapp.config.WxMaConfig; | ||||
| import com.iformall.douyin.web.config.TtWebConfig; | import com.iformall.douyin.web.config.TtWebConfig; | ||||
| @@ -10,7 +10,7 @@ import me.chanjar.weixin.common.util.http.RequestHttp; | |||||
| /** | /** | ||||
| * | * | ||||
| */ | */ | ||||
| public interface TtWebService { | |||||
| public interface TtBasicService { | |||||
| /** | /** | ||||
| * 获取access_token. | * 获取access_token. | ||||
| @@ -96,22 +96,4 @@ public interface TtWebService { | |||||
| */ | */ | ||||
| RequestHttp getRequestHttp(); | RequestHttp getRequestHttp(); | ||||
| /** | |||||
| * 返回用户相关接口方法的实现类对象,以方便调用其各个接口. | |||||
| * | |||||
| * @return TtMaUserService | |||||
| */ | |||||
| TtWebShopMatchService getShopMatchService(); | |||||
| /** | |||||
| * 返回用户相关接口方法的实现类对象,以方便调用其各个接口. | |||||
| * | |||||
| * @return TtMaUserService | |||||
| */ | |||||
| TtWebProductService getProductService(); | |||||
| TtWebGoodsService getGoodsService(); | |||||
| TtWebPoiPlanService getPoiPlanService(); | |||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api.impl; | |||||
| package com.iformall.douyin.web.api.basic; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| @@ -34,19 +34,13 @@ import static com.iformall.douyin.web.config.TtWebConstants.ErrorCode.*; | |||||
| * @author | * @author | ||||
| */ | */ | ||||
| @Slf4j | @Slf4j | ||||
| public class TtWebServiceImpl implements TtWebService, RequestHttp<CloseableHttpClient, HttpHost> { | |||||
| private static final JsonParser JSON_PARSER = new JsonParser(); | |||||
| private CloseableHttpClient httpClient; | |||||
| private HttpHost httpProxy; | |||||
| private TtWebConfig ttWebConfig; | |||||
| private TtWebShopMatchService shopMatchService = new TtWebShopMatchServiceImpl(this); | |||||
| private TtWebProductService productService = new TtWebProductServiceImpl(this); | |||||
| private TtWebGoodsService goodService = new TtWebGoodsServiceImpl(this); | |||||
| private TtWebPoiPlanService poiPlanService = new TtWebPoiPlanServiceImpl(this); | |||||
| private int retrySleepMillis = 1000; | |||||
| private int maxRetryTimes = 5; | |||||
| public class TtBasicServiceImpl implements TtBasicService, RequestHttp<CloseableHttpClient, HttpHost> { | |||||
| protected static final JsonParser JSON_PARSER = new JsonParser(); | |||||
| protected CloseableHttpClient httpClient; | |||||
| protected HttpHost httpProxy; | |||||
| protected TtWebConfig ttWebConfig; | |||||
| protected int retrySleepMillis = 1000; | |||||
| protected int maxRetryTimes = 5; | |||||
| protected static final Gson GSON = new Gson(); | protected static final Gson GSON = new Gson(); | ||||
| @@ -274,25 +268,4 @@ public class TtWebServiceImpl implements TtWebService, RequestHttp<CloseableHttp | |||||
| public void setMaxRetryTimes(int maxRetryTimes) { | public void setMaxRetryTimes(int maxRetryTimes) { | ||||
| this.maxRetryTimes = maxRetryTimes; | this.maxRetryTimes = maxRetryTimes; | ||||
| } | } | ||||
| @Override | |||||
| public TtWebShopMatchService getShopMatchService() { | |||||
| return this.shopMatchService; | |||||
| } | |||||
| @Override | |||||
| public TtWebProductService getProductService() { | |||||
| return this.productService; | |||||
| } | |||||
| @Override | |||||
| public TtWebGoodsService getGoodsService() { | |||||
| return this.goodService; | |||||
| } | |||||
| @Override | |||||
| public TtWebPoiPlanService getPoiPlanService() { | |||||
| return this.poiPlanService; | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,154 @@ | |||||
| package com.iformall.douyin.web.api.goodlifesaas; | |||||
| import com.iformall.douyin.web.bean.*; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | |||||
| import java.util.List; | |||||
| /** | |||||
| * 接入商品库 | |||||
| * | |||||
| * @author | |||||
| */ | |||||
| public interface TtGoodLifeSaasGoodsService { | |||||
| /** | |||||
| *0 查询商品品类 | |||||
| */ | |||||
| String CATEGORY_GET = "/goodlife/v1/goods/category/get/"; | |||||
| /** | |||||
| *1 查询商品模板 | |||||
| */ | |||||
| String TEMPLATE_GET = "/goodlife/v1/goods/template/get/"; | |||||
| /** | |||||
| *2 查询商品草稿数据 | |||||
| */ | |||||
| String PRODUCT_DRAFT_GET = "/goodlife/v1/goods/product/draft/get/"; | |||||
| /** | |||||
| *3 查询商品草稿数据列表 | |||||
| */ | |||||
| String PRODUCT_DRAFT_LIST = "/goodlife/v1/goods/product/draft/query/"; | |||||
| /** | |||||
| *4 查询商品线上数据 | |||||
| */ | |||||
| String PRODUCT_ONLINE_GET = "/goodlife/v1/goods/product/online/get/"; | |||||
| /** | |||||
| *5 查询商品线上数据列表 | |||||
| */ | |||||
| String PRODUCT_ONLINE_LIST = "/goodlife/v1/goods/product/online/query/"; | |||||
| /** | |||||
| *6 创建/更新商品 | |||||
| */ | |||||
| String PRODUCT_SAVE = "/goodlife/v1/goods/product/save/"; | |||||
| /** | |||||
| *7 免审修改团购活动 | |||||
| */ | |||||
| String PRODUCT_FREE_AUDIT = "/goodlife/v1/goods/product/free_audit/"; | |||||
| /** | |||||
| *8 创建/更新多SKU商品的SKU列表(团购/代金券不用对接这个接口) | |||||
| */ | |||||
| String SKU_BATCH_SAVE = "/goodlife/v1/goods/sku/batch_save/"; | |||||
| /** | |||||
| *9 上下架商品 | |||||
| */ | |||||
| String PRODUCT_OPERATE = "/goodlife/v1/goods/product/operate/"; | |||||
| /** | |||||
| *10 同步库存 | |||||
| */ | |||||
| String STOCK_SYNC = "/goodlife/v1/goods/stock/sync/"; | |||||
| /** | |||||
| * category_id int FALSE 行业类目ID,返回当前id下的直系子类目信息;传0或者不传,均返回所有一级行业类目 | |||||
| * account_id int FALSE 服务商的入驻商户ID/代运营的商户ID,不传时默认为服务商身份 | |||||
| */ | |||||
| List<GoodsCategory> categoryGet(Integer category_id,Integer account_id) throws WxErrorException; | |||||
| /** | |||||
| * - 查询商品模板,创建商品时的属性列表需与该接口保持一致,否则无法识别 | |||||
| * category_id int TRUE 行业类目;详细见;商品类目表 https://bytedance.feishu.cn/docx/doxcnn02OUCTiKjpmzFR6ItdTye | |||||
| * product_type int TRUE 商品类型 商品类型 1-团购 11-代金券 | |||||
| */ | |||||
| GoodsTemplateGet templateGet(Integer category_id,Integer product_type) throws WxErrorException; | |||||
| /** | |||||
| * - 使用商品ID或外部商品ID查询商品草稿 | |||||
| * - 处于新建审核中、修改审核中、或审核成功、失败的数据可以通过该接口查询到 | |||||
| * - 一次最多查询10个草稿数据 | |||||
| * product_ids string TRUE 商品ID列表(逗号分隔) | |||||
| * out_ids string TRUE 外部商品ID列表(逗号分隔) | |||||
| */ | |||||
| List<Product> productDraftGet(String product_ids, String out_ids) throws WxErrorException ; | |||||
| /** | |||||
| * - 查询本client_key(或绑定的账号)对应的商品草稿列表 | |||||
| * - 处于审核中、或审核成功、失败的数据可以通过该接口查询到 | |||||
| * cursor string FALSE 第一页不传,之后用前一次返回的next_cursor传入进行翻页 | |||||
| * count int FALSE 分页数量,不传默认为5 | |||||
| * status int FALSE 过滤草稿状态,10-审核中 12-审核失败 1-审核通过 | |||||
| * | |||||
| */ | |||||
| ProductPage productDraftListGet(String cursor,Integer count,Integer status) throws WxErrorException ; | |||||
| /** | |||||
| * - - 使用商品ID或外部商品ID查询商品线上数据 | |||||
| * - 线上数据是指:通过审核后可以被用户看到的数据,包括在线、下线状态的数据 | |||||
| * product_ids string TRUE 商品ID列表(逗号分隔) | |||||
| * out_ids string TRUE 外部商品ID列表(逗号分隔) | |||||
| */ | |||||
| List<Product> productOnlineGet(String product_ids, String out_ids) throws WxErrorException ; | |||||
| /** | |||||
| * - 查询本client_key(或绑定的账号)对应的商品线上列表 | |||||
| * - 处于在线、下线、封禁状态的数据可以通过该接口查询到 | |||||
| * cursor string FALSE 第一页不传,之后用前一次返回的next_cursor传入进行翻页 | |||||
| * count int FALSE 分页数量,不传默认为5 | |||||
| * status int FALSE 过滤在线状态 1-在线 2-下线 3-封禁 | |||||
| * | |||||
| */ | |||||
| ProductPage productOnlineListGet(String cursor,Integer count,Integer status) throws WxErrorException ; | |||||
| /** | |||||
| * - 创建或更新商品 | |||||
| * - 对于同一服务商,相同的out_id会被认为是同一商品,重复创建会被覆盖 | |||||
| * - 商品和SKU属性,需要通过模板获取 | |||||
| * return - product_id 创建/更新商品成功后产生,与老接口spu_id一致 | |||||
| */ | |||||
| String productSave(Product product) throws WxErrorException ; | |||||
| /** | |||||
| * - 免审修改团购活动 | |||||
| * product_id string TRUE 商品id (商品id或商品外部id 选其一) | |||||
| * out_id string TRUE 商品外部id (商品id或商品外部id 选其一) | |||||
| * sold_end_time int64 FALSE 售卖结束时间 | |||||
| * stock_qty int64 FALSE 总库存 | |||||
| */ | |||||
| boolean productFreeAudit(String productId,String outId,Long soldEndTime,Integer stockQty) throws WxErrorException ; | |||||
| /** | |||||
| * 创建/更新多SKU商品的SKU列表(团购/代金券不用对接这个接口) | |||||
| * | |||||
| * @return | |||||
| */ | |||||
| boolean skuBatchSave(ProductSku sku) throws WxErrorException ; | |||||
| /** | |||||
| * 上下架商品 | |||||
| * product_id string TRUE 商品id(若有第三方id可不传) | |||||
| * out_id string TRUE 商品第三方id | |||||
| * op_type int64 TRUE 1-上线 2-下线 | |||||
| * @return | |||||
| */ | |||||
| boolean productOperate(String product_id,String out_id,Integer op_type) throws WxErrorException ; | |||||
| /** | |||||
| * 同步库存 | |||||
| * product_id string TRUE 商品id(若有第三方id可不传) | |||||
| * out_id string TRUE 商品第三方id | |||||
| * stock StockStruct TRUE 库存信息 | |||||
| * - limit_type int TRUE 库存上限类型,为2时stock_qty和avail_qty字段无意义 1-有限库存 2-无限库存 | |||||
| * - stock_qty int TRUE 总库存,limit_type=2时无意义 | |||||
| */ | |||||
| boolean stockSync(String product_id,String out_id,Integer stock) throws WxErrorException ; | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| package com.iformall.douyin.web.api.goodlifesaas; | |||||
| import com.iformall.douyin.web.api.basic.TtBasicService; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsService; | |||||
| import com.iformall.douyin.web.api.web.TtWebPoiPlanService; | |||||
| import com.iformall.douyin.web.api.web.TtWebProductService; | |||||
| import com.iformall.douyin.web.api.web.TtWebShopMatchService; | |||||
| /** | |||||
| * | |||||
| */ | |||||
| public interface TtGoodLifeSaasService extends TtBasicService{ | |||||
| TtGoodLifeSaasGoodsService getGoodLifeSaasGoodsService(); | |||||
| } | |||||
| @@ -0,0 +1,273 @@ | |||||
| package com.iformall.douyin.web.api.goodlifesaas.impl; | |||||
| import com.alibaba.fastjson.TypeReference; | |||||
| import com.google.gson.*; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasGoodsService; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasService; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsCategoryGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsPostRequestExecutor; | |||||
| import com.iformall.douyin.web.bean.*; | |||||
| import lombok.AllArgsConstructor; | |||||
| import me.chanjar.weixin.common.error.WxError; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import java.util.HashMap; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| /** | |||||
| * | |||||
| */ | |||||
| @AllArgsConstructor | |||||
| public class TtGoodLifeSaasGoodsServiceImpl implements TtGoodLifeSaasGoodsService { | |||||
| private static final Gson GSON = new GsonBuilder().create(); | |||||
| private TtGoodLifeSaasService service; | |||||
| @Override | |||||
| public List<GoodsCategory> categoryGet(Integer category_id, Integer account_id) throws WxErrorException { | |||||
| TtWebGoodsCategoryGetRequestExecutor getExecutor = new TtWebGoodsCategoryGetRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.CATEGORY_GET; | |||||
| String param = "category_id=" + category_id; | |||||
| if(account_id != null){ | |||||
| param += "&account_id=" + account_id; | |||||
| } | |||||
| String result = this.service.execute(getExecutor, apiUrl, param); | |||||
| JsonObject jsonObject = GSON.fromJson(result, JsonObject.class); | |||||
| // JsonElement jsonElement = GSON.toJsonTree(result); | |||||
| // JsonObject asJsonObject = null; | |||||
| // if(jsonElement.isJsonPrimitive()){ | |||||
| // asJsonObject = jsonElement.getAsJsonPrimitive().getAsJsonObject(); | |||||
| // }else{ | |||||
| // asJsonObject = jsonElement.getAsJsonObject(); | |||||
| // } | |||||
| JsonArray category_list = jsonObject.getAsJsonArray("category_list"); | |||||
| List<GoodsCategory> list = GSON.fromJson(category_list, | |||||
| new TypeReference<List<GoodsCategory>>() {}.getType()); | |||||
| return list; | |||||
| } | |||||
| @Override | |||||
| public GoodsTemplateGet templateGet(Integer category_id, Integer product_type) throws WxErrorException { | |||||
| TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.TEMPLATE_GET; | |||||
| String param = "category_id=" + category_id | |||||
| + "&product_type=" + product_type; | |||||
| String result = this.service.execute(getExecutor, apiUrl, param); | |||||
| BaseGoodsResult<GoodsTemplateGet> baseResult = GSON.fromJson(result, | |||||
| new TypeReference<BaseGoodsResult<GoodsTemplateGet>>(){}.getType()); | |||||
| if(baseResult.isSuccess()){ | |||||
| return baseResult.getData(); | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public List<Product> productDraftGet(String product_ids, String out_ids) throws WxErrorException { | |||||
| TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_DRAFT_GET; | |||||
| String param = "" ; | |||||
| if(StringUtils.isNotBlank(product_ids)){ | |||||
| param = "product_ids=" + product_ids; | |||||
| }else if(StringUtils.isNotBlank(out_ids)){ | |||||
| param = "out_ids=" + out_ids; | |||||
| } | |||||
| String result = this.service.execute(getExecutor, apiUrl, param); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| Map map = (Map) baseResult.getData(); | |||||
| if(map != null){ | |||||
| Object product_draft_list = map.get("product_draft_list"); | |||||
| List<Product> list = GSON.fromJson(GSON.toJson(product_draft_list), | |||||
| new TypeReference<List<Product>>() {}.getType()); | |||||
| return list; | |||||
| } | |||||
| return null; | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public ProductPage productDraftListGet(String cursor, Integer count, Integer status) throws WxErrorException { | |||||
| TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_DRAFT_LIST; | |||||
| String param = "" ; | |||||
| if(count == null){ | |||||
| param = "count=" + 5; | |||||
| }else{ | |||||
| param = "count=" + count; | |||||
| } | |||||
| if(StringUtils.isNotBlank(cursor)){ | |||||
| param += "&cursor=" + cursor; | |||||
| } | |||||
| if(status != null){ | |||||
| param += "&status=" + status; | |||||
| } | |||||
| String result = this.service.execute(getExecutor, apiUrl, param); | |||||
| BaseGoodsResult<ProductPage> baseResult = GSON.fromJson(result, | |||||
| new TypeReference<BaseGoodsResult<ProductPage>>() {}.getType()); | |||||
| if(baseResult.isSuccess()){ | |||||
| return baseResult.getData(); | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public List<Product> productOnlineGet(String product_ids, String out_ids) throws WxErrorException { | |||||
| TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_ONLINE_GET; | |||||
| String param = "" ; | |||||
| if(StringUtils.isNotBlank(product_ids)){ | |||||
| param = "product_ids=" + product_ids; | |||||
| }else if(StringUtils.isNotBlank(out_ids)){ | |||||
| param = "out_ids=" + out_ids; | |||||
| } | |||||
| String result = this.service.execute(getExecutor, apiUrl, param); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| Map map = (Map) baseResult.getData(); | |||||
| if(map != null){ | |||||
| Object product_online_list = map.get("product_online_list"); | |||||
| List<Product> list = GSON.fromJson(GSON.toJson(product_online_list), | |||||
| new TypeReference<List<Product>>() {}.getType()); | |||||
| return list; | |||||
| } | |||||
| return null; | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public ProductPage productOnlineListGet(String cursor, Integer count, Integer status) throws WxErrorException { | |||||
| TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_ONLINE_LIST; | |||||
| String param = "" ; | |||||
| if(count == null){ | |||||
| param = "count=" + 5; | |||||
| }else{ | |||||
| param = "count=" + count; | |||||
| } | |||||
| if(StringUtils.isNotBlank(cursor)){ | |||||
| param += "&cursor=" + cursor; | |||||
| } | |||||
| if(status != null){ | |||||
| param += "&status=" + status; | |||||
| } | |||||
| String result = this.service.execute(getExecutor, apiUrl, param); | |||||
| BaseGoodsResult<ProductPage> baseResult = GSON.fromJson(result, | |||||
| new TypeReference<BaseGoodsResult<ProductPage>>() {}.getType()); | |||||
| if(baseResult.isSuccess()){ | |||||
| return baseResult.getData(); | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public String productSave(Product product) throws WxErrorException { | |||||
| TtWebGoodsPostRequestExecutor postExecutor = new TtWebGoodsPostRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_SAVE; | |||||
| String result = this.service.execute(postExecutor, apiUrl, GSON.toJson(product)); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| Map map = (Map) baseResult.getData(); | |||||
| return map.get("product_id").toString(); | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public boolean productFreeAudit(String productId, String outId, Long soldEndTime, Integer stockQty) throws WxErrorException { | |||||
| TtWebGoodsPostRequestExecutor postExecutor = new TtWebGoodsPostRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_FREE_AUDIT; | |||||
| Map<String,Object> map = new HashMap<>(); | |||||
| if(StringUtils.isNotBlank(productId)){ | |||||
| map.put("product_id",productId); | |||||
| }else if(StringUtils.isNotBlank(outId)){ | |||||
| map.put("out_id",outId); | |||||
| } | |||||
| if(soldEndTime != null){ | |||||
| map.put("sold_end_time",soldEndTime); | |||||
| } | |||||
| if(stockQty != null){ | |||||
| map.put("stock_qty",stockQty); | |||||
| } | |||||
| String result = this.service.execute(postExecutor, apiUrl, GSON.toJson(map)); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| return true; | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public boolean skuBatchSave(ProductSku sku) throws WxErrorException { | |||||
| TtWebGoodsPostRequestExecutor postExecutor = new TtWebGoodsPostRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.SKU_BATCH_SAVE; | |||||
| String result = this.service.execute(postExecutor, apiUrl, GSON.toJson(sku)); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| return true; | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public boolean productOperate(String product_id, String out_id, Integer op_type) throws WxErrorException { | |||||
| TtWebGoodsPostRequestExecutor postExecutor = new TtWebGoodsPostRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.PRODUCT_OPERATE; | |||||
| Map<String,Object> map = new HashMap<>(); | |||||
| if(StringUtils.isNotBlank(product_id)){ | |||||
| map.put("product_id",product_id); | |||||
| }else if(StringUtils.isNotBlank(out_id)){ | |||||
| map.put("out_id",out_id); | |||||
| } | |||||
| map.put("op_type",op_type); | |||||
| String result = this.service.execute(postExecutor, apiUrl, GSON.toJson(map)); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| return true; | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public boolean stockSync(String product_id, String out_id, Integer stock) throws WxErrorException { | |||||
| TtWebGoodsPostRequestExecutor postExecutor = new TtWebGoodsPostRequestExecutor(this.service.getRequestHttp()); | |||||
| String apiUrl = this.service.getTtWebConfig().getApiBegin().getPrefix() + this.STOCK_SYNC; | |||||
| Map<String,Object> map = new HashMap<>(); | |||||
| if(StringUtils.isNotBlank(product_id)){ | |||||
| map.put("product_id",product_id); | |||||
| }else if(StringUtils.isNotBlank(out_id)){ | |||||
| map.put("out_id",out_id); | |||||
| } | |||||
| Map<String,Integer> stockStruct = new HashMap<>(); | |||||
| if(stock == null || stock < 0){ | |||||
| stockStruct.put("limit_type",2); | |||||
| }else{ | |||||
| stockStruct.put("limit_type",1); | |||||
| stockStruct.put("stock_qty",stock); | |||||
| } | |||||
| map.put("stock",stockStruct); | |||||
| String result = this.service.execute(postExecutor, apiUrl, GSON.toJson(map)); | |||||
| BaseGoodsResult baseResult = GSON.fromJson(result, BaseGoodsResult.class); | |||||
| if(baseResult.isSuccess()){ | |||||
| return true; | |||||
| }else{ | |||||
| throw new WxErrorException(WxError.builder().errorCode(baseResult.getErrCode()).errorMsg(baseResult.getErrMsg()).build()); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| package com.iformall.douyin.web.api.goodlifesaas.impl; | |||||
| import com.iformall.douyin.web.api.basic.TtBasicServiceImpl; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasGoodsService; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasService; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| /** | |||||
| * @author | |||||
| */ | |||||
| @Slf4j | |||||
| public class TtGoodLifeSaasServiceImpl extends TtBasicServiceImpl implements TtGoodLifeSaasService { | |||||
| private TtGoodLifeSaasGoodsService shopMatchService = new TtGoodLifeSaasGoodsServiceImpl(this); | |||||
| @Override | |||||
| public TtGoodLifeSaasGoodsService getGoodLifeSaasGoodsService() { | |||||
| return this.shopMatchService; | |||||
| } | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| @@ -63,7 +63,7 @@ public interface TtWebGoodsService { | |||||
| * account_id int FALSE 服务商的入驻商户ID/代运营的商户ID,不传时默认为服务商身份 | * account_id int FALSE 服务商的入驻商户ID/代运营的商户ID,不传时默认为服务商身份 | ||||
| */ | */ | ||||
| List<GoodsCategory> categoryGet(Integer category_id,Integer account_id) throws WxErrorException; | List<GoodsCategory> categoryGet(Integer category_id,Integer account_id) throws WxErrorException; | ||||
| /** | /** | ||||
| * - 查询商品模板,创建商品时的属性列表需与该接口保持一致,否则无法识别 | * - 查询商品模板,创建商品时的属性列表需与该接口保持一致,否则无法识别 | ||||
| * category_id int TRUE 行业类目;详细见;商品类目表 https://bytedance.feishu.cn/docx/doxcnn02OUCTiKjpmzFR6ItdTye | * category_id int TRUE 行业类目;详细见;商品类目表 https://bytedance.feishu.cn/docx/doxcnn02OUCTiKjpmzFR6ItdTye | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| @@ -0,0 +1,27 @@ | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.iformall.douyin.web.api.basic.TtBasicService; | |||||
| /** | |||||
| * | |||||
| */ | |||||
| public interface TtWebService extends TtBasicService{ | |||||
| /** | |||||
| * 返回用户相关接口方法的实现类对象,以方便调用其各个接口. | |||||
| * | |||||
| * @return TtMaUserService | |||||
| */ | |||||
| TtWebShopMatchService getShopMatchService(); | |||||
| /** | |||||
| * 返回用户相关接口方法的实现类对象,以方便调用其各个接口. | |||||
| * | |||||
| * @return TtMaUserService | |||||
| */ | |||||
| TtWebProductService getProductService(); | |||||
| TtWebGoodsService getGoodsService(); | |||||
| TtWebPoiPlanService getPoiPlanService(); | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.douyin.web.api; | |||||
| package com.iformall.douyin.web.api.web; | |||||
| import com.iformall.douyin.web.bean.TtSupplierMatchList; | import com.iformall.douyin.web.bean.TtSupplierMatchList; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| @@ -1,10 +1,15 @@ | |||||
| package com.iformall.douyin.web.api.impl; | |||||
| package com.iformall.douyin.web.api.web.impl; | |||||
| import com.alibaba.fastjson.JSONArray; | import com.alibaba.fastjson.JSONArray; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.alibaba.fastjson.TypeReference; | import com.alibaba.fastjson.TypeReference; | ||||
| import com.google.gson.*; | import com.google.gson.*; | ||||
| import com.iformall.douyin.web.api.*; | import com.iformall.douyin.web.api.*; | ||||
| import com.iformall.douyin.web.api.web.TtWebGoodsCategoryGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsPostRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsService; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
| import me.chanjar.weixin.common.error.WxError; | import me.chanjar.weixin.common.error.WxError; | ||||
| @@ -49,7 +54,7 @@ public class TtWebGoodsServiceImpl implements TtWebGoodsService { | |||||
| new TypeReference<List<GoodsCategory>>() {}.getType()); | new TypeReference<List<GoodsCategory>>() {}.getType()); | ||||
| return list; | return list; | ||||
| } | } | ||||
| @Override | @Override | ||||
| public GoodsTemplateGet templateGet(Integer category_id, Integer product_type) throws WxErrorException { | public GoodsTemplateGet templateGet(Integer category_id, Integer product_type) throws WxErrorException { | ||||
| TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | TtWebGoodsGetRequestExecutor getExecutor = new TtWebGoodsGetRequestExecutor(this.service.getRequestHttp()); | ||||
| @@ -1,10 +1,13 @@ | |||||
| package com.iformall.douyin.web.api.impl; | |||||
| package com.iformall.douyin.web.api.web.impl; | |||||
| import com.alibaba.fastjson.JSONArray; | import com.alibaba.fastjson.JSONArray; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.google.gson.Gson; | import com.google.gson.Gson; | ||||
| import com.google.gson.GsonBuilder; | import com.google.gson.GsonBuilder; | ||||
| import com.iformall.douyin.web.api.*; | import com.iformall.douyin.web.api.*; | ||||
| import com.iformall.douyin.web.api.web.TtWebPoiPlanService; | |||||
| import com.iformall.douyin.web.api.web.TtWebPostRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| @@ -1,11 +1,11 @@ | |||||
| package com.iformall.douyin.web.api.impl; | |||||
| package com.iformall.douyin.web.api.web.impl; | |||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| import com.iformall.douyin.web.api.TtWebGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.TtWebPostRequestExecutor; | |||||
| import com.iformall.douyin.web.api.TtWebProductService; | |||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.douyin.web.api.web.TtWebGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebPostRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebProductService; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| @@ -0,0 +1,71 @@ | |||||
| package com.iformall.douyin.web.api.web.impl; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.google.gson.Gson; | |||||
| import com.google.gson.JsonParser; | |||||
| import com.iformall.douyin.web.api.*; | |||||
| import com.iformall.douyin.web.api.basic.TtBasicServiceImpl; | |||||
| import com.iformall.douyin.web.api.web.TtWebGoodsService; | |||||
| import com.iformall.douyin.web.api.web.TtWebPoiPlanService; | |||||
| import com.iformall.douyin.web.api.web.TtWebProductService; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.api.web.TtWebShopMatchService; | |||||
| import com.iformall.douyin.web.config.TtWebConfig; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import me.chanjar.weixin.common.WxType; | |||||
| import me.chanjar.weixin.common.bean.WxAccessToken; | |||||
| import me.chanjar.weixin.common.error.WxError; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | |||||
| import me.chanjar.weixin.common.util.DataUtils; | |||||
| import me.chanjar.weixin.common.util.http.*; | |||||
| import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||||
| import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; | |||||
| import org.apache.http.HttpHost; | |||||
| import org.apache.http.client.config.RequestConfig; | |||||
| import org.apache.http.client.methods.CloseableHttpResponse; | |||||
| import org.apache.http.client.methods.HttpPost; | |||||
| import org.apache.http.impl.client.BasicResponseHandler; | |||||
| import org.apache.http.impl.client.CloseableHttpClient; | |||||
| import java.io.IOException; | |||||
| import java.util.HashMap; | |||||
| import java.util.Map; | |||||
| import java.util.concurrent.locks.Lock; | |||||
| import static com.iformall.douyin.web.config.TtWebConstants.ErrorCode.*; | |||||
| /** | |||||
| * @author | |||||
| */ | |||||
| @Slf4j | |||||
| public class TtWebServiceImpl extends TtBasicServiceImpl implements TtWebService { | |||||
| private TtWebShopMatchService shopMatchService = new TtWebShopMatchServiceImpl(this); | |||||
| private TtWebProductService productService = new TtWebProductServiceImpl(this); | |||||
| private TtWebGoodsService goodService = new TtWebGoodsServiceImpl(this); | |||||
| private TtWebPoiPlanService poiPlanService = new TtWebPoiPlanServiceImpl(this); | |||||
| @Override | |||||
| public TtWebShopMatchService getShopMatchService() { | |||||
| return this.shopMatchService; | |||||
| } | |||||
| @Override | |||||
| public TtWebProductService getProductService() { | |||||
| return this.productService; | |||||
| } | |||||
| @Override | |||||
| public TtWebGoodsService getGoodsService() { | |||||
| return this.goodService; | |||||
| } | |||||
| @Override | |||||
| public TtWebPoiPlanService getPoiPlanService() { | |||||
| return this.poiPlanService; | |||||
| } | |||||
| } | |||||
| @@ -1,10 +1,10 @@ | |||||
| package com.iformall.douyin.web.api.impl; | |||||
| package com.iformall.douyin.web.api.web.impl; | |||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| import com.iformall.douyin.web.api.TtWebGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.TtWebPostRequestExecutor; | |||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.douyin.web.api.TtWebShopMatchService; | |||||
| import com.iformall.douyin.web.api.web.TtWebGetRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebPostRequestExecutor; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.api.web.TtWebShopMatchService; | |||||
| import com.iformall.douyin.web.bean.TtSupplierMatch; | import com.iformall.douyin.web.bean.TtSupplierMatch; | ||||
| import com.iformall.douyin.web.bean.TtSupplierMatchList; | import com.iformall.douyin.web.bean.TtSupplierMatchList; | ||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
| @@ -7,7 +7,7 @@ package com.iformall.enums; | |||||
| public enum EnumDouyinApplicationVersion { | public enum EnumDouyinApplicationVersion { | ||||
| WEB(1, "网站应用"), | WEB(1, "网站应用"), | ||||
| MINIAPP(2, "小程序应用"); | |||||
| GOODLIFE_SAAS(2, "本地生活SAAS应用"); | |||||
| public static EnumDouyinApplicationVersion getEnum(Integer code) { | public static EnumDouyinApplicationVersion getEnum(Integer code) { | ||||
| for (EnumDouyinApplicationVersion value : values()) { | for (EnumDouyinApplicationVersion value : values()) { | ||||
| @@ -0,0 +1,20 @@ | |||||
| package com.iformall.mapper; | |||||
| import com.iformall.common.CommonMapper; | |||||
| import com.iformall.domain.po.TtGoodsCategoryNew; | |||||
| import java.util.List; | |||||
| public interface TtGoodsCategoryNewMapper extends CommonMapper<TtGoodsCategoryNew, String> { | |||||
| List<TtGoodsCategoryNew> findList(TtGoodsCategoryNew record); | |||||
| List<TtGoodsCategoryNew> findMinList(TtGoodsCategoryNew record); | |||||
| List<Integer> findIdAll(TtGoodsCategoryNew record); | |||||
| int updDelByIds(TtGoodsCategoryNew record); | |||||
| int updateFeeByIds(TtGoodsCategoryNew updgc); | |||||
| } | |||||
| @@ -3,6 +3,7 @@ package com.iformall.service; | |||||
| import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.TtGoodsCategory; | import com.iformall.domain.po.TtGoodsCategory; | ||||
| import com.iformall.domain.po.TtGoodsCategoryNew; | |||||
| import com.iformall.domain.po.WxCoupon; | import com.iformall.domain.po.WxCoupon; | ||||
| import com.iformall.douyin.web.bean.GoodsCategory; | import com.iformall.douyin.web.bean.GoodsCategory; | ||||
| import com.iformall.douyin.web.bean.GoodsTemplateGet; | import com.iformall.douyin.web.bean.GoodsTemplateGet; | ||||
| @@ -18,16 +19,16 @@ public interface TtGoodsCategoryService { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| List<TtGoodsCategory> findTreeList(); | List<TtGoodsCategory> findTreeList(); | ||||
| List<TtGoodsCategoryNew> findTreeListForNew(); | |||||
| List<TtGoodsCategory> findAllTreeList(); | List<TtGoodsCategory> findAllTreeList(); | ||||
| List<TtGoodsCategoryNew> findAllTreeListForNew(); | |||||
| /** | /** | ||||
| * A端是否显示处理 | * A端是否显示处理 | ||||
| */ | */ | ||||
| void adminIsShow(GoodsTemplateGet temp); | void adminIsShow(GoodsTemplateGet temp); | ||||
| /** | /** | ||||
| * 处理回显 | * 处理回显 | ||||
| * @param temp | * @param temp | ||||
| @@ -42,13 +43,14 @@ public interface TtGoodsCategoryService { | |||||
| /** | /** | ||||
| * 同步抖音类目 | * 同步抖音类目 | ||||
| */ | */ | ||||
| void syncGet(); | |||||
| void syncGet(boolean isNew); | |||||
| List<GoodsCategory> categoryGet(Integer categoryId); | |||||
| List<GoodsCategory> categoryGet(Integer categoryId,boolean isNew); | |||||
| void updateFee(TtGoodsCategory record); | void updateFee(TtGoodsCategory record); | ||||
| void updateFeeForNew(TtGoodsCategoryNew record); | |||||
| int getTtServiceFee(Integer categoryId); | |||||
| int getTtServiceFee(Integer categoryId,boolean isNew); | |||||
| } | } | ||||
| @@ -7,7 +7,8 @@ import com.iformall.domain.po.TtMerchantPoi; | |||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.domain.vo.MerchantPoiT; | import com.iformall.domain.vo.MerchantPoiT; | ||||
| import com.iformall.domain.vo.MerchantPoiTNew; | import com.iformall.domain.vo.MerchantPoiTNew; | ||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasService; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import java.util.List; | import java.util.List; | ||||
| @@ -48,6 +49,8 @@ public interface TtMerchantPoiService { | |||||
| ResultData supplierQuery(TenantEntity tenantInfo,Long id); | ResultData supplierQuery(TenantEntity tenantInfo,Long id); | ||||
| TtWebService getTtWebService(TenantEntity tenantInfo); | TtWebService getTtWebService(TenantEntity tenantInfo); | ||||
| TtGoodLifeSaasService getTtGoodLifeSassService(TenantEntity tenantInfo); | |||||
| // ResultData findPoi(TenantEntity tenantInfo, Long couponChannelId); | // ResultData findPoi(TenantEntity tenantInfo, Long couponChannelId); | ||||
| @@ -12,8 +12,8 @@ import com.iformall.domain.po.*; | |||||
| import com.iformall.domain.po.base.BaseEntity; | import com.iformall.domain.po.base.BaseEntity; | ||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.domain.vo.*; | import com.iformall.domain.vo.*; | ||||
| import com.iformall.douyin.web.api.TtWebPoiPlanService; | |||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.douyin.web.api.web.TtWebPoiPlanService; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| @@ -6,9 +6,11 @@ import com.github.binarywang.wxpay.bean.bank.BankingResult; | |||||
| import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.TtGoodsCategory; | import com.iformall.domain.po.TtGoodsCategory; | ||||
| import com.iformall.domain.po.TtGoodsCategoryNew; | |||||
| import com.iformall.domain.po.WxCoupon; | import com.iformall.domain.po.WxCoupon; | ||||
| import com.iformall.domain.po.base.BaseEntity; | import com.iformall.domain.po.base.BaseEntity; | ||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.bean.GoodsCategory; | import com.iformall.douyin.web.bean.GoodsCategory; | ||||
| import com.iformall.douyin.web.bean.GoodsTemplateGet; | import com.iformall.douyin.web.bean.GoodsTemplateGet; | ||||
| import com.iformall.enums.EnumCouponValidType; | import com.iformall.enums.EnumCouponValidType; | ||||
| @@ -17,6 +19,7 @@ import com.iformall.enums.EnumMerchantStatus; | |||||
| import com.iformall.enums.EnumYesOrNo; | import com.iformall.enums.EnumYesOrNo; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.mapper.TtGoodsCategoryMapper; | import com.iformall.mapper.TtGoodsCategoryMapper; | ||||
| import com.iformall.mapper.TtGoodsCategoryNewMapper; | |||||
| import com.iformall.service.TtGoodsCategoryService; | import com.iformall.service.TtGoodsCategoryService; | ||||
| import com.iformall.service.TtMerchantPoiService; | import com.iformall.service.TtMerchantPoiService; | ||||
| import com.iformall.utils.DateUtils; | import com.iformall.utils.DateUtils; | ||||
| @@ -44,6 +47,9 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| @Autowired | @Autowired | ||||
| TtGoodsCategoryMapper ttGoodsCategoryMapper; | TtGoodsCategoryMapper ttGoodsCategoryMapper; | ||||
| @Autowired | |||||
| TtGoodsCategoryNewMapper ttGoodsCategoryNewMapper; | |||||
| @Autowired | @Autowired | ||||
| private TtMerchantPoiService ttMerchantPoiService; | private TtMerchantPoiService ttMerchantPoiService; | ||||
| @@ -71,6 +77,26 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| } | } | ||||
| return topList; | return topList; | ||||
| } | } | ||||
| @Override | |||||
| public List<TtGoodsCategoryNew> findTreeListForNew() { | |||||
| TtGoodsCategoryNew record = new TtGoodsCategoryNew(); | |||||
| record.setEnable(EnumYesOrNo.YES.getCode()); | |||||
| record.setIsDel(EnumYesOrNo.NO.getCode()); | |||||
| record.setSortColumns(BaseEntity.SortField.Id_ASC); | |||||
| List<TtGoodsCategoryNew> listAll = ttGoodsCategoryNewMapper.findMinList(record); | |||||
| if(listAll == null || listAll.isEmpty()){ | |||||
| return new ArrayList<>(); | |||||
| } | |||||
| List<TtGoodsCategoryNew> topList = listAll.stream().filter(gc -> gc.getParentId().intValue() == 0).collect(Collectors.toList()); | |||||
| if(topList != null && !topList.isEmpty()){ | |||||
| listAll.removeAll(topList); | |||||
| for (TtGoodsCategoryNew category:topList) { | |||||
| category.setChild(getChildForNew(listAll,category.getId())); | |||||
| } | |||||
| } | |||||
| return topList; | |||||
| } | |||||
| @Override | @Override | ||||
| public List<TtGoodsCategory> findAllTreeList() { | public List<TtGoodsCategory> findAllTreeList() { | ||||
| @@ -91,6 +117,26 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| } | } | ||||
| return topList; | return topList; | ||||
| } | } | ||||
| @Override | |||||
| public List<TtGoodsCategoryNew> findAllTreeListForNew() { | |||||
| TtGoodsCategoryNew record = new TtGoodsCategoryNew(); | |||||
| // record.setEnable(EnumYesOrNo.YES.getCode()); | |||||
| record.setIsDel(EnumYesOrNo.NO.getCode()); | |||||
| record.setSortColumns(BaseEntity.SortField.Id_ASC); | |||||
| List<TtGoodsCategoryNew> listAll = ttGoodsCategoryNewMapper.findList(record); | |||||
| if(listAll == null || listAll.isEmpty()){ | |||||
| return new ArrayList<>(); | |||||
| } | |||||
| List<TtGoodsCategoryNew> topList = listAll.stream().filter(gc -> gc.getParentId().intValue() == 0).collect(Collectors.toList()); | |||||
| if(topList != null && !topList.isEmpty()){ | |||||
| listAll.removeAll(topList); | |||||
| for (TtGoodsCategoryNew category:topList) { | |||||
| category.setChild(getChildForNew(listAll,category.getId())); | |||||
| } | |||||
| } | |||||
| return topList; | |||||
| } | |||||
| private List<TtGoodsCategory> getChild(List<TtGoodsCategory> listAll,Integer parentId){ | private List<TtGoodsCategory> getChild(List<TtGoodsCategory> listAll,Integer parentId){ | ||||
| @@ -112,6 +158,26 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| return childList; | return childList; | ||||
| } | } | ||||
| private List<TtGoodsCategoryNew> getChildForNew(List<TtGoodsCategoryNew> listAll,Integer parentId){ | |||||
| List<TtGoodsCategoryNew> childList = new ArrayList<TtGoodsCategoryNew>(); | |||||
| if(listAll == null || listAll.isEmpty()){ | |||||
| return childList; | |||||
| } | |||||
| for(TtGoodsCategoryNew category : listAll){ | |||||
| if(parentId.equals(category.getParentId())){ | |||||
| childList.add(category); | |||||
| } | |||||
| } | |||||
| if(!childList.isEmpty()){ | |||||
| listAll.removeAll(childList); | |||||
| for (TtGoodsCategoryNew category:childList) { | |||||
| category.setChild(getChildForNew(listAll,category.getId())); | |||||
| } | |||||
| } | |||||
| return childList; | |||||
| } | |||||
| private List<String> getProductAdminIsNotShowKey(){ | private List<String> getProductAdminIsNotShowKey(){ | ||||
| List<String> keyList = new ArrayList<>(); | List<String> keyList = new ArrayList<>(); | ||||
| @@ -515,21 +581,36 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| // @Async | // @Async | ||||
| @Transactional(rollbackFor = {Exception.class}) | @Transactional(rollbackFor = {Exception.class}) | ||||
| @Override | @Override | ||||
| public void syncGet() { | |||||
| TtWebService ttWebService = ttMerchantPoiService.getTtWebService(null); | |||||
| handSyncCategory(ttWebService,0,new Date()); | |||||
| public void syncGet(boolean isNew) { | |||||
| if(!isNew) { | |||||
| TtWebService ttWebService = ttMerchantPoiService.getTtWebService(null); | |||||
| handSyncCategory(ttWebService,0,new Date()); | |||||
| }else { | |||||
| TenantEntity defaultEntity = new TenantEntity(); | |||||
| defaultEntity.setTenantId("789"); | |||||
| TtWebService ttWebService = ttMerchantPoiService.getTtMiniAppService(defaultEntity); | |||||
| handSyncCategoryForNew(ttWebService,0,new Date()); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public List<GoodsCategory> categoryGet(Integer categoryId) { | |||||
| public List<GoodsCategory> categoryGet(Integer categoryId,boolean isNew) { | |||||
| String key = "goods_category:"+categoryId; | String key = "goods_category:"+categoryId; | ||||
| List<GoodsCategory> cacheListObject = RedisCacheUtils.getCacheListObject(categoryRedisTemplate, key, GoodsCategory.class); | List<GoodsCategory> cacheListObject = RedisCacheUtils.getCacheListObject(categoryRedisTemplate, key, GoodsCategory.class); | ||||
| if(cacheListObject != null && cacheListObject.size() > 0){ | if(cacheListObject != null && cacheListObject.size() > 0){ | ||||
| return cacheListObject; | return cacheListObject; | ||||
| } | } | ||||
| try { | try { | ||||
| TtWebService ttWebService = ttMerchantPoiService.getTtWebService(null); | |||||
| List<GoodsCategory> goodsCategories = ttWebService.getGoodsService().categoryGet(categoryId, null); | |||||
| List<GoodsCategory> goodsCategories = null; | |||||
| if (isNew) { | |||||
| TenantEntity defaultEntity = new TenantEntity(); | |||||
| defaultEntity.setTenantId("789"); | |||||
| TtWebService ttWebService = ttMerchantPoiService.getTtMiniAppService(defaultEntity); | |||||
| goodsCategories = ttWebService.getGoodLifeSaasGoodsService().categoryGet(categoryId, null); | |||||
| }else { | |||||
| TtWebService ttWebService = ttMerchantPoiService.getTtWebService(null); | |||||
| goodsCategories = ttWebService.getGoodsService().categoryGet(categoryId, null); | |||||
| } | |||||
| if(goodsCategories != null && goodsCategories.size() > 0){ | if(goodsCategories != null && goodsCategories.size() > 0){ | ||||
| RedisCacheUtils.cache(categoryRedisTemplate,key,goodsCategories,24*3600); | RedisCacheUtils.cache(categoryRedisTemplate,key,goodsCategories,24*3600); | ||||
| } | } | ||||
| @@ -551,14 +632,34 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| updateFeeByIds(ids,record.getServiceFee(),record.getSoftwareFee(),new Date()); | updateFeeByIds(ids,record.getServiceFee(),record.getSoftwareFee(),new Date()); | ||||
| } | } | ||||
| } | } | ||||
| @Transactional(rollbackFor = {Exception.class}) | |||||
| @Override | @Override | ||||
| public int getTtServiceFee(Integer categoryId) { | |||||
| TtGoodsCategory goodsCategory = ttGoodsCategoryMapper.selectById(categoryId); | |||||
| if(goodsCategory != null && goodsCategory.getServiceFee() != null){ | |||||
| return goodsCategory.getServiceFee(); | |||||
| public void updateFeeForNew(TtGoodsCategoryNew record) { | |||||
| List<Integer> ids = new ArrayList<>(); | |||||
| if(record.getId() != null){ | |||||
| ids.add(record.getId()); | |||||
| } | } | ||||
| return 0; | |||||
| if(!ids.isEmpty()){ | |||||
| updateFeeByIdsForNew(ids,record.getServiceFee(),record.getSoftwareFee(),new Date()); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public int getTtServiceFee(Integer categoryId,boolean isNew) { | |||||
| if (!isNew) { | |||||
| TtGoodsCategory goodsCategory = ttGoodsCategoryMapper.selectById(categoryId); | |||||
| if(goodsCategory != null && goodsCategory.getServiceFee() != null){ | |||||
| return goodsCategory.getServiceFee(); | |||||
| } | |||||
| return 0; | |||||
| }else { | |||||
| TtGoodsCategoryNew goodsCategory = ttGoodsCategoryNewMapper.selectById(categoryId); | |||||
| if(goodsCategory != null && goodsCategory.getServiceFee() != null){ | |||||
| return goodsCategory.getServiceFee(); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -610,6 +711,50 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| } | } | ||||
| } | } | ||||
| private void handSyncCategoryForNew(TtWebService ttWebService,Integer category_id,Date now){ | |||||
| try { | |||||
| List<GoodsCategory> goodsCategories = ttWebService.getGoodLifeSaasGoodsService().categoryGet(category_id, null); | |||||
| if(goodsCategories != null){ | |||||
| TtGoodsCategoryNew record = new TtGoodsCategoryNew(); | |||||
| record.setParentId(category_id); | |||||
| List<Integer> listAll = ttGoodsCategoryNewMapper.findIdAll(record); | |||||
| for (GoodsCategory gc:goodsCategories) { | |||||
| TtGoodsCategoryNew updgc = new TtGoodsCategoryNew(); | |||||
| updgc.setId(gc.getCategoryId()); | |||||
| updgc.setLevel(gc.getLevel()); | |||||
| updgc.setName(gc.getName()); | |||||
| updgc.setParentId(gc.getParentId()); | |||||
| updgc.setEnable(gc.getEnable()?EnumYesOrNo.YES.getCode():EnumYesOrNo.NO.getCode()); | |||||
| updgc.setIsLeaf(gc.getEnable()?EnumYesOrNo.YES.getCode():EnumYesOrNo.NO.getCode()); | |||||
| updgc.setIsDel(EnumYesOrNo.NO.getCode()); | |||||
| updgc.setUpdateDate(now); | |||||
| if(listAll.contains(gc.getCategoryId())){ | |||||
| ttGoodsCategoryNewMapper.updateById(updgc); | |||||
| listAll.remove(gc.getCategoryId()); | |||||
| }else{ | |||||
| updgc.setCreateDate(now); | |||||
| ttGoodsCategoryNewMapper.insert(updgc); | |||||
| } | |||||
| if(!gc.getIsLeaf()){ | |||||
| handSyncCategoryForNew(ttWebService,gc.getCategoryId(),now); | |||||
| } | |||||
| } | |||||
| updateDelByIdsForNew(listAll,now); | |||||
| } | |||||
| } catch (WxErrorException e) { | |||||
| e.printStackTrace(); | |||||
| logger.error("同步商品类目失败"+e.getMessage()); | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); | |||||
| } | |||||
| catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| logger.error("同步商品类目失败"+e.getMessage()); | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * 循环删除类目 | * 循环删除类目 | ||||
| @@ -632,6 +777,23 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| updateDelByIds(idAll,now); | updateDelByIds(idAll,now); | ||||
| } | } | ||||
| } | } | ||||
| private void updateDelByIdsForNew(List<Integer> ids,Date now){ | |||||
| if(ids == null || ids.size() <= 0){ | |||||
| return; | |||||
| } | |||||
| TtGoodsCategoryNew delgc = new TtGoodsCategoryNew(); | |||||
| delgc.setCategoryIds(ids); | |||||
| delgc.setIsDel(EnumYesOrNo.YES.getCode()); | |||||
| delgc.setUpdateDate(now); | |||||
| int i = ttGoodsCategoryNewMapper.updDelByIds(delgc); | |||||
| if(i > 0){ | |||||
| TtGoodsCategoryNew gcq = new TtGoodsCategoryNew(); | |||||
| gcq.setParentIds(ids); | |||||
| List<Integer> idAll = ttGoodsCategoryNewMapper.findIdAll(gcq); | |||||
| updateDelByIdsForNew(idAll,now); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * 循环修改费率 | * 循环修改费率 | ||||
| @@ -653,5 +815,23 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService { | |||||
| updateFeeByIds(idAll,serviceFee,softwareFee,now); | updateFeeByIds(idAll,serviceFee,softwareFee,now); | ||||
| } | } | ||||
| } | } | ||||
| private void updateFeeByIdsForNew(List<Integer> ids,Integer serviceFee,Integer softwareFee,Date now){ | |||||
| if(ids == null || ids.size() <= 0){ | |||||
| return; | |||||
| } | |||||
| TtGoodsCategoryNew updgc = new TtGoodsCategoryNew(); | |||||
| updgc.setCategoryIds(ids); | |||||
| updgc.setServiceFee(serviceFee); | |||||
| updgc.setSoftwareFee(softwareFee); | |||||
| updgc.setUpdateDate(now); | |||||
| int i = ttGoodsCategoryNewMapper.updateFeeByIds(updgc); | |||||
| if(i > 0){ | |||||
| TtGoodsCategoryNew gcq = new TtGoodsCategoryNew(); | |||||
| gcq.setParentIds(ids); | |||||
| List<Integer> idAll = ttGoodsCategoryNewMapper.findIdAll(gcq); | |||||
| updateFeeByIdsForNew(idAll,serviceFee,softwareFee,now); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -13,7 +13,9 @@ import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.domain.vo.MerchantPoiT; | import com.iformall.domain.vo.MerchantPoiT; | ||||
| import com.iformall.domain.vo.MerchantPoiTNew; | import com.iformall.domain.vo.MerchantPoiTNew; | ||||
| import com.iformall.domain.vo.WxCardPriceTemplate; | import com.iformall.domain.vo.WxCardPriceTemplate; | ||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.douyin.web.api.basic.TtBasicService; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasService; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.bean.*; | import com.iformall.douyin.web.bean.*; | ||||
| import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| @@ -515,6 +517,27 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { | |||||
| } | } | ||||
| return ttWebService; | return ttWebService; | ||||
| } | } | ||||
| @Override | |||||
| public TtGoodLifeSaasService getTtGoodLifeSassService(TenantEntity tenantInfo){ | |||||
| WxAppinfo appinfoQ = new WxAppinfo(); | |||||
| appinfoQ.updateTenantInfo(tenantInfo); | |||||
| appinfoQ.setPlat(EnumAppPlat.TOUTIAO.getCode()); | |||||
| appinfoQ.setType(EnumAppType.C.getCode()); | |||||
| WxAppinfo appinfo = wxAppinfoMapper.selectOne(new QueryWrapper<>(appinfoQ)); | |||||
| TtGoodLifeSaasService ttWebService = maUtil.getTtGoodLifeSassService(appinfo); | |||||
| if (StringUtils.isBlank(appinfo.getAccessToken())) { | |||||
| // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 | |||||
| updateWebAccessToken(appinfo, ttWebService); | |||||
| } else { | |||||
| // 检查token是否已过期, 1小时就重新获取 | |||||
| Date curDate = new Date(); | |||||
| if (curDate.getTime() > appinfo.getLastTokenTime().getTime() + Constant.H_EXPIRE) { | |||||
| updateWebAccessToken(appinfo, ttWebService); | |||||
| } | |||||
| } | |||||
| return ttWebService; | |||||
| } | |||||
| @Override | @Override | ||||
| public void exportTemplate(HttpServletRequest request, HttpServletResponse response, boolean isNew) { | public void exportTemplate(HttpServletRequest request, HttpServletResponse response, boolean isNew) { | ||||
| @@ -665,9 +688,9 @@ public class TtMerchantPoiServiceImpl implements TtMerchantPoiService { | |||||
| // | // | ||||
| // } | // } | ||||
| private void updateWebAccessToken(WxAppinfo appinfo, TtWebService ttWebService) { | |||||
| private void updateWebAccessToken(WxAppinfo appinfo, TtBasicService ttbasicService) { | |||||
| try { | try { | ||||
| String accessToken = ttWebService.getAccessToken(true); | |||||
| String accessToken = ttbasicService.getAccessToken(true); | |||||
| WxAppinfo updateApp = new WxAppinfo(); | WxAppinfo updateApp = new WxAppinfo(); | ||||
| updateApp.setAppId(appinfo.getAppId()); | updateApp.setAppId(appinfo.getAppId()); | ||||
| updateApp.setAccessToken(accessToken); | updateApp.setAccessToken(accessToken); | ||||
| @@ -19,8 +19,10 @@ import java.util.concurrent.ConcurrentHashMap; | |||||
| import com.iformall.douyin.pay.TtPayService; | import com.iformall.douyin.pay.TtPayService; | ||||
| import com.iformall.douyin.pay.impl.TtPayServiceImpl; | import com.iformall.douyin.pay.impl.TtPayServiceImpl; | ||||
| import com.iformall.douyin.payv2.config.TtPayConfig; | import com.iformall.douyin.payv2.config.TtPayConfig; | ||||
| import com.iformall.douyin.web.api.TtWebService; | |||||
| import com.iformall.douyin.web.api.impl.TtWebServiceImpl; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.TtGoodLifeSaasService; | |||||
| import com.iformall.douyin.web.api.goodlifesaas.impl.TtGoodLifeSaasServiceImpl; | |||||
| import com.iformall.douyin.web.api.web.TtWebService; | |||||
| import com.iformall.douyin.web.api.web.impl.TtWebServiceImpl; | |||||
| import com.iformall.douyin.web.config.TtWebDefaultConfigImpl; | import com.iformall.douyin.web.config.TtWebDefaultConfigImpl; | ||||
| import com.iformall.douyin.web.enums.TtWebApiBeginEnum; | import com.iformall.douyin.web.enums.TtWebApiBeginEnum; | ||||
| import com.iformall.mapper.WxAppinfoMapper; | import com.iformall.mapper.WxAppinfoMapper; | ||||
| @@ -56,6 +58,9 @@ public class MaUtil { | |||||
| private static Map<String,TtWebService> webServiceMap = new ConcurrentHashMap<String,TtWebService>(); | private static Map<String,TtWebService> webServiceMap = new ConcurrentHashMap<String,TtWebService>(); | ||||
| private static Map<String,String> webServiceKeyMap = new ConcurrentHashMap<String,String>(); | private static Map<String,String> webServiceKeyMap = new ConcurrentHashMap<String,String>(); | ||||
| private static Map<String,TtGoodLifeSaasService> goodLifeSaasServiceMap = new ConcurrentHashMap<String,TtGoodLifeSaasService>(); | |||||
| private static Map<String,String> goodLifeSaasServiceKeyMap = new ConcurrentHashMap<String,String>(); | |||||
| public WxMaService getWeappService(WxAppinfo appinfo) { | public WxMaService getWeappService(WxAppinfo appinfo) { | ||||
| WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); | WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); | ||||
| @@ -290,4 +295,45 @@ public class MaUtil { | |||||
| } | } | ||||
| return service; | return service; | ||||
| } | } | ||||
| public TtGoodLifeSaasService getTtGoodLifeSassService(WxAppinfo appinfo) { | |||||
| TtWebDefaultConfigImpl config = new TtWebDefaultConfigImpl(); | |||||
| config.setAppid(appinfo.getAppId()); | |||||
| config.setSecret(appinfo.getSecret()); | |||||
| config.setToken(appinfo.getToken()); | |||||
| config.setAesKey(appinfo.getAesKey()); | |||||
| config.setMsgDataFormat(appinfo.getMsgDataFormat()); | |||||
| if (StringUtils.isNotBlank(appinfo.getAccessToken())) { | |||||
| config.setAccessToken(appinfo.getAccessToken()); | |||||
| config.setExpiresTime(appinfo.getLastTokenTime().getTime()+appinfo.getExpiresIn()*1000); | |||||
| } | |||||
| config.setApacheHttpClientBuilder(FmHttpClientBuilder.get()); | |||||
| //默认抖音 | |||||
| config.setApiBegin(TtWebApiBeginEnum.DY); | |||||
| String key = appinfo.getAppId()+String.valueOf(config.getExpiresTime()); | |||||
| TtGoodLifeSaasService service = goodLifeSaasServiceMap.get(key); | |||||
| if ( null == service ) { | |||||
| synchronized("getTtGoodLifeSaasServiceBlock"+appinfo.getAppId()) { | |||||
| service = goodLifeSaasServiceMap.get(key); | |||||
| if (null == service) { | |||||
| //删除掉之前的 | |||||
| String appServiceKey = goodLifeSaasServiceKeyMap.get(appinfo.getAppId()); | |||||
| if (!StringUtils.isBlank(appServiceKey)) { | |||||
| if (goodLifeSaasServiceMap.containsKey(appServiceKey)) { | |||||
| goodLifeSaasServiceMap.remove(appServiceKey); | |||||
| } | |||||
| goodLifeSaasServiceKeyMap.remove(appinfo.getAppId()); | |||||
| } | |||||
| service = new TtGoodLifeSaasServiceImpl(); | |||||
| service.setTtWebConfig(config); | |||||
| goodLifeSaasServiceMap.put(key, service); | |||||
| goodLifeSaasServiceKeyMap.put(appinfo.getAppId(),key); | |||||
| } | |||||
| } | |||||
| } | |||||
| return service; | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,100 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.TtGoodsCategoryNewMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.TtGoodsCategoryNew"> | |||||
| <id column="id" jdbcType="INTEGER" property="id" /> | |||||
| <result column="level" jdbcType="INTEGER" property="level" /> | |||||
| <result column="name" jdbcType="VARCHAR" property="name" /> | |||||
| <result column="parent_id" jdbcType="INTEGER" property="parentId" /> | |||||
| <result column="enable" jdbcType="INTEGER" property="enable" /> | |||||
| <result column="is_leaf" jdbcType="INTEGER" property="isLeaf" /> | |||||
| <result column="service_fee" jdbcType="INTEGER" property="serviceFee" /> | |||||
| <result column="software_fee" jdbcType="INTEGER" property="softwareFee" /> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| `id`,`level`,`name`,`parent_id`,`enable`,`is_leaf`,`service_fee`,`software_fee` | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1=1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != isDel "> | |||||
| and `is_del` = #{isDel} | |||||
| </if> | |||||
| <if test=" null != level "> | |||||
| and `level` = #{level} | |||||
| </if> | |||||
| <if test=" null != name "> | |||||
| and `name` like concat('%', #{name},'%') | |||||
| </if> | |||||
| <if test=" null != parentId "> | |||||
| and `parent_id` = #{parentId} | |||||
| </if> | |||||
| <if test=" null != enable "> | |||||
| and `enable` = #{enable} | |||||
| </if> | |||||
| <if test=" null != isLeaf "> | |||||
| and `is_leaf` = #{isLeaf} | |||||
| </if> | |||||
| <if test=" null != parentIds "> | |||||
| and parent_id in | |||||
| <foreach collection="parentIds" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != categoryIds "> | |||||
| and id in | |||||
| <foreach collection="categoryIds" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.TtGoodsCategoryNew" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from tt_goods_category_new | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="findMinList" parameterType="com.iformall.domain.po.TtGoodsCategoryNew" resultMap="BaseResultMap"> | |||||
| select `id`,`level`,`name`,`parent_id`,`enable`,`is_leaf` | |||||
| from tt_goods_category_new | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="findIdAll" parameterType="com.iformall.domain.po.TtGoodsCategoryNew" resultType="Integer"> | |||||
| select id from tt_goods_category_new | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <update id="updDelByIds" parameterType="com.iformall.domain.po.TtGoodsCategoryNew"> | |||||
| update tt_goods_category_new set is_del = #{isDel}, update_date = #{updateDate} | |||||
| where id in | |||||
| <foreach collection="categoryIds" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </update> | |||||
| <update id="updateFeeByIds" parameterType="com.iformall.domain.po.TtGoodsCategoryNew"> | |||||
| update tt_goods_category_new set update_date = #{updateDate} | |||||
| <if test=" null != serviceFee ">,`service_fee` = #{serviceFee}</if> | |||||
| <if test=" null != softwareFee ">,`software_fee` = #{softwareFee}</if> | |||||
| where id in | |||||
| <foreach collection="categoryIds" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </update> | |||||
| </mapper> | |||||