From 9410fb40ef0e93ffab190a01c4f6636f21957564 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 15 Aug 2019 13:36:16 +0800 Subject: [PATCH] =?UTF-8?q?[POS][=E4=BF=AE=E6=94=B9]:POS=20api=20=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=20=E6=97=A5=E5=BF=97=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/V201908151320__POS_CMD_LOG.sql | 14 ++++ .../annotation/SystemControllerLog.java | 10 +++ .../iformall/annotation/SystemServiceLog.java | 10 +++ .../iformall/controller/PosController.java | 2 + .../com/iformall/log/SystemLogAspect.java | 68 +++++++++++++++++++ .../com/iformall/domain/po/PosActionLog.java | 41 +++++++++++ .../iformall/mapper/PosActionLogMapper.java | 17 +++++ .../iformall/service/PosActionLogService.java | 48 +++++++++++++ .../service/impl/PosActionLogServiceImpl.java | 54 +++++++++++++++ .../resources/mapper/PosActionLogMapper.xml | 68 +++++++++++++++++++ 10 files changed, 332 insertions(+) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql create mode 100644 mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java create mode 100644 mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java create mode 100644 mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/PosActionLogMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/PosActionLogService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java create mode 100644 mallinkService/src/main/resources/mapper/PosActionLogMapper.xml diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql b/mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql new file mode 100644 index 000000000..f66b13b5b --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql @@ -0,0 +1,14 @@ +CREATE TABLE `pos_action_log` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `url` varchar (100) NOT NULL COMMENT '访问url', + `ip` varchar (20) NOT NULL COMMENT 'ip地址', + `method` varchar (10) NOT NULL COMMENT 'http访问', + `start_time` bigint(20) NOT NULL COMMENT 'api发起时间', + `end_time` bigint(20) NOT NULL COMMENT 'api发起时间', + `cost_time` INTEGER NOT NULL COMMENT '访问花费时间', + `req_json` json DEFAULT NULL COMMENT '命令请求JSON', + `res_json` json DEFAULT NULL COMMENT '返回结果', + PRIMARY KEY (`id`) +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='POS访问LOG' CHECKSUM=0 DELAY_KEY_WRITE=0; + +ALTER TABLE `pos_action_log` ADD INDEX `idx_Index` (`url`, `ip`, `method`, `start_time`); \ No newline at end of file diff --git a/mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java new file mode 100644 index 000000000..61821c134 --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java @@ -0,0 +1,10 @@ +package com.iformall.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemControllerLog { + String description() default ""; +} diff --git a/mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java new file mode 100644 index 000000000..f2cd84adf --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java @@ -0,0 +1,10 @@ +package com.iformall.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemServiceLog { + String description() default ""; +} diff --git a/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java b/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java index 3fec8b572..b3eb608cb 100644 --- a/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java +++ b/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java @@ -1,6 +1,7 @@ package com.iformall.controller; import com.alibaba.fastjson.JSONObject; +import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ErrorCode; import com.iformall.domain.po.*; import com.iformall.enums.*; @@ -36,6 +37,7 @@ public class PosController extends BaseController { "\"tenant_id\":\"string(必填)\"," + "\"nonce_str\":\"string(必填)\"}") @PostMapping("/getPosMemConfigStatus") + @SystemControllerLog(description = "获取会员折扣/优惠券/消费卡是否启用") public Map getMemStatus(@RequestBody Map params) { JSONObject payContent = new JSONObject(); diff --git a/mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java b/mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java new file mode 100644 index 000000000..94dc361ed --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java @@ -0,0 +1,68 @@ +package com.iformall.log; + + +import com.alibaba.fastjson.JSON; +import com.iformall.domain.po.PosActionLog; +import com.iformall.pay.WxPayConstant; +import com.iformall.service.PosActionLogService; +import com.iformall.utils.IPUtil; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@Aspect +@Component +public class SystemLogAspect { + private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect.class); + + @Autowired + private PosActionLogService posActionLogService; + + @Pointcut("@annotation(com.iformall.annotation.SystemControllerLog)") + public void controllerAspect(){ + } + + @Pointcut("@annotation(com.iformall.annotation.SystemServiceLog)") + public void serviceAspect(){ + } + + @Around("controllerAspect()") + public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { + PosActionLog posActionLog = new PosActionLog(); + long startTime = System.currentTimeMillis(); + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ipaddress = IPUtil.getIpAddr(request); + posActionLog.setUrl(request.getRequestURL().toString()); + posActionLog.setIp(ipaddress); + posActionLog.setMethod(request.getMethod()); + posActionLog.setReqJson(JSON.toJSONString(joinPoint.getArgs()[0])); + posActionLog.setStartTime(startTime); + try { + Object o = joinPoint.proceed(); + posActionLog.setResJson(JSON.toJSONString(o)); + long endTime = System.currentTimeMillis(); + posActionLog.setEndTime(endTime); + posActionLog.setCostTime(Long.valueOf(endTime-startTime).intValue()); + posActionLogService.saveOrUpdate(posActionLog); + return o; + } catch (Throwable e) { + String errMessage = e.getMessage(); + logger.error(errMessage); + Map map = new HashMap<>(); + map.put(WxPayConstant.RETURN_CODE, WxPayConstant.RET_FAIL); + map.put(WxPayConstant.RETURN_MSG, errMessage); + map.put(WxPayConstant.RESULT_CODE, WxPayConstant.RET_FAIL); + return map; + } + } + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java b/mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java new file mode 100644 index 000000000..b117f6226 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java @@ -0,0 +1,41 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import java.math.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "pos_action_log") +@Data +public class PosActionLog implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="访问url",name="url") + private String url; + @io.swagger.annotations.ApiModelProperty(value="ip地址",name="ip") + private String ip; + @io.swagger.annotations.ApiModelProperty(value="http访问",name="method") + private String method; + @io.swagger.annotations.ApiModelProperty(value="api发起时间",name="startTime") + private Long startTime; + @io.swagger.annotations.ApiModelProperty(value="api发起时间",name="endTime") + private Long endTime; + @io.swagger.annotations.ApiModelProperty(value="访问花费时间",name="costTime") + private Integer costTime; + @io.swagger.annotations.ApiModelProperty(value="命令请求JSON",name="reqJson") + private String reqJson; + @io.swagger.annotations.ApiModelProperty(value="返回结果",name="resJson") + private String resJson; + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/PosActionLogMapper.java b/mallinkService/src/main/java/com/iformall/mapper/PosActionLogMapper.java new file mode 100644 index 000000000..485f8244f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/PosActionLogMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import org.apache.ibatis.annotations.Param; +import com.iformall.domain.po.PosActionLog; + +public interface PosActionLogMapper extends CommonMapper { + + List findList(PosActionLog posActionLog); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/PosActionLogService.java b/mallinkService/src/main/java/com/iformall/service/PosActionLogService.java new file mode 100644 index 000000000..76b2ef539 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/PosActionLogService.java @@ -0,0 +1,48 @@ +package com.iformall.service; + +import java.util.*; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosActionLog; + +public interface PosActionLogService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(PosActionLog record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + PosActionLog getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(PosActionLog record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java new file mode 100644 index 000000000..1c7119c24 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java @@ -0,0 +1,54 @@ +package com.iformall.service.impl; + +import java.util.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosActionLog; +import com.iformall.mapper.PosActionLogMapper; +import com.iformall.service.PosActionLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class PosActionLogServiceImpl implements PosActionLogService { + + @Autowired + PosActionLogMapper posActionLogMapper; + + + @Override + public PageInfo listAsPage(PosActionLog record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> posActionLogMapper.findList(record)); + } + + @Override + public PosActionLog getById(Long id) { + return posActionLogMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(PosActionLog record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + posActionLogMapper.insertSelective(record); + } else { + posActionLogMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + posActionLogMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/resources/mapper/PosActionLogMapper.xml b/mallinkService/src/main/resources/mapper/PosActionLogMapper.xml new file mode 100644 index 000000000..b4e7407b0 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/PosActionLogMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + `id`,`url`,`ip`,`method`,`start_time`,`end_time`,`cost_time`,`req_json`,`res_json` + + + + where 1 = 1 + + and `id` = #{id} + + + and `url` like concat('%', #{url},'%') + + + and `ip` like concat('%', #{ip},'%') + + + and `method` like concat('%', #{method},'%') + + + and `start_time` = #{startTime} + + + and `end_time` = #{endTime} + + + and `cost_time` = #{costTime} + + + and `req_json` like concat('%', #{reqJson},'%') + + + and `res_json` like concat('%', #{resJson},'%') + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + +