租户管理

master
xiaoning 1 year ago
parent 7de4b04ccf
commit 73520984c4

@ -0,0 +1,51 @@
package com.ruoyi.web.controller.mall;
import com.ruoyi.mall.domain.query.GoodsStatisticsQuery;
import com.ruoyi.mall.domain.query.OrderStatisticsQuery;
import com.ruoyi.mall.domain.vo.OrderAndAftersaleStatisticsVO;
import com.ruoyi.mall.domain.vo.OrderStatisticsVO;
import com.ruoyi.mall.domain.vo.ProductTopVO;
import com.ruoyi.mall.service.IndexStatisticsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@Api(tags = "管理端,首页统计数据接口")
@RestController
@RequestMapping("/dev/statistics/index")
public class IndexStatisticsManagerController {
/**
* 首页统计
*/
@Autowired
private IndexStatisticsService indexStatisticsService;
@ApiOperation(value = "获取首页查询热卖商品TOP10")
@GetMapping("/goodsStatistics")
public ResponseEntity<List<ProductTopVO>> goodsStatistics(@Validated GoodsStatisticsQuery goodsStatisticsQuery) {
return ResponseEntity.ok(indexStatisticsService.goodsStatistics(goodsStatisticsQuery));
}
@ApiOperation(value = "订单与售后单统计")
@GetMapping("/order/aftersale/statistics")
public ResponseEntity<OrderAndAftersaleStatisticsVO> orderAndAftersaleStatistics(){
return ResponseEntity.ok(indexStatisticsService.orderAndAftersaleStatistics());
}
@ApiOperation(value = "订单信息")
@PostMapping("/orderStatistics")
public ResponseEntity<List<OrderStatisticsVO>> orderStatistics(@RequestBody OrderStatisticsQuery param) {
return ResponseEntity.ok(indexStatisticsService.orderStatistics(param));
}
}

@ -5,7 +5,6 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.core.domain.model.PhoneLoginBody;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.SysPermissionService; import com.ruoyi.framework.web.service.SysPermissionService;
@ -49,19 +48,6 @@ public class SysLoginController {
return ajax; return ajax;
} }
/**
* 使用手机号登陆
*
* @param loginBody 登录信息
* @return 结果
*/
@PostMapping("/login/phone")
public AjaxResult login(@RequestBody PhoneLoginBody loginBody) {
AjaxResult ajax = AjaxResult.success();
SysUser user = loginService.phoneLogin(loginBody.getPhone(), loginBody.getCode(), loginBody.getUuid());
ajax.put(Constants.TOKEN, loginService.createToken(user));
return ajax;
}
/** /**
* 获取用户信息 * 获取用户信息
@ -70,11 +56,14 @@ public class SysLoginController {
*/ */
@GetMapping("getInfo") @GetMapping("getInfo")
public AjaxResult getInfo() { public AjaxResult getInfo() {
SysUser user = SecurityUtils.getLoginUser().getUser(); SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合 // 角色集合
Set<String> roles = permissionService.getRolePermission(user); Set<String> roles = permissionService.getRolePermission(user);
// 权限集合 // 权限集合
Set<String> permissions = permissionService.getMenuPermission(user); Set<String> permissions = permissionService.getMenuPermission(user);
//所属租户
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
ajax.put("user", user); ajax.put("user", user);
ajax.put("roles", roles); ajax.put("roles", roles);

@ -0,0 +1,92 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.common.core.domain.RestResponse;
import com.ruoyi.system.domain.SysTenant;
import com.ruoyi.system.domain.vo.ReqBusinessAddTenant;
import com.ruoyi.system.domain.vo.ReqSearchSysTenant;
import com.ruoyi.system.service.SysTenantService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 租户信息 前端控制器
* </p>
*
* @author zhangby
* @since 2019-11-06
*/
@RestController
@RequestMapping("/system/tenant")
public class SysTenantController {
@Autowired
private SysTenantService sysTenantService;
/**
* 列表
*
* @param reqSearchSysTenant
* @return
*/
@GetMapping("/list/searchList")
public RestResponse searchList(ReqSearchSysTenant reqSearchSysTenant) {
return sysTenantService.searchList(reqSearchSysTenant);
}
/**
* 前端select
*
* @return
*/
@GetMapping("/list/treeSelect")
public RestResponse treeSelect() {
return sysTenantService.treeSelect();
}
/**
* 详情
*
* @param tenantId
* @return
*/
@GetMapping("/info/detailById/{tenantId}")
public RestResponse detailById(@PathVariable("tenantId") Long tenantId) {
return sysTenantService.detailById(tenantId);
}
/**
* 添加
*
* @param reqBusinessAddTenant
* @return
*/
@PostMapping("/add/addTenant")
public RestResponse addSysTenant(@RequestBody ReqBusinessAddTenant reqBusinessAddTenant) {
return sysTenantService.addTenant(reqBusinessAddTenant);
}
/**
* 修改
*
* @param sysTenant
* @return
*/
@PutMapping("/update/updateTenant")
public RestResponse updateTenant(@RequestBody SysTenant sysTenant) {
return sysTenantService.updateTenant(sysTenant);
}
/**
* 删除
*
* @param tenantIds
* @return
*/
@DeleteMapping("/delete/deleteById/{tenantIds}")
public RestResponse deleteById(@PathVariable("tenantIds") String[] tenantIds) {
return sysTenantService.deleteById(tenantIds);
}
}

@ -48,7 +48,7 @@ public class SysDept extends BaseEntity
private String status; private String status;
/** 删除标志(0代表存在 2代表删除) */ /** 删除标志(0代表存在 2代表删除) */
private String delFlag; private String deleteFlag;
/** 父部门名称 */ /** 父部门名称 */
private String parentName; private String parentName;
@ -152,14 +152,14 @@ public class SysDept extends BaseEntity
this.status = status; this.status = status;
} }
public String getDelFlag() public String getDeleteFlag()
{ {
return delFlag; return deleteFlag;
} }
public void setDelFlag(String delFlag) public void setDeleteFlag(String deleteFlag)
{ {
this.delFlag = delFlag; this.deleteFlag = deleteFlag;
} }
public String getParentName() public String getParentName()
@ -194,7 +194,7 @@ public class SysDept extends BaseEntity
.append("phone", getPhone()) .append("phone", getPhone())
.append("email", getEmail()) .append("email", getEmail())
.append("status", getStatus()) .append("status", getStatus())
.append("delFlag", getDelFlag()) .append("delFlag", getDeleteFlag())
.append("createBy", getCreateBy()) .append("createBy", getCreateBy())
.append("createTime", getCreateTime()) .append("createTime", getCreateTime())
.append("updateBy", getUpdateBy()) .append("updateBy", getUpdateBy())

