Ver código fonte

新增:微信端产品列表和立即购买分配商品接口。

lym 4 anos atrás
pai
commit
dedd74f127

+ 64 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/controller/web/GoodsManageTwoController.java

@@ -0,0 +1,64 @@
+package com.hcloud.microserver.h5.controller.web;
+
+import com.github.pagehelper.PageInfo;
+import com.hcloud.microserver.commoncore.annotation.AuthCarbonValidate;
+import com.hcloud.microserver.commoncore.base.BaseController;
+import com.hcloud.microserver.commoncore.base.ResponseBase;
+import com.hcloud.microserver.commoncore.base.ResultVO;
+import com.hcloud.microserver.commoncore.enums.ResultEnum;
+import com.hcloud.microserver.commoncore.exception.GlobalException;
+import com.hcloud.microserver.facade.carbon.forms.GoodsInfoForm;
+import com.hcloud.microserver.h5.forms.GoodsManageQueryForm;
+import com.hcloud.microserver.h5.service.GoodsManageService;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 2.0版本商品接口
+ * lym
+ */
+@Api(description = "商品信息接口")
+@RestController
+@RequestMapping("/wap/goodsManage")
+public class GoodsManageTwoController extends BaseController {
+
+    @Autowired
+    private GoodsManageService goodsManageService;
+
+    /**
+     * lym
+     * @param goodsManageQueryForm
+     * @return
+     */
+    @ApiOperation(value = "按类型分页查询商品信息",notes = "获取用户信息,按类型分页查询")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "goodsManageQueryForm",value = "商品查询信息", dataType = "GoodsManageQueryForm")
+    })
+    @ApiResponse(code =0,message = "查询成功")
+    @PostMapping("/searchByPage")
+    @AuthCarbonValidate
+    public ResponseBase searchByPage(@RequestBody GoodsManageQueryForm goodsManageQueryForm){
+        PageInfo pageInfo = goodsManageService.searchGoodsInfoByPage(goodsManageQueryForm);
+        return responseSuccess(pageInfo);
+    }
+
+    @ApiOperation(value = "传入购碳量分配商品",notes = "传入购碳量分配商品")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "carbonNum",value = "购碳量", dataType = "Integer",paramType = "query")
+    })
+    @ApiResponse(code =0,message = "查询成功")
+    @GetMapping("/getGoodsInfoByCarbonNum")
+    @AuthCarbonValidate
+    public ResponseBase getGoodsInfoByCarbonNum(@RequestParam("carbonNum") Integer carbonNum){
+        if (carbonNum > 9999999){
+            throw new GlobalException(ResultEnum.FAILURE.getCode(),"购碳量过大");
+        }
+        List<GoodsInfoForm> list = goodsManageService.getGoodsInfoByCarbon(carbonNum);
+        ResultVO resultVO = new ResultVO();
+        resultVO.setData(list);
+        return responseSuccess(resultVO);
+    }
+}

+ 27 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/dao/GoodsManageMapper.java

@@ -0,0 +1,27 @@
+package com.hcloud.microserver.h5.dao;
+
+import com.hcloud.microserver.facade.carbon.forms.GoodsInfoForm;
+import com.hcloud.microserver.h5.bo.GoodsInfoBO;
+import com.hcloud.microserver.h5.forms.GoodsManageQueryForm;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface GoodsManageMapper {
+
+    /**
+     * 商品信息列表
+     * lym
+     * @param goodsManageQueryForm
+     * @return
+     */
+    List<GoodsInfoBO> searchGoodsInfoByPage(GoodsManageQueryForm goodsManageQueryForm);
+
+    /**
+     * 查询帮扶主体商品
+     * lym
+     * @param namePy
+     * @return
+     */
+    List<GoodsInfoForm> getBuyGoodsInfo(@Param("namePy") String namePy,@Param("orderStr") String orderStr);
+}

+ 19 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/forms/GoodsManageQueryForm.java

@@ -0,0 +1,19 @@
+package com.hcloud.microserver.h5.forms;
+
+
+import com.hcloud.microserver.h5.common.PageForm;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class GoodsManageQueryForm extends PageForm {
+
+    @ApiModelProperty(value = "产品类型id",example = "产品类型id")
+    private String productTypeGuid;
+
+    /**
+     * 模糊查询字符串
+     */
+    @ApiModelProperty(value = "模糊查询字符串",example = "模糊查询字符串")
+    private String queryStr;
+}

