Selaa lähdekoodia

倍力优商品维度统计

ct 1 kuukausi sitten
vanhempi
commit
f4bc24aaed

+ 44 - 0
fs-admin/src/main/java/com/fs/store/controller/FsStoreStatisticsController.java

@@ -12,6 +12,7 @@ import com.fs.store.param.FsStoreStatisticsParam;
 import com.fs.store.service.IFsStoreOrderService;
 import com.fs.store.service.IFsStorePaymentService;
 import com.fs.store.vo.FsStoreOrderCountsVO;
+import com.fs.store.vo.FsStoreProductCountsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -85,6 +86,49 @@ public class FsStoreStatisticsController extends BaseController
         }
     }
 
+    @PreAuthorize("@ss.hasPermi('store:statistics:storeProduct')")
+    @GetMapping("/storeProduct")
+    public R storeProduct(FsStoreStatisticsParam param)
+    {
+        if(StringUtils.isNotEmpty(param.getUserIds())){
+            String[] userIds=param.getUserIds().split(",");
+            Long[] ids=new Long[userIds.length];
+            for(int i=0;i<ids.length; i++){
+                ids[i]=Long.parseLong(userIds[i]);
+            }
+            param.setUsers(ids);
+        }
+        else{
+            //获取部门下的所有用户
+            CompanyUser usermap=new CompanyUser();
+            usermap.setDeptId(param.getDeptId());
+            List<CompanyUser> users = userService.getUserListByDeptId(usermap);
+            List<Long> userIds = users.stream().map(element -> element.getUserId()).collect(Collectors.toList());
+            param.setUsers(userIds.toArray(new Long[userIds.size()]));
+        }
+        if(param.getUsers()!=null&&param.getUsers().length>0){
+            TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime(param.getType()==null?null:param.getType().toString(),param.getStartTime(),param.getEndTime());
+            timeEntity.setUserIds(param.getUsers());
+            Integer cycleNum = timeEntity.getCycleNum();
+            Integer beginTime = timeEntity.getBeginTime();
+            List<Integer> timeList = new ArrayList<>();
+            for (int i = 1; i <= cycleNum; i++) {
+                timeList.add(beginTime);
+                beginTime = TimeUtils.formatTime(beginTime);
+            }
+            List<JSONObject> jsonObjectList = storeOrderService.selectFsStoreOrderCounts(timeEntity.toMap());
+            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
+            List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
+            List<Integer> payPrice = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payPrice")).collect(Collectors.toList());
+            //表格数据
+            List<FsStoreProductCountsVO> tableData = storeOrderService.selectFsStoreProductCountsByDept(timeEntity.toMap(),param.getDeptId());
+            return R.ok().put("dates",dates).put("orderCount",orderCount).put("payPrice",payPrice).put("tableData",tableData);
+        }
+        else {
+            return R.ok("未查找到数据");
+        }
+    }
+
     @PreAuthorize("@ss.hasPermi('store:statistics:storePayment')")
     @GetMapping("/storePayment")
     public R storePayment(FsStoreStatisticsParam param)

+ 16 - 0
fs-company/src/main/java/com/fs/store/controller/FsStoreOrderController.java

@@ -2,6 +2,7 @@ package com.fs.store.controller;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.annotation.Log;
@@ -18,6 +19,7 @@ import com.fs.core.security.LoginUser;
 import com.fs.core.web.service.TokenService;
 import com.fs.crm.domain.CrmCustomer;
 import com.fs.crm.service.ICrmCustomerService;
+import com.fs.store.config.StoreConfig;
 import com.fs.store.domain.*;
 import com.fs.store.dto.ExpressInfoDTO;
 import com.fs.store.dto.StoreOrderProductDTO;
@@ -32,6 +34,7 @@ import com.fs.store.vo.FsStoreOrderAuditLogVO;
 import com.fs.store.vo.FsStoreOrderExportVO;
 import com.fs.store.vo.FsStoreOrderItemExportVO;
 import com.fs.store.vo.FsStoreOrderVO;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -72,6 +75,8 @@ public class FsStoreOrderController extends BaseController
     private ICrmCustomerService crmCustomerService;
     @Autowired
     private IFsStoreOrderAuditLogService orderAuditLogService;
+    @Autowired
+    private ISysConfigService configService;
 
     /**
      * 查询订单列表
@@ -435,4 +440,15 @@ public class FsStoreOrderController extends BaseController
 
         return R.ok();
     }
+
+    /**
+     * 获取下单类型
+     */
+    @GetMapping("/getCreateOrderType")
+    public R getCreateOrderType() {
+        String json=configService.selectConfigByKey("store.config");
+        StoreConfig config= JSONUtil.toBean(json,StoreConfig.class);
+        Integer createSalesOrderType = config.getCreateSalesOrderType();
+        return R.ok().put("createSalesOrderType",createSalesOrderType);
+    }
 }

+ 2 - 3
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java

@@ -1,9 +1,6 @@
 package com.fs.store.mapper;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fs.api.param.OrderListParam;
@@ -1061,4 +1058,6 @@ public interface FsStoreOrderMapper
     List<FsStoreOrder> computePayMoney(@Param("customerIds")List<Long> customerIds);
 
     FsStoreOrder selectLastByCustomerId(@Param("customerId")Long customerId);
+
+    List<Map<String,Object>> selectFsStoreProductCountsByDept(Map<String, Object> map);
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderService.java

@@ -237,4 +237,6 @@ public interface IFsStoreOrderService
     List<FsStoreOrderCountsVO> selectFsStoreOrderCountsByDept(Map<String, Object> map,Long deptId);
 
     R updateSalesOrderMoneyByProduct(FsStoreOrderMoneyByProductParam param);
