package com.sinata.modular.system.controller;
|
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.sinata.common.enums.EnumIsDelete;
|
import com.sinata.common.enums.EnumIsSystemNotice;
|
import com.sinata.common.enums.mall.EnumMallGoodsState;
|
import com.sinata.common.enums.mall.EnumMallOrderState;
|
import com.sinata.core.base.controller.BaseController;
|
import com.sinata.core.shiro.ShiroKit;
|
import com.sinata.modular.mall.model.MallGoods;
|
import com.sinata.modular.mall.model.MallOrder;
|
import com.sinata.modular.mall.service.IMallGoodsService;
|
import com.sinata.modular.mall.service.IMallOrderService;
|
import com.sinata.modular.member.model.MemMerchant;
|
import com.sinata.modular.member.model.MemUser;
|
import com.sinata.modular.member.service.IMemMerchantService;
|
import com.sinata.modular.member.service.IMemUserService;
|
import com.sinata.modular.system.model.*;
|
import com.sinata.modular.system.service.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.Model;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import java.util.*;
|
|
/**
|
* 首页总览信息
|
*/
|
@Controller
|
@RequestMapping("/mall/home")
|
public class HomeController extends BaseController {
|
|
@Autowired
|
private IMemUserService userService;
|
|
@Autowired
|
private IRoleService roleService;
|
|
@Autowired
|
private IMemMerchantService memMerchantService;
|
|
@Autowired
|
private IMyDoctorService doctorService;
|
|
@Autowired
|
private IMallGoodsService goodsService;
|
|
@Autowired
|
private IMallOrderService mallOrderService;
|
|
@Autowired
|
private ITNoticeService noticeService;
|
@Autowired
|
private IAreaCityService areaCityService;
|
|
@Autowired
|
private IMemUserLoginService memUserLoginService;
|
|
/**
|
* 跳转-主页
|
*/
|
@GetMapping("")
|
public String index(Model model) {
|
model.addAttribute("provinceList", areaCityService.selectList(
|
new EntityWrapper<AreaCity>()
|
.groupBy("province_code")
|
.eq("is_open", 1)
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
));
|
return "/home.html";
|
}
|
|
@ResponseBody
|
@GetMapping("/getCityList")
|
public List<AreaCity> getCityList(String provinceCode) {
|
List<AreaCity> cityList = areaCityService.selectList(
|
new EntityWrapper<AreaCity>()
|
.groupBy("city_code")
|
.eq("province_code", provinceCode)
|
.eq("is_open", 1)
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
);
|
return cityList;
|
}
|
|
@RequestMapping("/systemNotice")
|
public String systemNotice(Model model) {
|
// 获取管理员角色列表
|
List<Integer> roleIdList = ShiroKit.getUser().getRoleList();
|
List<Role> roleList = roleService.selectList(
|
new EntityWrapper<Role>()
|
.in("id", roleIdList)
|
);
|
|
// 获取角色对应消息类型
|
List<Integer> systemNoticeTypeList = new ArrayList<>();
|
for (Role role : roleList) {
|
String systemNoticeType = role.getSystemNoticeType();
|
if (StrUtil.isNotBlank(systemNoticeType)) {
|
String[] typeArray = systemNoticeType.split(",");
|
for (String s : typeArray) {
|
Integer value = Integer.valueOf(s);
|
if (value == EnumIsSystemNotice.TYPE_2.index) {
|
systemNoticeTypeList.add(EnumIsSystemNotice.TYPE_3.index);
|
systemNoticeTypeList.add(EnumIsSystemNotice.TYPE_4.index);
|
}
|
if (value == EnumIsSystemNotice.TYPE_5.index) {
|
systemNoticeTypeList.add(EnumIsSystemNotice.TYPE_6.index);
|
systemNoticeTypeList.add(EnumIsSystemNotice.TYPE_7.index);
|
}
|
systemNoticeTypeList.add(value);
|
}
|
}
|
}
|
if (systemNoticeTypeList.size() == 0) {
|
systemNoticeTypeList.add(0);
|
}
|
|
// 后台通知
|
List<Map<String,Object>> dataList = noticeService.systemNotice(systemNoticeTypeList);
|
dataList.stream().forEach(map -> {
|
Integer type = Convert.toInt(map.get("type"));
|
map.put("typeName", EnumIsSystemNotice.getMarkByIndex(type));
|
});
|
model.addAttribute("dataList", dataList);
|
return "/notice.html";
|
}
|
|
@ResponseBody
|
@RequestMapping("/systemNotice/delete")
|
public Object systemNoticeDelete(Integer id){
|
SystemNotice.builder()
|
.id(id)
|
.isDelete(1)
|
.build()
|
.updateById();
|
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 平台总数据
|
*/
|
@ResponseBody
|
@GetMapping("/getTotalData")
|
public Object getTotalData() {
|
// 新增用户
|
int totalUserCount = userService.selectCount(
|
new EntityWrapper<MemUser>()
|
.eq("is_delete", 0)
|
);
|
|
// 昨日用户数
|
DateTime yesterday = DateUtil.yesterday();
|
DateTime yesterdayBegin = DateUtil.beginOfDay(yesterday);
|
DateTime yesterdayEnd = DateUtil.endOfDay(yesterday);
|
int yesterdayUserCount = userService.selectCount(
|
new EntityWrapper<MemUser>()
|
.eq("is_delete", 0)
|
.ge("create_time", yesterdayBegin)
|
.le("create_time", yesterdayEnd)
|
);
|
|
// 上周新增用户数量
|
DateTime lastWeek = DateUtil.lastWeek();
|
DateTime lastWeekBegin = DateUtil.beginOfDay(DateUtil.beginOfWeek(lastWeek));
|
DateTime lastWeekEnd = DateUtil.endOfDay(DateUtil.endOfWeek(lastWeek));
|
int lastWeekUserCount = userService.selectCount(
|
new EntityWrapper<MemUser>()
|
.eq("is_delete", 0)
|
.ge("create_time", lastWeekBegin)
|
.le("create_time", lastWeekEnd)
|
);
|
|
int salesCount_3 = userService.selectCount(
|
new EntityWrapper<MemUser>()
|
.eq("is_delete", 0)
|
.eq("member_grade_id", 3)
|
);
|
int salesCount_4 = userService.selectCount(
|
new EntityWrapper<MemUser>()
|
.eq("is_delete", 0)
|
.eq("member_grade_id", 4)
|
);
|
|
int salesCount_5 = userService.selectCount(
|
new EntityWrapper<MemUser>()
|
.eq("is_delete", 0)
|
.eq("member_grade_id", 5)
|
);
|
|
int totalMerchantCount = memMerchantService.selectCount(
|
new EntityWrapper<MemMerchant>()
|
.eq("is_delete", 0)
|
);
|
|
int totalDoctorCount = doctorService.selectCount(
|
new EntityWrapper<MyDoctor>()
|
.eq("is_delete", 0)
|
);
|
|
int forSaleGoodsCount = goodsService.selectCount(
|
new EntityWrapper<MallGoods>()
|
.eq("is_delete", 0)
|
.eq("state", EnumMallGoodsState.FOR_SALE.index)
|
);
|
|
int stopSaleGoodsCount = goodsService.selectCount(
|
new EntityWrapper<MallGoods>()
|
.eq("is_delete", 0)
|
.eq("state", EnumMallGoodsState.CMS_STOP_SALE.index)
|
);
|
|
Map map = new HashMap();
|
map.put("totalUserCount", totalUserCount);
|
map.put("yesterdayUserCount", yesterdayUserCount);
|
map.put("lastWeekUserCount", lastWeekUserCount);
|
map.put("salesCount_3", salesCount_3);
|
map.put("salesCount_4", salesCount_4);
|
map.put("salesCount_5", salesCount_5);
|
|
map.put("totalMerchantCount", totalMerchantCount);
|
map.put("totalDoctorCount", totalDoctorCount);
|
map.put("forSaleGoodsCount", forSaleGoodsCount);
|
map.put("stopSaleGoodsCount", stopSaleGoodsCount);
|
|
return map;
|
}
|
|
@ResponseBody
|
@GetMapping("/getOrderData")
|
public Object getOrderData(Integer type) {
|
DateTime dateTime, beginTime, endTime;
|
if (type == null || type == 1) {
|
// // 昨日
|
// dateTime = DateUtil.yesterday();
|
beginTime = DateUtil.beginOfDay(DateUtil.date());
|
endTime = DateUtil.endOfDay(DateUtil.date());
|
} else if (type == 2) {
|
// // 上周
|
// dateTime = DateUtil.lastWeek();
|
beginTime = DateUtil.beginOfDay(DateUtil.beginOfWeek(DateUtil.date()));
|
endTime = DateUtil.endOfDay(DateUtil.endOfWeek(DateUtil.date()));
|
} else {
|
// // 上月
|
// dateTime = DateUtil.lastMonth();
|
beginTime = DateUtil.beginOfDay(DateUtil.beginOfMonth(DateUtil.date()));
|
endTime = DateUtil.endOfDay(DateUtil.endOfMonth(DateUtil.date()));
|
}
|
|
Integer[] orderStateArray = new Integer[] {
|
EnumMallOrderState.WAIT_PAY.index,
|
EnumMallOrderState.CANCEL.index,
|
EnumMallOrderState.REFUNDED.index
|
};
|
int totalOrderCount = mallOrderService.selectCount(
|
new EntityWrapper<MallOrder>()
|
.notIn("state", orderStateArray)
|
.ge("create_time", beginTime)
|
.le("create_time", endTime)
|
);
|
Object totalOrderMoney = mallOrderService.selectObj(
|
new EntityWrapper<MallOrder>()
|
.setSqlSelect("IFNULL(SUM(pay_money), 0)")
|
.notIn("state", orderStateArray)
|
.ge("create_time", beginTime)
|
.le("create_time", endTime)
|
);
|
Object goldOrderMoney = mallOrderService.selectObj(
|
new EntityWrapper<MallOrder>()
|
.setSqlSelect("IFNULL(SUM(pay_money), 0)")
|
.notIn("state", orderStateArray)
|
.eq("order_type", 1)
|
.ge("create_time", beginTime)
|
.le("create_time", endTime)
|
);
|
Object diamondOrderMoney = mallOrderService.selectObj(
|
new EntityWrapper<MallOrder>()
|
.setSqlSelect("IFNULL(SUM(pay_money), 0)")
|
.notIn("state", orderStateArray)
|
.eq("order_type", 2)
|
.ge("create_time", beginTime)
|
.le("create_time", endTime)
|
);
|
Object goodsOrderMoney = mallOrderService.selectObj(
|
new EntityWrapper<MallOrder>()
|
.setSqlSelect("IFNULL(SUM(pay_money), 0)")
|
.notIn("state", orderStateArray)
|
.eq("order_type", 0)
|
.ge("create_time", beginTime)
|
.le("create_time", endTime)
|
);
|
|
Map map = new HashMap();
|
map.put("totalOrderCount", totalOrderCount);
|
map.put("totalOrderMoney", totalOrderMoney);
|
map.put("goldOrderMoney", goldOrderMoney);
|
map.put("diamondOrderMoney", diamondOrderMoney);
|
map.put("goodsOrderMoney", goodsOrderMoney);
|
|
return map;
|
}
|
|
/**
|
* 获取运营趋势
|
*/
|
@ResponseBody
|
@PostMapping("getDataTrend")
|
public Object getDataTrend(Integer type, Integer timeType) {
|
DateTime dateTime, beginTime, endTime;
|
List<DateTime> rangeList;
|
if (timeType == null || timeType == 1) {
|
// // 昨日
|
// dateTime = DateUtil.yesterday();
|
beginTime = DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.date(), -1));
|
endTime = DateUtil.endOfDay(DateUtil.date());
|
|
// 获取日期列表
|
rangeList = DateUtil.rangeToList(beginTime, endTime, DateField.DAY_OF_MONTH);
|
} else if (timeType == 2) {
|
// // 上周
|
// dateTime = DateUtil.lastWeek();
|
beginTime = DateUtil.beginOfDay(DateUtil.beginOfWeek(DateUtil.date()));
|
endTime = DateUtil.beginOfDay(DateUtil.endOfWeek(DateUtil.date()));
|
|
// 获取日期列表
|
rangeList = DateUtil.rangeToList(beginTime, endTime, DateField.DAY_OF_MONTH);
|
} else {
|
// // 上月
|
// dateTime = DateUtil.lastMonth();
|
beginTime = DateUtil.beginOfDay(DateUtil.beginOfMonth(DateUtil.date()));
|
endTime = DateUtil.beginOfDay(DateUtil.endOfMonth(DateUtil.date()));
|
|
// 获取日期列表
|
rangeList = DateUtil.rangeToList(beginTime, endTime, DateField.DAY_OF_MONTH);
|
}
|
|
List<Map<String, Object>> dataMapList;
|
if (type == null || type == 1) {
|
Wrapper wrapper = new EntityWrapper<MallOrder>()
|
.setSqlSelect("DATE_FORMAT(create_time,'%Y-%m-%d') time, IFNULL(COUNT(*),0) num")
|
.notIn("state", Arrays.asList(
|
EnumMallOrderState.WAIT_PAY.index,
|
EnumMallOrderState.CANCEL.index,
|
EnumMallOrderState.REFUNDED.index
|
))
|
.between("create_time", beginTime, endTime)
|
.groupBy("DATE_FORMAT(create_time,'%Y-%m-%d')")
|
.orderBy("DATE_FORMAT(create_time,'%Y-%m-%d')", false);
|
dataMapList = mallOrderService.selectMaps(wrapper);
|
} else if (type == 2) {
|
Wrapper wrapper = new EntityWrapper<MemUser>()
|
.setSqlSelect("DATE_FORMAT(create_time,'%Y-%m-%d') time, IFNULL(COUNT(*),0) num")
|
.eq("is_delete", EnumIsDelete.EXISTED.index)
|
.between("create_time", beginTime, endTime)
|
.groupBy("DATE_FORMAT(create_time,'%Y-%m-%d')")
|
.orderBy("DATE_FORMAT(create_time,'%Y-%m-%d')", false);
|
dataMapList = userService.selectMaps(wrapper);
|
} else {
|
Wrapper wrapper = new EntityWrapper<MemUserLogin>()
|
.setSqlSelect("DATE_FORMAT(create_time,'%Y-%m-%d') time, IFNULL(COUNT(*),0) num")
|
.between("create_time", beginTime, endTime)
|
.groupBy("DATE_FORMAT(create_time,'%Y-%m-%d')")
|
.orderBy("DATE_FORMAT(create_time,'%Y-%m-%d')", false);
|
dataMapList = memUserLoginService.selectMaps(wrapper);
|
}
|
|
List<String> timeList = new ArrayList<>();
|
List<String> numList = new ArrayList<>();
|
for (int i = 0; i < rangeList.size(); i++) {
|
// 封装格式化日期
|
String timeStr = rangeList.get(i).toDateStr();
|
timeList.add(timeStr);
|
|
// 封装数据
|
String num = "0";
|
for (Map<String, Object> m : dataMapList) {
|
if (timeStr.equals(m.get("time") + "")) {
|
num = m.get("num") + "";
|
break;
|
}
|
}
|
numList.add(num);
|
}
|
|
// 封装返回数据
|
Map map = new HashMap();
|
map.put("timeList", timeList);
|
map.put("numList", numList);
|
return map;
|
}
|
|
/**
|
* 获取营业单位排行榜
|
*/
|
@ResponseBody
|
@PostMapping("getDataTopOrderList")
|
public Object getDataTopOrderList(String beginTime, String endTime, Integer type, String provinceCode, String cityCode) {
|
List<Map<String, Object>> dataList = mallOrderService.getOrderTopMapList(beginTime, endTime, type, provinceCode, cityCode);
|
return wrapperTopList(dataList);
|
}
|
|
/**
|
* 获取门店排行榜
|
*/
|
@ResponseBody
|
@PostMapping("getDataTopShopList")
|
public Object getDataTopShopList(String beginTime, String endTime, Integer type, String provinceCode, String cityCode) {
|
List<Map<String, Object>> dataList = mallOrderService.getShopTopMapList(beginTime, endTime, type, provinceCode, cityCode);
|
return wrapperTopList(dataList);
|
}
|
|
public Object wrapperTopList(List<Map<String, Object>> dataList) {
|
for (int i = 0; i < dataList.size(); i++) {
|
dataList.get(i).put("no", i + 1);
|
}
|
return dataList;
|
}
|
|
}
|