diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmRecordVisitController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmRecordVisitController.java new file mode 100644 index 00000000..102d185e --- /dev/null +++ b/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分别为:
+ * 组织 com 顶级模块 xm 大模块 core 小模块
+ * 实体 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 datas=new ArrayList<>(); + + + Map 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 params){ + + + RequestUtils.transformArray(params, "ids"); + IPage page=QueryTools.initPage(params); + QueryWrapper qw = QueryTools.initQueryWrapper(XmBranchStateHis.class , params); + List> 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 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 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 xmRecordVisitMap) { + + List ids= (List) xmRecordVisitMap.get("ids"); + if(ids==null || ids.size()==0){ + return Result.error("ids-0","ids不能为空"); + } + + Set fields=new HashSet<>(); + fields.add("id"); + for (String fieldName : xmRecordVisitMap.keySet()) { + if(fields.contains(fieldName)){ + return Result.error(fieldName+"-no-edit",fieldName+"不允许修改"); + } + } + Set 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 xmRecordVisitsDb=xmRecordVisitService.selectListByIds(ids); + if(xmRecordVisitsDb==null ||xmRecordVisitsDb.size()==0){ + return Result.error("data-0","记录已不存在"); + } + List can=new ArrayList<>(); + List 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 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 xmRecordVisits) { + + + + if(xmRecordVisits.size()<=0){ + return Result.error("data-0","请上送待删除数据列表"); + } + List datasDb=xmRecordVisitService.selectListByIds(xmRecordVisits.stream().map(i-> i.getId() ).collect(Collectors.toList())); + + List can=new ArrayList<>(); + List no=new ArrayList<>(); + for (XmRecordVisit data : datasDb) { + if(true){ + can.add(data); + }else{ + no.add(data); + } + } + List 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())); + } + + } + */ +} diff --git a/xm-core/src/main/java/com/xm/core/service/XmRecordVisitService.java b/xm-core/src/main/java/com/xm/core/service/XmRecordVisitService.java new file mode 100644 index 00000000..fa75446b --- /dev/null +++ b/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.*; + +/** + * 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.
+ * 组织 com 顶级模块 xm 大模块 core 小模块
+ * 实体 XmRecordVisit 表 xm_record_visit 当前主键(包括多主键): id; + ***/ +@Service("xm.core.xmRecordVisitService") +public class XmRecordVisitService extends BaseService { + static Logger logger =LoggerFactory.getLogger(XmRecordVisitService.class); + + public void batchAddAndCalc(List datas) { + Map timesMap=new HashMap<>(); + Map > usersMap=new HashMap<>(); + for (XmRecordVisit data : datas) { + String key=data.getBizId(); + Set 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> datasToUpdate=new ArrayList<>(); + for (String key : timesMap.keySet()) { + Map 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); + } + } +} + diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmRecordVisitMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmRecordVisitMapper.xml new file mode 100644 index 00000000..634c902b --- /dev/null +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmRecordVisitMapper.xml @@ -0,0 +1,213 @@ + + + + + + + + + and (res.id) in + + ( #{item}) + + + + + + + + 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} + + + + + + + + + + + + + + + + + + + + + + insert into xm_record_visit( + + ) values ( + #{id},#{operUserid},#{operUsername},#{operTime},#{objType},#{action},#{remarks},#{gloNo},#{branchId},#{ip},#{bizId},#{pbizId},#{bizName} + ) + + + + + delete from xm_record_visit res + + + + + + + + delete from xm_record_visit + where id = #{id} + + + + + update xm_record_visit + + + + where id = #{id} + + + + + update xm_record_visit + + + + where id = #{id} + + + + + + + + update xm_record_visit + set + + where id = #{item.id} + + + + + + update xm_record_visit + + + + where (id) in + + ( #{item}) + + + + + delete from xm_record_visit + where + (id) in + + ( #{item.id} ) + + + + + + + id,oper_userid,oper_username,oper_time,obj_type,action,remarks,glo_no,branch_id,ip,biz_id,pbiz_id,biz_name + + + + + and res.id = #{id} + and res.oper_userid = #{operUserid} + and res.oper_username = #{operUsername} + and date_format(res.oper_time,'%Y-%m-%d') = date_format(#{operTime},'%Y-%m-%d') + and res.obj_type = #{objType} + and res.action = #{action} + and res.remarks = #{remarks} + and res.glo_no = #{gloNo} + and res.branch_id = #{branchId} + and res.ip = #{ip} + and res.biz_id = #{bizId} + and res.pbiz_id = #{pbizId} + and res.biz_name = #{bizName} + + + + 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} + + + 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}, + + + + 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} + + \ No newline at end of file