+
+    List<FsStoreProductCountsVO> selectFsStoreProductCountsByDept(Map<String, Object> map, Long deptId);
 }

+ 41 - 5
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -51,13 +51,11 @@ import com.fs.store.constants.StoreConstants;
 import com.fs.store.domain.*;
 import com.fs.store.dto.*;
 import com.fs.store.enums.*;
-import com.fs.store.mapper.FsStoreCartMapper;
-import com.fs.store.mapper.FsStoreOrderItemMapper;
-import com.fs.store.mapper.FsStoreOrderMapper;
-import com.fs.store.mapper.FsUserAddressMapper;
+import com.fs.store.mapper.*;
 import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.*;
+import com.fs.system.mapper.SysDictDataMapper;
 import com.fs.system.service.ISysConfigService;
 import com.fs.wx.pay.config.WxPayProperties;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
@@ -223,6 +221,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     private CompanyMapper companyMapper;
     @Autowired
     private CompanyDeptMapper companyDeptMapper;
+    @Autowired
+    private FsStoreProductMapper fsStoreProductMapper;
 
     /**
      * 查询订单
@@ -1028,7 +1028,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Override
     @Transactional
     public R createUserOrder(FsStoreOrderCreateUserParam param) {
-
+        String json=configService.selectConfigByKey("store.config");
+        StoreConfig config= JSONUtil.toBean(json,StoreConfig.class);
+        Integer createSalesOrderType = config.getCreateSalesOrderType();
+        if (createSalesOrderType == null) {
+            return R.error("请在后台设置制单类型;");
+        }
         List<String> cartIds=new ArrayList<>();
         for(FsStoreProductAttrValueVO productAttrValue:param.getProducts()){
             FsStoreCart storeCart = FsStoreCart.builder()
@@ -1040,6 +1045,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     .isDel(0)
                     .isBuy(0)
                     .build();
+            if (createSalesOrderType == 1){
+                storeCart.setChangePrice(productAttrValue.getPrice());
+            }
             storeCart.setCreateTime(new Date());
             cartService.checkProductStock(productAttrValue.getProductId(),storeCart.getProductAttrValueId());
             cartService.insertFsStoreCart(storeCart);
@@ -2797,6 +2805,34 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         return R.ok();
     }
 
+    @Override
+    public List<FsStoreProductCountsVO> selectFsStoreProductCountsByDept(Map<String, Object> map, Long deptId) {
+        //查询所有产品
+        List<FsStoreProduct> products = fsStoreProductMapper.selectFsStoreProductList(null);
+        List<FsStoreProductCountsVO> vos = new ArrayList<>();
+        if (!products.isEmpty()) {
+            for (FsStoreProduct product : products) {
+                FsStoreProductCountsVO vo = new FsStoreProductCountsVO();
+                vo.setName(product.getProductName());
+                map.put("productId",product.getProductId());
+                //查询该产品销售数量 和金额
+                List<Map<String,Object>> temp = fsStoreOrderMapper.selectFsStoreProductCountsByDept(map);
+                HashMap<String, Object> productMap = new HashMap<>();
+                if (!temp.isEmpty()){
+                    for (Map<String, Object> stringMap : temp) {
+                        String orderType = stringMap.get("orderType").toString();
+                        stringMap.remove("orderType");
+                        productMap.put(orderType,stringMap);
+                    }
+                }
+                vo.setProductCounts(productMap);
+                vos.add(vo);
+            }
+        }
+
+        return vos;
+    }
+
     private FsStoreOrderCountsVO addTotal(CompanyDept companyDept, List<FsStoreOrderCountsVO> vos,boolean isEmpty) {
         FsStoreOrderCountsVO vo = new FsStoreOrderCountsVO();
         Long totalCalls = 0L;

+ 13 - 0
fs-service-system/src/main/java/com/fs/store/vo/FsStoreProductCountsVO.java

@@ -0,0 +1,13 @@
+package com.fs.store.vo;
+
+import lombok.Data;
+
+import java.util.HashMap;
+
+@Data
+public class FsStoreProductCountsVO {
+    private String name;
+    private Boolean isGroup=false;
+    private HashMap<String,Object> productCounts;
+
+}

+ 32 - 0
fs-service-system/src/main/resources/mapper/store/FsStoreOrderMapper.xml

@@ -834,4 +834,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         and o.customer_id = #{customerId}
         order by o.create_time desc limit 1
     </select>
+    <select id="selectFsStoreProductCountsByDept" resultType="java.util.HashMap">
+        SELECT
+        t.order_type as orderType,
+        COUNT(t.item_id) AS `count`,
+        SUM(
+        (t.json_info->>'$.price' + 0) *
+        (t.json_info->>'$.num' + 0)
+        ) AS amount
+        FROM
+        (
+        SELECT o.id, o.order_type,i.json_info,i.item_id
+        FROM
+        fs_store_order_item i
+        LEFT JOIN fs_store_order o ON o.id = i.order_id
+        LEFT JOIN company_user u ON o.company_user_id = u.user_id
+        where i.product_id = #{productId}
+          and o.`status` = 3
+          and
+        (DATE_FORMAT(o.create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime})
+        <if test="userIds != null and userIds.length>0">AND o.company_user_id IN
+            <foreach item="item" collection="userIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="companyId != null  ">
+            AND o.company_id = #{companyId}
+        </if>
+
+        ) t
+        GROUP BY t.order_type
+        HAVING t.order_type > 0
+    </select>
 </mapper>