Browse Source

no message

FengChaoYu 2 weeks ago
parent
commit
95f3515abc

+ 24 - 0
src/main/java/com/gree/mall/contest/bean/goods/ActiveGoodsAddReqBean.java

@@ -0,0 +1,24 @@
+package com.gree.mall.contest.bean.goods;
+
+
+import com.gree.mall.contest.plus.entity.Goods;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ActiveGoodsAddReqBean {
+
+    @Schema(description = "唯一id(type>=2可取小程序模板id)")
+    private String objectId;
+    @Schema(description = "类型: 1=新维度分类,2=首页弹窗, 3=活动专区1,4=活动专区2左侧,5=活动专区2右侧,6=专场专区1,7=专场专区2 , 8=专场专区3 , 9=专场专区4")
+    private Integer type;
+    @Schema(description = "所选商品")
+    private List<Goods> goodsList;
+    @Schema(description = "主标题")
+    private String title;
+    @Schema(description = "小标题")
+    private String title2;
+
+}

+ 13 - 0
src/main/java/com/gree/mall/contest/bean/goods/GoodsActiveDetail.java

@@ -0,0 +1,13 @@
+package com.gree.mall.contest.bean.goods;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GoodsActiveDetail {
+
+    @Schema(description = "活动商品")
+    private List<GoodsNewsCategoryGoodsDetailBean> activeGoodsList;
+}

+ 20 - 0
src/main/java/com/gree/mall/contest/bean/goods/GoodsNewsCategoryDetailBean.java

@@ -0,0 +1,20 @@
+package com.gree.mall.contest.bean.goods;
+
+import com.gree.mall.contest.plus.entity.GoodsNewsCategory;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class GoodsNewsCategoryDetailBean extends GoodsNewsCategory {
+
+    @Schema(description = "所有标签(标签1,标签2)")
+    private String allTag;
+
+    @Schema(description = "新维度分类商品详情")
+    private List<GoodsNewsCategoryGoodsDetailBean> goodsList;
+
+}

+ 22 - 0
src/main/java/com/gree/mall/contest/bean/goods/GoodsNewsCategoryGoodsDetailBean.java

@@ -0,0 +1,22 @@
+package com.gree.mall.contest.bean.goods;
+
+
+import com.gree.mall.contest.plus.entity.Goods;
+import com.gree.mall.contest.plus.entity.GoodsNewsCategoryGoods;
+import com.gree.mall.contest.plus.entity.GoodsSpec;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class GoodsNewsCategoryGoodsDetailBean extends GoodsNewsCategoryGoods {
+
+    @Schema(description = "商品")
+    private Goods goods;
+
+    @Schema(description = "商品规格")
+    private List<GoodsSpec> goodsSpecs;
+}

+ 19 - 0
src/main/java/com/gree/mall/contest/bean/goods/GoodsNewsCategoryVimBean.java

@@ -0,0 +1,19 @@
+package com.gree.mall.contest.bean.goods;
+
+import com.gree.mall.contest.plus.entity.Goods;
+import com.gree.mall.contest.plus.entity.GoodsNewsCategory;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class GoodsNewsCategoryVimBean extends GoodsNewsCategory {
+
+    @Schema(description = "所选商品")
+    private List<Goods> goodsList;
+
+
+}

+ 32 - 0
src/main/java/com/gree/mall/contest/bean/template/TemplateBean.java

@@ -0,0 +1,32 @@
+package com.gree.mall.contest.bean.template;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TemplateBean {
+    @Schema(description = "公共模板id,新增时不用传")
+    private String commonTemplateId;
+
+    @Schema(description = "内容")
+    private String content;
+
+    @Schema(description = "模板名称")
+    private String name;
+
+    @Schema(description = "商品id列表")
+    private List<String> goodsIds;
+
+    @Schema(description = "水印")
+    private String logo;
+    @Schema(description = "水印开始时间")
+    private String logoStartTime;
+    @Schema(description = "水印结束时间")
+    private String logoEndTime;
+    @Schema(description = "1=说明管理 2=水印管理")
+    private Integer type;
+
+
+}

+ 16 - 0
src/main/java/com/gree/mall/contest/bean/template/TemplateDetailBean.java

@@ -0,0 +1,16 @@
+package com.gree.mall.contest.bean.template;
+
+import com.gree.mall.contest.bean.goods.GoodsSpecBean;
+import com.gree.mall.contest.plus.entity.CommonTemplate;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class TemplateDetailBean extends CommonTemplate {
+    @Schema(description = "商品列表")
+    private List<GoodsSpecBean> goodsList;
+}

+ 107 - 0
src/main/java/com/gree/mall/contest/controller/pc/goods/GoodsNewsCategoryController.java