+ 26 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/service/GoodsManageService.java

@@ -0,0 +1,26 @@
+package com.hcloud.microserver.h5.service;
+
+import com.github.pagehelper.PageInfo;
+import com.hcloud.microserver.facade.carbon.forms.GoodsInfoForm;
+import com.hcloud.microserver.h5.forms.GoodsManageQueryForm;
+
+import java.util.List;
+
+public interface GoodsManageService {
+
+    /**
+     * 商品信息列表
+     * lym
+     * @param goodsManageQueryForm
+     * @return
+     */
+    PageInfo searchGoodsInfoByPage(GoodsManageQueryForm goodsManageQueryForm);
+
+    /**
+     * 通过需求碳汇量获取商品信息列表
+     * lym
+     * @param carbonNum
+     * @return
+     */
+    List<GoodsInfoForm> getGoodsInfoByCarbon(Integer carbonNum);
+}

+ 199 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/service/impl/GoodsManageServiceImpl.java

@@ -0,0 +1,199 @@
+package com.hcloud.microserver.h5.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.hcloud.microserver.commoncore.exception.GlobalException;
+import com.hcloud.microserver.facade.carbon.forms.GoodsInfoForm;
+import com.hcloud.microserver.h5.bo.GoodsInfoBO;
+import com.hcloud.microserver.h5.dao.GoodsManageMapper;
+import com.hcloud.microserver.h5.forms.GoodsManageQueryForm;
+import com.hcloud.microserver.h5.service.GoodsManageService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class GoodsManageServiceImpl implements GoodsManageService {
+
+    @Resource
+    private GoodsManageMapper goodsManageMapper;
+
+    @Override
+    public PageInfo searchGoodsInfoByPage(GoodsManageQueryForm goodsManageQueryForm) {
+        PageHelper.startPage(goodsManageQueryForm.getPageNo(),goodsManageQueryForm.getPageSize());
+        List<GoodsInfoBO> list = goodsManageMapper.searchGoodsInfoByPage(goodsManageQueryForm);
+        return new PageInfo(list);
+    }
+
+    @Override
+    public List<GoodsInfoForm> getGoodsInfoByCarbon(Integer carbonNum) {
+        if (carbonNum == 0)  return null;
+
+        //随机分配商品
+        Map<String,List<GoodsInfoForm>> helpMap = selectGoodsInfo(1,carbonNum);
+        List<GoodsInfoForm> resultList = new ArrayList<>();
+        Map<String,GoodsInfoForm> resultMap = new HashMap<>();
+        if (helpMap != null && helpMap.size() > 0){
+            resultList = getRandomPY(resultMap,helpMap,carbonNum,1);
+        }
+
+        return resultList;
+    }
+
+    /**
+     * 查询农户随机集
+     * lym
+     * @return
+     */
+    private Map<String,List<GoodsInfoForm>> selectGoodsInfo(Integer pageNo, int buyNum){
+        Integer pageSize = 5;
+
+        String orderStr = null;
+        if (buyNum > 300){ //购买大于300kg多的排前
+            //PageHelper.orderBy("tmp.unsaledCarbonSkin DESC");
+            orderStr = "ORDER BY tmp.unsaledCarbonSkin DESC";
+        }else {
+            //PageHelper.orderBy("tmp.saledCarbonSkin ASC,tmp.unsaledCarbonSkin DESC");
+            orderStr = "ORDER BY tmp.saledCarbonSkin ASC,tmp.unsaledCarbonSkin DESC";
+        }
+
+        List<String> RandomStrings = getRandomString(pageSize); //开发主体首字母
+        Map<String,List<GoodsInfoForm>> helpMap = new HashMap();
+        for (String namePy:RandomStrings){ //循环获取
+            PageHelper.startPage(pageNo,pageSize);
+            List<GoodsInfoForm> list = goodsManageMapper.getBuyGoodsInfo(namePy,orderStr);
+            if (list != null && list.size() > 0)
+                helpMap.put(namePy,list);
+        }
+        return helpMap;
+    }
+
+    /**
+     * 随机生成字母
+     * lym
+     * @param length
+     * @return
+     */
+    public List<String> getRandomString(int length) {
+        List<String> RandomString = new ArrayList<>();
+
+        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+        Random random = new Random();
+        for (int i = 0; i < length; ++i) {
+            int number = random.nextInt(26);// [0,26)
+            RandomString.add(String.valueOf(str.charAt(number)));
+        }
+        return RandomString;
+    }
+
+    /**
+     * lym
+     * 主体首字母随机分购
+     * @return
+     */
+    private List<GoodsInfoForm> getRandomPY(Map<String,GoodsInfoForm> resultMap,Map<String,List<GoodsInfoForm>> helpMap,int buyNum
+            ,Integer pageNo) {
+        Collection<String> resultKeys = resultMap.keySet();
+        //随机用户集
+        List<GoodsInfoForm> list = new ArrayList<>();
+        if (helpMap.size() <= 2){
+            Collection<List<GoodsInfoForm>> values = helpMap.values();
+            for (List<GoodsInfoForm> valueList:values) {
+                list.addAll(valueList);
+            }
+        }else {//获取随机农户集
+            list = getGoodsInfos(helpMap,resultKeys);
+        }
+        List<GoodsInfoForm> resultList = getRandom(resultMap,list,buyNum,pageNo);
+        return resultList;
+    }
+
+    /**
+     * 获取分组内的随机主体
+     * lym
+     * @return
+     */
+    private List<GoodsInfoForm> getGoodsInfos(Map<String,List<GoodsInfoForm>> helpMap,Collection<String> resultKeys){
+        Collection<List<GoodsInfoForm>> values = helpMap.values();
+        List<GoodsInfoForm> list = new ArrayList<>();
+        for (List<GoodsInfoForm> valueList:values){ //获取随机主体集
+            int number = new Random().nextInt(valueList.size());
+            GoodsInfoForm info = valueList.get(number);
+            if (resultKeys != null && resultKeys.contains(info.getGuid())){
+                number += 1;
+                if (valueList.size() > 1 && number != valueList.size()){
+                    info = valueList.get(valueList.size() -1);
+                }else {
+                    continue;
+                }
+            }
+            list.add(info);
+        }
+        return list;
+    }
+
+    /**
+     * lym
+     * 随机分配主体
+     * @return
+     */
+    private List<GoodsInfoForm> getRandom(Map<String,GoodsInfoForm> resultMap,List<GoodsInfoForm> list,int buyNum,Integer pageNo) {
+        Collection<String> resultKeys = resultMap.keySet();
+        List<GoodsInfoForm> resultList = new ArrayList<>();
+        int total = 0, unBuyNum = buyNum;
+
+        if (list.size() == 1) { //一个主体
+            GoodsInfoForm info = list.get(0);
+            int unsaledCarbonSkin = info.getUnsaledCarbonSkin().intValue();
+            if (unsaledCarbonSkin >= buyNum) { //大于购买量
+                info.setCarbonSkin(BigDecimal.valueOf(Double.valueOf(buyNum)));
+                resultList.add(info);
+                return resultList;
+            }
+            //只查询到一个随机主体,未达到四次追加,继续追加
+            info.setCarbonSkin(info.getUnsaledCarbonSkin());
+            resultList.add(info);
+            resultMap.put(info.getGuid(), info);
+            total += unsaledCarbonSkin;
+            unBuyNum = unBuyNum - unsaledCarbonSkin;
+        }
+
+        if (list.size() > 1) { //多个主体
+            for (int i = 0; i < list.size(); i++) {
+                GoodsInfoForm info = list.get(i);
+                if (resultKeys.contains(info.getGuid())) continue; //主体已存在
+                int unsaledCarbonSkin = info.getUnsaledCarbonSkin().intValue();
+                if (unsaledCarbonSkin >= unBuyNum) { //大于购买量
+                    info.setCarbonSkin(BigDecimal.valueOf(Double.valueOf(buyNum)));
+                    total += unBuyNum;
+                    unBuyNum = unBuyNum - unBuyNum;
+                } else {
+                    info.setCarbonSkin(info.getUnsaledCarbonSkin());
+                    total += unsaledCarbonSkin;
+                    unBuyNum = unBuyNum - unsaledCarbonSkin;
+                }
+                resultMap.put(info.getGuid(), info);
+                if (total == buyNum) break;
+            }
+        }
+
+        //列表循环完,分配不够,追加主体
+        if (total < buyNum){
+            if (pageNo == 4){
+                throw new GlobalException(1,"购买量过大");
+            }
+            pageNo = pageNo + 1;
+            Map<String,List<GoodsInfoForm>> farmList = selectGoodsInfo(pageNo,unBuyNum);
+            if (farmList != null && farmList.size() > 0) {
+                getRandomPY(resultMap, farmList, unBuyNum, pageNo);
+            }else {
+                throw new GlobalException(1,"碳汇量不够购买量");
+            }
+        }
+
+        resultList = new ArrayList<>(resultMap.values());
+        return resultList;
+    }
+}

