租户管理

master
xiaoning 6 days 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.SysUser;
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.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.SysPermissionService;
@ -21,7 +20,7 @@ import java.util.Set;
/**
*
*
*
* @author ruoyi
*/
@RestController
@ -49,19 +48,6 @@ public class SysLoginController {
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")
public AjaxResult getInfo() {
SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
//所属租户
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
@ -84,7 +73,7 @@ public class SysLoginController {
/**
*
*
*
* @return
*/
@GetMapping("getRouters")

@ -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;
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
private String deleteFlag;
/** 父部门名称 */
private String parentName;
@ -152,14 +152,14 @@ public class SysDept extends BaseEntity
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()
@ -194,7 +194,7 @@ public class SysDept extends BaseEntity
.append("phone", getPhone())
.append("email", getEmail())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("delFlag", getDeleteFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())

@ -1,12 +1,5 @@
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.JsonProperty;
import com.ruoyi.common.annotation.Excel;
@ -14,10 +7,18 @@ import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.annotation.Excels;
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
*
*
* @author ruoyi
*/
public class SysUser extends BaseEntity
@ -95,6 +96,8 @@ public class SysUser extends BaseEntity
/** 角色ID */
private Long roleId;
public String tenantId;
public SysUser()
{
@ -105,6 +108,14 @@ public class SysUser extends BaseEntity
this.userId = userId;
}
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public Long getUserId()
{
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.user.CaptchaException;
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.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
@ -31,10 +30,8 @@ import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
*
@ -132,7 +129,7 @@ public class SysLoginService {
/**
*
*
*
* @param username
* @param code
* @param uuid
@ -164,39 +161,7 @@ public class SysLoginService {
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) {
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;
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.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysRole;
@ -18,17 +11,21 @@ import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysPostMapper;
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.mapper.*;
import com.ruoyi.system.service.ISysConfigService;
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;
/**
*
*
*
* @author ruoyi
*/
@Service
@ -56,7 +53,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -69,7 +66,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -82,7 +79,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -95,7 +92,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -107,7 +104,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* ID
*
*
* @param userId ID
* @return
*/
@ -119,7 +116,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -141,7 +138,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -163,7 +160,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -216,7 +213,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
*/
@Override
@ -230,7 +227,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userId id
*/
@Override
@ -250,7 +247,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -269,7 +266,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -281,7 +278,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -303,7 +300,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userId ID
* @param roleIds
*/
@ -317,7 +314,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -329,7 +326,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -341,7 +338,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @param avatar
* @return
@ -354,7 +351,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -366,7 +363,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @param password
* @return
@ -379,7 +376,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
*/
public void insertUserRole(SysUser user)
@ -405,7 +402,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
*/
public void insertUserPost(SysUser user)
@ -431,7 +428,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userId ID
* @param roleIds
*/
@ -457,7 +454,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* ID
*
*
* @param userId ID
* @return
*/
@ -474,7 +471,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userIds ID
* @return
*/
@ -495,7 +492,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userList
* @param isUpdateSupport
* @param userId
@ -564,4 +561,6 @@ public class SysUserServiceImpl implements ISysUserService
public SysUser selectUserByPhoneOrUserName(String 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,22 +14,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="phone" column="phone" />
<result property="email" column="email" />
<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="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<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
</sql>
<select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
<include refid="selectDeptVo"/>
where d.del_flag = '0'
where d.delete_flag = '0'
<if test="deptId != null and deptId != 0">
AND dept_id = #{deptId}
</if>
@ -46,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${params.dataScope}
order by d.parent_id, d.order_num
</select>
<select id="selectDeptListByRoleId" resultType="Integer">
select d.dept_id
from sys_dept d
@ -57,34 +57,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
order by d.parent_id, d.order_num
</select>
<select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
<include refid="selectDeptVo"/>
where dept_id = #{deptId}
</select>
<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 id="hasChildByDeptId" parameterType="Long" resultType="int">
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 id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult">
select * from sys_dept where find_in_set(#{deptId}, ancestors)
</select>
<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 id="checkDeptNameUnique" resultMap="SysDeptResult">
<include refid="selectDeptVo"/>
where dept_name=#{deptName} and parent_id = #{parentId} limit 1
</select>
<insert id="insertDept" parameterType="SysDept">
insert into sys_dept(
<if test="deptId != null and deptId != 0">dept_id,</if>
@ -112,7 +112,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate()
)
</insert>
<update id="updateDept" parameterType="SysDept">
update sys_dept
<set>
@ -129,7 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</set>
where dept_id = #{deptId}
</update>
<update id="updateDeptChildren" parameterType="java.util.List">
update sys_dept set ancestors =
<foreach collection="depts" item="item" index="index"
@ -142,16 +142,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item.deptId}
</foreach>
</update>
<update id="updateDeptStatusNormal" parameterType="Long">
update sys_dept set status = '0' where dept_id in
update sys_dept set status = '0' where dept_id in
<foreach collection="array" item="deptId" open="(" separator="," close=")">
#{deptId}
</foreach>
</update>
<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>
</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,10 +23,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="tenantId" column="tenant_id" />
<association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult" />
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" />
</resultMap>
<resultMap id="deptResult" type="SysDept">
<id property="deptId" column="dept_id" />
<result property="parentId" column="parent_id" />
@ -35,7 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="leader" column="leader" />
<result property="status" column="dept_status" />
</resultMap>
<resultMap id="RoleResult" type="SysRole">
<id property="roleId" column="role_id" />
<result property="roleName" column="role_name" />
@ -44,17 +45,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="dataScope" column="data_scope" />
<result property="status" column="role_status" />
</resultMap>
<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,
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
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_role r on r.role_id = ur.role_id
</sql>
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_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_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
@ -83,7 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
from sys_user u
@ -100,7 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
from sys_user u
@ -118,29 +119,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_name = #{userName}
</select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_id = #{userId}
</select>
<select id="checkUserNameUnique" parameterType="String" resultType="int">
select count(1) from sys_user where user_name = #{userName} limit 1
</select>
<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} limit 1
</select>
<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
select user_id, email from sys_user where email = #{email} limit 1
</select>
<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_user(
<if test="userId != null and userId != 0">user_id,</if>
@ -172,7 +173,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate()
)
</insert>
<update id="updateUser" parameterType="SysUser">
update sys_user
<set>
@ -193,28 +194,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</set>
where user_id = #{userId}
</update>
<update id="updateUserStatus" parameterType="SysUser">
update sys_user set status = #{status} where user_id = #{userId}
</update>
<update id="updateUserAvatar" parameterType="SysUser">
update sys_user set avatar = #{avatar} where user_name = #{userName}
</update>
<update id="resetUserPwd" parameterType="SysUser">
update sys_user set password = #{password} where user_name = #{userName}
</update>
<delete id="deleteUserById" parameterType="Long">
update sys_user set del_flag = '2' where user_id = #{userId}
</delete>
<delete id="deleteUserByIds" parameterType="Long">
update sys_user set del_flag = '2' where user_id in
<foreach collection="array" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
</foreach>
</delete>
</mapper>
</mapper>

Loading…
Cancel
Save