package com.sitech.crmtpd.market.query.service;
import com.sitech.crmtpd.mapper.MktCallRecordMapper;
import com.sitech.crmtpd.market.domain.MktCallRecord;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
* @oauth: qiangSW
* @date: 2020/4/20 10:38
* @description: com.sitech.crmtpd.market.query.service
* @doc: 消费者
*/
@Service
@Slf4j
public class UtilService implements Runnable, CommandLineRunner {
@Autowired
private MktCallRecordMapper mktCallRecordMapper;
/*最大存储2000*/
private final int size = 2000;
private Queue<MktCallRecord> callRecordQueue = new ConcurrentLinkedQueue<>();
public void addCallRecordQueue(MktCallRecord mktCallRecord) {
if (this.callRecordQueue.size() > this.size) {
return;
}
this.callRecordQueue.add(mktCallRecord);
}
/**
* 营销推荐查询接口日志记录
* RecommendInfoServiceImpl
* 大数据评估使用
*/
@Override
public void run() {
while (true) {
MktCallRecord mktCallRecord = this.callRecordQueue.poll();
if (null != mktCallRecord) {
try {
/*入库*/
mktCallRecordMapper.inserRecord(mktCallRecord);
} catch (Exception e) {
log.error("[{}]记录调用接口日志失败:", mktCallRecord.getContactOrderId(), e);
}
int size = this.callRecordQueue.size();
log.info("this.callRecordQueue队列长度[{}]", size);
}
}
}
@Override
public void run(String... strings) throws Exception {
run();
}
}
package com.integral.design.consumerModel;
/**
* @oauth: qiangSW
* @date: 2020/4/21 9:55
* @description: com.integral.design.consumerModel
* @doc: 生产者
*/
public class Producer1 {
public static void main(String[] args) {
Consumer consumer = new Consumer();
consumer.callRecordQueue.add("生产数据");
consumer.run();
}
}
实际代码中使用案列
背景: 有一个现有的接口,需要记录该接口的调用记录.然后入库
/**
* @oauth: qiangSW
* @date: 2020/4/20 10:42
* @description: com.sitech.crmtpd.market.domain
* @doc: 营销推荐查询接口 日志记录 do
*/
@Data
public class MktCallRecord {
private Long mktCallRecordId;
private Long contactOrderId;
private Long mktCampaignId;
private Long contactChlId;
private Long contactOrgId;
private String staffNumber;
private Long idNo;
private Date createDate;
}
/**
*
* 接口的业务逻辑
*
* @param req
* @return
*/
public ContractRootResp<RecommendInfoRsp> qryRecommendInfo(ContractRootReq<RecommendInfoReq> req) {
if (Objects.isNull(objectMapper)) {
objectMapper = new ObjectMapper();
}
try {
log.info("======查询推荐信息服务Test14======入参==========" + objectMapper.writeValueAsString(req));
} catch (Exception e) {
log.error("", e);
}
RecommendInfoReq requestObject = req.getSvcCont().getRequestObject();
String accNbr = requestObject.getAccNbr();
String accNbrTypeCd = requestObject.getAccNbrTypeCd();
String channelId = requestObject.getChannelId();
String loginNo = requestObject.getLoginNo();
String chnId = requestObject.getChlId();
String serId = requestObject.getSerId();
String orderSql = "SELECT * FROM CONTACT_ORDER WHERE CONTACT_CHL_ID = ? AND TARGET_OBJ_NBR = ? and TARGET_OBJ_TYPE = ? AND STATUS_CD = '1000'";
List<ContactOrder> contactOrders = jdbcTemplate.query(orderSql, new BeanPropertyRowMapper<>(ContactOrder.class), NumberUtil.getLongFromObj(chnId), serId, TableFields.TAR_OBJ_PROD_INST);
RecommendInfoRsp rsp = new RecommendInfoRsp();
List<Map<String, Object>> recommendInfoList = new ArrayList<>();
if (!CollectionUtils.isEmpty(contactOrders)) {
contactOrders.stream().forEach(contactOrder -> {
}
/*新增接口调用日志
* 生产者
*/
MktCallRecord mktCallRecord = new MktCallRecord();
String callRecordId = seqService.getNextval("MKT_CALL_RECORD_SEQ");
mktCallRecord.setMktCallRecordId(Long.valueOf(callRecordId));
mktCallRecord.setContactOrderId(contactOrderId);
mktCallRecord.setMktCampaignId(contactOrder.getMktCampaignId());
mktCallRecord.setContactChlId(Long.valueOf(chnId));
mktCallRecord.setContactOrgId(Long.valueOf(channelId));
String idNo = requestObject.getSerId();
mktCallRecord.setIdNo(Long.valueOf(idNo));
mktCallRecord.setStaffNumber(loginNo);
mktCallRecord.setCreateDate(new Date());
utilService.callRecordQueue.add(mktCallRecord);
});
}
//旧的排序
// List<Map<String, Object>> recommendInfoList1 = new ArrayList<>();
// recommendInfoList1 = recommendInfoList.stream().sorted((s1, s2) -> (Integer) s1.get("priority") - (Integer) s2.get("priority"))
// .collect(Collectors.toList());
/*按照 MKT_CAM_PRI 表 priId 字段排序*/
List<Map<String, Object>> recommendInfoList1 = new ArrayList<>();
recommendInfoList1 = recommendInfoList.stream().filter(filter -> filter.get("statusCd").equals("1000"))
.sorted((s1, s2) -> {
Integer value1 = (Integer) s1.get("priId");
Integer value2 = (Integer) s2.get("priId");
return value1 - value2 == 0 ? 0 : (value1 - value2 > 0 ? -1 : 1);
})
.collect(Collectors.toList());
return RespBuilder.builder().respCode("0").respMsg("用户推荐信息查询成功")
.build(rsp);
}