陈裕财 2 years ago
parent
commit
4aae6a82a8
  1. 273
      xm-core/src/main/java/com/xm/core/ctrl/XmRecordVisitController.java
  2. 55
      xm-core/src/main/java/com/xm/core/service/XmRecordVisitService.java
  3. 213
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmRecordVisitMapper.xml

273
xm-core/src/main/java/com/xm/core/ctrl/XmRecordVisitController.java

@ -0,0 +1,273 @@
package com.xm.core.ctrl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mdp.core.entity.Result;
import com.mdp.core.query.QueryTools;
import com.mdp.core.utils.RequestUtils;
import com.mdp.core.utils.ResponseHelper;
import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils;
import com.mdp.swagger.ApiEntityParams;
import com.xm.core.entity.XmBranchStateHis;
import com.xm.core.entity.XmRecordVisit;
import com.xm.core.service.XmRecordVisitService;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static com.mdp.core.utils.BaseUtils.toMap;
/**
* url编制采用rest风格,如对xm_record_visit 重要页面访问记录的操作有增删改查,对应的url分别为:<br>
* 组织 com 顶级模块 xm 大模块 core 小模块 <br>
* 实体 XmRecordVisit xm_record_visit 当前主键(包括多主键): id;
***/
@RestController("xm.core.xmRecordVisitController")
@RequestMapping(value="/**/core/xmRecordVisit")
@Api(tags={"重要页面访问记录操作接口"})
public class XmRecordVisitController {
static Logger logger =LoggerFactory.getLogger(XmRecordVisitController.class);
@Autowired
private XmRecordVisitService xmRecordVisitService;
List<XmRecordVisit> datas=new ArrayList<>();
Map<String,Object> fieldsMap = toMap(new XmRecordVisit());
@ApiOperation( value = "查询重要页面访问记录信息列表",notes=" ")
@ApiEntityParams( XmRecordVisit.class )
@ApiImplicitParams({
@ApiImplicitParam(name="pageSize",value="每页大小,默认20条",required=false),
@ApiImplicitParam(name="pageNum",value="当前页码,从1开始",required=false),
@ApiImplicitParam(name="total",value="总记录数,服务器端收到0时,会自动计算总记录数,如果上传>0的不自动计算",required=false),
@ApiImplicitParam(name="count",value="是否计算总记录条数,如果count=true,则计算计算总条数,如果count=false 则不计算",required=false),
@ApiImplicitParam(name="orderBy",value="排序列 如性别、学生编号排序 orderBy = sex desc,student desc",required=false),
})
@ApiResponses({
@ApiResponse(code = 200,response=XmRecordVisit.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},total:总记录数,data:[数据对象1,数据对象2,...]}")
})
@RequestMapping(value="/list",method=RequestMethod.GET)
public Result listXmRecordVisit(@ApiIgnore @RequestParam Map<String,Object> params){
RequestUtils.transformArray(params, "ids");
IPage page=QueryTools.initPage(params);
QueryWrapper<XmBranchStateHis> qw = QueryTools.initQueryWrapper(XmBranchStateHis.class , params);
List<Map<String,Object>> datas = xmRecordVisitService.selectListMapByWhere(page,qw,params);
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); //列出XmRecordVisit列表
}
@ApiOperation( value = "新增一条重要页面访问记录信息",notes=" ")
@ApiResponses({
@ApiResponse(code = 200,response=XmRecordVisit.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@RequestMapping(value="/add",method=RequestMethod.POST)
public Result addXmRecordVisit(@RequestBody XmRecordVisit xmRecordVisit) {
if(!StringUtils.hasText(xmRecordVisit.getBizId())){
return ResponseHelper.failed("bizId-0","bizId不能为空");
}
if(!StringUtils.hasText(xmRecordVisit.getPbizId())){
return ResponseHelper.failed("pbizId-0","pbizId不能为空");
}
if(!StringUtils.hasText(xmRecordVisit.getObjType())){
return ResponseHelper.failed("objType-0","objType不能为空");
}
User user= LoginUtils.getCurrentUserInfo();
xmRecordVisit.setId(this.xmRecordVisitService.createKey("id"));
xmRecordVisit.setGloNo(MDC.get("gloNo"));
xmRecordVisit.setOperTime(new Date());
xmRecordVisit.setOperUserid(user.getUserid());
xmRecordVisit.setOperUsername(user.getUsername());
xmRecordVisit.setBranchId(user.getBranchId());
xmRecordVisit.setIp(RequestUtils.getIpAddr(RequestUtils.getRequest()));
this.datas.add(xmRecordVisit);
if(this.datas.size()>100){
List<XmRecordVisit> newDatas=new ArrayList<>();
newDatas.addAll(this.datas);
this.datas.clear();
xmRecordVisitService.batchAddAndCalc(newDatas);
}
//
return Result.ok();
}
@Scheduled(cron = "0 0 */3 * * ?")
public void batchAddAndCalc(){
if(this.datas.size()>0){
List<XmRecordVisit> newDatas=new ArrayList<>();
newDatas.addAll(this.datas);
this.datas.clear();
xmRecordVisitService.batchAddAndCalc(newDatas);
}
}
/**
@ApiOperation( value = "删除一条重要页面访问记录信息",notes=" ")
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}")
})
@RequestMapping(value="/del",method=RequestMethod.POST)
public Result delXmRecordVisit(@RequestBody XmRecordVisit xmRecordVisit){
if(!StringUtils.hasText(xmRecordVisit.getId())) {
return Result.error("pk-not-exists","请上送主键参数id");
}
XmRecordVisit xmRecordVisitDb = xmRecordVisitService.selectOneObject(xmRecordVisit);
if( xmRecordVisitDb == null ){
return Result.error("data-not-exists","数据不存在,无法删除");
}
xmRecordVisitService.deleteByPk(xmRecordVisit);
return Result.ok();
}
*/
/**
@ApiOperation( value = "根据主键修改一条重要页面访问记录信息",notes=" ")
@ApiResponses({
@ApiResponse(code = 200,response=XmRecordVisit.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@RequestMapping(value="/edit",method=RequestMethod.POST)
public Result editXmRecordVisit(@RequestBody XmRecordVisit xmRecordVisit) {
if(!StringUtils.hasText(xmRecordVisit.getId())) {
return Result.error("pk-not-exists","请上送主键参数id");
}
XmRecordVisit xmRecordVisitDb = xmRecordVisitService.selectOneObject(xmRecordVisit);
if( xmRecordVisitDb == null ){
return Result.error("data-not-exists","数据不存在,无法修改");
}
xmRecordVisitService.updateSomeFieldByPk(xmRecordVisit);
}
*/
/**
@ApiOperation( value = "批量修改某些字段",notes="")
@ApiEntityParams( value = XmRecordVisit.class, props={ }, remark = "重要页面访问记录", paramType = "body" )
@ApiResponses({
@ApiResponse(code = 200,response=XmRecordVisit.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@RequestMapping(value="/editSomeFields",method=RequestMethod.POST)
public Result editSomeFields( @ApiIgnore @RequestBody Map<String,Object> xmRecordVisitMap) {
List<String> ids= (List<String>) xmRecordVisitMap.get("ids");
if(ids==null || ids.size()==0){
return Result.error("ids-0","ids不能为空");
}
Set<String> fields=new HashSet<>();
fields.add("id");
for (String fieldName : xmRecordVisitMap.keySet()) {
if(fields.contains(fieldName)){
return Result.error(fieldName+"-no-edit",fieldName+"不允许修改");
}
}
Set<String> fieldKey=xmRecordVisitMap.keySet().stream().filter(i-> fieldsMap.containsKey(i)).collect(Collectors.toSet());
fieldKey=fieldKey.stream().filter(i->!StringUtils.isEmpty(xmRecordVisitMap.get(i) )).collect(Collectors.toSet());
if(fieldKey.size()<=0) {
return Result.error("fieldKey-0","没有需要更新的字段");
}
XmRecordVisit xmRecordVisit = fromMap(xmRecordVisitMap,XmRecordVisit.class);
List<XmRecordVisit> xmRecordVisitsDb=xmRecordVisitService.selectListByIds(ids);
if(xmRecordVisitsDb==null ||xmRecordVisitsDb.size()==0){
return Result.error("data-0","记录已不存在");
}
List<XmRecordVisit> can=new ArrayList<>();
List<XmRecordVisit> no=new ArrayList<>();
User user = LoginUtils.getCurrentUserInfo();
for (XmRecordVisit xmRecordVisitDb : xmRecordVisitsDb) {
Tips tips2 = new Tips("检查通过");
if(!tips2.isOk()){
no.add(xmRecordVisitDb);
}else{
can.add(xmRecordVisitDb);
}
}
if(can.size()>0){
xmRecordVisitMap.put("ids",can.stream().map(i->i.getId()).collect(Collectors.toList()));
xmRecordVisitService.editSomeFields(xmRecordVisitMap);
}
List<String> msgs=new ArrayList<>();
if(can.size()>0){
msgs.add(String.format("成功更新以下%s条数据",can.size()));
}
if(no.size()>0){
msgs.add(String.format("以下%s个数据无权限更新",no.size()));
}
if(can.size()>0){
return Result.ok(msgs.stream().collect(Collectors.joining()));
}else {
return Result.error(msgs.stream().collect(Collectors.joining()));
}
}
*/
/**
@ApiOperation( value = "根据主键列表批量删除重要页面访问记录信息",notes=" ")
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@RequestMapping(value="/batchDel",method=RequestMethod.POST)
public Result batchDelXmRecordVisit(@RequestBody List<XmRecordVisit> xmRecordVisits) {
if(xmRecordVisits.size()<=0){
return Result.error("data-0","请上送待删除数据列表");
}
List<XmRecordVisit> datasDb=xmRecordVisitService.selectListByIds(xmRecordVisits.stream().map(i-> i.getId() ).collect(Collectors.toList()));
List<XmRecordVisit> can=new ArrayList<>();
List<XmRecordVisit> no=new ArrayList<>();
for (XmRecordVisit data : datasDb) {
if(true){
can.add(data);
}else{
no.add(data);
}
}
List<String> msgs=new ArrayList<>();
if(can.size()>0){
xmRecordVisitService.batchDelete(can);
msgs.add(String.format("成功删除%s条数据.",can.size()));
}
if(no.size()>0){
msgs.add(String.format("以下%s条数据不能删除.【%s】",no.size(),no.stream().map(i-> i.getId() ).collect(Collectors.joining(","))));
}
if(can.size()>0){
return Result.ok(msgs.stream().collect(Collectors.joining()));
}else {
return Result.error(msgs.stream().collect(Collectors.joining()));
}
}
*/
}

55
xm-core/src/main/java/com/xm/core/service/XmRecordVisitService.java

@ -0,0 +1,55 @@
package com.xm.core.service;
import com.mdp.core.service.BaseService;
import com.xm.core.entity.XmRecordVisit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.<br>
* 组织 com 顶级模块 xm 大模块 core 小模块 <br>
* 实体 XmRecordVisit xm_record_visit 当前主键(包括多主键): id;
***/
@Service("xm.core.xmRecordVisitService")
public class XmRecordVisitService extends BaseService<XmRecordVisitMapper,XmRecordVisit> {
static Logger logger =LoggerFactory.getLogger(XmRecordVisitService.class);
public void batchAddAndCalc(List<XmRecordVisit> datas) {
Map<String, Integer> timesMap=new HashMap<>();
Map<String,Set<String> > usersMap=new HashMap<>();
for (XmRecordVisit data : datas) {
String key=data.getBizId();
Set<String> users=usersMap.get(key);
if(users==null){
users=new HashSet<>();
}
users.add(data.getOperUserid());
usersMap.put(key,users);
}
for (XmRecordVisit data : datas) {
String key=data.getBizId();
Integer times=timesMap.get(key);
if(times==null){
times=0;
}
times=times+1;
timesMap.put(key,times);
}
List<Map<String,Object>> datasToUpdate=new ArrayList<>();
for (String key : timesMap.keySet()) {
Map<String,Object> data=new HashMap<>();
data.put("id",key);
data.put("browseTimes",timesMap.get(key));
data.put("browseUsers",usersMap.get(key).size());
datasToUpdate.add(data);
}
this.batchInsert(datas);
if(datasToUpdate.size()>0){
this.update("updateTaskBrowseTimesAndBrowseUsers",datasToUpdate);
}
}
}

213
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmRecordVisitMapper.xml

@ -0,0 +1,213 @@
<?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.xm.core.entity.XmRecordVisit">
<!--开始 自定sql函数区域 请在此区域添加自定义函数,其它区域尽量不要动,因为代码随时重新生成 -->
<sql id="whereForMap">
<if test=" ids != null"> and (res.id) in
<foreach collection="ids" item="item" index="index" open="(" separator="," close=")" >
( #{item})
</foreach>
</if>
<if test="key != null and key !='' "> </if>
</sql>
<update id="updateTaskBrowseTimesAndBrowseUsers" parameterType="List">
<foreach collection="list" item="item" index="index" separator=";" >
update xm_task t set t.browse_users=ifnull(t.browse_users,0)+#{item.browseUsers},t.browse_times=ifnull(t.browse_times,0)+#{item.browseTimes}
where t.id=#{item.id}
</foreach>
</update>
<!--结束 自定义sql函数区域-->
<!-- 通过条件查询获取数据列表 返回list<map> -->
<select id="selectListMapByWhere" parameterType="HashMap" resultType="HashMap">
select * from xm_record_visit res
<where>
<include refid="whereForMap"/>
<include refid="where"/>
</where>
</select>
<!-- 通过条件查询获取数据列表 不分页 返回 list<Object> -->
<select id="selectListByWhere" parameterType="com.xm.core.entity.XmRecordVisit" resultType="com.xm.core.entity.XmRecordVisit">
select * from xm_record_visit res
<where>
<include refid="where"/>
</where>
</select>
<!-- 通过主键查询获取数据对象 返回object -->
<select id="selectOneObject" parameterType="com.xm.core.entity.XmRecordVisit" resultType="com.xm.core.entity.XmRecordVisit">
select * from xm_record_visit res
where
res.id = #{id}
</select>
<select id="selectListByIds" parameterType="List" resultType="com.xm.core.entity.XmRecordVisit">
select * from xm_record_visit res
where (res.id) in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
( #{item})
</foreach>
</select>
<!-- 通过主键查询获取数据对象 返回map-->
<select id="selectOneMap" parameterType="HashMap" resultType="HashMap">
select * from xm_record_visit res
where
res.id = #{id}
</select>
<!-- 获取数据条目 返回long -->
<select id="countByWhere" parameterType="com.xm.core.entity.XmRecordVisit" resultType="long">
select count(*) from xm_record_visit res
<where>
<include refid="where"/>
</where>
</select>
<!-- 新增一条记录 主键id,-->
<insert id="insert" parameterType="com.xm.core.entity.XmRecordVisit" useGeneratedKeys="false" keyProperty="id">
insert into xm_record_visit(
<include refid="columns"/>
) values (
#{id},#{operUserid},#{operUsername},#{operTime},#{objType},#{action},#{remarks},#{gloNo},#{branchId},#{ip},#{bizId},#{pbizId},#{bizName}
)
</insert>
<!-- 按条件删除若干条记录-->
<delete id="deleteByWhere" parameterType="com.xm.core.entity.XmRecordVisit">
delete from xm_record_visit res
<where>
<include refid="where"/>
</where>
</delete>
<!-- 按主键删除一条记录-->
<delete id="deleteByPk" parameterType="com.xm.core.entity.XmRecordVisit">
delete from xm_record_visit
where id = #{id}
</delete>
<!-- 根据条件修改若干条记录 -->
<update id="updateSomeFieldByPk" parameterType="com.xm.core.entity.XmRecordVisit">
update xm_record_visit
<set>
<include refid="someFieldSet"/>
</set>
where id = #{id}
</update>
<!-- 根据主键修改一条记录 -->
<update id="updateByPk" parameterType="com.xm.core.entity.XmRecordVisit">
update xm_record_visit
<set>
<include refid="set"/>
</set>
where id = #{id}
</update>
<!-- 批量新增 批量插入 借用insert 循环插入实现
<insert id="batchInsert" parameterType="List">
</insert>
-->
<!-- 批量更新 -->
<update id="batchUpdate" parameterType="List">
<foreach collection="list" item="item" index="index" separator=";" >
update xm_record_visit
set
<include refid="batchSet"/>
where id = #{item.id}
</foreach>
</update>
<!-- 批量修改某几个字段 -->
<delete id="editSomeFields" parameterType="HashMap">
update xm_record_visit
<set>
<include refid="someFieldSet"/>
</set>
where (id) in
<foreach collection="ids" item="item" index="index" open="(" separator="," close=")" >
( #{item})
</foreach>
</delete>
<!-- 批量删除 -->
<delete id="batchDelete" parameterType="List">
delete from xm_record_visit
where
(id) in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
( #{item.id} )
</foreach>
</delete>
<!--sql片段 列-->
<sql id="columns">
id,oper_userid,oper_username,oper_time,obj_type,action,remarks,glo_no,branch_id,ip,biz_id,pbiz_id,biz_name
</sql>
<!--sql片段 动态条件 YYYY-MM-DD HH24:MI:SS-->
<sql id="where">
<if test="id != null and id != ''"> and res.id = #{id} </if>
<if test="operUserid != null and operUserid != ''"> and res.oper_userid = #{operUserid} </if>
<if test="operUsername != null and operUsername != ''"> and res.oper_username = #{operUsername} </if>
<if test="operTime != null"> and date_format(res.oper_time,'%Y-%m-%d') = date_format(#{operTime},'%Y-%m-%d') </if>
<if test="objType != null and objType != ''"> and res.obj_type = #{objType} </if>
<if test="action != null and action != ''"> and res.action = #{action} </if>
<if test="remarks != null and remarks != ''"> and res.remarks = #{remarks} </if>
<if test="gloNo != null and gloNo != ''"> and res.glo_no = #{gloNo} </if>
<if test="branchId != null and branchId != ''"> and res.branch_id = #{branchId} </if>
<if test="ip != null and ip != ''"> and res.ip = #{ip} </if>
<if test="bizId != null and bizId != ''"> and res.biz_id = #{bizId} </if>
<if test="pbizId != null and pbizId != ''"> and res.pbiz_id = #{pbizId} </if>
<if test="bizName != null and bizName != ''"> and res.biz_name = #{bizName} </if>
</sql>
<!--sql片段 更新字段 -->
<sql id="set">
oper_userid = #{operUserid},
oper_username = #{operUsername},
oper_time = #{operTime},
obj_type = #{objType},
action = #{action},
remarks = #{remarks},
glo_no = #{gloNo},
branch_id = #{branchId},
ip = #{ip},
biz_id = #{bizId},
pbiz_id = #{pbizId},
biz_name = #{bizName}
</sql>
<sql id="someFieldSet">
<if test="operUserid != null and operUserid != ''"> oper_userid = #{operUserid}, </if>
<if test="operUsername != null and operUsername != ''"> oper_username = #{operUsername}, </if>
<if test="operTime != null"> oper_time = #{operTime}, </if>
<if test="objType != null and objType != ''"> obj_type = #{objType}, </if>
<if test="action != null and action != ''"> action = #{action}, </if>
<if test="remarks != null and remarks != ''"> remarks = #{remarks}, </if>
<if test="gloNo != null and gloNo != ''"> glo_no = #{gloNo}, </if>
<if test="branchId != null and branchId != ''"> branch_id = #{branchId}, </if>
<if test="ip != null and ip != ''"> ip = #{ip}, </if>
<if test="bizId != null and bizId != ''"> biz_id = #{bizId}, </if>
<if test="pbizId != null and pbizId != ''"> pbiz_id = #{pbizId}, </if>
<if test="bizName != null and bizName != ''"> biz_name = #{bizName}, </if>
</sql>
<!--sql片段 批量更新 -->
<sql id="batchSet">
oper_userid = #{item.operUserid},
oper_username = #{item.operUsername},
oper_time = #{item.operTime},
obj_type = #{item.objType},
action = #{item.action},
remarks = #{item.remarks},
glo_no = #{item.gloNo},
branch_id = #{item.branchId},
ip = #{item.ip},
biz_id = #{item.bizId},
pbiz_id = #{item.pbizId},
biz_name = #{item.bizName}
</sql>
</mapper>
Loading…
Cancel
Save