@@ -0,0 +1,107 @@
+package com.gree.mall.contest.controller.pc.goods;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.contest.bean.goods.ActiveGoodsAddReqBean;
+import com.gree.mall.contest.bean.goods.GoodsActiveDetail;
+import com.gree.mall.contest.bean.goods.GoodsNewsCategoryDetailBean;
+import com.gree.mall.contest.bean.goods.GoodsNewsCategoryVimBean;
+import com.gree.mall.contest.helper.ResponseHelper;
+import com.gree.mall.contest.logic.goods.GoodsNewsCategoryLogic;
+import com.gree.mall.contest.plus.entity.GoodsNewsCategory;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@Tag(name = "小程序首页活动", description = "首页活动")
+@RequestMapping(value = "/goods/news/category", produces = "application/json; charset=utf-8")
+@RequiredArgsConstructor
+public class GoodsNewsCategoryController {
+
+    private final GoodsNewsCategoryLogic goodsNewsCategoryLogic;
+    
+    @Operation(summary = "分页获取商品新维度分类")
+    @GetMapping("/page")
+    public ResponseHelper<IPage<GoodsNewsCategory>> pageGoodsNewsCategory(
+            HttpServletRequest request,
+            @Parameter(description = "页号",required = true)@RequestParam Integer pageNum,
+            @Parameter(description = "页大小(-1不分页)",required = true)@RequestParam Integer pageSize
+    ){
+
+        return ResponseHelper.success(goodsNewsCategoryLogic.pageGoodsNewsCategory(request, pageNum, pageSize));
+    }
+
+
+    @Operation(summary = "添加新维度分类")
+    @PostMapping("/addGoodsNewsCategory")
+    public ResponseHelper<GoodsNewsCategory> addGoodsNewsCategory(
+            HttpServletRequest request,
+            @Parameter(description = "主标题",required = true)@RequestParam String mainTitle,
+            @Parameter(description = "副标题",required = true)@RequestParam String subTitle,
+            @Parameter(description = "1=普通商品 2=套购商品",required = true)@RequestParam int type,
+            @Parameter(description = "排序整数",required = true)@RequestParam Integer sortNum
+    ){
+        return ResponseHelper.success(goodsNewsCategoryLogic.addGoodsNewsCategory(request, mainTitle, subTitle,type,sortNum));
+    }
+
+
+    @Operation(summary = "编辑新维度分类")
+    @PostMapping("/vimGoodsNewsCategory")
+    public ResponseHelper vimGoodsNewsCategory(HttpServletRequest request, @RequestBody GoodsNewsCategoryVimBean reqDto){
+        goodsNewsCategoryLogic.vimGoodsNewsCategory(request, reqDto);
+        return ResponseHelper.success();
+    }
+
+    @Operation(summary = "关闭或开启新维度分类")
+    @PostMapping("/editStatus")
+    public ResponseHelper editStatus(HttpServletRequest request,  @Parameter(description = "id",required = true)@RequestParam String goodsNewsCategoryId,
+                                                   @Parameter(description = "状态 true:开启,false:关闭",required = true)@RequestParam Boolean status){
+        goodsNewsCategoryLogic.editStatus(goodsNewsCategoryId, status,request);
+        return ResponseHelper.success();
+    }
+
+    @Operation(summary = "删除新维度分类")
+    @PostMapping("/delete")
+    public ResponseHelper delete( HttpServletRequest request,@Parameter(description = "id",required = true)@RequestParam String goodsNewsCategoryId){
+        goodsNewsCategoryLogic.delete(goodsNewsCategoryId,request);
+        return ResponseHelper.success();
+    }
+
+    @Operation(summary = "新维度分类详情")
+    @GetMapping("/detail")
+    public ResponseHelper<GoodsNewsCategoryDetailBean> detail(@Parameter(description = "新维度分类id",required = true)@RequestParam String newsCategoryId){
+
+        return ResponseHelper.success(goodsNewsCategoryLogic.detail(newsCategoryId));
+    }
+
+    @Operation(summary = "添加活动商品")
+    @PostMapping("/addActiveGoods")
+    public ResponseHelper addActiveGoods(
+            HttpServletRequest request,
+            @RequestBody ActiveGoodsAddReqBean activeGoodsAddReqBean
+    ) {
+        goodsNewsCategoryLogic.addActiveGoods(request, activeGoodsAddReqBean);
+        return ResponseHelper.success();
+    }
+
+
+    @Operation(summary = "获取活动商品详情")
+    @GetMapping("/getGoodsActiveDetail")
+    public ResponseHelper<GoodsActiveDetail> getGoodsActiveDetail(
+
+            @RequestParam @Parameter(description = "唯一id(type>=2可取小程序模板id)",required = true)String objectId,
+            @RequestParam @Parameter(
+                    description = "类型: 1=新维度分类,2=首页弹窗, 3=活动专区1,4=活动专区2左侧,5=活动专区2右侧,6=专场专区1,7=专场专区2 , 8=专场专区3 , 9=专场专区4",
+                    required = true
+            )Integer type
+    ) {
+
+        return ResponseHelper.success(goodsNewsCategoryLogic.getGoodsActiveDetail(objectId, type));
+    }
+
+
+}

+ 85 - 0
src/main/java/com/gree/mall/contest/controller/pc/template/TemplateController.java

@@ -0,0 +1,85 @@
+package com.gree.mall.contest.controller.pc.template;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.contest.bean.template.TemplateBean;
+import com.gree.mall.contest.helper.ResponseHelper;
+import com.gree.mall.contest.logic.template.TemplateLogic;
+import com.gree.mall.contest.plus.entity.CommonTemplate;
+import com.gree.mall.contest.plus.entity.PubTemplate;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+
+@Slf4j
+@RestController
+@Tag(name = "公共模板", description = "公共模板")
+@RequestMapping(value = "/template", produces = "application/json; charset=utf-8")
+@RequiredArgsConstructor
+public class TemplateController {
+    private final TemplateLogic templateLogic;
+
+    @GetMapping("/list")
+    @Operation(summary = "模板列表")
+    public ResponseHelper<IPage<CommonTemplate>> list(
+            @Parameter(description = "1=说明管理 2=水印管理",required = false) @RequestParam(required = false) Integer type,
+            @Parameter(description = "页号", required = true) @RequestParam Integer pageNum,
+            @Parameter(description = "页大小", required = true) @RequestParam Integer pageSize,
+            HttpServletRequest request
+    ) {
+        IPage<CommonTemplate> list = templateLogic.list(type,pageNum, pageSize ,request);
+        return ResponseHelper.success(list);
+    }
+
+
+    @PostMapping("/save")
+    @Operation(summary = "创建模板")
+    public ResponseHelper<String> save(
+            @RequestBody TemplateBean templateBean,
+            HttpServletRequest request
+    ) throws ParseException {
+        return ResponseHelper.success(templateLogic.save(templateBean,request));
+    }
+
+
+    @PostMapping("/update")
+    @Operation(summary = "编辑模板")
+    public ResponseHelper<IPage<CommonTemplate>> update(
+            @RequestBody TemplateBean templateBean, HttpServletRequest request
+    ) throws ParseException {
+        return ResponseHelper.success(templateLogic.update(templateBean,request));
+    }
+
+    @PostMapping("/pub/update")
+    @Operation(summary = "编辑公共模板")
+    public ResponseHelper<String> updatePub(@RequestBody PubTemplate templateBean, HttpServletRequest request) {
+        return ResponseHelper.success(templateLogic.updatePub(templateBean,request));
+    }
+
+    @GetMapping("/pub/query")
+    @Operation(summary = "获取公共模板")
+    public ResponseHelper<PubTemplate> queryPub(HttpServletRequest request) {
+        return ResponseHelper.success(templateLogic.queryPub(request));
+    }
+
+
+    @PostMapping("/delete")
+    @Operation(summary = "删除模板")
+    public ResponseHelper<IPage<CommonTemplate>> delete(@Parameter(description = "模板id", required = true) @RequestParam String commonTemplateId) {
+        return ResponseHelper.success(templateLogic.delete(commonTemplateId));
+    }
+
+
+    @GetMapping("/detail")
+    @Operation(summary = "模板详情")
+    public ResponseHelper<IPage<CommonTemplate>> detail(@Parameter(description = "模板id", required = true) @RequestParam String commonTemplateId) {
+        return ResponseHelper.success(templateLogic.detail(commonTemplateId));
+    }
+
+
+}

+ 22 - 0
src/main/java/com/gree/mall/contest/enums/GoodsNewsCategoryGoodsTypeEnum.java

@@ -0,0 +1,22 @@
+package com.gree.mall.contest.enums;
+
+import lombok.Getter;
+
+/**
+ * 分类商品type enum
+ */
+@Getter
+public enum GoodsNewsCategoryGoodsTypeEnum {
+
+    news(1,"新维度分类"),
+
+    ;
+
+    private final int code;
+    private final String msg;
+
+    GoodsNewsCategoryGoodsTypeEnum(int code, String msg){
+        this.msg = msg;
+        this.code = code;
+    }
+}

+ 282 - 0
src/main/java/com/gree/mall/contest/logic/goods/GoodsNewsCategoryLogic.java

@@ -0,0 +1,282 @@
+package com.gree.mall.contest.logic.goods;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.aliyuncs.utils.StringUtils;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.contest.bean.admin.AdminUserCom;
+import com.gree.mall.contest.bean.goods.*;
+import com.gree.mall.contest.enums.GoodsNewsCategoryGoodsTypeEnum;
+import com.gree.mall.contest.exception.RemoteServiceException;
+import com.gree.mall.contest.logic.common.CommonLogic;
+import com.gree.mall.contest.plus.entity.Goods;
+import com.gree.mall.contest.plus.entity.GoodsNewsCategory;
+import com.gree.mall.contest.plus.entity.GoodsNewsCategoryGoods;
+import com.gree.mall.contest.plus.entity.GoodsSpec;
+import com.gree.mall.contest.plus.service.GoodsNewsCategoryGoodsService;
+import com.gree.mall.contest.plus.service.GoodsNewsCategoryService;
+import com.gree.mall.contest.plus.service.GoodsService;
+import com.gree.mall.contest.plus.service.GoodsSpecService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class GoodsNewsCategoryLogic {
+
+    private final GoodsNewsCategoryService goodsNewsCategoryService;
+    private final GoodsNewsCategoryGoodsService goodsNewsCategoryGoodsService;
+    private final GoodsService goodsService;
+    private final GoodsSpecService goodsSpecService;
+    private final CommonLogic commonLogic;
+
+
+
+    /**
+     * 分页获取商品新维度分类
+     */
+    public IPage<GoodsNewsCategory> pageGoodsNewsCategory(HttpServletRequest request, Integer pageNum, Integer pageSize) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        List<String> companyWechatIds = adminUser.getCompanyWechatIds();
+
+        return goodsNewsCategoryService.lambdaQuery()
+                .in(CollectionUtil.isNotEmpty(companyWechatIds), GoodsNewsCategory::getCompanyWechatId, companyWechatIds)
+                .orderByAsc(GoodsNewsCategory::getSortNum)
+                .page(new Page<>(pageNum, pageSize));
+    }
+
+    /**
+     * 添加新维度分类
+     */
+    public GoodsNewsCategory addGoodsNewsCategory(HttpServletRequest request, String mainTitle, String subTitle,Integer type,Integer sortNum) {
+
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        String loginCompanyWechatId = adminUser.getLoginCompanyWechatId();
+        if (StringUtils.isEmpty(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无添加新维度分类权限");
+        }
+        if (goodsNewsCategoryService.lambdaQuery()
+                .eq(sortNum !=null,GoodsNewsCategory::getSortNum,sortNum)
+                .eq(GoodsNewsCategory::getCompanyWechatId, loginCompanyWechatId)
+                .count() > 0)
+            throw new RemoteServiceException("排序重复,请修改");
+
+        GoodsNewsCategory goodsNewsCategory = new GoodsNewsCategory();
+        goodsNewsCategory.setMainTitle(mainTitle);
+        goodsNewsCategory.setSubTitle(subTitle);
+        goodsNewsCategory.setType(type);
+        goodsNewsCategory.setCreateBy(adminUser.getAdminUserId());
+        goodsNewsCategory.setCompanyWechatId(loginCompanyWechatId);
+        goodsNewsCategory.setCompanyName(adminUser.getLoginCompanyName());
+        goodsNewsCategory.setSortNum(sortNum);
+        goodsNewsCategory.insert();
+
+        return goodsNewsCategory;
+
+    }
+
+
+    /**
+     * 编辑新维度分类
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void vimGoodsNewsCategory(HttpServletRequest request, GoodsNewsCategoryVimBean reqDto) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        String loginCompanyWechatId = adminUser.getLoginCompanyWechatId();
+        if (StringUtils.isEmpty(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无编辑新维度分类权限");
+        }
+        String goodsNewsCategoryId = reqDto.getGoodsNewsCategoryId();
+        if (StringUtils.isEmpty(goodsNewsCategoryId)) {
+            throw new RemoteServiceException("无效新维度分类");
+        }
+        if (reqDto.getSortNum()!= null && goodsNewsCategoryService.lambdaQuery()
+                .eq(reqDto.getSortNum() !=null,GoodsNewsCategory::getSortNum,reqDto.getSortNum())
+                .eq(GoodsNewsCategory::getCompanyWechatId, loginCompanyWechatId)
+                .ne(GoodsNewsCategory::getGoodsNewsCategoryId,reqDto.getGoodsNewsCategoryId())
+                .count() > 0)
+            throw new RemoteServiceException("排序重复,请修改");
+
+        //清除原先所有关系
+ /*       initGoodsNewsCategory(goodsNewsCategoryId, loginCompanyWechatId, GoodsNewsCategoryGoodsTypeEnum.news.getCode());*/
+
+        //更新新维度分类
+        reqDto.updateById();
+
+        //添加商品
+ /*       addNewsCategoryGoods(goodsNewsCategoryId, loginCompanyWechatId, adminUser.getCompanyName(),
+                GoodsNewsCategoryGoodsTypeEnum.news.getCode(), reqDto.getGoodsList());*/
+    }
+
+    /**
+     * 添加活动商品
+     */
+    public void addActiveGoods(HttpServletRequest request, ActiveGoodsAddReqBean activeGoodsAddReqBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        String loginCompanyWechatId = adminUser.getLoginCompanyWechatId();
+        if (StringUtils.isEmpty(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无编辑权限");
+        }
+        //初始化活动商品
+        initGoodsNewsCategory(activeGoodsAddReqBean.getObjectId(), loginCompanyWechatId, activeGoodsAddReqBean.getType());
+
+        //添加活动商品
+        addNewsCategoryGoods(activeGoodsAddReqBean.getObjectId(), loginCompanyWechatId, adminUser.getLoginCompanyName(),
+                activeGoodsAddReqBean.getType(), activeGoodsAddReqBean.getGoodsList()
+               );
+    }
+
+    /**
+     * 添加分类商品  1=新维度分类,2=首页弹窗, 3=活动专区1,4=活动专区2左侧,5=活动专区2右侧,6=专场专区1,7=专场专区2 , 8=专场专区3 , 9=专场专区4
+     */
+    public void addNewsCategoryGoods(String objectId, String companyWechatId, String companyName,
+                                     Integer type, List<Goods> goodsList) {
+
+        //添加新维度分类的商品
+        if (!CollectionUtil.isNotEmpty(goodsList))
+            return;
+
+        //添加新维度分类的商品
+        List<GoodsNewsCategoryGoods> newsCategoryGoodsList = new ArrayList<>();
+        for (Goods goods : goodsList) {
+            GoodsNewsCategoryGoods goodsNewsCategoryGoods = new GoodsNewsCategoryGoods();
+            newsCategoryGoodsList.add(goodsNewsCategoryGoods);
+
+            goodsNewsCategoryGoods.setObjId(objectId);
+            goodsNewsCategoryGoods.setType(type);
+            goodsNewsCategoryGoods.setGoodsId(goods.getGoodsId());
+            goodsNewsCategoryGoods.setGoodsName(goods.getGoodsName());
+            goodsNewsCategoryGoods.setCompanyWechatId(companyWechatId);
+            goodsNewsCategoryGoods.setCompanyName(companyName);
+            goodsNewsCategoryGoods.setCreateTime(new Date());
+
+        }
+        goodsNewsCategoryGoodsService.saveBatch(newsCategoryGoodsList);
+
+    }
+
+    /**
+     * 初始化分类商品  1=新维度分类,2=首页弹窗, 3=活动专区1,4=活动专区2左侧,5=活动专区2右侧,6=专场专区1,7=专场专区2 , 8=专场专区3 , 9=专场专区4
+     */
+    private void initGoodsNewsCategory(String objecId, String companyWechatId, Integer type) {
+
+        List<GoodsNewsCategoryGoods> list = goodsNewsCategoryGoodsService.lambdaQuery()
+                .select(GoodsNewsCategoryGoods::getGoodsNewsCategoryGoodsId)
+                .eq(GoodsNewsCategoryGoods::getCompanyWechatId, companyWechatId)
+                .eq(GoodsNewsCategoryGoods::getObjId, objecId)
+                .eq(GoodsNewsCategoryGoods::getType, type)
+                .list();
+        if (CollectionUtil.isEmpty(list)) {
+            return;
+        }
+        List<String> newsCategoryGoodsIdList = list.stream().map(GoodsNewsCategoryGoods::getGoodsNewsCategoryGoodsId).collect(Collectors.toList());
+
+        //删除与新维度分类商品
+        goodsNewsCategoryGoodsService.lambdaUpdate()
+                .in(GoodsNewsCategoryGoods::getGoodsNewsCategoryGoodsId, newsCategoryGoodsIdList)
+                .remove();
+
+    }
+
+
+    /**
+     * 新维度分类详情
+     */
+    public GoodsNewsCategoryDetailBean detail(String newsCategoryId) {
+        GoodsNewsCategoryDetailBean respDto = new GoodsNewsCategoryDetailBean();
+        String allTag = null;
+
+        GoodsNewsCategory byId = goodsNewsCategoryService.getById(newsCategoryId);
+        if (byId == null) {
+            return respDto;
+        }
+        BeanUtils.copyProperties(byId, respDto);
+
+        GoodsActiveDetail goodsActiveDetail = getGoodsActiveDetail(byId.getGoodsNewsCategoryId(), GoodsNewsCategoryGoodsTypeEnum.news.getCode());
+        respDto.setGoodsList(goodsActiveDetail.getActiveGoodsList());
+        return respDto;
+
+    }
+
+    /**
+     * 获取活动商品详情 1=新维度分类,2=首页弹窗, 3=活动专区1,4=活动专区2左侧,5=活动专区2右侧,6=专场专区1,7=专场专区2 , 8=专场专区3 , 9=专场专区4
+     */
+    public GoodsActiveDetail getGoodsActiveDetail(String objectId, Integer type) {
+
+        //活动商品
+        List<GoodsNewsCategoryGoods> list = goodsNewsCategoryGoodsService.lambdaQuery()
+                .eq(GoodsNewsCategoryGoods::getObjId, objectId)
+                .eq(GoodsNewsCategoryGoods::getType, type)
+                .list();
+
+
+        List<GoodsNewsCategoryGoodsDetailBean> respNewsCategoryGoodsList = new ArrayList<>();
+        for (GoodsNewsCategoryGoods newsCategoryGoods : list
+        ) {
+            GoodsNewsCategoryGoodsDetailBean respNewsCategoryGood = new GoodsNewsCategoryGoodsDetailBean();
+            BeanUtils.copyProperties(newsCategoryGoods, respNewsCategoryGood);
+            respNewsCategoryGoodsList.add(respNewsCategoryGood);
+
+            //商品
+            Goods goods = goodsService.getById(newsCategoryGoods.getGoodsId());
+            respNewsCategoryGood.setGoods(goods);
+
+            //商品规格
+            List<GoodsSpec> goodsSpecList = goodsSpecService.lambdaQuery().eq(GoodsSpec::getGoodsId, newsCategoryGoods.getGoodsId()).list();
+            respNewsCategoryGood.setGoodsSpecs(goodsSpecList);
+
+        }
+
+        GoodsActiveDetail goodsActiveDetail = new GoodsActiveDetail();
+        goodsActiveDetail.setActiveGoodsList(respNewsCategoryGoodsList);
+        return goodsActiveDetail;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void editStatus(String goodsNewsCategoryId, Boolean status, HttpServletRequest request) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        String loginCompanyWechatId = adminUser.getLoginCompanyWechatId();
+        GoodsNewsCategoryVimBean goodsNewsCategoryVimBean = new GoodsNewsCategoryVimBean();
+        goodsNewsCategoryVimBean.setGoodsNewsCategoryId(goodsNewsCategoryId);
+        goodsNewsCategoryVimBean.setStatus(status);
+
+        if (StringUtils.isEmpty(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无编辑新维度分类权限");
+        }
+        if (StringUtils.isEmpty(goodsNewsCategoryId)) {
+            throw new RemoteServiceException("无效新维度分类");
+        }
+
+        //更新新维度分类
+        goodsNewsCategoryVimBean.updateById();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(String goodsNewsCategoryId, HttpServletRequest request) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        String loginCompanyWechatId = adminUser.getLoginCompanyWechatId();
+        if (StringUtils.isEmpty(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无编辑新维度分类权限");
+        }
+        if (StringUtils.isEmpty(goodsNewsCategoryId)) {
+            throw new RemoteServiceException("无效新维度分类");
+        }
+        //清除原先所有关系
+        initGoodsNewsCategory(goodsNewsCategoryId, loginCompanyWechatId, GoodsNewsCategoryGoodsTypeEnum.news.getCode());
+
+        GoodsNewsCategoryVimBean goodsNewsCategoryVimBean = new GoodsNewsCategoryVimBean();
+        goodsNewsCategoryVimBean.setGoodsNewsCategoryId(goodsNewsCategoryId);
+        //删除新维度分类
+        goodsNewsCategoryVimBean.deleteById();
+    }
+}

+ 221 - 0
src/main/java/com/gree/mall/contest/logic/template/TemplateLogic.java

@@ -0,0 +1,221 @@
+package com.gree.mall.contest.logic.template;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.contest.bean.admin.AdminUserCom;
+import com.gree.mall.contest.bean.template.TemplateBean;
+import com.gree.mall.contest.bean.template.TemplateDetailBean;
+import com.gree.mall.contest.commonmapper.CustomGoodsMapper;
+import com.gree.mall.contest.exception.RemoteServiceException;
+import com.gree.mall.contest.logic.common.CommonLogic;
+import com.gree.mall.contest.logic.goods.GoodsLogic;
+import com.gree.mall.contest.plus.entity.CommonTemplate;
+import com.gree.mall.contest.plus.entity.GoodsTemplate;
+import com.gree.mall.contest.plus.entity.PubTemplate;
+import com.gree.mall.contest.plus.service.CommonTemplateService;
+import com.gree.mall.contest.plus.service.GoodsTemplateService;
+import com.gree.mall.contest.plus.service.PubTemplateService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class TemplateLogic {
+    private final CommonTemplateService commonTemplateService;
+    private final CustomGoodsMapper customGoodsMapper;
+    private final PubTemplateService pubTemplateService;
+    private final GoodsTemplateService goodsTemplateService;
+    private final CommonLogic commonLogic;
+    private final GoodsLogic goodsLogic;
+
+
+    public IPage<CommonTemplate> list(Integer type, Integer pageNum, Integer pageSize, HttpServletRequest request) {
+        if(type == null){
+            type = 1;
+        }
+        //获取当前登录企业微信id
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        List<String> companyWechatIds = adminUser.getCompanyWechatIds();
+
+        return commonTemplateService.lambdaQuery()
+                .orderByAsc(CommonTemplate::getCommonTemplateId)
+                .orderByDesc(CommonTemplate::getCreateTime)
+                .eq(CommonTemplate::getType,type)
+                .in(CollectionUtil.isNotEmpty(companyWechatIds), CommonTemplate::getCompanyWechatId, companyWechatIds)
+                .page(new Page<>(pageNum, pageSize));
+    }
+
+    @Transactional
+    public String save(TemplateBean templateBean, HttpServletRequest request) throws ParseException {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        if (StringUtils.isEmpty(adminUser.getLoginCompanyWechatId())) {
+            throw new RemoteServiceException("无效微信企业id");
+        }
+        if(templateBean.getType() == null){
+            templateBean.setType(1);
+        }
+        CommonTemplate commonTemplate = new CommonTemplate();
+        commonTemplate.setContent(templateBean.getContent());
+        commonTemplate.setName(templateBean.getName());
+        commonTemplate.setCreateTime(new Date());
+        commonTemplate.setType(templateBean.getType());
+        commonTemplate.setCompanyWechatId(adminUser.getLoginCompanyWechatId());
+        commonTemplate.setCompanyName(adminUser.getLoginCompanyName());
+        commonTemplate.setLogo(templateBean.getLogo());
+        if(templateBean.getLogoStartTime() != null) {
+            commonTemplate.setLogoStartTime(DateUtil.parseDate(templateBean.getLogoStartTime()));
+        }
+        if(templateBean.getLogoEndTime() != null) {
+            commonTemplate.setLogoEndTime(DateUtil.parseDate(templateBean.getLogoEndTime()));
+        }
+        commonTemplateService.save(commonTemplate);
+        if (templateBean.getGoodsIds() == null || templateBean.getGoodsIds().size() < 1) {
+            return commonTemplate.getCommonTemplateId();
+        }
+        List<GoodsTemplate> goodsTemplateList = new ArrayList<>();
+        for (String goodsId : templateBean.getGoodsIds()) {
+            GoodsTemplate goodsTemplate = new GoodsTemplate();
+            goodsTemplate.setGoodsId(goodsId);
+            goodsTemplate.setTemplateId(commonTemplate.getCommonTemplateId());
+            goodsTemplate.setCreateTime(new Date());
+            goodsTemplate.setCompanyWechatId(adminUser.getLoginCompanyWechatId());
+            goodsTemplate.setCompanyName(adminUser.getLoginCompanyName());
+            goodsTemplateList.add(goodsTemplate);
+        }
+        goodsTemplateService.saveBatch(goodsTemplateList);
+
+        //全量更新商品的logo
+        if(templateBean.getType() != null && templateBean.getType() == 2){
+            goodsLogic.updateGoodsLogo(templateBean.getGoodsIds(),templateBean.getLogo(),templateBean.getLogoStartTime(),templateBean.getLogoEndTime(), true);
+        }
+
+        return commonTemplate.getCommonTemplateId();
+    }
+
+    public String updatePub(PubTemplate templateBean, HttpServletRequest request) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        if (StringUtils.isEmpty(adminUser.getLoginCompanyWechatId())) {
+            throw new RemoteServiceException("无效微信企业id");
+        }
+
+        PubTemplate pubTemplate = new PubTemplate();
+        pubTemplate.setPubTemplateId(adminUser.getLoginCompanyWechatId());
+        pubTemplate.setContent(templateBean.getContent());
+        pubTemplate.setName("公共模块");
+        pubTemplate.setCreateTime(new Date());
+        pubTemplate.setCompanyWechatId(adminUser.getLoginCompanyWechatId());
+        pubTemplate.setCompanyName(adminUser.getLoginCompanyName());
+        pubTemplateService.saveOrUpdate(pubTemplate);
+        return pubTemplate.getPubTemplateId();
+    }
+
+    public PubTemplate queryPub(HttpServletRequest request) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        if (StringUtils.isEmpty(adminUser.getLoginCompanyWechatId())) {
+            throw new RemoteServiceException("无效微信企业id");
+        }
+
+        return pubTemplateService.lambdaQuery()
+                .in(CollectionUtil.isNotEmpty(adminUser.getCompanyWechatIds()),PubTemplate::getCompanyWechatId,adminUser.getCompanyWechatIds())
+                .one();
+    }
+
+    @Transactional
+    public String update(TemplateBean templateBean, HttpServletRequest request) throws ParseException {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        if (StringUtils.isEmpty(adminUser.getLoginCompanyWechatId())) {
+            throw new RemoteServiceException("无效微信企业id");
+        }
+
+        final CommonTemplate oldTemplate = commonTemplateService.getById(templateBean.getCommonTemplateId());
+
+        commonTemplateService.lambdaUpdate()
+                .eq(CommonTemplate::getCommonTemplateId, templateBean.getCommonTemplateId())
+                .set(CommonTemplate::getContent, templateBean.getContent())
+                .set(CommonTemplate::getName, templateBean.getName())
+                .set(CommonTemplate::getType,templateBean.getType())
+                .set(CommonTemplate::getUpdateTime, new Date())
+                .set(CommonTemplate::getLogo,templateBean.getLogo())
+                .set(CommonTemplate::getLogoStartTime,templateBean.getLogoStartTime())
+                .set(CommonTemplate::getLogoEndTime,templateBean.getLogoEndTime())
+                .update();
+        if (templateBean.getGoodsIds() == null || templateBean.getGoodsIds().size() < 1) {
+            return templateBean.getCommonTemplateId();
+        }
+
+        List<GoodsTemplate> oldTemplateList = new ArrayList<>();
+        if (Objects.nonNull(templateBean.getType()) && templateBean.getType() == 2) {
+            oldTemplateList = goodsTemplateService.lambdaQuery()
+                    .select(GoodsTemplate::getGoodsId)
+                    .eq(GoodsTemplate::getTemplateId, templateBean.getCommonTemplateId())
+                    .list();
+        }
+        goodsTemplateService.lambdaUpdate()
+                .eq(GoodsTemplate::getTemplateId, templateBean.getCommonTemplateId())
+                .remove();
+
+        List<GoodsTemplate> goodsTemplateList = new ArrayList<>();
+        for (String goodsId : templateBean.getGoodsIds()) {
+            GoodsTemplate goodsTemplate = new GoodsTemplate();
+            goodsTemplate.setGoodsId(goodsId);
+            goodsTemplate.setTemplateId(templateBean.getCommonTemplateId());
+            goodsTemplate.setCreateTime(new Date());
+            goodsTemplate.setCompanyWechatId(adminUser.getLoginCompanyWechatId());
+            goodsTemplate.setCompanyName(adminUser.getLoginCompanyName());
+            goodsTemplateList.add(goodsTemplate);
+        }
+        goodsTemplateService.saveBatch(goodsTemplateList);
+
+        //全量更新商品的logo
+        if(templateBean.getType() != null && templateBean.getType() == 2){
+            // 旧历史不为空查出需要移除水印信息的商品id
+            if (CollectionUtil.isNotEmpty(oldTemplateList)) {
+
+                final List<String> oldGoodsIds = oldTemplateList.stream().map(GoodsTemplate::getGoodsId).collect(Collectors.toList());
+                List<String> clearGoodsIds = new ArrayList();
+                for (String oldGoodsId : oldGoodsIds) {
+                    if (!templateBean.getGoodsIds().contains(oldGoodsId)) {
+                        clearGoodsIds.add(oldGoodsId);
+                    }
+                }
+                if (CollectionUtil.isNotEmpty(clearGoodsIds)) {
+                    goodsLogic.updateGoodsLogo(clearGoodsIds, null, null, null, true);
+                }
+            }
+            goodsLogic.updateGoodsLogo(templateBean.getGoodsIds(), templateBean.getLogo(), templateBean.getLogoStartTime(), templateBean.getLogoEndTime(), oldTemplate.getLogo().equals(templateBean.getLogo()));
+        }
+
+        return templateBean.getCommonTemplateId();
+    }
+
+    public String delete(String commonTemplateId) {
+        commonTemplateService.removeById(commonTemplateId);
+        goodsTemplateService.lambdaUpdate().eq(GoodsTemplate::getTemplateId, commonTemplateId).remove();
+        return commonTemplateId;
+    }
+
+    public TemplateDetailBean detail(String commonTemplateId) {
+        CommonTemplate commonTemplate = commonTemplateService.getById(commonTemplateId);
+        TemplateDetailBean templateDetailBean = new TemplateDetailBean();
+        BeanUtils.copyProperties(commonTemplate, templateDetailBean);
+        templateDetailBean.setGoodsList(customGoodsMapper.list(commonTemplateId));
+        return templateDetailBean;
+    }
+
+
+}