成交金额字段
This commit is contained in:
parent
46ea5e5046
commit
31e8ac48bc
|
|
@ -43,4 +43,5 @@ nbdist/
|
|||
|
||||
!*/build/*.java
|
||||
!*/build/*.html
|
||||
!*/build/*.xml
|
||||
!*/build/*.xml
|
||||
/get-pip.py
|
||||
|
|
|
|||
|
|
@ -2,9 +2,11 @@ package com.ruoyi.web.controller.system;
|
|||
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.security.Key;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
|
|
@ -283,4 +285,23 @@ public class ClewController extends BaseController
|
|||
return "system/clew/changeUser";
|
||||
}
|
||||
|
||||
@PostMapping("/changeBatchUser")
|
||||
@ResponseBody
|
||||
public AjaxResult changeBatchUser(Clew clew)
|
||||
{
|
||||
if(StringUtils.isEmpty(clew.getIds())){
|
||||
return AjaxResult.error("请选择线索!");
|
||||
}
|
||||
clew.setIdList(Arrays.stream(clew.getIds().split(",")).map(Long::parseLong).collect(Collectors.toList()));
|
||||
return toAjax(clewService.updateBatchClew(clew));
|
||||
}
|
||||
|
||||
@GetMapping("/changeBatchUser/{clewIds}")
|
||||
public String changeBatchUser(@PathVariable("clewIds") String ids, ModelMap mmap)
|
||||
{
|
||||
mmap.put("clewIds", ids);
|
||||
mmap.put("users", sysUserService.selectUserList(new SysUser()));
|
||||
return "system/clew/changeBatchUser";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import com.ruoyi.system.domain.ClewPhone;
|
|||
import com.ruoyi.system.domain.NoticeRequest;
|
||||
import com.ruoyi.system.domain.OppoCheck;
|
||||
import com.ruoyi.system.service.IClewPhoneService;
|
||||
import com.ruoyi.web.core.config.GlobalLogHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -134,6 +135,27 @@ public class NoticeController {
|
|||
log.info("请求{}的属性{}", url, content);
|
||||
String s = HttpUtils.sendPost(url, content, headerMap);
|
||||
log.info("请求{}的响应{}", url, s);
|
||||
}else if("xiaomi".equalsIgnoreCase(request.getFrom())){
|
||||
String imei = request.getImei();
|
||||
String oaid = request.getOaid();
|
||||
String ua = "Dalvik/2.1.0 (Linux; U; Android 11; M2012K11AC Build/RKQ1.200826.002)";
|
||||
String clientIp = "127.0.0.1";
|
||||
long convTime = System.currentTimeMillis();
|
||||
String convType = "APP_PAY_NEW";
|
||||
long appId = 1545362;
|
||||
int customerId = 1545362;
|
||||
String singKey = "IIUWoEaMXlzctOqk";
|
||||
String encryptKey = "FkqMqeKVbCaeSGBI";
|
||||
GlobalLogHelper.UploadInfo uploadInfo = GlobalLogHelper.UploadInfo.builder()
|
||||
.imei(imei)
|
||||
.oaid(oaid)
|
||||
.ua(ua)
|
||||
.clientIp(clientIp)
|
||||
.convTime(convTime).convType(convType)
|
||||
.appId(appId).customerId(customerId).signKey(singKey).encryptKey(encryptKey).build().genInfo();
|
||||
log.info("请求xiaomi的属性{}", uploadInfo.getFinalUrl());
|
||||
String s = HttpUtils.sendGet(uploadInfo.getFinalUrl());
|
||||
log.info("请求xiaomi的响应{}", s);
|
||||
}else {
|
||||
log.info("短信请求接口入参:{}", request);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,131 @@
|
|||
package com.ruoyi.web.core.config;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* lombok 1.16.16.
|
||||
*/
|
||||
public class GlobalLogHelper {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public static class UploadInfo {
|
||||
//info设备信息
|
||||
private String imei;
|
||||
private String oaid;
|
||||
private long convTime;
|
||||
private String clientIp;
|
||||
private String ua;
|
||||
private long adId;
|
||||
//conversion转化信息
|
||||
private long appId;
|
||||
private int customerId;
|
||||
private String convType;
|
||||
private String signKey;
|
||||
private String encryptKey;
|
||||
//生成的信息
|
||||
//最终url
|
||||
private String finalUrl;
|
||||
//最终生成的info
|
||||
private String finalInfo;
|
||||
//queryString 设备信息
|
||||
private String queryString;
|
||||
private String property;
|
||||
private String baseData;
|
||||
//md5后的sign值
|
||||
private String signature;
|
||||
|
||||
private final static String HOST = "http://trail.e.mi.com";
|
||||
private final static String PATH = "/global/test";
|
||||
|
||||
@SneakyThrows
|
||||
public UploadInfo genInfo() {
|
||||
List<String> kvParam = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(this.imei)) {
|
||||
kvParam.add("imei=" + URLEncoder.encode(this.imei, "UTF-8"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(this.oaid)) {
|
||||
kvParam.add("oaid=" + URLEncoder.encode(this.oaid, "UTF-8"));
|
||||
}
|
||||
if (this.convTime > 0) {
|
||||
kvParam.add("conv_time=" + URLEncoder.encode(String.valueOf(this.convTime), "UTF-8"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(this.clientIp)) {
|
||||
kvParam.add("client_ip=" + URLEncoder.encode(this.clientIp, "UTF-8"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(this.ua)) {
|
||||
kvParam.add("ua=" + URLEncoder.encode(this.ua, "UTF-8"));
|
||||
}
|
||||
if (this.adId > 0) {
|
||||
kvParam.add("ad_id=" + URLEncoder.encode(String.valueOf(this.adId), "UTF-8"));
|
||||
}
|
||||
|
||||
try {
|
||||
//1.按照顺序使用 & 拼接key=urlEncode(value),queryString
|
||||
this.queryString = String.join("&", kvParam);
|
||||
//2.按照顺序使用 & 拼接签名密钥signKey 和 urlEncode(queryString),得到property
|
||||
this.property = this.signKey + "&" + URLEncoder.encode(this.queryString, "UTF-8");
|
||||
//3. 将字符串(property) 进行md5(property)加密,得到32位小写字符串signature
|
||||
this.signature = getMd5Digest(this.property);
|
||||
} catch (Exception ignored) {
|
||||
|
||||
}
|
||||
//4.按照顺序使用 & 拼接 queryString(注意是第一个步骤生成的) 和 sign=signature
|
||||
this.baseData = this.queryString + "&sign=" + this.signature;
|
||||
//5.baseData进行加密 Base64(simple_xor{base_data, encrypt_key}),得到info信息
|
||||
this.finalInfo = encrypt(this.baseData, this.encryptKey);
|
||||
this.finalUrl = HOST + PATH
|
||||
+ "?appId=" + URLEncoder.encode(String.valueOf(this.appId), "UTF-8")
|
||||
+ "&info=" + URLEncoder.encode(this.finalInfo, "UTF-8")
|
||||
+ "&conv_type=" + URLEncoder.encode(this.convType, "UTF-8")
|
||||
+ "&customer_id=" + URLEncoder.encode(String.valueOf(this.customerId), "UTF-8");
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
//对baseData进行加密 Base64(simple_xor{base_data, encrypt_key})
|
||||
public static String encrypt(String info, String key) {
|
||||
try {
|
||||
if (StringUtils.isEmpty(info) || StringUtils.isEmpty(key)) {
|
||||
return null;
|
||||
}
|
||||
//6.1 base_data, encrypt_key 异或加密
|
||||
char[] infoChar = info.toCharArray();
|
||||
char[] keyChar = key.toCharArray();
|
||||
|
||||
byte[] resultChar = new byte[infoChar.length];
|
||||
for (int i = 0; i < infoChar.length; i++) {
|
||||
resultChar[i] = (byte) ((infoChar[i] ^ keyChar[i % keyChar.length]) & 0xFF);
|
||||
}
|
||||
//6.2 Base64 编码
|
||||
return Base64.encode(resultChar);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//md5 加密得到32位小写字符串.
|
||||
public static String getMd5Digest(String pInput) {
|
||||
try {
|
||||
MessageDigest lDigest = MessageDigest.getInstance("MD5");
|
||||
lDigest.update(pInput.getBytes("UTF-8"));
|
||||
BigInteger lHashInt = new BigInteger(1, lDigest.digest());
|
||||
return String.format("%1$032x", lHashInt);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('批量分配客服')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-change-user">
|
||||
<input name="ids" type="hidden" th:value="${clewIds}" />
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">客服:</label>
|
||||
<div class="col-sm-8">
|
||||
<select id="saleId" name="saleId" class="form-control control-label" required>
|
||||
<option th:each="user:${users}" th:value="${user.userId}" th:text="${user.userName}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
function submitHandler() {
|
||||
if ($.validate.form()) {
|
||||
$.operate.save(ctx + "system/clew/changeBatchUser", $('#form-change-user').serialize());
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -49,6 +49,9 @@
|
|||
</div>
|
||||
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-primary multiple disabled" onclick="changeBatchUser()" shiro:hasPermission="system:clew:edit">
|
||||
<i class="fa fa-remove"></i> 批量分配
|
||||
</a>
|
||||
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:clew:add">
|
||||
<i class="fa fa-plus"></i> 添加
|
||||
</a>
|
||||
|
|
@ -249,6 +252,18 @@
|
|||
var url = prefix + '/changeUser/' + clewId;
|
||||
$.modal.open("选择客服", url, '800', '300');
|
||||
}
|
||||
|
||||
function changeBatchUser(){
|
||||
table.set();
|
||||
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
|
||||
if (rows.length == 0) {
|
||||
$.modal.alertWarning("请至少选择一条记录");
|
||||
return;
|
||||
}
|
||||
$.modal.confirm("确认分配吗?", function() {
|
||||
$.modal.open("选择客服", prefix + '/changeBatchUser/' + rows.join(), '800', '300');
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
package com.ruoyi.system.domain;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
|
|
@ -20,6 +22,10 @@ public class Clew extends BaseEntity
|
|||
/** 主键 */
|
||||
private Long id;
|
||||
|
||||
private String ids;
|
||||
|
||||
private List<Long> idList;
|
||||
|
||||
/** 广告主 */
|
||||
@Excel(name = "广告主")
|
||||
private Long company;
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ public interface ClewMapper
|
|||
*/
|
||||
public int updateClew(Clew clew);
|
||||
|
||||
public int updateBatchClew(Clew clew);
|
||||
|
||||
/**
|
||||
* 删除线索
|
||||
*
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ public interface IClewService
|
|||
*/
|
||||
public int updateClew(Clew clew);
|
||||
|
||||
public int updateBatchClew(Clew clew);
|
||||
|
||||
/**
|
||||
* 批量删除线索
|
||||
*
|
||||
|
|
|
|||
|
|
@ -89,6 +89,13 @@ public class ClewServiceImpl implements IClewService
|
|||
return clewMapper.updateClew(clew);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateBatchClew(Clew clew)
|
||||
{
|
||||
clew.setUpdateTime(DateUtils.getNowDate());
|
||||
return clewMapper.updateBatchClew(clew);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除线索
|
||||
*
|
||||
|
|
|
|||
|
|
@ -210,6 +210,22 @@
|
|||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<update id="updateBatchClew" parameterType="Clew">
|
||||
update clew
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="saleId != null">sale_id = #{saleId},</if>
|
||||
</trim>
|
||||
<where>
|
||||
<if test="idList != null and idList.size() > 0">
|
||||
and id in
|
||||
<foreach item="id" index="index" collection="idList" open="("
|
||||
separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
</update>
|
||||
|
||||
<delete id="deleteClewById" parameterType="Long">
|
||||
delete from clew where id = #{id}
|
||||
</delete>
|
||||
|
|
|
|||
Loading…
Reference in New Issue