Merge remote-tracking branch 'origin/master'

pull/1/head
zccbbg 2 years ago
commit daa151f67f

@ -39,7 +39,7 @@ public class OssUtils {
// 创建PutObject请求。
ossClient.putObject(bucketName, fileName, file.getInputStream());
String url = "http://" + bucketName + "." + endPoint + "/" + fileName;
String url = "https://" + bucketName + "." + endPoint + "/" + fileName;
return url;
} catch (Exception e) {
e.printStackTrace();

@ -44,7 +44,8 @@ public class AddressUtils
JSONObject obj = JSONObject.parseObject(rspStr);
String region = obj.getString("pro");
String city = obj.getString("city");
return String.format("%s %s", region, city);
String operator = ((String)obj.get("addr")).split(" ")[1];
return String.format("%s|%s|%s", region, city, operator);
}
catch (Exception e)
{
@ -53,4 +54,8 @@ public class AddressUtils
}
return address;
}
public static void main(String[] args) {
System.out.println("地址:" + getRealAddressByIP("14.125.8.236"));
}
}

@ -8,17 +8,25 @@ import com.cyl.h5.service.H5MemberService;
import com.cyl.manager.ums.pojo.vo.MemberVO;
import com.cyl.wechat.WechatAuthService;
import com.cyl.wechat.response.WechatUserAuth;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.model.LoginMember;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("/h5")
public class H5MemberController {
@Autowired
private H5MemberService service;
@Autowired
private TokenService tokenService;
@ApiOperation("会员注册")
@ -56,4 +64,13 @@ public class H5MemberController {
public void setWechatInfo(@RequestBody String data){
service.setWechatInfo(data);
}
@ApiOperation("新增会员登录记录")
@GetMapping("/record/login")
public void add(HttpServletRequest request) {
LoginMember loginMember = tokenService.getLoginMember(request);
if (loginMember != null){
service.insert(loginMember.getMemberId());
}
}
}

@ -13,21 +13,24 @@ import com.cyl.h5.pojo.response.RegisterResponse;
import com.cyl.h5.pojo.response.ValidatePhoneResponse;
import com.cyl.h5.pojo.response.H5LoginResponse;
import com.cyl.manager.ums.domain.Member;
import com.cyl.manager.ums.domain.MemberLogininfor;
import com.cyl.manager.ums.domain.MemberWechat;
import com.cyl.manager.ums.mapper.MemberLogininforMapper;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.cyl.manager.ums.mapper.MemberWechatMapper;
import com.cyl.manager.ums.pojo.vo.MemberVO;
import com.cyl.manager.ums.service.MemberLogininforService;
import com.cyl.wechat.WechatAuthService;
import com.cyl.wechat.response.WechatUserAuth;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginMember;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.AesCryptoUtils;
import com.ruoyi.common.utils.PhoneUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.config.LocalDataUtil;
import com.ruoyi.framework.web.service.TokenService;
import eu.bitwalker.useragentutils.UserAgent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -61,6 +64,13 @@ public class H5MemberService {
@Autowired
private MemberWechatMapper memberWechatMapper;
@Autowired
private MemberLogininforService memberLogininforService;
@Autowired
private MemberLogininforMapper memberLogininforMapper;
/**
*
* @param request
@ -192,6 +202,7 @@ public class H5MemberService {
//校验会员状态
validateMemberStatus(member);
}
return getLoginResponse(member.getId());
}
@ -232,6 +243,8 @@ public class H5MemberService {
LoginMember loginMember = new LoginMember();
loginMember.setMemberId(memberId);
String token = tokenService.createMemberToken(loginMember);
//record登录
this.insert(memberId);
H5LoginResponse response = new H5LoginResponse();
response.setToken(token);
return response;
@ -272,4 +285,24 @@ public class H5MemberService {
wrapper.set("update_by", member.getId());
memberWechatMapper.update(null, wrapper);
}
/**
*
*
* @param memberId id
* @return
*/
public void insert(Long memberId) {
Member member = memberMapper.selectById(memberId);
UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
MemberLogininfor memberLogininfor = new MemberLogininfor();
memberLogininfor.setMemberId(memberId);
memberLogininfor.setPhone(member.getPhoneHidden());
memberLogininfor.setOs(userAgent.getOperatingSystem().getName());
memberLogininfor.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
memberLogininfor.setBrowser(userAgent.getBrowser().getName());
memberLogininfor.setLoginLocation(AddressUtils.getRealAddressByIP(memberLogininfor.getIpaddr()));
memberLogininfor.setLoginTime(LocalDateTime.now());
memberLogininforMapper.insert(memberLogininfor);
}
}

@ -566,7 +566,7 @@ public class H5OrderService {
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOrderSn(order.getOrderSn());
optHistory.setOperateMan("系统");
optHistory.setOperateMan("" + order.getMemberId());
optHistory.setOrderStatus(OrderStatus.NOT_DELIVERED.getType());
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(order.getMemberId());

@ -176,7 +176,7 @@ public class OrderService {
return new PageImpl<>(managerOrderVOList, page, 0);
}
long total = ((com.github.pagehelper.Page) managerOrderVOList).getTotal();
Map<Long, ManagerOrderVO> orderMap = managerOrderVOList.stream().collect(Collectors.toMap(ManagerOrderVO::getId, it -> it));
Map<Long, ManagerOrderVO> orderMap = managerOrderVOList.stream().collect(Collectors.toMap(ManagerOrderVO::getId, it -> it, (v1,v2) -> v2, LinkedHashMap::new));
//查orderItem
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.in("order_id", orderMap.keySet());

@ -2,6 +2,7 @@ package com.cyl.manager.statistics.controller;
import com.cyl.manager.statistics.pojo.GoodsStatisticsQueryParam;
import com.cyl.manager.statistics.pojo.OrderStatisticsQueryParam;
import com.cyl.manager.statistics.pojo.vo.MemberAndCartStatisticsVO;
import com.cyl.manager.statistics.pojo.vo.OrderAndAftersaleStatisticsVO;
import com.cyl.manager.statistics.pojo.vo.OrderStatisticsVO;
@ -14,9 +15,7 @@ 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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -46,10 +45,9 @@ public class IndexStatisticsManagerController {
}
@ApiOperation(value = "订单信息")
@GetMapping("/orderStatistics")
public ResponseEntity<List<OrderStatisticsVO>> orderStatistics() {
return ResponseEntity.ok(indexStatisticsService.orderStatistics());
@PostMapping("/orderStatistics")
public ResponseEntity<List<OrderStatisticsVO>> orderStatistics(@RequestBody OrderStatisticsQueryParam param) {
return ResponseEntity.ok(indexStatisticsService.orderStatistics(param));
}
@ApiOperation(value = "会员数,加购数")

@ -2,6 +2,7 @@ package com.cyl.manager.statistics.mapper;
import com.cyl.manager.statistics.pojo.GoodsStatisticsQueryParam;
import com.cyl.manager.statistics.pojo.OrderStatisticsQueryParam;
import com.cyl.manager.statistics.pojo.vo.OrderStatisticsVO;
import com.cyl.manager.statistics.pojo.vo.ProductTopVO;
@ -11,6 +12,6 @@ public interface IndexStatisticsMapper {
List<ProductTopVO> goodsSkuStatistics(GoodsStatisticsQueryParam goodsStatisticsQueryParam);
List<ProductTopVO> goodsStatistics(GoodsStatisticsQueryParam goodsStatisticsQueryParam);
List<OrderStatisticsVO> orderStatistics();
List<OrderStatisticsVO> orderStatistics(OrderStatisticsQueryParam param);
}

@ -0,0 +1,14 @@
package com.cyl.manager.statistics.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("订单统计查询条件对象")
@Data
public class OrderStatisticsQueryParam {
@ApiModelProperty("查询范围类型 1近一周 2近一个月")
private Integer type;
}

@ -7,6 +7,7 @@ import com.cyl.manager.oms.service.OrderDeliveryHistoryService;
import com.cyl.manager.oms.service.OrderService;
import com.cyl.manager.statistics.mapper.IndexStatisticsMapper;
import com.cyl.manager.statistics.pojo.GoodsStatisticsQueryParam;
import com.cyl.manager.statistics.pojo.OrderStatisticsQueryParam;
import com.cyl.manager.statistics.pojo.vo.MemberAndCartStatisticsVO;
import com.cyl.manager.statistics.pojo.vo.OrderAndAftersaleStatisticsVO;
import com.cyl.manager.statistics.pojo.vo.OrderStatisticsVO;
@ -51,8 +52,8 @@ public class IndexStatisticsService {
}
}
public List<OrderStatisticsVO> orderStatistics() {
return indexStatisticsMapper.orderStatistics();
public List<OrderStatisticsVO> orderStatistics(OrderStatisticsQueryParam param) {
return indexStatisticsMapper.orderStatistics(param);
}
public MemberAndCartStatisticsVO statMemberAndCart() {

@ -0,0 +1,97 @@
package com.cyl.manager.ums.controller;
import java.util.List;
import com.cyl.h5.config.SecurityUtil;
import com.cyl.manager.ums.domain.Member;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginMember;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.config.LocalDataUtil;
import com.ruoyi.framework.web.service.TokenService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import com.cyl.manager.ums.convert.MemberLogininforConvert;
import com.cyl.manager.ums.domain.MemberLogininfor;
import com.cyl.manager.ums.pojo.query.MemberLogininforQuery;
import com.cyl.manager.ums.service.MemberLogininforService;
import com.cyl.manager.ums.pojo.vo.MemberLogininforVO;
import com.ruoyi.common.utils.poi.ExcelUtil;
import javax.servlet.http.HttpServletRequest;
/**
* Controller
*
* @author zcc
* @date 2023-07-26
*/
@Api(description ="会员登录记录接口列表")
@RestController
@RequestMapping("/ums/memberLogininfor")
public class MemberLogininforController extends BaseController {
@Autowired
private MemberLogininforService service;
@Autowired
private MemberLogininforConvert convert;
@Autowired
private TokenService tokenService;
@ApiOperation("查询会员登录记录列表")
@PreAuthorize("@ss.hasPermi('ums:memberLogininfor:list')")
@PostMapping("/list")
public ResponseEntity<Page<MemberLogininfor>> list(@RequestBody MemberLogininforQuery query, Pageable page) {
List<MemberLogininfor> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
}
@ApiOperation("导出会员登录记录列表")
@PreAuthorize("@ss.hasPermi('ums:memberLogininfor:export')")
@Log(title = "会员登录记录", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(MemberLogininforQuery query) {
List<MemberLogininfor> list = service.selectList(query, null);
ExcelUtil<MemberLogininforVO> util = new ExcelUtil<>(MemberLogininforVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "会员登录记录数据"));
}
@ApiOperation("获取会员登录记录详细信息")
@PreAuthorize("@ss.hasPermi('ums:memberLogininfor:query')")
@GetMapping(value = "/{id}")
public ResponseEntity<MemberLogininfor> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
@ApiOperation("修改会员登录记录")
@PreAuthorize("@ss.hasPermi('ums:memberLogininfor:edit')")
@Log(title = "会员登录记录", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody MemberLogininfor memberLogininfor) {
return ResponseEntity.ok(service.update(memberLogininfor));
}
@ApiOperation("删除会员登录记录")
@PreAuthorize("@ss.hasPermi('ums:memberLogininfor:remove')")
@Log(title = "会员登录记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
}
}

@ -0,0 +1,16 @@
package com.cyl.manager.ums.convert;
import org.mapstruct.Mapper;
import com.cyl.manager.ums.domain.MemberLogininfor;
import com.cyl.manager.ums.pojo.vo.MemberLogininforVO;
import java.util.List;
/**
* DO <=> DTO <=> VO / BO / Query
*
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface MemberLogininforConvert {
List<MemberLogininforVO> dos2vos(List<MemberLogininfor> list);
}

@ -0,0 +1,51 @@
package com.cyl.manager.ums.domain;
import java.time.LocalDateTime;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* ums_member_logininfor
*
* @author zcc
*/
@ApiModel(description="会员登录记录对象")
@Data
@TableName("ums_member_logininfor")
public class MemberLogininfor {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
private Long id;
@ApiModelProperty("会员手机号")
@Excel(name = "会员手机号")
private String phone;
@ApiModelProperty("会员id")
@Excel(name = "会员id")
private Long memberId;
@ApiModelProperty("登录IP地址")
@Excel(name = "登录IP地址")
private String ipaddr;
@ApiModelProperty("登录地点")
@Excel(name = "登录地点")
private String loginLocation;
@ApiModelProperty("浏览器类型")
@Excel(name = "浏览器类型")
private String browser;
@ApiModelProperty("操作系统")
@Excel(name = "操作系统")
private String os;
@ApiModelProperty("登陆时间")
@Excel(name = "登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime loginTime;
}

@ -0,0 +1,21 @@
package com.cyl.manager.ums.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import com.cyl.manager.ums.domain.MemberLogininfor;
/**
* Mapper
*
* @author zcc
*/
public interface MemberLogininforMapper extends BaseMapper<MemberLogininfor> {
/**
*
*
* @param memberLogininfor
* @return
*/
List<MemberLogininfor> selectByEntity(MemberLogininfor memberLogininfor);
}

@ -0,0 +1,41 @@
package com.cyl.manager.ums.pojo.query;
import java.time.LocalDateTime;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
*
*
* @author zcc
*/
@ApiModel(description="会员登录记录 查询 对象")
@Data
public class MemberLogininforQuery {
@ApiModelProperty("会员手机号 精确匹配")
private String phone;
@ApiModelProperty("会员id 精确匹配")
private Long memberId;
@ApiModelProperty("登录IP地址 精确匹配")
private String ipaddr;
@ApiModelProperty("登录地点 精确匹配")
private String loginLocation;
@ApiModelProperty("浏览器类型 精确匹配")
private String browser;
@ApiModelProperty("操作系统 精确匹配")
private String os;
@ApiModelProperty("登陆时间 精确匹配")
private LocalDateTime loginTime;
private String beginTime;
private String endTime;
}

@ -0,0 +1,38 @@
package com.cyl.manager.ums.pojo.vo;
import java.time.LocalDateTime;
import com.ruoyi.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
*
*
* @author zcc
*/
@Data
public class MemberLogininforVO {
/** ID */
private Long id;
/** 会员手机号 */
@Excel(name = "会员手机号")
private String phone;
/** 会员id */
@Excel(name = "会员id")
private Long memberId;
/** 登录IP地址 */
@Excel(name = "登录IP地址")
private String ipaddr;
/** 登录地点 */
@Excel(name = "登录地点")
private String loginLocation;
/** 浏览器类型 */
@Excel(name = "浏览器类型")
private String browser;
/** 操作系统 */
@Excel(name = "操作系统")
private String os;
/** 登陆时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime loginTime;
}

@ -0,0 +1,121 @@
package com.cyl.manager.ums.service;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cyl.manager.ums.domain.Member;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.domain.model.LoginMember;
import com.ruoyi.common.utils.AesCryptoUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import eu.bitwalker.useragentutils.UserAgent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.cyl.manager.ums.mapper.MemberLogininforMapper;
import com.cyl.manager.ums.domain.MemberLogininfor;
import com.cyl.manager.ums.pojo.query.MemberLogininforQuery;
/**
* Service
*
*
* @author zcc
*/
@Service
public class MemberLogininforService {
@Autowired
private MemberLogininforMapper memberLogininforMapper;
@Autowired
private MemberMapper memberMapper;
@Value("${aes.key}")
private String aesKey;
/**
*
*
* @param id
* @return
*/
public MemberLogininfor selectById(Long id) {
return memberLogininforMapper.selectById(id);
}
/**
*
*
* @param query
* @param page
* @return
*/
public List<MemberLogininfor> selectList(MemberLogininforQuery query, Pageable page) {
QueryWrapper<MemberLogininfor> qw = new QueryWrapper<>();
String phone = query.getPhone();
if (!StringUtils.isEmpty(phone)) {
LambdaQueryWrapper<Member> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Member::getPhoneEncrypted, AesCryptoUtils.encrypt(aesKey, phone));
Member member = memberMapper.selectOne(wrapper);
if (member != null){
qw.eq("phone", member.getPhoneEncrypted());
}else {
qw.eq("phone", "-1");
}
}
if (page != null) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
String ipaddr = query.getIpaddr();
if (!StringUtils.isEmpty(ipaddr)) {
qw.eq("ipaddr", ipaddr);
}
String loginLocation = query.getLoginLocation();
if (!StringUtils.isEmpty(loginLocation)) {
qw.eq("login_location", loginLocation);
}
String browser = query.getBrowser();
if (!StringUtils.isEmpty(browser)) {
qw.eq("browser", browser);
}
String os = query.getOs();
if (!StringUtils.isEmpty(os)) {
qw.eq("os", os);
}
if (query.getBeginTime() != null && query.getEndTime() != null) {
qw.ge("login_time", query.getBeginTime());
qw.lt("login_time", query.getEndTime());
}
qw.orderByDesc("login_time");
return memberLogininforMapper.selectList(qw);
}
/**
*
*
* @param memberLogininfor
* @return
*/
public int update(MemberLogininfor memberLogininfor) {
return memberLogininforMapper.updateById(memberLogininfor);
}
/**
*
*
* @param id
* @return
*/
public int deleteById(Long id) {
return memberLogininforMapper.deleteById(id);
}
}

@ -31,6 +31,8 @@ public class WechatController {
response.setAppId(appId);
List<String> jsApiList = new ArrayList<>();
jsApiList.add("chooseWXPay");
jsApiList.add("updateAppMessageShareData");
jsApiList.add("updateTimelineShareData");
response.setJsApiList(jsApiList);
response.setNonceStr(nonceStr);
response.setTimeStamp(String.valueOf(timeStamp));

@ -36,6 +36,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
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="com.cyl.manager.statistics.pojo.vo.ProductTopVO">
<result property="productName" column="product_name"/>
<result property="totalSales" column="total_sales"/>
@ -59,7 +69,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
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,

@ -0,0 +1,34 @@
<?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.cyl.manager.ums.mapper.MemberLogininforMapper">
<resultMap type="MemberLogininfor" id="MemberLogininforResult">
<result property="id" column="id"/>
<result property="phone" column="phone"/>
<result property="memberId" column="member_id"/>
<result property="ipaddr" column="ipaddr"/>
<result property="loginLocation" column="login_location"/>
<result property="browser" column="browser"/>
<result property="os" column="os"/>
<result property="loginTime" column="login_time"/>
</resultMap>
<sql id="selectMemberLogininforVo">
select id, phone, member_id, ipaddr, login_location, browser, os, login_time from ums_member_logininfor
</sql>
<select id="selectByEntity" parameterType="MemberLogininfor" resultMap="MemberLogininforResult">
<include refid="selectMemberLogininforVo"/>
<where>
<if test="phone != null and phone != ''"> and phone = #{phone}</if>
<if test="memberId != null "> and member_id = #{memberId}</if>
<if test="ipaddr != null and ipaddr != ''"> and ipaddr = #{ipaddr}</if>
<if test="loginLocation != null and loginLocation != ''"> and login_location = #{loginLocation}</if>
<if test="browser != null and browser != ''"> and browser = #{browser}</if>
<if test="os != null and os != ''"> and os = #{os}</if>
<if test="loginTime != null "> and login_time = #{loginTime}</if>
</where>
</select>
</mapper>

@ -1,11 +1,12 @@
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
import java.time.LocalDateTime;
/**
* 访 sys_logininfor
*
@ -50,7 +51,7 @@ public class SysLogininfor extends BaseEntity
/** 访问时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date loginTime;
private LocalDateTime loginTime;
public Long getInfoId()
{
@ -132,12 +133,12 @@ public class SysLogininfor extends BaseEntity
this.msg = msg;
}
public Date getLoginTime()
public LocalDateTime getLoginTime()
{
return loginTime;
}
public void setLoginTime(Date loginTime)
public void setLoginTime(LocalDateTime loginTime)
{
this.loginTime = loginTime;
}

@ -0,0 +1,22 @@
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('会员登录记录', '3', '1', 'memberLogininfor', 'ums/memberLogininfor/index', 1, 0, 'C', '0', '0', 'ums:memberLogininfor:list', '#', 1, sysdate(), '', null, '会员登录记录菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('会员登录记录查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'ums:memberLogininfor:query', '#', 1, sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('会员登录记录新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', 'ums:memberLogininfor:add', '#', 1, sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('会员登录记录修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', 'ums:memberLogininfor:edit', '#', 1, sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('会员登录记录删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', 'ums:memberLogininfor:remove', '#', 1, sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('会员登录记录导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', 'ums:memberLogininfor:export', '#', 1, sysdate(), '', null, '');
Loading…
Cancel
Save