+ 81 - 0
carbon-h5/carbon-h5-service/src/main/resources/com/hcloud/microserver/h5/dao/GoodsManageMapper.xml

@@ -0,0 +1,81 @@
+<?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.hcloud.microserver.h5.dao.GoodsManageMapper">
+
+    <!-- 商品信息列表 lym -->
+    <select id="searchGoodsInfoByPage" parameterType="com.hcloud.microserver.h5.forms.GoodsManageQueryForm"
+            resultType="com.hcloud.microserver.h5.bo.GoodsInfoBO">
+        SELECT
+        aa.guid,
+        aa.goods_code AS goodsCode,
+        aa.goods_name AS goodsName,
+        aa.goods_images AS goodsImages,
+        aa.goods_type AS goodsType,
+        aa.price,
+        aa.goods_use AS goodsUse,
+        bb.sale_unit AS saleUnit,
+        bb.saled_carbon_skin AS saledCarbonSkin,
+        bb.unsaled_carbon_skin AS unsaledCarbonSkin,
+        aa.carbon_val AS carbonVal
+        FROM
+        t_goods_info aa
+        LEFT JOIN t_goods_sale_info bb ON aa.guid = bb.fk_goods_guid
+        LEFT JOIN (SELECT cc.GUID,cc.fk_goods_guid,dd.fk_product_type FROM t_goods_detail cc
+            LEFT JOIN t_product_info dd ON cc.fk_product_guid = dd.GUID
+        ) cc ON cc.fk_goods_guid = aa.guid
+        WHERE
+        aa.state = 1
+        AND aa.is_sale = 1 AND bb.is_enable = 1 AND bb.state = 1
+        <if test="productTypeGuid != null and productTypeGuid != ''">
+            AND cc.fk_product_type = #{productTypeGuid}
+        </if>
+        <if test="queryStr != null and queryStr != ''">
+            AND (aa.goods_name like concat('%',#{queryStr},'%') or
+            aa.goods_desc like concat('%',#{queryStr},'%')
+            )
+        </if>
+        order by bb.unsaled_carbon_skin desc
+    </select>
+
+    <!-- 查询帮扶主体商品 lym -->
+    <select id="getBuyGoodsInfo" parameterType="String" resultType="com.hcloud.microserver.facade.carbon.forms.GoodsInfoForm">
+     select tmp.* from (
+        SELECT
+        aa.guid,
+        aa.goods_code AS goodsCode,
+        aa.goods_name AS goodsName,
+        aa.goods_images AS goodsImages,
+        aa.goods_type AS goodsType,
+        aa.price,
+        aa.goods_use AS goodsUse,
+        bb.sale_unit AS saleUnit,
+        bb.saled_carbon_skin AS saledCarbonSkin,
+        bb.unsaled_carbon_skin AS unsaledCarbonSkin,
+        aa.carbon_val AS carbonVal,
+        cc.py
+        FROM
+        t_goods_info aa
+        LEFT JOIN t_goods_sale_info bb ON aa.guid = bb.fk_goods_guid
+        LEFT JOIN (SELECT cc.GUID,cc.fk_goods_guid,dd.fk_product_type,
+        CHAR(INTERVAL(CONV(HEX(left(CONVERT(ee.farmer_name USING GBK),1)),16,10),
+        0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,
+        0xBBF7,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,
+        0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCDDA,0xCDDA,0xCEF4,
+        0xD1B9,0xD4D1) + 64) AS py
+        FROM t_goods_detail cc
+        LEFT JOIN t_product_info dd ON cc.fk_product_guid = dd.GUID
+        LEFT JOIN t_product_belong ee ON ee.fk_product_guid = dd.guid
+        ) cc ON cc.fk_goods_guid = aa.guid
+        WHERE
+        aa.state = 1
+        AND aa.is_sale = 1 AND bb.is_enable = 1 AND bb.state = 1
+        <if test="namePy != null and namePy != ''">
+            AND cc.py = #{namePy}
+        </if>
+      ) tmp WHERE 1=1
+        <if test="orderStr != null and orderStr != ''">
+            ${orderStr}
+        </if>
+    </select>
+
+</mapper>