@ -1,12 +1,5 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
@ -14,6 +7,14 @@ import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.annotation.Excel.Type; import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.annotation.Excels; import com.ruoyi.common.annotation.Excels;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/** /**
* 用户对象 sys_user * 用户对象 sys_user
@ -95,6 +96,8 @@ public class SysUser extends BaseEntity
/** 角色ID */ /** 角色ID */
private Long roleId; private Long roleId;
public String tenantId;
public SysUser() public SysUser()
{ {
@ -105,6 +108,14 @@ public class SysUser extends BaseEntity
this.userId = userId; this.userId = userId;
} }
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public Long getUserId() public Long getUserId()
{ {
return userId; return userId;

@ -0,0 +1,20 @@
package com.ruoyi.common.json;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
/**
* @author :zhangbaoyu
* @date :Created in 2020/8/18 19:45
*/
public class LongJsonSerializer extends JsonSerializer<Long> {
@Override
public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (aLong != null) {
jsonGenerator.writeNumber(aLong);
}
}
}

@ -0,0 +1,17 @@
package com.ruoyi.common.page;
import lombok.Data;
/**
* 校区查询条件
* @author :zhangbaoyu
* @date :Created in 2020/10/24 09:25
*/
@Data
public class ReqDeptCondition {
private Long deptId;
private String userId;
}

@ -0,0 +1,18 @@
package com.ruoyi.common.page;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 分页请求
* @author :zhangbaoyu
* @date :Created in 2020-01-15 21:41
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ReqPageBase extends ReqDeptCondition{
private long pageNum = 1;
private long pageSize = 10;
}

@ -0,0 +1,50 @@
package com.ruoyi.common.page;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ruoyi.common.json.LongJsonSerializer;
import java.util.Collections;
import java.util.List;
/**
* @author :zhangbaoyu
* @date :Created in 2020-01-15 21:52
*/
public class RespPage<T> extends Page<T> {
private List<T> rows = Collections.emptyList();
@JsonSerialize(using = LongJsonSerializer.class)
private long total;
public RespPage(long current, long size) {
super(current, size);
}
@Override
public Page<T> setRecords(List<T> records) {
this.rows=records;
return this;
}
@Override
public Page<T> setTotal(long total) {
this.total=total;
return this;
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
@Override
public long getTotal() {
return total;
}
}

@ -10,7 +10,6 @@ import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.exception.user.UserException;
import com.ruoyi.common.exception.user.UserPasswordNotMatchException; import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.MessageUtils;
@ -31,10 +30,8 @@ import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 登录校验方法 * 登录校验方法
@ -164,39 +161,7 @@ public class SysLoginService {
userService.updateUserProfile(user); userService.updateUserProfile(user);
} }
public SysUser phoneLogin(String phone, String code, String uuid) {
// 校验数据
// if (!phoneCodeService.validCode(uuid, phone, code)) {
// throw new GlobalException("校验失败");
// }
SysUser user = userService.selectUserByUserName(phone);
// TODO 内测版,只要电话号码对的上就行
if (user == null) {
throw new UserException("user.password.not.match", null);
}
SysRole vipRole = sysRoleService.selectRoleByKey("vip");
// 如果用户不存在,则创建用户,赋予权限
if (user == null) {
user = new SysUser();
user.setUserName(phone);
user.setNickName("love_" + RandomUtil.randomNumbers(6));
user.setPhonenumber(phone);
user.setPassword(SecurityUtils.encryptPassword(RandomUtil.randomString(32)));
boolean regFlag = userService.registerUser(user);
// 增加用户的权限,绑定角色
sysRoleService.insertAuthUsers(vipRole.getRoleId(), new Long[]{user.getUserId()});
} else {
// 查询用户是否具有会员角色,如果没有绑定
List<Integer> roles = sysRoleService.selectRoleListByUserId(user.getUserId());
Integer roleId = vipRole.getRoleId().intValue();
if (!roles.contains(roleId)) {
sysRoleService.insertAuthUsers(vipRole.getRoleId(), new Long[]{user.getUserId()});
}
}
AsyncManager.me().execute(AsyncFactory.recordLogininfor(phone, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
recordLoginInfo(user);
return user;
}
public SysUser initVipUser(ExtraUserBody body) { public SysUser initVipUser(ExtraUserBody body) {
Date now = new Date(); Date now = new Date();

@ -0,0 +1,84 @@
package com.ruoyi.mall.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseAudit;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单售后对象 oms_aftersale
*
* @author zcc
*/
@Data
@TableName("oms_aftersale")
public class Aftersale extends BaseAudit {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@Excel(name = "MEMBER_ID")
private Long memberId;
@Excel(name = "订单id")
private Long orderId;
@Excel(name = "退款金额")
private BigDecimal returnAmount;
@Excel(name = "售后类型:1:退款,2:退货退款")
private Integer type;
@Excel(name = "申请状态:0->待处理;1->退货中;2->已完成;3->已拒绝")
private Integer status;
@Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime handleTime;
@Excel(name = "退货数量")
private Integer quantity;
@Excel(name = "原因")
private String reason;
@Excel(name = "描述")
private String description;
@Excel(name = "凭证图片,以逗号隔开")
private String proofPics;
@Excel(name = "处理备注")
private String handleNote;
@Excel(name = "处理人员")
private String handleMan;
@Excel(name = "退款快递公司")
private String refundWpCode;
@Excel(name = "退货快递号")
private String refundWaybillCode;
}

@ -0,0 +1,143 @@
package com.ruoyi.mall.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseAudit;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单表对象 oms_order
*
*/
@Data
@TableName("oms_order")
public class Order extends BaseAudit {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private Long payId;
@Excel(name = "订单编号")
private String orderSn;
@Excel(name = "MEMBER_ID")
private Long memberId;
@Excel(name = "用户帐号")
private String memberUsername;
@Excel(name = "订单总金额")
private BigDecimal totalAmount;
@Excel(name = "采购价")
private BigDecimal purchasePrice;
@Excel(name = "应付金额", readConverterExp = "实际支付金额")
private BigDecimal payAmount;
@Excel(name = "运费金额")
private BigDecimal freightAmount;
@Excel(name = "支付方式:0->未支付;1->支付宝;2->微信")
private Integer payType;
@Excel(name = "订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单")
private Integer status;
@Excel(name = "退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功")
private Integer aftersaleStatus;
@Excel(name = "物流公司(配送方式)")
private String deliveryCompany;
@Excel(name = "物流单号")
private String deliverySn;
@Excel(name = "自动确认时间", readConverterExp = "天=")
private Integer autoConfirmDay;
@Excel(name = "收货人姓名")
private String receiverName;
@Excel(name = "收货人电话")
private String receiverPhone;
@Excel(name = "加密的手机号")
private String receiverPhoneEncrypted;
@Excel(name = "收货人邮编")
private String receiverPostCode;
@Excel(name = "省份/直辖市")
private String receiverProvince;
@Excel(name = "城市")
private String receiverCity;
@Excel(name = "区")
private String receiverDistrict;
@Excel(name = "省份/直辖市id")
private Long receiverProvinceId;
@Excel(name = "城市id")
private Long receiverCityId;
@Excel(name = "区id")
private Long receiverDistrictId;
@Excel(name = "详细地址")
private String receiverDetailAddress;
@Excel(name = "订单备注")
private String note;
@Excel(name = "商家备注")
private String merchantNote;
@Excel(name = "确认收货状态:0->未确认;1->已确认")
private Integer confirmStatus;
@Excel(name = "删除状态:0->未删除;1->已删除")
private Integer deleteStatus;
@Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime paymentTime;
@Excel(name = "发货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime deliveryTime;
@Excel(name = "确认收货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime receiveTime;
private Long memberCouponId;
private BigDecimal couponAmount;
}

@ -0,0 +1,24 @@
package com.ruoyi.mall.domain.query;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 商品统计
*
* @author zhangcheng
* @since 2023/05/15 13:53
*/
@Data
public class GoodsStatisticsQuery {
@NotNull(message = "统计类型 1:商品规格排行 2:商品排行")
private Integer statType;
@NotNull(message = "参数size不能为空")
private Integer size;
@NotBlank(message = "参数startDate不能为空")
private String startDate;
@NotBlank(message = "参数endDate不能为空")
private String endDate;
}

@ -0,0 +1,11 @@
package com.ruoyi.mall.domain.query;
import lombok.Data;
//订单统计查询条件对象
@Data
public class OrderStatisticsQuery {
//查询范围类型 1:近一周 2:近一个月
private Integer type;
}

@ -0,0 +1,21 @@
package com.ruoyi.mall.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OrderAndAftersaleStatisticsVO {
/** 待处理售后 */
private Integer pendingAftersaleCount;
/** 处理中售后 */
private Integer processingAftersaleCount;
/** 待发货 */
private Integer waitDeliveredCount;
/** 已发货 */
private Integer todayHasDeliveredCount;
/** 订单数 */
private Integer todayOrderCount;
/** 成交额 */
private BigDecimal todayTransactionAmount;
}

@ -0,0 +1,16 @@
package com.ruoyi.mall.domain.vo;
import lombok.Data;
@Data
public class OrderStatisticsVO {
private String date;
//订单笔数
private Double orderCount;
//订单金额
private Double orderAmount;
private Double numPaidOrders;
private Double numPendingOrders;
private Double numRefundOrders;
}

@ -0,0 +1,12 @@
package com.ruoyi.mall.domain.vo;
import lombok.Data;
@Data
public class ProductTopVO {
private String productName;
private int totalSales;
private String pic;
private String spData;
}

@ -0,0 +1,11 @@
package com.ruoyi.mall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.mall.domain.Aftersale;
import com.ruoyi.mall.domain.vo.OrderAndAftersaleStatisticsVO;
public interface AftersaleMapper extends BaseMapper<Aftersale> {
OrderAndAftersaleStatisticsVO statPendingAndProcessing();
}

@ -0,0 +1,18 @@
package com.ruoyi.mall.mapper;
import com.ruoyi.mall.domain.query.GoodsStatisticsQuery;
import com.ruoyi.mall.domain.query.OrderStatisticsQuery;
import com.ruoyi.mall.domain.vo.OrderStatisticsVO;
import com.ruoyi.mall.domain.vo.ProductTopVO;
import java.util.List;
public interface IndexStatisticsMapper {
List<ProductTopVO> goodsSkuStatistics(GoodsStatisticsQuery goodsStatisticsQuery);
List<ProductTopVO> goodsStatistics(GoodsStatisticsQuery goodsStatisticsQuery);
List<OrderStatisticsVO> orderStatistics(OrderStatisticsQuery param);
}

@ -0,0 +1,16 @@
package com.ruoyi.mall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.mall.domain.Order;
import com.ruoyi.mall.domain.vo.OrderAndAftersaleStatisticsVO;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
public interface OrderMapper extends BaseMapper<Order> {
Integer statWaitDelivered();
OrderAndAftersaleStatisticsVO statTodayData(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
}

@ -0,0 +1,59 @@
package com.ruoyi.mall.service;
import com.ruoyi.mall.domain.query.GoodsStatisticsQuery;
import com.ruoyi.mall.domain.query.OrderStatisticsQuery;
import com.ruoyi.mall.domain.vo.OrderAndAftersaleStatisticsVO;
import com.ruoyi.mall.domain.vo.OrderStatisticsVO;
import com.ruoyi.mall.domain.vo.ProductTopVO;
import com.ruoyi.mall.mapper.AftersaleMapper;
import com.ruoyi.mall.mapper.IndexStatisticsMapper;
import com.ruoyi.mall.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
/**
* 管理端,首页统计数据Service业务层处理
*/
@Service
public class IndexStatisticsService {
@Autowired
private AftersaleMapper aftersaleMapper;
@Autowired
private OrderMapper orderMapper;
@Autowired
private IndexStatisticsMapper indexStatisticsMapper;
public List<ProductTopVO> goodsStatistics(GoodsStatisticsQuery goodsStatisticsQuery) {
if (goodsStatisticsQuery.getStatType() == 1){
return indexStatisticsMapper.goodsSkuStatistics(goodsStatisticsQuery);
}else {
return indexStatisticsMapper.goodsStatistics(goodsStatisticsQuery);
}
}
public OrderAndAftersaleStatisticsVO orderAndAftersaleStatistics() {
//统计售后
OrderAndAftersaleStatisticsVO vo = aftersaleMapper.statPendingAndProcessing();
//统计未发货数
vo.setWaitDeliveredCount(orderMapper.statWaitDelivered());
//统计今日订单数,成交金额,发货数
LocalDateTime startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
OrderAndAftersaleStatisticsVO todayData = orderMapper.statTodayData(startTime, endTime);
vo.setTodayOrderCount(todayData.getTodayOrderCount());
vo.setTodayHasDeliveredCount(todayData.getTodayHasDeliveredCount());
vo.setTodayTransactionAmount(todayData.getTodayTransactionAmount());
return vo;
}
public List<OrderStatisticsVO> orderStatistics(OrderStatisticsQuery param) {
return indexStatisticsMapper.orderStatistics(param);
}
}

@ -0,0 +1,141 @@
package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 租户表
* </p>
*
* @author xn
* @since 2022-09-28
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sys_tenant")
public class SysTenant implements Serializable {
private static final long serialVersionUID=1L;
@TableId(value = "tenant_id",type = IdType.ASSIGN_ID)
private String tenantId;
/**
* 租户名称
*/
@TableField("tenant_name")
private String tenantName;
/**
* 超级管理租户
*/
@TableField("super_tenant")
private Boolean superTenant;
/**
* 联系人
*/
@TableField("contact_name")
private String contactName;
/**
* 联系人电话
*/
@TableField("contact_phone")
private String contactPhone;
/**
* 联系地址
*/
@TableField("contact_address")
private String contactAddress;
/**
* 生效开始时间
*/
@TableField("begin_time")
private Date beginTime;
/**
* 失效时间
*/
@TableField("end_time")
private Date endTime;
/**
* 备注
*/
@TableField("memo")
private String memo;
/**
* 状态(1停用 0正常 )
*/
@TableField("in_use")
private String inUse;
/**
* 删除标志(1删除 0在用)
*/
@TableField("delete_flag")
@TableLogic
private String deleteFlag;
/**
* 创建者
*/
@TableField("create_user")
private Long createUser;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 更新者
*/
@TableField("last_update_user")
private Long lastUpdateUser;
/**
* 更新时间
*/
@TableField("last_update_time")
private Date lastUpdateTime;
@TableField(exist = false)
private String[] useDateRange;
//当前租户
@TableField(exist = false)
private boolean nowTenant = false;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
public Date getBeginTime() {
return beginTime;
}
@JsonFormat(pattern="yyyy-MM-dd")
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
}
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
public Date getEndTime() {
return endTime;
}
@JsonFormat(pattern="yyyy-MM-dd")
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
}

@ -0,0 +1,36 @@
package com.ruoyi.system.domain.vo;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.domain.SysTenant;
import lombok.Data;
/**
* @author :zhangbaoyu
* @date :Created in 2020/10/25 12:27
*/
@Data
public class ReqBusinessAddTenant extends SysTenant {
private String emailAddress;
private String sex;
private String username;
private String password;
private String checkPass;
public SysUser transferToSysUser() {
SysUser sysUser = new SysUser();
sysUser.setUserName(this.getUsername());
sysUser.setPassword(this.getPassword());
sysUser.setNickName(this.getContactName());
sysUser.setPhonenumber(this.getContactPhone());
sysUser.setEmail(this.getEmailAddress());
return sysUser;
}
}

@ -0,0 +1,18 @@
package com.ruoyi.system.domain.vo;
import com.ruoyi.common.page.ReqPageBase;
import lombok.Data;
import java.io.Serializable;
@Data
public class ReqSearchSysTenant extends ReqPageBase implements Serializable {
private String tenantName;
private String contactName;
private String inUse;
//过期开始时间
private String beginTime;
//过期结束
private String endTime;
}

@ -0,0 +1,34 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.SysTenant;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 租户信息 Mapper 接口
* </p>
*/
public interface SysTenantMapper extends BaseMapper<SysTenant> {
/**
* 用户租户列表
*
* @param userId
* @return
*/
List<SysTenant> selectUserTenantList(@Param("userId")String userId, @Param("limitTenantUserId")String limitTenantUserId);
/**
* 在用用户所属的租户
*
* @param userId
* @param tenantId
* @return
*/
SysTenant selectInUseUserTenant(@Param("userId")String userId, @Param("tenantId")String tenantId);
int tenantHaveContent(String tenantId);
}

@ -0,0 +1,35 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.RestResponse;
import com.ruoyi.system.domain.SysTenant;
import com.ruoyi.system.domain.vo.ReqBusinessAddTenant;
import com.ruoyi.system.domain.vo.ReqSearchSysTenant;
import java.util.List;
public interface SysTenantService extends IService<SysTenant> {
/**
* 用户租户列表
* @param userId
* @param limitTenantUserId
* @return
*/
List<SysTenant> selectUserTenantList(String userId, String limitTenantUserId);
/**
* 校验用户所属租户是否在用生效
* @param userId
* @param tenantId
* @return
*/
boolean checkUserTenantInUse(String userId,String tenantId);
RestResponse searchList(ReqSearchSysTenant reqSearchSysTenant);
RestResponse treeSelect();
RestResponse detailById(Long tenantId);
RestResponse addTenant(ReqBusinessAddTenant reqBusinessAddTenant);
RestResponse updateTenant(SysTenant sysTenant);
RestResponse deleteById(String[] tenantIds);
}

@ -0,0 +1,221 @@
package com.ruoyi.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.RestResponse;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.page.RespPage;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.SysTenant;
import com.ruoyi.system.domain.vo.ReqBusinessAddTenant;
import com.ruoyi.system.domain.vo.ReqSearchSysTenant;
import com.ruoyi.system.mapper.SysTenantMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.SysTenantService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Service
@Transactional
public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant> implements SysTenantService {
@Autowired
private ISysUserService userService;
@Autowired
private SysUserRoleMapper userRoleMapper;
@Override
public List<SysTenant> selectUserTenantList(String userId, String limitTenantUserId) {
return baseMapper.selectUserTenantList(userId, limitTenantUserId);
}
@Override
public boolean checkUserTenantInUse(String userId, String tenantId) {
if (StringUtils.isAnyEmpty(userId, tenantId)) {
return false;
}
SysTenant sysTenant = baseMapper.selectInUseUserTenant(userId, tenantId);
return sysTenant != null;
}
/**
* 查询树
*
* @param reqSearchSysTenant
* @return
*/
@Override
public RestResponse searchList(ReqSearchSysTenant reqSearchSysTenant) {
QueryWrapper qw = new QueryWrapper();
if (StringUtils.isNotEmpty(reqSearchSysTenant.getTenantName())) {
qw.like("tenant_name", reqSearchSysTenant.getTenantName());
}
if (StringUtils.isNotEmpty(reqSearchSysTenant.getContactName())) {
qw.like("contact_name", reqSearchSysTenant.getContactName());
}
if (StringUtils.isNotEmpty(reqSearchSysTenant.getInUse())) {
qw.eq("in_use", reqSearchSysTenant.getInUse());
}
if (StringUtils.isNoneEmpty(reqSearchSysTenant.getBeginTime(), reqSearchSysTenant.getEndTime())) {
qw.between("end_time", reqSearchSysTenant.getBeginTime() + " 00:00:00", reqSearchSysTenant.getEndTime() + " 23:59:59");
}
// 不展示超级管理租户
qw.ne("super_tenant", "1");
qw.orderByDesc("in_use", "create_time");
RespPage<SysTenant> page = new RespPage(reqSearchSysTenant.getPageNum(), reqSearchSysTenant.getPageSize());
RespPage<SysTenant> listPage = page(page, qw);
return new RestResponse().setData(listPage);
}
/**
* 前端select
*
* @return
*/
public RestResponse treeSelect() {
QueryWrapper qw = new QueryWrapper();
qw.select("tenant_id", "tenant_name");
qw.ne("super_tenant", 1);
qw.orderByDesc("create_time");
List<SysTenant> list = list(qw);
return new RestResponse().setData(list);
}
/**
* 详情
*
* @param tenantId
* @return
*/
public RestResponse detailById(Long tenantId) {
if (null == tenantId) {
return new RestResponse();
}
SysTenant detailInfo = getById(tenantId);
List<String> useDateList = Arrays.asList(DateUtil.format(detailInfo.getBeginTime(), "yyyy-MM-dd"), DateUtil.format(detailInfo.getEndTime(), "yyyy-MM-dd"));
String[] useDateRange = useDateList.toArray(new String[useDateList.size()]);
detailInfo.setUseDateRange(useDateRange);
return new RestResponse().setData(detailInfo);
}
/**
* 添加
*
* @param reqBusinessAddTenant
* @return
*/
@Transactional
public RestResponse addTenant(ReqBusinessAddTenant reqBusinessAddTenant) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SysTenant sysTenant = new SysTenant();
BeanUtils.copyProperties(reqBusinessAddTenant, sysTenant);
sysTenant.setCreateUser(loginUser.getUserId());
sysTenant.setBeginTime(DateUtil.parse(sysTenant.getBeginTime().toString()));//,"yyyy-MM-dd 00:00:00"
sysTenant.setEndTime(DateUtil.parse(DateUtil.format(sysTenant.getEndTime(),"yyyy-MM-dd 23:59:59")));//,"yyyy-MM-dd 23:59:59"
this.save(sysTenant);
try {
// TenantContextHolder.setTenant(sysTenant.getTenantId());
// 保存用户
if (StringUtils.isAnyEmpty(reqBusinessAddTenant.getUsername(), reqBusinessAddTenant.getPassword())) {
return RestResponse.failure("请求参数错误,请完善后重试");
} else if (!reqBusinessAddTenant.getPassword().equals(reqBusinessAddTenant.getCheckPass())) {
return RestResponse.failure(("新旧密码输入不一致,请稍后重试"));
}
// 校验账号是否已被注册
boolean usernameUnique = UserConstants.UNIQUE.equals(userService.checkUserNameUnique(reqBusinessAddTenant.getUsername()));
if (!usernameUnique) {
return RestResponse.failure(("用户名已被注册,请修改后重新提交"));
}
SysUser sysUser = reqBusinessAddTenant.transferToSysUser();
sysUser.setTenantId(sysTenant.getTenantId());
sysUser.setCreateBy(loginUser.getUserId());
sysUser.setPassword(SecurityUtils.encryptPassword(sysUser.getPassword()));
userService.insertUser(sysUser);
// 用户角色
userRoleMapper.countRoleAndUserId(100l,loginUser.getUserId());
} catch (Exception e) {
e.printStackTrace();
}
return RestResponse.success();
}
/**
* 更新
*
* @param sysTenant
* @return
*/
public RestResponse updateTenant(SysTenant sysTenant) {
if (StringUtils.isEmpty(sysTenant.getTenantId())) {
return RestResponse.failure("操作失败,请稍后重试");
}
SysTenant dbTenant = this.getById(sysTenant.getTenantId());
if(null != dbTenant && dbTenant.getSuperTenant()) {
return RestResponse.failure("此租户信息不允许变更");
}
LoginUser loginUser = SecurityUtils.getLoginUser();
sysTenant.setBeginTime(DateUtil.parse(sysTenant.getBeginTime().toString()));
sysTenant.setEndTime(DateUtil.parse(DateUtil.format(sysTenant.getEndTime(),"yyyy-MM-dd 23:59:59")));
sysTenant.setLastUpdateUser(loginUser.getUserId());
sysTenant.setLastUpdateTime(new Date());
boolean updateTenant = this.updateById(sysTenant);
if (updateTenant) {
return RestResponse.success();
} else {
return RestResponse.failure("操作失败,请稍后重试");
}
}
/**
* 删除
*
* @param tenantIds
* @return
*/
public RestResponse deleteById(String[] tenantIds) {
if (null == tenantIds || tenantIds.length == 0) {
return RestResponse.failure("操作失败,请稍后重试");
}
for (String tenantId : tenantIds) {
SysTenant dbTenant = this.getById(tenantId);
if(null != dbTenant && dbTenant.getSuperTenant()) {
return RestResponse.failure(dbTenant.getTenantName() + ",此租户信息不允许删除");
}
// 是否有学生/课程/班级
int contentCount = baseMapper.tenantHaveContent(tenantId);
if (contentCount > 0) {
return RestResponse.failure("租户下有学员,无法删除");
}
}
boolean deleteTenant = this.removeByIds(Arrays.asList(tenantIds));
if (deleteTenant) {
return RestResponse.success();
} else {
return RestResponse.failure("操作失败,请稍后重试");
}
}
}

@ -1,12 +1,5 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysRole;
@ -18,13 +11,17 @@ import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysPostMapper; import com.ruoyi.system.mapper.*;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserPostMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/** /**
* 用户 业务层处理 * 用户 业务层处理
@ -564,4 +561,6 @@ public class SysUserServiceImpl implements ISysUserService
public SysUser selectUserByPhoneOrUserName(String phone) { public SysUser selectUserByPhoneOrUserName(String phone) {
return userMapper.selectUserByPhone(phone); return userMapper.selectUserByPhone(phone);
} }
} }

@ -0,0 +1,19 @@
<?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.ruoyi.mall.mapper.AftersaleMapper">
<sql id="selectAftersaleVo">
select id, member_id, order_id, return_amount, type, status, handle_time, quantity, reason, description, proof_pics, handle_note, handle_man, create_by, create_time, update_by, update_time from oms_aftersale
</sql>
<select id="statPendingAndProcessing" resultType="OrderAndAftersaleStatisticsVO">
select
IFNULL(sum(case when status=0 then 1 else 0 end), 0) pendingAftersaleCount,
IFNULL(sum(case when status=1 then 1 else 0 end), 0) processingAftersaleCount
from oms_aftersale
</select>
</mapper>

@ -0,0 +1,104 @@
<?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.ruoyi.mall.mapper.IndexStatisticsMapper">
<sql id="dateRange">
SELECT
curdate( ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 1 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 2 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 3 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 4 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 5 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 6 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 7 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 8 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 9 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 10 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 11 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 12 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 13 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 14 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 15 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 16 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 17 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 18 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 19 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 20 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 21 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 22 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 23 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 24 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 25 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 26 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 27 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 28 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 29 DAY ) AS date
</sql>
<sql id="dateRange2">
SELECT
curdate( ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 1 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 2 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 3 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 4 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 5 DAY ) AS date UNION ALL
SELECT date_sub( curdate( ), INTERVAL 6 DAY ) AS date
</sql>
<resultMap id="topSalesResultMap" type="ProductTopVO">
<result property="productName" column="product_name"/>
<result property="totalSales" column="total_sales"/>
<result property="pic" column="pic"/>
<result property="spData" column="sp_data"/>
</resultMap>
<select id="goodsStatistics" parameterType="GoodsStatisticsQuery" resultMap="topSalesResultMap">
SELECT product_id ,
product_name,
pic,
IFNULL(SUM(quantity), 0) as total_sales
FROM oms_order_item item right join oms_order o on o.id=item.order_id
WHERE DATE(item.create_time) between DATE(#{startDate}) AND DATE(#{endDate}) AND o.status in(1,2,3)
GROUP BY product_id, product_name
ORDER BY total_sales DESC
LIMIT #{size}
</select>
<select id="orderStatistics" resultType="OrderStatisticsVO">
select a.date,
IFNULL(b.order_count,0) orderCount,
IFNULL(b.order_amount,0) orderAmount
from
(
<choose>
<when test="type == 1">
<include refid="dateRange2"></include>
</when>
<when test="type == 2">
<include refid="dateRange"></include>
</when>
</choose>
) a
left join (
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') as date,
COUNT(*) as order_count,
SUM(total_amount) as order_amount
FROM oms_order
WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND status in(1,2,3)
GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
) b
on a.date=b.date
order by a.date asc
</select>
<select id="goodsSkuStatistics" resultMap="topSalesResultMap">
SELECT product_id ,
product_name,
pic,
sp_data,
IFNULL(SUM(quantity), 0) as total_sales
FROM oms_order_item item right join oms_order o on o.id=item.order_id
WHERE DATE(item.create_time) between DATE(#{startDate}) AND DATE(#{endDate}) AND o.status in(1,2,3)
GROUP BY sku_id
ORDER BY total_sales DESC
LIMIT #{size}
</select>
</mapper>

@ -0,0 +1,21 @@
<?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.ruoyi.mall.mapper.OrderMapper">
<select id="statWaitDelivered" resultType="java.lang.Integer">
select IFNULL(count(id), 0) from oms_order where status=1 and aftersale_status=1
</select>
<select id="statTodayData" resultType="OrderAndAftersaleStatisticsVO">
select
IFNULL(sum(case when status in (2,3) then 1 else 0 end), 0) todayHasDeliveredCount,
IFNULL(count(id), 0) todayOrderCount,
IFNULL(sum(case when status in (1,2,3) then pay_amount else 0 end), 0) todayTransactionAmount
from oms_order
where create_time between #{startTime} and #{endTime}
</select>
</mapper>

@ -14,7 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="phone" column="phone" /> <result property="phone" column="phone" />
<result property="email" column="email" /> <result property="email" column="email" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="delFlag" column="del_flag" /> <result property="deleteFlag" column="delete_flag" />
<result property="parentName" column="parent_name" /> <result property="parentName" column="parent_name" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
@ -23,13 +23,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectDeptVo"> <sql id="selectDeptVo">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.delete_flag, d.create_by, d.create_time
from sys_dept d from sys_dept d
</sql> </sql>
<select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult"> <select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
<include refid="selectDeptVo"/> <include refid="selectDeptVo"/>
where d.del_flag = '0' where d.delete_flag = '0'
<if test="deptId != null and deptId != 0"> <if test="deptId != null and deptId != 0">
AND dept_id = #{deptId} AND dept_id = #{deptId}
</if> </if>
@ -64,12 +64,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="checkDeptExistUser" parameterType="Long" resultType="int"> <select id="checkDeptExistUser" parameterType="Long" resultType="int">
select count(1) from sys_user where dept_id = #{deptId} and del_flag = '0' select count(1) from sys_user where dept_id = #{deptId} and delete_flag = '0'
</select> </select>
<select id="hasChildByDeptId" parameterType="Long" resultType="int"> <select id="hasChildByDeptId" parameterType="Long" resultType="int">
select count(1) from sys_dept select count(1) from sys_dept
where del_flag = '0' and parent_id = #{deptId} limit 1 where delete_flag = '0' and parent_id = #{deptId} limit 1
</select> </select>
<select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult"> <select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult">
@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectNormalChildrenDeptById" parameterType="Long" resultType="int"> <select id="selectNormalChildrenDeptById" parameterType="Long" resultType="int">
select count(*) from sys_dept where status = 0 and del_flag = '0' and find_in_set(#{deptId}, ancestors) select count(*) from sys_dept where status = 0 and delete_flag = '0' and find_in_set(#{deptId}, ancestors)
</select> </select>
<select id="checkDeptNameUnique" resultMap="SysDeptResult"> <select id="checkDeptNameUnique" resultMap="SysDeptResult">
@ -151,7 +151,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<delete id="deleteDeptById" parameterType="Long"> <delete id="deleteDeptById" parameterType="Long">
update sys_dept set del_flag = '2' where dept_id = #{deptId} update sys_dept set delete_flag = '2' where dept_id = #{deptId}
</delete> </delete>
</mapper> </mapper>

@ -0,0 +1,36 @@
<?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.ruoyi.system.mapper.SysTenantMapper">
<select id="selectUserTenantList" resultType="SysTenant">
select t.tenant_id,t.tenant_name
from sys_tenant t,sys_user_tenant ut
where t.delete_flag='0'
and t.tenant_id=ut.tenant_id and ut.user_id=#{userId}
<if test="limitTenantUserId != null and limitTenantUserId != ''">
and exists(select 1 from sys_user_tenant utl where utl.user_id=#{limitTenantUserId} and utl.tenant_id=t.tenant_id)
</if>
order by t.create_time desc
</select>
<select id="selectInUseUserTenant" resultType="SysTenant">
select * from sys_tenant t,sys_user_tenant ut
where t.tenant_id=ut.tenant_id
and ut.user_id=#{userId} and ut.tenant_id=#{tenantId}
and now() between t.begin_time and t.end_time
and t.in_use='1'
and t.delete_flag='0'
</select>
<select id="tenantHaveContent" resultType="integer">
select
sum(CASE
WHEN s.student_name is not null THEN 1
WHEN c.course_name is not null THEN 1
WHEN a.cla_name is not null THEN 1
ELSE 0 END)
from sys_tenant t
LEFT JOIN sc_student s on t.tenant_id=s.tenant_id
LEFT JOIN sc_course c on t.tenant_id=c.tenant_id
LEFT JOIN sc_course_cla a on t.tenant_id=a.tenant_id
WHERE t.tenant_id=#{tenantId}
</select>
</mapper>

@ -23,6 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
<result property="tenantId" column="tenant_id" />
<association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult" /> <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult" />
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" /> <collection property="roles" javaType="java.util.List" resultMap="RoleResult" />
</resultMap> </resultMap>
@ -48,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectUserVo"> <sql id="selectUserVo">
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status, d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.tenant_id
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id

Loading…
Cancel
Save