This commit is contained in:
2025-05-28 23:25:48 +08:00
parent 9a18ef2691
commit 6cd3268908
38 changed files with 1245 additions and 263 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -23,6 +23,10 @@
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ct</artifactId>

View File

@@ -10,9 +10,9 @@ public class EncryptDemo {
public static void main(String[] args) {
// SM2的公钥
// String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw==";
String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw==";
String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXGNABR3GP+JwMDuCoGkb2XlLAFaxW+BH/lsFwYd0MdycIgygZuQXW1bKoGIKDWRy0NfLl3LoHMdhgq3QC9lqPg==";
// SM2的私钥
String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg006Jj+5NK9HrtnyXNpnb131jV/8CHeo5t2T74WliktCgCgYIKoEcz1UBgi2hRANCAARPJZBDpVhCRt5bkQuYUWv9T8MAkahw0R3eG6cWbgShEdkPUxlzKqUJH+n/ogKbBlZhMArd3P3o1pvGLrIY5KQJ";
String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgvH2W6ns3iHYntIwC8gj07yuMygk42R/dWvJrxSuSKqqgCgYIKoEcz1UBgi2hRANCAAQjIDLY5pi08KQxPpGtRML4+cuoRcKrUlhZEDnAI3j3PxwEwJdSIul3Vmtm2Tz0gVWsp1F39rqq6yxuhqV+upyN";
// String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQghUZb+m/+ficnlbtoVJhkbUsw9FKQ5yF1wYcOP+tRQK+gCgYIKoEcz1UBgi2hRANCAASsJ3XVa/Udszyl0/tudSM7tUJsK190+2UQmEEZ6qLbRguzN+vaI3dsc04KllUojTRgXvE3vfaNAHOwQ6H5cjH+";
// 初始化SM2
SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
@@ -21,9 +21,9 @@ public class EncryptDemo {
// String encryptStr3 = sm2.encryptBase64("13371893748", KeyType.PublicKey);
// System.out.println(sm2.encryptBase64("e34c1951-c492-4ed5-8e02-1e44eee3df7b", KeyType.PublicKey));
// System.out.println(encryptStr);
String a = "69bd19ff-8fff-400e-9aba-25e36f1f5438";
String a = "1ec03852-c1b1-447c-a266-0e6e94875f1d";
String b = "{\n" +
" \"saleId\": \"108002\",\n" +
" \"saleId\": \"107656\",\n" +
" \"name\": \"毕彦兵\",\n" +
" \"idCard\": \"230104198809293718\",\n" +
" \"contactMobile\": \"18980692055\",\n" +
@@ -31,13 +31,13 @@ public class EncryptDemo {
// " \"city\": \"哈尔滨市\",\n" +
// " \"county\": \"松北区\",\n" +
// " \"installedAddress\": \"世茂大道\",\n" +
" \"number\": \"15317740623\"\n" +
" \"number\": \"19384158412\"\n" +
"}";
String c = "{\"serialNumber\": \"437f78390b4c4a57b91cb804da0fe424\"}";
System.out.println(sm2.encryptBase64(c, KeyType.PublicKey));
System.out.println(sm2.encryptBase64(a, KeyType.PublicKey));
// System.out.println(encryptStr3);
// 使用SM2解密字符串
// String data = sm2.decryptStr("BI7jtmBaoB+O0E/5qbBZd35h5M/BGhLcCB0kOM5ONebPJNC7+mS404aeYpqQEmW5caqLYX9y6eV87tOKwWC3bs+ns83SHA8k1yMMTZrHKooPAH28ylgrgv/jZZbw7Xtsfxm3+XjWUQDmacHrYujwlhCiAHRxAEIot/3fvSkVB49gHjaDj7ER0NQCKUwVt5xLXgJlCHyYsWmY+ZWj6LmzBzIdND1IFQIEx3iKDuXAgZ05ojQb+y27YlI1TLKn36eTOlhifdnOG89UN1UWkMZuZ8m5qnaMyR7bT+7LazIyBvgAGMkgGpCNwVBXT4t5y+/nRvHwYkURGGO7DLgybL5/KtZ74yemZ52tqgU8pm4HWNWncdZ7veeu55gwUe8ttt3C8UtTwtSYlrRpfoWTSwE8rBtvl//MZWkNXqePCnO1QIQYhKiX5GopqjlxFLlr0CirW0/fhA==", KeyType.PrivateKey);
// String data = sm2.decryptStr("BJVOZMKm8hlussB8GeZHia6wF0AvzP4SdOEbdfrNgAa\\/LVAudJD+rGmS1Zn7kD1l6gbw4XsySGpi+uOl\\/+JNpgwIjL+t9IXK0ogTICPDIJIvgf\\/79YxKzXj01pMCeosGac0Jqi5r8J\\/r0pxUNLZvnx4iS+M73j3D08o8OkrTB3LTDxyZPA==\"},\"verify\":false,\"body\":\"BLvEwASr7\\/cuu9v+oNurtm5kHbnkhu1AzQtOfNhC49j49Ai\\/mHa+uKslUXWHFdiXQuaEs8ZVxSUscew6z5nBcujtZ8R5KkFK9UAxWEkqtmmKIyOxwPLFAuw\\/QdR7mzxMctdwt7yP5rma9zgVVXrL1nKn2+ACKjLqvxtj0tCKZrx2\\/zUcMd8JaUvIksNRIxbtMLr9NLXCDuiR+B\\/sCYFp1iOxrxS34ZfPQR4ayYj0kWQtx4FAgD87\\/2f5Crf6Dbrgmxcwjf2hWN+QXub16puR0OMHnqc8XKkEzER8255u3EGoIfFLZTQzUQv1HRJox\\/tIvXDh\\/uMgLQGjEEMrvBO8k\\/mu+De8ZNfX7FQp\\/x\\/Vck\\/mxOs=", KeyType.PrivateKey);
// String data = sm2.decryptStr("BLmSzK7I1FAzi+bePR5HhCL0WruEYftUA4bw1cU0TBM0xfX4MX6ImLJzVBJP5jATbOsDC136xuDBf8uFZxmXf2gnIEOX+qBfZD7LcPgdcv06TpnCVtEQEcGULMe/iB3SEHj2xAx3R3bbkgXKGrJ2paj2D4S0uwbs0mLYpIQLFXsXogNupeUHEIq8aLNyUEDRH9HMFG+sJMJpGW80CaywaCCoevpwjc2pAdMdejT5+4/mQjXhKE5kBMyuRA0ugHR6ZfMd9P+pEk6UFDzlWw8kJ11xWgPZcNKWNA3JJBt035jdyMLNfIrPSeHjVXoQZR/l0CXcu+CsFuYvRH3zVaZBqFy+mmeB8omsdnGiuVYcJQfhAnrdU2p4bZEYAwN7KdaZCOPwE/xHoEyAsxKn/WExsYNfyaCs7wzrVaRJmOGBxL4AxzH9W4M6K6SILdPWeaz/DnPZG+pkSIck9jUwcYQnXR9y2EO95l1kwnbYrhFvL5EdLvHZgnrpWP2P7NCqixCKWYP/2rOoXpfhC0e+6w26lKAOUNbqlMWmvEcNBSUqLLzlmogmhB+Dk3SaJX6cwsFzJR9qW/4jE52V+E2pcD4ZIiqNu6UkFWZvMwQqxUvn/evyoKpPQZNr16HKTmyqG/BODPSDPOACmLDD/B8cLidb9MQaYbfS9eEXkTR7GMWji4YGBU8sMBP7WA==", KeyType.PrivateKey);
// System.out.println(data);

View File

@@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.ct.CTNetException;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
@@ -123,7 +124,7 @@ public class APIController extends BaseController {
}
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
List<JSONObject> data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString());
return R.ok(data);
} catch (Exception e) {
@@ -157,8 +158,7 @@ public class APIController extends BaseController {
agentOrderBo.setAgentId(agentAccountVo.getAgentId());
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
AgentAccountGoodVo agentAccountGoodVo;
SM2 sm2 = (SM2) request.getAttribute("sm2");
@@ -189,6 +189,7 @@ public class APIController extends BaseController {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId格式错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId());
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
@@ -273,31 +274,62 @@ public class APIController extends BaseController {
}
// 保存数据
// agentOrderService.insertByBo(agentOrderBo);
agentOrderBo.setStatus("0");
agentOrderService.insertByBo(agentOrderBo);
CTResponse<String> response = null;
String sn = UUID.randomUUID().toString();
log.error(sn+" ------------------下单开始-------------------");
try {
CTResponse<String> response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(),
response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(),
agentOrderBo.getInstalledAddress(), agentOrderBo.getSaleId(), agentOrderBo.getStoreId(),
agentOrderBo.getPersonnelId(), agentOrderBo.getProvince(), agentOrderBo.getCity(),
agentOrderBo.getCounty(), agentOrderBo.getSerialNumber(), agentOrderBo.getNumber(),
agentOrderBo.getLogiRemark(), agentOrderBo.getPageUrl(), agentOrderBo.getRemark(),
agentOrderBo.getInstallAddress(), "", "");
agentOrderBo.getInstallAddress(), "", "", sn);
if (response.isSuccess()) {
agentOrderBo.setOrderNum(response.getData());
agentOrderBo.setOrderStatus("S1000");
agentOrderBo.setStatus("0");
agentOrderService.insertByBo(agentOrderBo);
// agentOrderService.insertByBo(agentOrderBo);
agentOrderService.updateByBo(agentOrderBo);
log.error(sn+" ------------------下单成功------------------- ");
return R.ok("操作成功", agentOrderBo.getSerialNumber());
} else {
// 订单验证失败
log.error("电信订单验证失败");
log.error(sn+" ------------------下单失败-------------------");
log.error(sn+" 电信订单验证失败");
log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber());
log.error(sn+response.getMessage());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-1");
agentOrderService.updateByBo(agentOrderBo);
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
} catch (Exception e) {
} catch (CTNetException e) {
// 504
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 电信订单验网络异常");
log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-2");
agentOrderBo.setHasError(1);
agentOrderService.updateByBo(agentOrderBo);
return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常", agentOrderBo.getSerialNumber());
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 电信订单验网络异常");
log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-2");
agentOrderBo.setHasError(1);
agentOrderService.updateByBo(agentOrderBo);
return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常", agentOrderBo.getSerialNumber());
}
}
@@ -329,7 +361,8 @@ public class APIController extends BaseController {
}
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId());
// lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId());
lqw.eq(AgentOrder::getAgentAccountId, agentAccountVo.getId());
lqw.eq(ObjectUtils.isNotNull(saleId), AgentOrder::getSaleId, saleId);
if (ObjectUtils.isNotNull(name)) {
try {
@@ -417,7 +450,7 @@ public class APIController extends BaseController {
AgentOrderBo bo = new AgentOrderBo();
bo.setSerialNumber(serialNumber);
bo.setAgentId(agentAccountVo.getAgentId());
bo.setPersonnelId(agentAccountVo.getPersonnelId());
// bo.setPersonnelId(agentAccountVo.getPersonnelId());
List<AgentOrderVo> voList = agentOrderService.queryList(bo);
if (voList.size() > 0) {
AgentOrderVo vo = voList.get(0);

View File

@@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.ct.CTNetException;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
@@ -124,7 +125,7 @@ public class APIControllerV2 extends BaseController {
}
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
List<JSONObject> data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString());
return R.ok(data);
} catch (Exception e) {
@@ -302,7 +303,7 @@ public class APIControllerV2 extends BaseController {
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("2");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
AgentAccountGoodVo agentAccountGoodVo;
SM2 sm2 = (SM2) request.getAttribute("sm2");
@@ -334,6 +335,8 @@ public class APIControllerV2 extends BaseController {
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId());
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
log.error("姓名为空");
@@ -445,7 +448,13 @@ public class APIControllerV2 extends BaseController {
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
log.error("上传图片");
log.error("上传图片类型:"+requestBody.getStr("type"));
log.error("上传图片订单号:"+requestBody.getStr("serialNumber"));
log.error("上传图片size"+requestBody.getStr("img").length());
AgentOrderVo agentOrderVo = agentOrderService.queryBySerialNumber(requestBody.getStr("serialNumber"));
log.error("上传图片用户:"+agentOrderVo.getName());
log.error("上传图片商品:"+agentOrderVo.getTitle());
if (ObjectUtils.isNull(agentOrderVo)) {
log.error("订单不存在");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "订单不存在", null);
@@ -469,10 +478,10 @@ public class APIControllerV2 extends BaseController {
agentOrderBo.setFrontFace(1);
}
agentOrderService.updateByBo(agentOrderBo);
return R.ok(agentOrderVo.getSerialNumber());
return R.ok("操作成功", agentOrderVo.getSerialNumber());
} else {
// 订单验证失败
log.error("上传失败");
log.error("上传成功,验证失败");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "上传失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
@@ -481,14 +490,14 @@ public class APIControllerV2 extends BaseController {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常");
}
}
@PostMapping("confirmOrder")
public R<String> confirmOrder(HttpServletRequest request, @RequestBody String body) {
public R<JSONObject> confirmOrder(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
@@ -515,14 +524,17 @@ public class APIControllerV2 extends BaseController {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "照片上传不完整", null);
return R.fail(ERROR_CODE_ENCRYPT, "照片上传不完整");
}
CTResponse<String> response = null;
String sn = UUID.randomUUID().toString();
log.error(sn+" ------------------下单开始-------------------");
try {
CTResponse<String> response = ctService.saveOrder(agentOrderVo.getName(), agentOrderVo.getIdCard(), agentOrderVo.getContactMobile(),
response = ctService.saveOrder(agentOrderVo.getName(), agentOrderVo.getIdCard(), agentOrderVo.getContactMobile(),
agentOrderVo.getInstalledAddress(), agentOrderVo.getSaleId(), agentOrderVo.getStoreId(),
agentOrderVo.getPersonnelId(), agentOrderVo.getProvince(), agentOrderVo.getCity(),
agentOrderVo.getCounty(), agentOrderVo.getSerialNumber(), agentOrderVo.getNumber(),
agentOrderVo.getLogiRemark(), agentOrderVo.getPageUrl(), agentOrderVo.getRemark(),
agentOrderVo.getInstallAddress(), "", "idCardFront,idCardBack,frontFace",
"2");
"2", sn);
if (response.isSuccess()) {
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(agentOrderVo.getId());
@@ -530,18 +542,52 @@ public class APIControllerV2 extends BaseController {
agentOrderBo.setOrderStatus("S1000");
agentOrderBo.setStatus("0");
agentOrderService.updateByBo(agentOrderBo);
return R.ok("操作成功", agentOrderBo.getSerialNumber());
JSONObject result = new JSONObject();
result.set("serialNumber", agentOrderBo.getSerialNumber());
result.set("ctOrderNum", agentOrderBo.getOrderNum());
log.error(sn+" ------------------下单成功------------------- ");
return R.ok("操作成功", result);
} else {
// 订单验证失败
log.error("电信订单验证失败");
log.error(sn+" ------------------下单失败-------------------");
log.error(sn+" 电信订单验证失败");
log.error(sn+" 订单号:"+agentOrderVo.getSerialNumber());
log.error(sn+response.getMessage());
log.error(sn+" ------------------下单结束------------------- ");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
} catch (CTNetException e) {
// 504
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(agentOrderVo.getId());
log.error(e.getMessage());
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 电信订单验网络异常");
log.error(sn+" 订单号:"+agentOrderVo.getSerialNumber());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-2");
agentOrderBo.setHasError(1);
agentOrderService.updateByBo(agentOrderBo);
return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常", agentOrderVo.getSerialNumber());
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(agentOrderVo.getId());
log.error(e.getMessage());
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 电信订单验网络异常");
log.error(sn+" 订单号:"+agentOrderVo.getSerialNumber());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-2");
agentOrderBo.setHasError(1);
agentOrderService.updateByBo(agentOrderBo);
return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常");
}
}

View File

@@ -140,7 +140,7 @@ public class APIFreeController extends BaseController {
AgentAccountVo agentAccountVo = agentAccountService.queryById(agentAccountGoodVo.getAgentAccountId());
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
List<JSONObject> data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString());
return R.ok(data);
} catch (Exception e) {
@@ -174,7 +174,7 @@ public class APIFreeController extends BaseController {
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
agentOrderBo.setOrderType(1);
{
@@ -227,6 +227,8 @@ public class APIFreeController extends BaseController {
agentOrderBo.setInstallAddress(agentOrderBo.getInstalledAddress());
}
agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId());
// 校验数量
if (agentAccountGoodVo.getIsNeedVerify() == 1) {
Integer registerCount = agentAccountGoodVo.getRegisterCount();
@@ -261,23 +263,54 @@ public class APIFreeController extends BaseController {
agentAccountGoodService.updateByBo(agentAccountGoodBo);
}
}
if (ObjectUtils.isNotNull(agentAccountVo.getVerifyUrl())) {
try {
JSONObject paramMap = new JSONObject();
paramMap.set("name", agentOrderBo.getName());
paramMap.set("idCard", agentOrderBo.getIdCard());
paramMap.set("contactMobile", agentOrderBo.getContactMobile());
String verifyResult = HttpUtil.post(agentAccountVo.getVerifyUrl(), paramMap.toString());
JSONObject verifyData = JSONUtil.parseObj(verifyResult);
if (verifyData.getInt("code") != 200) {
log.error("验证不通过");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证不通过", null);
return R.fail(ERROR_CODE_VERIFY, "验证错误");
}
} catch (Exception e) {
e.printStackTrace();
log.error("验证请求错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证请求错误", null);
return R.fail(ERROR_CODE_VERIFY, "验证错误");
}
}
// 保存数据
agentOrderService.insertByBo(agentOrderBo);
String sn = UUID.randomUUID().toString();
log.error(sn+" ------------------下单开始-------------------");
try {
CTResponse<String> response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(),
agentOrderBo.getInstalledAddress(), agentOrderBo.getSaleId(), agentOrderBo.getStoreId(),
agentOrderBo.getPersonnelId(), agentOrderBo.getProvince(), agentOrderBo.getCity(),
agentOrderBo.getCounty(), agentOrderBo.getSerialNumber(), agentOrderBo.getNumber(),
agentOrderBo.getLogiRemark(), agentOrderBo.getPageUrl(), agentOrderBo.getRemark(),
agentOrderBo.getInstallAddress(), "", "");
agentOrderBo.getInstallAddress(), "", "", sn);
if (response.isSuccess()) {
agentOrderBo.setOrderNum(response.getData());
agentOrderBo.setOrderStatus("S1000");
agentOrderBo.setStatus("0");
agentOrderService.insertByBo(agentOrderBo);
agentOrderService.updateByBo(agentOrderBo);
log.error(sn+" ------------------下单成功------------------- ");
return R.ok("操作成功", agentOrderBo.getSerialNumber());
} else {
// 订单验证失败
log.error("电信订单验证失败");
log.error(sn+" ------------------下单失败-------------------");
log.error(sn+" 电信订单验证失败");
log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber());
log.error(sn+response.getMessage());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-1");
agentOrderService.updateByBo(agentOrderBo);
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
@@ -285,11 +318,19 @@ public class APIFreeController extends BaseController {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 电信订单验网络异常");
log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber());
log.error(sn+" ------------------下单结束------------------- ");
agentOrderBo.setStatus("-2");
agentOrderBo.setHasError(1);
agentOrderService.updateByBo(agentOrderBo);
return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常");
}
}
}
@GetMapping("/getUserList")
public R<TableDataInfo<AgentAccountGoodUserVo>> getUserList(HttpServletRequest request,
@RequestParam String code,

View File

@@ -7,12 +7,15 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.service.CTService;
import com.ruoyi.ct.service.IAgentAccountGoodService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -32,6 +35,9 @@ public class APITestController extends BaseTestController {
@Resource
private CTService ctService;
@Resource
private IAgentAccountGoodService agentAccountGoodService;
@GetMapping("getGoodsList")
public R<JSONObject> getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) {
if (!checkAccount(request)) {
@@ -43,13 +49,26 @@ public class APITestController extends BaseTestController {
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
agentAccountGoodBo.setAgentAccountId(agentAccountVo.getId());
Page<AgentAccountGoodVo> result = agentAccountGoodService.queryPage(agentAccountGoodBo, page, pageSize);
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", 2);
meta.set("total", result.getTotal());
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
resultData.set("objects", JSONUtil.parseArray("[{\"saleId\":\"108002\",\"title\":\"49套餐\",\"content\":\"大概的介绍\"},{\"saleId\":\"107657\",\"title\":\"59套餐\"}]"));
List<JSONObject> dataList = new ArrayList<>();
for(AgentAccountGoodVo vo: result.getRecords()) {
JSONObject data = new JSONObject();
data.set("saleId", vo.getSaleId());
data.set("title", vo.getTitle());
data.set("content", vo.getContent());
dataList.add(data);
}
resultData.set("objects", dataList);
return R.ok(resultData);
}
@@ -65,12 +84,20 @@ public class APITestController extends BaseTestController {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) {
if (ObjectUtils.isNull(saleId)) {
log.error("参数错误");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
AgentAccountGoodVo agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId());
if (ObjectUtils.isNull(agentAccountGoodVo)) {
log.error("参数错误");
log.error("agentAccountVo: "+agentAccountVo);
log.error("saleId: "+saleId);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), SALE_ID,
List<JSONObject> data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), SALE_ID,
String.valueOf(page), String.valueOf(pageSize));
return R.ok(data);
} catch (Exception e) {
@@ -117,7 +144,7 @@ public class APITestController extends BaseTestController {
}
try {
if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) {
if (ObjectUtils.isNull(saleId)) {
log.error("saleId无效");
System.out.println("saleId无效");
return R.fail(ERROR_CODE_PARAMS, "参数错误");

View File

@@ -14,7 +14,8 @@ import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.domain.vo.AgentOrderVo;
import com.ruoyi.ct.service.CTService;
import com.ruoyi.ct.domain.vo.GoodVo;
import com.ruoyi.ct.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -31,6 +32,17 @@ import java.util.UUID;
public class APITestControllerV2 extends BaseTestController {
@Resource
private CTService ctService;
@Resource
private IAgentAccountGoodService agentAccountGoodService;
@Resource
private IAgentService agentService;
@Resource
private IAgentOrderService agentOrderService;
@Resource
private IGoodService goodService;
@GetMapping("getGoodsList")
public R<JSONObject> getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) {
@@ -103,7 +115,7 @@ public class APITestControllerV2 extends BaseTestController {
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
AgentAccountGoodVo agentAccountGoodVo;
{
@@ -113,21 +125,28 @@ public class APITestControllerV2 extends BaseTestController {
if (ObjectUtils.isNull(saleId)) {
log.error("saleId为空");
System.out.println("saleId为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
return R.fail(ERROR_CODE_PARAMS, "saleId为空");
}
try {
if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) {
try {
agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId());
agentOrderBo.setAgentAccountId(agentAccountGoodVo.getId());
agentOrderBo.setSaleId(agentAccountGoodVo.getSaleId());
GoodVo goodVo = goodService.queryById(agentAccountGoodVo.getGoodId());
agentOrderBo.setTitle(goodVo.getName());
agentOrderBo.setContent(goodVo.getContent());
if (ObjectUtils.isNull(agentAccountGoodVo)) {
log.error("saleId无效");
System.out.println("saleId无效");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
return R.fail(ERROR_CODE_PARAMS, "saleId无效2");
}
} catch (Exception e) {
log.error("saleId格式错误");
System.out.println("saleId格式错误");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
return R.fail(ERROR_CODE_PARAMS, "saleId格式错误2");
}
agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId());
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
log.error("姓名为空");
@@ -182,13 +201,13 @@ public class APITestControllerV2 extends BaseTestController {
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
return R.ok(requestBody.getStr("serialNumber"));
return R.ok("操作成功", requestBody.getStr("serialNumber"));
}
@PostMapping("confirmOrder")
public R<String> confirmOrder(HttpServletRequest request, @RequestBody String body) {
public R<JSONObject> confirmOrder(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
@@ -203,8 +222,10 @@ public class APITestControllerV2 extends BaseTestController {
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
return R.ok(requestBody.getStr("serialNumber"));
JSONObject result = new JSONObject();
result.set("serialNumber", requestBody.getStr("serialNumber"));
result.set("ctOrderNum", "HZ123456");
return R.ok("操作成功", result);
}
@GetMapping("getOrderList")

View File

@@ -18,7 +18,7 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://43.140.198.163:3380/ct?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
url: jdbc:mysql://154.8.141.58:3380/ct?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: root
password: qaHljgd123.
# 从库数据源

View File

@@ -23,6 +23,11 @@
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
</dependencies>
</project>

BIN
ct/src/main/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,9 @@
package com.ruoyi.ct;
public class CTNetException extends Exception {
private static final long serialVersionUID = 1L;
public CTNetException() {
}
}

View File

@@ -1,13 +1,34 @@
package com.ruoyi.ct.controller;
import java.util.List;
import java.util.Arrays;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.TimeUnit;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.alibaba.excel.ExcelReader;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.excel.ExcelResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.ct.domain.Bill;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.service.CTService;
import com.ruoyi.ct.service.IAgentAccountGoodService;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import lombok.RequiredArgsConstructor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
@@ -19,7 +40,6 @@ import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.ct.domain.vo.AgentOrderVo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.service.IAgentOrderService;
@@ -37,8 +57,19 @@ import com.ruoyi.common.core.page.TableDataInfo;
@RequestMapping("/ct/agentOrder")
public class AgentOrderController extends BaseController {
@Resource
private final IAgentOrderService iAgentOrderService;
@Resource
private IAgentAccountGoodService iAgentAccountGoodService;
@Resource
private CTService ctService;
@Lazy
@Resource
private ISysConfigService sysConfigService;
/**
* 查询订单列表
*/
@@ -71,6 +102,147 @@ public class AgentOrderController extends BaseController {
return R.ok(iAgentOrderService.queryById(id));
}
@SaCheckPermission("ct:agentOrder:query")
@GetMapping("/syncOrder/{id}")
public R<JSONObject> syncOrder(@PathVariable Long id) {
AgentOrderVo agentOrderVo = iAgentOrderService.queryById(id);
if (ObjectUtil.isNotNull(agentOrderVo)) {
try {
System.out.println("agentOrderVo = " + agentOrderVo);
CTResponse<String> response = ctService.updateOrder(agentOrderVo.getName(), agentOrderVo.getOrderNum());
if (ObjectUtils.isNotNull(response) && response.isSuccess()) {
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(agentOrderVo.getId());
JSONObject data = response.getDecryptData();
agentOrderBo.setOrderStatus(data.getStr("status"));
// agentOrderBo.setExpressNum(data.getStr("expressNum"));
if (ObjectUtils.isNotNull(data.getBeanList("expressRoutes", JSONObject.class))) {
agentOrderBo.setExpressRoutes(data.getBeanList("expressRoutes", JSONObject.class).toString());
}
if (ObjectUtils.isNotNull(data.getBeanList("routeArr", JSONObject.class))) {
agentOrderBo.setRouteArr(data.getBeanList("routeArr", JSONObject.class).toString());
}
agentOrderBo.setUpdateTime(new Date());
boolean needStatistic = false;
if (Objects.equals(agentOrderBo.getOrderStatus(), "S1013")) {
agentOrderBo.setStatus("1");
agentOrderBo.setActiveTime(new Date());
needStatistic = true;
} else if (Objects.equals(agentOrderBo.getOrderStatus(), "S1014")) {
agentOrderBo.setStatus("10");
needStatistic = true;
}
iAgentOrderService.updateByBo(agentOrderBo);
if (needStatistic && agentOrderVo.getOrderType() == 1) {
// H5 下单需要更新统计
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
AgentAccountGoodVo agentAccountGoodVo = iAgentAccountGoodService.getByGoodAndAccount(agentAccountGoodBo.getSaleId(), agentOrderVo.getAgentAccountId());
iAgentOrderService.updateCount(agentAccountGoodVo);
}
return R.ok(data);
} else {
System.out.println("同步订单异常:"+agentOrderVo.getSerialNumber()+","+response.getMessage());
return R.fail("查询失败,电信返回异常");
}
} catch (Exception e) {
System.out.println("同步订单异常:"+agentOrderVo.getSerialNumber());
return R.fail("查询失败,返回数据处理异常");
}
}
return R.fail("查询失败ID错误");
}
@SaCheckPermission("ct:agentOrder:query")
@GetMapping("/syncErrorOrder/{id}")
public R<JSONObject> syncErrorOrder(@PathVariable Long id) {
AgentOrderVo vo = iAgentOrderService.queryById(id);
if (ObjectUtil.isNotNull(vo)) {
try {
CTResponse<String> response = ctService.updateOrderNum(vo.getSerialNumber());
if (ObjectUtils.isNotNull(response) && response.isSuccess()) {
JSONObject data = response.getDecryptData();
if (ObjectUtils.isNotNull(data) && ObjectUtils.isNotNull(data.getStr("freightVendor"))) {
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(vo.getId());
agentOrderBo.setExpressNum(data.getStr("freightCode"));
agentOrderBo.setExpressVendor(data.getStr("freightVendor"));
iAgentOrderService.updateByBo(agentOrderBo);
return R.ok(data);
}
return R.ok("查询失败,返回数据处理异常", data);
}
} catch (Exception e) {
return R.fail("查询失败,返回数据处理异常");
}
}
return R.fail("查询失败ID错误");
}
@SaCheckPermission("ct:agentOrder:query")
@GetMapping("/syncOffer/{id}")
public R<JSONArray> syncOffer(@PathVariable Long id) {
AgentOrderVo vo = iAgentOrderService.queryById(id);
if (ObjectUtil.isNotNull(vo)) {
try {
String offerIds = "";
SysConfig sysConfig50 = sysConfigService.selectConfig("offerId50");
SysConfig sysConfig100 = sysConfigService.selectConfig("offerId100");
String offerId50 = sysConfig50.getConfigValue();
String offerId100 = sysConfig100.getConfigValue();
offerIds = offerId50 + "," + offerId100;
CTResponse<JSONArray> response = ctService.syncOffer(vo.getOrderNum(), offerIds, vo.getPersonnelId());
JSONArray data = response.getData();
if (ObjectUtils.isNotNull(data) && data.size() < 2) {
AgentOrderBo bo = new AgentOrderBo();
bo.setId(vo.getId());
bo.setIsRecharge(1);
bo.setRechargeTime(new Date());
bo.setUpdateTime(new Date());
if (!data.contains(offerId50)) {
bo.setChargeTitle(sysConfig50.getConfigName());
} else if (!data.contains(offerId100)) {
bo.setChargeTitle(sysConfig100.getConfigName());
}
iAgentOrderService.updateByBo(bo);
return R.ok();
} else {
return R.ok("查询失败,返回数据处理异常", data);
}
} catch (Exception e) {
return R.fail("查询失败,返回数据处理异常");
}
}
return R.fail("查询失败ID错误");
}
@SaCheckPermission("ct:agentOrder:query")
@GetMapping("/syncExpress/{id}")
public R<JSONObject> syncExpress(@PathVariable Long id) {
AgentOrderVo vo = iAgentOrderService.queryById(id);
if (ObjectUtil.isNotNull(vo)) {
try {
CTResponse<String> response = ctService.updateExpress(vo.getOrderNum());
if (ObjectUtils.isNotNull(response) && response.isSuccess()) {
JSONObject data = response.getDecryptData();
if (ObjectUtils.isNotNull(data) && ObjectUtils.isNotNull(data.getStr("freightVendor"))) {
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(vo.getId());
agentOrderBo.setExpressNum(data.getStr("freightCode"));
agentOrderBo.setExpressVendor(data.getStr("freightVendor"));
iAgentOrderService.updateByBo(agentOrderBo);
return R.ok(data);
}
return R.ok("查询失败,返回数据处理异常", data);
}
} catch (Exception e) {
return R.fail("查询失败,返回数据处理异常");
}
}
return R.fail("查询失败ID错误");
}
/**
* 新增订单
*/
@@ -79,6 +251,7 @@ public class AgentOrderController extends BaseController {
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody AgentOrderBo bo) {
bo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
return toAjax(iAgentOrderService.insertByBo(bo));
}
@@ -105,4 +278,5 @@ public class AgentOrderController extends BaseController {
@PathVariable Long[] ids) {
return toAjax(iAgentOrderService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}

View File

@@ -175,4 +175,9 @@ public class AgentOrder extends BaseEntity {
private String uploadMsgId;
private Date activeTime;
private Date rechargeTime;
private Integer hasError;
}

View File

@@ -0,0 +1,194 @@
package com.ruoyi.ct.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Bill {
private String a0;
private String a1;
private String a3;
private String a4;
@ExcelProperty(value = "结算账期")
private String a;
@ExcelProperty(value = "原始账期")
private String b;
@ExcelProperty(value = "渠道名称")
private String c;
@ExcelProperty(value = "父代理商名称")
private String d;
@ExcelProperty(value = "父代理商编码")
private String e;
@ExcelProperty(value = "代理商名称")
private String f;
@ExcelProperty(value = "代理商编码")
private String g;
@ExcelProperty(value = "网点名称")
private String h;
@ExcelProperty(value = "网点编码")
private String i;
@ExcelProperty(value = "套餐名称")
private String j;
@ExcelProperty(value = "套餐编码")
private String k;
@ExcelProperty(value = "设备号")
private String l;
@ExcelProperty(value = "资产ID")
private String m;
@ExcelProperty(value = "类型")
private String n;
@ExcelProperty(value = "金额(元)")
private String o;
@ExcelProperty(value = "原始清单ID")
private String p;
@ExcelProperty(value = "不含税价(元)")
private String q;
@ExcelProperty(value = "酬金结算比例")
private String r;
@ExcelProperty(value = "酬金比例单位")
private String s;
@ExcelProperty(value = "有效计算金额(元)")
private String t;
@ExcelProperty(value = "结算频率")
private String u;
@ExcelProperty(value = "受理员工")
private String v;
@ExcelProperty(value = "受理员工工号")
private String w;
@ExcelProperty(value = "促销员工")
private String x;
@ExcelProperty(value = "促销员工工号")
private String y;
@ExcelProperty(value = "发展区局")
private String z;
@ExcelProperty(value = "设备区局")
private String aa;
@ExcelProperty(value = "行政分局")
private String ab;
@ExcelProperty(value = "佣金策略")
private String ac;
@ExcelProperty(value = "佣金结算说明")
private String ad;
@ExcelProperty(value = "销售策略名称")
private String ae;
@ExcelProperty(value = "销售策略编码")
private String af;
@ExcelProperty(value = "产品名称")
private String ag;
@ExcelProperty(value = "产品编码")
private String ah;
@ExcelProperty(value = "入网日期")
private String ai;
@ExcelProperty(value = "完工日期")
private String aj;
@ExcelProperty(value = "设备状态")
private String ak;
@ExcelProperty(value = "佣金类型")
private String al;
@ExcelProperty(value = "清单状态")
private String am;
@ExcelProperty(value = "清单编号")
private String an;
@ExcelProperty(value = "报账单号")
private String ao;
@ExcelProperty(value = "结算标志")
private String ap;
@ExcelProperty(value = "结算人")
private String aq;
@ExcelProperty(value = "结算时间")
private String ar;
@ExcelProperty(value = "是否调账")
private String as;
@ExcelProperty(value = "调整原因")
private String at;
@ExcelProperty(value = "集团渠道编码")
private String au;
@ExcelProperty(value = "集团渠道类型第一级")
private String av;
@ExcelProperty(value = "集团渠道类型第二级")
private String aw;
@ExcelProperty(value = "集团渠道类型第三级")
private String ax;
@ExcelProperty(value = "融合类型")
private String ay;
@ExcelProperty(value = "折扣率")
private String az;
@ExcelProperty(value = "客户类型")
private String ba;
@ExcelProperty(value = "维系月份")
private String bb;
@ExcelProperty(value = "派单渠道")
private String bc;
@ExcelProperty(value = "维系类型")
private String bd;
@ExcelProperty(value = "维系路径")
private String be;
@ExcelProperty(value = "供应商名称")
private String bf;
@ExcelProperty(value = "供应商编码")
private String bg;
@ExcelProperty(value = "预算责任中心名称")
private String bh;
@ExcelProperty(value = "预算责任中心编码")
private String bi;
@ExcelProperty(value = "成本中心名称")
private String bj;
@ExcelProperty(value = "成本中心编码")
private String bk;
@ExcelProperty(value = "用途名称")
private String bl;
@ExcelProperty(value = "用途编码")
private String bm;
@ExcelProperty(value = "经济事项名称")
private String bn;
@ExcelProperty(value = "经济事项编码")
private String bo;
@ExcelProperty(value = "开账账期")
private String bp;
@ExcelProperty(value = "网格内外标志")
private String bq;
@ExcelProperty(value = "安装地址")
private String br;
@ExcelProperty(value = "客户等级")
private String bs;
@ExcelProperty(value = "是否摊销")
private String bt;
@ExcelProperty(value = "代催员工")
private String bu;
@ExcelProperty(value = "销账本金")
private String bv;
@ExcelProperty(value = "销账违约金")
private String bw;
@ExcelProperty(value = "调整本金")
private String bx;
@ExcelProperty(value = "调整违约金")
private String by;
@ExcelProperty(value = "销账月")
private String bz;
@ExcelProperty(value = "展示字段1")
private String ca;
@ExcelProperty(value = "展示字段1描述")
private String cb;
@ExcelProperty(value = "展示字段2")
private String cc;
@ExcelProperty(value = "展示字段2描述")
private String cd;
@ExcelProperty(value = "展示字段3")
private String ce;
@ExcelProperty(value = "展示字段3描述")
private String cf;
@ExcelProperty(value = "展示字段4")
private String cg;
@ExcelProperty(value = "展示字段4描述")
private String ch;
@ExcelProperty(value = "展示字段5")
private String ci;
@ExcelProperty(value = "展示字段5描述")
private String cj;
@ExcelProperty(value = "佣金政策编号")
private String ck;
@ExcelProperty(value = "佣金政策名称")
private String cl;
@ExcelProperty(value = "工单(主单)编号")
private String cm;
}

View File

@@ -23,7 +23,7 @@ public class Good extends BaseEntity {
private static final long serialVersionUID=1L;
/**
*
*
*/
@TableId(value = "id")
private Long id;
@@ -36,20 +36,24 @@ public class Good extends BaseEntity {
*/
private String content;
/**
*
*
*/
private String saleId;
/**
* 电信ID
*/
private String personnelId;
/**
* 状态
*/
private String status;
/**
*
*
*/
@TableLogic
private String delFlag;
/**
*
*
*/
private String remark;

View File

@@ -24,31 +24,31 @@ public class AgentOrderBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
// @NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 代理商ID
*/
@NotNull(message = "代理商ID不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "代理商ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long agentId;
/**
* 代理商名称
*/
@NotBlank(message = "代理商名称不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "代理商名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String agentName;
/**
* 代理商账号ID
*/
@NotNull(message = "代理商账号ID不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotNull(message = "代理商账号ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long agentAccountId;
/**
* 商品ID
*/
@NotBlank(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class })
private String saleId;
private String title;
private String content;
@@ -56,69 +56,63 @@ public class AgentOrderBo extends BaseEntity {
/**
* 厅店ID默认13
*/
@NotBlank(message = "厅店ID默认13不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "厅店ID默认13不能为空", groups = { AddGroup.class, EditGroup.class })
private String storeId;
/**
* 代理商电信ID
*/
@NotBlank(message = "代理商电信ID不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "代理商电信ID不能为空", groups = { AddGroup.class, EditGroup.class })
private String personnelId;
/**
* 用户姓名
*/
@NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 用户身份证号
*/
@NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class })
@Pattern(regexp = "([1-9]\\d{5})(19\\d{2}|20\\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}([0-9]|X|x)", message = "身份证号码错误", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class })
// @Pattern(regexp = "([1-9]\\d{5})(19\\d{2}|20\\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}([0-9]|X|x)", message = "身份证号码错误", groups = { AddGroup.class, EditGroup.class })
private String idCard;
/**
* 用户联系电话
*/
@NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
@Pattern(regexp = "1[3-9]\\d{9}", message = "联系电话错误", groups = { AddGroup.class, EditGroup.class })
// @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
// @Pattern(regexp = "1[3-9]\\d{9}", message = "联系电话错误", groups = { AddGroup.class, EditGroup.class })
private String contactMobile;
/**
* 收货地址
*/
@NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String installedAddress;
/**
* 省
*/
@NotBlank(message = "省不能为空", groups = { AddGroup.class, EditGroup.class })
private String province;
/**
* 市
*/
@NotBlank(message = "市不能为空", groups = { AddGroup.class, EditGroup.class })
private String city;
/**
* 区
*/
@NotBlank(message = "区不能为空", groups = { AddGroup.class, EditGroup.class })
private String county;
/**
* 下单流水号
*/
@NotBlank(message = "下单流水号不能为空", groups = { AddGroup.class, EditGroup.class })
private String serialNumber;
/**
* 入网号码
*/
@NotBlank(message = "入网号码不能为空", groups = { AddGroup.class, EditGroup.class })
private String number;
/**
@@ -129,7 +123,6 @@ public class AgentOrderBo extends BaseEntity {
/**
* 业务办理页面url
*/
@NotBlank(message = "业务办理页面url不能为空", groups = { AddGroup.class, EditGroup.class })
private String pageUrl;
/**
@@ -215,4 +208,10 @@ public class AgentOrderBo extends BaseEntity {
private Integer frontFace;
private String uploadMsgId;
private Date activeTime;
private Date rechargeTime;
private Integer hasError;
}

View File

@@ -44,6 +44,12 @@ public class GoodBo extends BaseEntity {
@NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private String saleId;
/**
* 电信ID
*/
@NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private String personnelId;
/**
* 状态
*/

View File

@@ -74,4 +74,6 @@ public class AgentAccountGoodVo implements Serializable {
private String imageIds;
private String remark;
// private AgentVo agentVo;
}

View File

@@ -248,4 +248,13 @@ public class AgentOrderVo implements Serializable {
private Integer frontFace;
private String uploadMsgId;
@ExcelProperty(value = "激活时间")
private Date activeTime;
@ExcelProperty(value = "首冲时间")
private Date rechargeTime;
@ExcelProperty(value = "是否异常订单")
private Integer hasError;
}

View File

@@ -22,7 +22,7 @@ public class GoodVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*
*/
@ExcelProperty(value = "")
private Long id;
@@ -40,10 +40,15 @@ public class GoodVo implements Serializable {
private String content;
/**
*
*
*/
@ExcelProperty(value = "")
@ExcelProperty(value = "saleId")
private String saleId;
/**
* 电信ID
*/
@ExcelProperty(value = "电信ID")
private String personnelId;
/**
* 状态
@@ -52,31 +57,31 @@ public class GoodVo implements Serializable {
private String status;
/**
*
*
*/
@ExcelProperty(value = "")
private String createBy;
/**
*
*
*/
@ExcelProperty(value = "")
private Date createTime;
/**
*
*
*/
@ExcelProperty(value = "")
private String updateBy;
/**
*
*
*/
@ExcelProperty(value = "")
private Date updateTime;
/**
*
*
*/
@ExcelProperty(value = "")
private String remark;

View File

@@ -3,6 +3,7 @@ package com.ruoyi.ct.service;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.ruoyi.common.core.domain.CTRequestBody;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
@@ -11,23 +12,25 @@ import java.util.List;
public interface CTService {
boolean getToken();
boolean checkToken();
CTRequestBody checkToken();
List<JSONObject> selectNumber(String personnelId, String saleId, String page, String pageSize) throws Exception;
CTResponse<String> saveOrder(String name, String idCard, String contactMobile, String installedAddress,
String saleId, String storeId, String personnelId, String province, String city,
String county, String serialNumber, String number, String logiRemark, String pageUrl,
String remark, String installAddress, String ynumber2, String images) throws Exception;
String remark, String installAddress, String ynumber2, String images, String sn) throws Exception;
CTResponse<String> saveOrder(String name, String idCard, String contactMobile, String installedAddress,
String saleId, String storeId, String personnelId, String province, String city,
String county, String serialNumber, String number, String logiRemark, String pageUrl,
String remark, String installAddress, String ynumber2, String images, String deliveryMethod) throws Exception;
String remark, String installAddress, String ynumber2, String images, String deliveryMethod, String sn) throws Exception;
CTResponse<String> uploadFile(String serialNumber, String name, String idCard, String type, String msgId, String img) throws Exception;
CTResponse<String> updateOrder(String name, String orderNum) throws Exception;
CTResponse<String> updateOrderNum(String serialNumber) throws Exception;
CTResponse<String> updateExpress(String orderNum) throws Exception;
CTResponse<JSONArray> syncOffer(String orderNum, String offerIds, String salesNumber) throws Exception;

View File

@@ -58,4 +58,6 @@ public interface IAgentOrderService {
void updateCount(AgentAccountGoodVo agentAccountGoodVo);
AgentOrderVo queryBySerialNumber(String serialNumber);
AgentOrderVo queryByNumber(String number);
}

View File

@@ -7,6 +7,8 @@ import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.ct.domain.vo.AgentVo;
import com.ruoyi.ct.mapper.AgentMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
@@ -30,6 +32,7 @@ import java.util.Collection;
public class AgentAccountGoodServiceImpl implements IAgentAccountGoodService {
private final AgentAccountGoodMapper baseMapper;
private final AgentMapper agentMapper;
/**
* 查询代理商商品
@@ -46,6 +49,10 @@ public class AgentAccountGoodServiceImpl implements IAgentAccountGoodService {
public TableDataInfo<AgentAccountGoodVo> queryPageList(AgentAccountGoodBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<AgentAccountGood> lqw = buildQueryWrapper(bo);
Page<AgentAccountGoodVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// for (AgentAccountGoodVo agentAccountGoodVo : result.getRecords()) {
// AgentVo agentVo = agentMapper.selectVoById(agentAccountGoodVo.getAgentId());
// agentAccountGoodVo.setAgentVo(agentVo);
// }
return TableDataInfo.build(result);
}

View File

@@ -56,6 +56,14 @@ public class AgentOrderServiceImpl implements IAgentOrderService {
return baseMapper.selectVoOne(lqw);
}
@Override
public AgentOrderVo queryByNumber(String number) {
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getNumber, number);
lqw.last("limit 1");
return baseMapper.selectVoOne(lqw);
}
/**
* 查询订单列表
*/
@@ -112,9 +120,14 @@ public class AgentOrderServiceImpl implements IAgentOrderService {
lqw.eq(StringUtils.isNotBlank(bo.getStatusCd()), AgentOrder::getStatusCd, bo.getStatusCd());
lqw.eq(StringUtils.isNotBlank(bo.getRouteArr()), AgentOrder::getRouteArr, bo.getRouteArr());
lqw.eq(ObjectUtils.isNotNull(bo.getIsRecharge()), AgentOrder::getIsRecharge, bo.getIsRecharge());
lqw.eq(ObjectUtils.isNotNull(bo.getHasError()), AgentOrder::getHasError, bo.getHasError());
lqw.eq(ObjectUtils.isNotNull(bo.getIsExpress()), AgentOrder::getIsExpress, bo.getIsExpress());
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
AgentOrder::getCreateTime ,params.get("beginCreateTime"), params.get("endCreateTime"));
lqw.between(params.get("beginActiveTime") != null && params.get("endActiveTime") != null,
AgentOrder::getActiveTime ,params.get("beginActiveTime"), params.get("endActiveTime"));
lqw.between(params.get("beginRechargeTime") != null && params.get("endRechargeTime") != null,
AgentOrder::getRechargeTime ,params.get("beginRechargeTime"), params.get("endRechargeTime"));
lqw.orderByDesc(AgentOrder::getCreateTime);
return lqw;
}

View File

@@ -7,9 +7,13 @@ import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.CTRequestBody;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.CTNetException;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.vo.AgentOrderVo;
import com.ruoyi.ct.mapper.AgentOrderMapper;
import com.ruoyi.ct.service.CTService;
import com.ruoyi.common.utils.redis.RedisUtils;
import lombok.RequiredArgsConstructor;
@@ -51,7 +55,9 @@ public class CTServiceImpl implements CTService {
private String url;
private CTRequestBody requestBody;
// private CTRequestBody requestBody;
private final AgentOrderMapper agentOrderMapper;
/**
* 电信返回:
@@ -111,7 +117,7 @@ public class CTServiceImpl implements CTService {
* @return
*/
@Override
public boolean checkToken() {
public CTRequestBody checkToken() {
try {
token = RedisUtils.getCacheObject(tokenKey);
System.out.println("token = " + token);
@@ -120,7 +126,7 @@ public class CTServiceImpl implements CTService {
// 缓存中没有token需要重新获取
if (!getToken()) {
// 没有获取到token提示稍后再试
return false;
return null;
}
}
@@ -132,13 +138,13 @@ public class CTServiceImpl implements CTService {
// 缓存中没有token需要重新获取
if (!getToken()) {
// 没有获取到token提示稍后再试
return false;
return null;
}
}
url = String.format("%sdqServer/api_out/xt/v1/extInterface", host);
requestBody = new CTRequestBody();
CTRequestBody requestBody = new CTRequestBody();
requestBody.setAppId(appId);
return true;
return requestBody;
}
/**
@@ -156,7 +162,8 @@ public class CTServiceImpl implements CTService {
*/
@Override
public List<JSONObject> selectNumber(String personnelId, String saleId, String page, String pageSize) throws Exception {
if (checkToken()) {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
requestBody.setInterfaceName("SelectNumber");
Map<String, Object> body = new HashMap<>();
body.put("personnelId", personnelId);
@@ -183,17 +190,21 @@ public class CTServiceImpl implements CTService {
return null;
}
/**
* 线上下单
*/
@Override
public CTResponse<String> saveOrder(String name, String idCard, String contactMobile,
String installedAddress, String saleId, String storeId,
String personnelId, String province, String city,
String county, String serialNumber, String number,
String logiRemark, String pageUrl, String remark,
String installAddress, String ynumber2, String images) throws Exception {
if (checkToken()) {
String installAddress, String ynumber2, String images, String sn) throws Exception {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
log.error(sn+" ------------------检查接口登录状态完成-------------------");
requestBody.setInterfaceName("SaveOrder");
Map<String, Object> body = new HashMap<>();
body.put("name", name);
body.put("idCard", idCard);
body.put("contactMobile", contactMobile);
@@ -212,33 +223,60 @@ public class CTServiceImpl implements CTService {
body.put("installAddress", installAddress);
// body.put("ynumber2", ynumber2);
// body.put("images", images);
log.info("body:" + body);
requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey);
log.error(sn+" 加密前数据:"+body);
log.error(sn+" 加密后数据:"+requestBody.toMap());
HttpResponse httpResponse = HttpRequest.post(url)
.header("token", token)
.form(requestBody.toMap())
.execute();
log.error("body:"+httpResponse.body());
// log.error("body:"+httpResponse.body());
if (httpResponse.isOk()) {
if (ObjectUtil.isNotNull(httpResponse.body()) && ObjectUtil.isNull(JSONUtil.toBean(httpResponse.body(), JSONObject.class).getStr("status"))) {
// 其他异常状态如504等
log.error(sn+" ------------------下单异常------------------- ");
log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus());
log.error(sn+" 返回:"+httpResponse.body());
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getSerialNumber, serialNumber);
lqw.last("limit 1");
AgentOrderVo agentOrderVo = agentOrderMapper.selectVoOne(lqw);
AgentOrder agentOrder = new AgentOrder();
agentOrder.setId(agentOrderVo.getId());
agentOrder.setStatus("-2");
agentOrder.setHasError(1);
agentOrderMapper.updateById(agentOrder);
log.error(sn+" --------------------------------------------");
throw new CTNetException();
}
CTResponse<String> response = JSONUtil.toBean(httpResponse.body(), CTResponse.class);
return response;
} else {
// 返回的不是200或者没有返回
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus());
log.error(sn+" 返回:"+httpResponse.body());
log.error(sn+" --------------------------------------------");
}
log.error("response status:"+httpResponse.getStatus());
log.error("request error");
return null;
}
log.error("token error");
return null;
}
/**
* 线下下单
*/
@Override
public CTResponse<String> saveOrder(String name, String idCard, String contactMobile,
String installedAddress, String saleId, String storeId,
String personnelId, String province, String city,
String county, String serialNumber, String number,
String logiRemark, String pageUrl, String remark,
String installAddress, String ynumber2, String images, String deliveryMethod) throws Exception {
if (checkToken()) {
String installAddress, String ynumber2, String images, String deliveryMethod, String sn) throws Exception {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
log.error(sn+" ------------------检查接口登录状态完成-------------------");
requestBody.setInterfaceName("SaveOrder");
Map<String, Object> body = new HashMap<>();
@@ -261,19 +299,43 @@ public class CTServiceImpl implements CTService {
body.put("installAddress", installAddress);
// body.put("ynumber2", ynumber2);
// body.put("images", images);
log.info("body:" + body);
// log.info("body:" + body);
requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey);
log.error(sn+" 加密前数据:"+body);
log.error(sn+" 加密后数据:"+requestBody.toMap());
HttpResponse httpResponse = HttpRequest.post(url)
.header("token", token)
.form(requestBody.toMap())
.execute();
log.error("body:"+httpResponse.body());
// log.error("body:"+httpResponse.body());
if (httpResponse.isOk()) {
if (ObjectUtil.isNotNull(httpResponse.body()) && ObjectUtil.isNull(JSONUtil.toBean(httpResponse.body(), JSONObject.class).getStr("status"))) {
// 其他异常状态如504等
log.error(sn+" ------------------下单异常------------------- ");
log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus());
log.error(sn+" 返回:"+httpResponse.body());
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getSerialNumber, serialNumber);
lqw.last("limit 1");
AgentOrderVo agentOrderVo = agentOrderMapper.selectVoOne(lqw);
AgentOrder agentOrder = new AgentOrder();
agentOrder.setId(agentOrderVo.getId());
agentOrder.setStatus("-2");
agentOrder.setHasError(1);
agentOrderMapper.updateById(agentOrder);
log.error(sn+" --------------------------------------------");
throw new CTNetException();
}
CTResponse<String> response = JSONUtil.toBean(httpResponse.body(), CTResponse.class);
return response;
} else {
// 返回的不是200或者没有返回
log.error(sn+" ------------------下单异常-------------------");
log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus());
log.error(sn+" 返回:"+httpResponse.body());
log.error(sn+" --------------------------------------------");
}
log.error("response status:"+httpResponse.getStatus());
log.error("request error");
return null;
}
log.error("token error");
@@ -282,7 +344,8 @@ public class CTServiceImpl implements CTService {
@Override
public CTResponse<String> uploadFile(String serialNumber, String name, String idCard, String type, String msgId, String img) throws Exception {
if (checkToken()) {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
requestBody.setInterfaceName("UploadFile");
requestBody.setFileBase64(img);
Map<String, Object> body = new HashMap<>();
@@ -295,8 +358,11 @@ public class CTServiceImpl implements CTService {
if (ObjectUtil.isNotNull(msgId)) {
body.put("msgId", msgId);
}
log.info("body:" + body);
log.error("body:" + body);
requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey);
log.error("body appid:" + requestBody.getAppId());
log.error("body interface name:" + requestBody.getInterfaceName());
log.error("body encryption:" + requestBody.getEncryption());
HttpResponse httpResponse = HttpRequest.post(url)
.header("token", token)
.form(requestBody.toMap())
@@ -316,7 +382,8 @@ public class CTServiceImpl implements CTService {
@Override
public CTResponse<String> updateOrder(String name, String orderNum) throws Exception {
if (checkToken()) {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
requestBody.setInterfaceName("QueryOrder");
Map<String, Object> body = new HashMap<>();
@@ -352,9 +419,48 @@ public class CTServiceImpl implements CTService {
return null;
}
@Override
public CTResponse<String> updateOrderNum(String serialNumber) throws Exception {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
requestBody.setInterfaceName("QueryOrderResult");
Map<String, Object> body = new HashMap<>();
body.put("serialNumber", serialNumber);
log.info("body:" + body);
System.out.println("body = " + body);
requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey);
HttpResponse httpResponse = HttpRequest.post(url)
.header("token", token)
.form(requestBody.toMap())
.execute();
log.error("body:"+httpResponse.body());
System.out.println("httpResponse.body() = " + httpResponse.body());
if (httpResponse.isOk()) {
CTResponse<String> response = JSONUtil.toBean(httpResponse.body(), CTResponse.class);
try {
String data = response.getData();
response.setDecryptData(JSONUtil.parseObj(decrypt(data, publicKey)));
return response;
} catch (Exception e) {
response.setDecryptData(JSONUtil.parseObj(httpResponse.body()).getJSONObject("data"));
return response;
}
}
log.error("response status:"+httpResponse.getStatus());
log.error("request error");
return null;
}
return null;
}
@Override
public CTResponse<String> updateExpress(String orderNum) throws Exception {
if (checkToken()) {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
requestBody.setInterfaceName("QueryOrderResult");
Map<String, Object> body = new HashMap<>();
@@ -391,7 +497,8 @@ public class CTServiceImpl implements CTService {
@Override
public CTResponse<JSONArray> syncOffer(String orderNum, String offerIds, String salesNumber) throws Exception {
if (checkToken()) {
CTRequestBody requestBody = checkToken();
if (ObjectUtil.isNotNull(requestBody)) {
requestBody.setInterfaceName("QueryNumberOffer");
Map<String, Object> body = new HashMap<>();

View File

@@ -63,7 +63,8 @@ public class GoodServiceImpl implements IGoodService {
LambdaQueryWrapper<Good> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getName()), Good::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getContent()), Good::getContent, bo.getContent());
lqw.eq(StringUtils.isNotBlank(bo.getSaleId()), Good::getSaleId, bo.getSaleId());
lqw.like(StringUtils.isNotBlank(bo.getSaleId()), Good::getSaleId, bo.getSaleId());
lqw.like(StringUtils.isNotBlank(bo.getPersonnelId()), Good::getPersonnelId, bo.getPersonnelId());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), Good::getStatus, bo.getStatus());
return lqw;
}

Binary file not shown.

View File

@@ -1,18 +1,34 @@
package com.ruoyi.web.controller.api;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONObject;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.ct.domain.Bill;
import com.ruoyi.ct.domain.vo.AgentOrderVo;
import com.ruoyi.ct.service.CTService;
import com.ruoyi.ct.service.IAgentOrderService;
import com.ruoyi.oss.core.OssClient;
import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.system.domain.bo.SysOssBo;
import com.ruoyi.system.domain.vo.SysOssVo;
import com.ruoyi.system.service.ISysOssService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@SaIgnore
@@ -35,7 +51,7 @@ public class APIController {
public R<String> saveOrder() throws Exception {
CTResponse<String> response = ctService.saveOrder("", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "");
"", "", "", "");
return R.ok(response.getData());
}
@@ -44,4 +60,35 @@ public class APIController {
CTResponse<String> response = ctService.updateOrder(name, orderNum);
return R.ok(response.getDecryptData());
}
@Resource
private final ISysOssService sysOssService;
@Resource
private final IAgentOrderService iAgentOrderService;
@PostMapping("/updateBill")
public void updateBill(SysOssBo sysOssBo, HttpServletResponse response) {
SysOssVo sysOss = sysOssService.getById(sysOssBo.getOssId());
OssClient storage = OssFactory.instance(sysOss.getService());
InputStream inputStream = storage.getObjectContent(sysOss.getUrl());
List<Bill> excelResult = ExcelUtil.importExcel(inputStream, Bill.class);
List<Object> result = new ArrayList<>();
for (Bill bill: excelResult) {
System.out.println("bill = " + bill);
AgentOrderVo orderVo = iAgentOrderService.queryByNumber(bill.getL());
if (ObjectUtil.isNotNull(orderVo)) {
bill.setA0(orderVo.getAgentName());
bill.setA1(orderVo.getTitle());
bill.setA3(orderVo.getSaleId());
bill.setA4(orderVo.getPersonnelId());
}
result.add(bill);
}
ExcelUtil.exportTemplate(CollUtil.newArrayList(new HashMap<>(), result), "xx-"+sysOssBo.getOriginalName(), "bill.xlsx", response);
// System.out.println("data = " + excelResult.getList());
// List<AgentOrderVo> list = iAgentOrderService.queryList(bo);
// ExcelUtil.exportExcel(list, "订单", AgentOrderVo.class, response);
}
}

View File

@@ -30,6 +30,8 @@ public class R<T> implements Serializable {
private String msg;
private String serialNumber;
private T data;
public static <T> R<T> ok() {
@@ -68,6 +70,10 @@ public class R<T> implements Serializable {
return restResult(null, code, msg);
}
public static <T> R<T> fail(int code, String msg, String serialNumber) {
return restResult(null, code, msg, serialNumber);
}
/**
* 返回警告消息
*
@@ -97,6 +103,15 @@ public class R<T> implements Serializable {
return r;
}
private static <T> R<T> restResult(T data, int code, String msg, String serialNumber) {
R<T> r = new R<>();
r.setCode(code);
r.setData(data);
r.setMsg(msg);
r.setSerialNumber(serialNumber);
return r;
}
public static <T> Boolean isError(R<T> ret) {
return !isSuccess(ret);
}

View File

@@ -56,6 +56,49 @@ public class SampleService {
@Resource
private ISysConfigService sysConfigService;
@XxlJob("syncErrorOrder")
public void syncErrorOrder() throws Exception {
XxlJobHelper.log("Start sync Express");
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getStatus, "-2");
lqw.isNull(AgentOrder::getExpressNum);
List<AgentOrderVo> agentOrderVoList = iAgentOrderService.queryListByLQW(lqw);
for (AgentOrderVo vo: agentOrderVoList) {
XxlJobHelper.log("agentOrderVo = " + vo);
CTResponse<String> response = ctService.updateOrderNum(vo.getSerialNumber());
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(vo.getId());
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, -30);
Date validTo = calendar.getTime();
if (ObjectUtils.isNotNull(response) && response.isSuccess()) {
JSONObject data = response.getDecryptData();
XxlJobHelper.log("data = " + data);
if (ObjectUtils.isNotNull(data) && ObjectUtils.isNotNull(data.getStr("orderNo"))) {
agentOrderBo.setStatus("0");
agentOrderBo.setUpdateTime(new Date());
agentOrderBo.setOrderStatus(data.getStr("groupOrderStatus"));
agentOrderBo.setOrderNum(data.getStr("orderNo"));
iAgentOrderService.updateByBo(agentOrderBo);
} else {
if (vo.getCreateTime().compareTo(validTo) < 0){
agentOrderBo.setStatus("-3");
agentOrderBo.setUpdateTime(new Date());
iAgentOrderService.updateByBo(agentOrderBo);
}
}
} else {
if (vo.getCreateTime().compareTo(validTo) < 0){
agentOrderBo.setStatus("-3");
agentOrderBo.setUpdateTime(new Date());
iAgentOrderService.updateByBo(agentOrderBo);
}
}
}
}
@XxlJob("syncOffer")
public void syncOffer() throws Exception {
XxlJobHelper.log("Start sync syncOffer");
@@ -81,6 +124,7 @@ public class SampleService {
AgentOrderBo bo = new AgentOrderBo();
bo.setId(vo.getId());
bo.setIsRecharge(1);
bo.setRechargeTime(new Date());
bo.setUpdateTime(new Date());
if (!data.contains(offerId50)) {
bo.setChargeTitle(sysConfig50.getConfigName());
@@ -153,6 +197,7 @@ public class SampleService {
boolean needStatistic = false;
if (Objects.equals(agentOrderBo.getOrderStatus(), "S1013")) {
agentOrderBo.setStatus("1");
agentOrderBo.setActiveTime(new Date());
needStatistic = true;
} else if (Objects.equals(agentOrderBo.getOrderStatus(), "S1014")) {
agentOrderBo.setStatus("10");

View File

@@ -17,6 +17,27 @@ export function getAgentOrder(id) {
})
}
export function syncOrder(id) {
return request({
url: '/ct/agentOrder/syncOrder/' + id,
method: 'get'
})
}
export function syncExpress(id) {
return request({
url: '/ct/agentOrder/syncExpress/' + id,
method: 'get'
})
}
export function syncOffer(id) {
return request({
url: '/ct/agentOrder/syncOffer/' + id,
method: 'get'
})
}
// 新增订单
export function addAgentOrder(data) {
return request({

View File

@@ -19,7 +19,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 10000
timeout: 600000
})
// request拦截器

View File

@@ -17,7 +17,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -79,8 +79,8 @@
{{props.row.ipList}}
</el-form-item>
<el-form-item label="商品">
<el-tag type="success"
v-for="goods in props.row.agentAccountGoodVoList"
<el-tag type="success"
v-for="goods in props.row.agentAccountGoodVoList"
:key="goods.id"
style="margin-right: 10px"
>{{goods.title}}</el-tag>
@@ -92,7 +92,7 @@
</template>
</el-table-column>
<el-table-column label="代理商名称" fixed align="center" prop="agentName" />
<el-table-column label="电信ID" width="100" align="center" prop="personnelId" />
<el-table-column label="别名" width="100" align="center" prop="personnelId" />
<el-table-column label="APP ID" width="290" align="center" prop="appId" />
<el-table-column label="APP Secret" width="290" align="center" prop="appSecret" />
<el-table-column label="公钥" width="80" align="center" prop="appSecret">
@@ -176,8 +176,8 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电信ID" prop="personnelId">
<el-input v-model="form.personnelId" :readonly="form.id!=null" placeholder="请输入电信ID" />
<el-form-item label="别名" prop="personnelId">
<el-input v-model="form.personnelId" placeholder="请输入别名" />
</el-form-item>
</el-col>
</el-row>
@@ -232,7 +232,7 @@
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>

View File

@@ -2,10 +2,10 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="代理商" prop="agentId">
<el-select v-model="queryParams.agentId" clearable>
<el-select v-model="queryParams.agentAccountId" filterable clearable>
<el-option
v-for="item in agentList" :key="item.id"
:label="item.name"
v-for="item in agentAccountList" :key="item.value"
:label="item.agentName+'('+item.personnelId+')'"
:value="item.id"></el-option>
</el-select>
</el-form-item>
@@ -273,7 +273,6 @@ export default {
this.agentAccountList.forEach(item=>{
if (item.id == val) {
this.form.agentId = item.agentId
this.form.personnelId = item.personnelId
}
})
},
@@ -281,14 +280,15 @@ export default {
this.goodsList.forEach(item=>{
if (item.id == val) {
this.form.saleId = item.saleId
this.form.personnelId = item.personnelId
}
})
},
getAgentName(row) {
let name = ''
this.agentList.forEach(item=>{
if (row.agentId == item.id) {
name = item.name
this.agentAccountList.forEach(item=>{
if (row.agentAccountId == item.id) {
name = item.agentName+'('+item.personnelId+')'
}
})
return name
@@ -416,7 +416,7 @@ export default {
});
},
save() {
if (this.form.id != null) {
updateAgentAccountGood(this.form).then(response => {
this.$modal.msgSuccess("修改成功");

View File

@@ -41,7 +41,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="订单号" prop="serialNumber">
<el-input
v-model="queryParams.serialNumber"
@@ -106,6 +106,30 @@
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item label="办理完成时间">
<el-date-picker
v-model="daterangeActiveTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item label="首冲时间">
<el-date-picker
v-model="daterangeRechargeTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item label="下单类型" prop="isExpress">
<el-select v-model="queryParams.isExpress" placeholder="请选择下单类型" clearable>
<el-option
@@ -116,6 +140,16 @@
/>
</el-select>
</el-form-item>
<el-form-item label="异常订单" prop="hasError">
<el-select v-model="queryParams.hasError" placeholder="异常订单" clearable>
<el-option
v-for="dict in dict.type.has_error"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -123,7 +157,7 @@
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-col :span="1.5">
<el-button
type="primary"
plain
@@ -133,6 +167,7 @@
v-hasPermi="['ct:agentOrder:add']"
>新增</el-button>
</el-col>
<!--
<el-col :span="1.5">
<el-button
type="success"
@@ -165,6 +200,16 @@
v-hasPermi="['ct:agentOrder:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleBill"
v-hasPermi="['ct:agentOrder:add']"
>对账单</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@@ -211,7 +256,7 @@
</el-timeline-item>
</el-timeline>
</el-form-item> -->
</el-form>
</template>
</el-table-column>
@@ -225,13 +270,18 @@
<el-table-column label="商品ID" align="center" prop="saleId" />
<el-table-column label="商品名称" align="center" prop="title" />
<el-table-column label="代理商电信ID" align="center" prop="personnelId" />
<el-table-column label="订单号" align="center" prop="serialNumber" />
<el-table-column label="平台订单状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.platform_order_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="办理完成时间" align="center" prop="activeTime" width="180">
<!-- <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template> -->
</el-table-column>
<el-table-column label="电信订单号" align="center" prop="orderNum" />
<el-table-column label="电信订单状态" align="center" prop="orderStatus">
<template slot-scope="props">
@@ -247,6 +297,11 @@
</template>
</el-table-column>
<el-table-column label="首冲类型" align="center" prop="chargeTitle" />
<el-table-column label="首冲时间" align="center" prop="rechargeTime" width="180">
<!-- <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template> -->
</el-table-column>
<el-table-column label="下单时间" align="center" prop="createTime" width="180">
<!-- <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
@@ -264,24 +319,34 @@
<dict-tag :options="dict.type.order_type" :value="scope.row.isExpress"/>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['ct:agentOrder:edit']"
>修改</el-button>
@click="syncOrder(scope.row)"
v-hasPermi="['ct:agentOrder:query']"
v-if="scope.row.status==0"
>同步订单状态</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['ct:agentOrder:remove']"
>删除</el-button>
icon="el-icon-edit"
@click="syncExpress(scope.row)"
v-hasPermi="['ct:agentOrder:query']"
v-if="scope.row.status==0"
>同步物流</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="syncOffer(scope.row)"
v-hasPermi="['ct:agentOrder:query']"
v-if="scope.row.status==1"
>同步首冲</el-button>
</template>
</el-table-column> -->
</el-table-column>
</el-table>
<pagination
@@ -292,26 +357,26 @@
@pagination="getList"
/>
<el-dialog title="更新对账单" :visible.sync="billOpen" width="800px" append-to-body>
<el-form ref="billForm" :model="billForm" label-width="160px">
<el-form-item label="文件名">
<fileUpload v-model="billForm.file" :fileType="['xlsx']" :fileSize="10" :limit="1"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitBillForm"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改订单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="代理商ID" prop="agentId">
<el-input v-model="form.agentId" placeholder="请输入代理商ID" />
</el-form-item>
<el-form-item label="代理商名称" prop="agentName">
<el-input v-model="form.agentName" placeholder="请输入代理商名称" />
</el-form-item>
<el-form-item label="代理商账号ID" prop="agentAccountId">
<el-input v-model="form.agentAccountId" placeholder="请输入代理商账号ID" />
</el-form-item>
<el-form-item label="商品ID" prop="saleId">
<el-input v-model="form.saleId" placeholder="请输入商品ID" />
</el-form-item>
<el-form-item label="厅店ID默认13" prop="storeId">
<el-input v-model="form.storeId" placeholder="请输入厅店ID默认13" />
</el-form-item>
<el-form-item label="代理商电信ID" prop="personnelId">
<el-input v-model="form.personnelId" placeholder="请输入代理商电信ID" />
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-form-item label="代理商商品" prop="agentAccountGoodId">
<el-select v-model="form.agentAccountGoodId" style="width: 100%;" @change="selectAgentAccountGood">
<el-option
v-for="item in agentGoodList" :key="item.id"
:label="item.label"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="用户姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入用户姓名" />
@@ -334,44 +399,41 @@
<el-form-item label="区" prop="county">
<el-input v-model="form.county" placeholder="请输入区" />
</el-form-item>
<el-form-item label="下单流水号" prop="serialNumber">
<el-input v-model="form.serialNumber" placeholder="请输入下单流水号" />
</el-form-item>
<el-form-item label="入网号码" prop="number">
<el-input v-model="form.number" placeholder="请输入入网号码" />
</el-form-item>
<el-form-item label="物流备注" prop="logiRemark">
<el-input v-model="form.logiRemark" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="业务办理页面url" prop="pageUrl">
<el-input v-model="form.pageUrl" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="宽带安装地址" prop="installAddress">
<el-input v-model="form.installAddress" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="第二发展人工号" prop="ynumber2">
<el-input v-model="form.ynumber2" placeholder="请输入第二发展人工号" />
</el-form-item>
<el-form-item label="上传过的站牌类型,逗号分隔" prop="images">
<el-input v-model="form.images" placeholder="请输入上传过的站牌类型,逗号分隔" />
</el-form-item>
<el-form-item label="电信订单号" prop="orderNum">
<el-input v-model="form.orderNum" placeholder="请输入电信订单号" />
</el-form-item>
<el-form-item label="快递单号" prop="expressNum">
<el-input v-model="form.expressNum" placeholder="请输入快递单号" />
<el-form-item label="平台订单状态" prop="status">
<el-select v-model="form.status" placeholder="请选择平台订单状态">
<el-option
v-for="dict in dict.type.platform_order_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="物流信息" prop="expressRoutes">
<el-input v-model="form.expressRoutes" type="textarea" placeholder="请输入内容" />
<el-form-item label="是否异常订单" prop="hasError">
<el-radio-group v-model="form.hasError">
<el-radio
v-for="dict in dict.type.has_error"
:key="dict.value"
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="物流状态码" prop="statusCd">
<el-input v-model="form.statusCd" placeholder="请输入物流状态码" />
</el-form-item>
<el-form-item label="订单路由信息" prop="routeArr">
<el-input v-model="form.routeArr" type="textarea" placeholder="请输入内容" />
<el-form-item label="下单时间" prop="createTime">
<el-date-picker clearable
v-model="form.createTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -383,12 +445,14 @@
</template>
<script>
import { listAgentOrder, getAgentOrder, delAgentOrder, addAgentOrder, updateAgentOrder } from "@/api/ct/agentOrder";
import { listAgentOrder, getAgentOrder, delAgentOrder, addAgentOrder, updateAgentOrder, syncOrder, syncOffer, syncExpress } from "@/api/ct/agentOrder";
import { listAgent } from "@/api/ct/agent";
import { listGood } from "@/api/ct/good";
import { listAgentAccountGood } from "@/api/ct/agentAccountGood";
import { listByIds } from "@/api/system/oss";
export default {
name: "AgentOrder",
dicts: ['platform_order_status', 'is_recharge', 'order_type'],
dicts: ['platform_order_status', 'is_recharge', 'order_type', 'has_error'],
data() {
return {
// 按钮loading
@@ -411,6 +475,7 @@ export default {
title: "",
// 是否显示弹出层
open: false,
billOpen: false,
// 查询参数
queryParams: {
pageNum: 1,
@@ -428,47 +493,21 @@ export default {
province: undefined,
city: undefined,
county: undefined,
serialNumber: undefined,
number: undefined,
logiRemark: undefined,
pageUrl: undefined,
installAddress: undefined,
ynumber2: undefined,
images: undefined,
orderNum: undefined,
orderStatus: undefined,
status: undefined,
expressNum: undefined,
expressRoutes: undefined,
statusCd: undefined,
routeArr: undefined,
isExpress: undefined
hasError: undefined
},
// 表单参数
form: {},
billForm: {},
// 表单校验
rules: {
id: [
{ required: true, message: "不能为空", trigger: "blur" }
],
agentId: [
{ required: true, message: "代理商ID不能为空", trigger: "blur" }
],
agentName: [
{ required: true, message: "代理商名称不能为空", trigger: "blur" }
],
agentAccountId: [
{ required: true, message: "代理商账号ID不能为空", trigger: "blur" }
],
saleId: [
{ required: true, message: "商品ID不能为空", trigger: "blur" }
],
storeId: [
{ required: true, message: "厅店ID默认13不能为空", trigger: "blur" }
],
personnelId: [
{ required: true, message: "代理商电信ID不能为空", trigger: "blur" }
agentAccountGoodId: [
{ required: true, message: "代理商商品不能为空", trigger: "blur" }
],
name: [
{ required: true, message: "用户姓名不能为空", trigger: "blur" }
],
@@ -490,30 +529,9 @@ export default {
county: [
{ required: true, message: "区不能为空", trigger: "blur" }
],
serialNumber: [
{ required: true, message: "下单流水号不能为空", trigger: "blur" }
],
number: [
{ required: true, message: "入网号码不能为空", trigger: "blur" }
],
logiRemark: [
{ required: true, message: "物流备注不能为空", trigger: "blur" }
],
pageUrl: [
{ required: true, message: "业务办理页面url不能为空", trigger: "blur" }
],
remark: [
{ required: true, message: "备注不能为空", trigger: "blur" }
],
installAddress: [
{ required: true, message: "宽带安装地址不能为空", trigger: "blur" }
],
ynumber2: [
{ required: true, message: "第二发展人工号不能为空", trigger: "blur" }
],
images: [
{ required: true, message: "上传过的站牌类型,逗号分隔不能为空", trigger: "blur" }
],
orderNum: [
{ required: true, message: "电信订单号不能为空", trigger: "blur" }
],
@@ -523,32 +541,52 @@ export default {
status: [
{ required: true, message: "平台订单状态不能为空", trigger: "change" }
],
expressNum: [
{ required: true, message: "快递单号不能为空", trigger: "blur" }
],
expressRoutes: [
{ required: true, message: "物流信息不能为空", trigger: "blur" }
],
statusCd: [
{ required: true, message: "物流状态码不能为空", trigger: "blur" }
],
routeArr: [
{ required: true, message: "订单路由信息不能为空", trigger: "blur" }
hasError: [
{ required: true, message: "是否异常订单不能为空", trigger: "change" }
],
},
routeStatus: {"S101405": "超时取消", "S100402": "无纸化归档中", "S102407": "实名待审核", "S101403": "用户取消", "S100529": "客户信息创建失败", "S1030": "已发货", "S100521": "客户信息创建成功", "S100508": "订单待认领", "S100524": "重新推送下单", "S101404": "系统取消", "S101702": "预审失败需重传", "S102401": "待实名", "S1027": "订单受理失败", "S104013": "甩单退单", "S104012": "甩单办结", "S104015": "二次甩单", "S101303": "无需处理", "S100522": "补录激活", "S102405": "审核失败取消", "S101401": "受理人员取消", "HTSG001": "正在派送途中", "S101715": "预审失败", "S104016": "已甩单", "HTSG002": "您的订单已经打包完毕,准备出库", "S102408": "活体上传成功", "S102406": "审核成功", "S101704": "订单信息待审核", "S102404": "审核失败需重传", "HTSG004": "用户签收", "HTSG003": "物料打包中", "S101302": "维持原套餐", "S100506": "受理中", "S101714": "预审通过", "S100523": "补录失败需重试", "S104014": "甩单异常办结", "S1024": "实名证件审核", "S1017": "订单信息预审", "S1014": "已取消", "S100519": "异常已干预", "T100078": "订单状态(主)", "S1000": "已提交", "S100000": "用户已取消", "S1001": "待支付", "S1002": "已支付", "S1004": "无纸化归档", "S100401": "无纸化归档成功", "S100400": "无纸化归档失败", "S1005": "订单受理中", "S100500": "订单已认领", "S100501": "下单中", "S1006": "订单受理完成", "S1007": "已派配", "S1008": "配送中", "S1009": "已签收", "S1013": "已完成", "S101301": "已完成", "S1050": "客户信息创建", "S1040": "甩单受理中", "S105001": "客户信息创建成功", "S105002": "新建客户创建失败", "S105003": "分账序号创建成功", "S105004": "分账序号创建失败", "S105005": "新建地址创建成功", "S105006": "新建地址创建失败", "S100530": "订单异常", "S100531": "等待CRM报竣", "S1010": "拒收", "S100403": "无纸化推送失败", "S100404": "无纸化推送成功", "S100532": "物流受理中", "S100533": "已报障", "S100534": "受理失败需报障", "S101602": "退款完成", "S101601": "退款待审核", "S100535": "物流单创建成功", "S100601": "订单受理完成"},
expressStatus: {"100005": "新建", "100015": "待提交", "100021": "推送中", "100014": "已提交", "100010": "已接单", "100004": "已打包", "100002": "已发货", "100029": "派送准备", "100030": "已派送", "100026": "已签收"},
daterangeCreateTime: [],
daterangeActiveTime: [],
daterangeRechargeTime: [],
agentList: [],
goodsList: [],
agentGoodList: []
};
},
created() {
this.getAgentList();
this.getGoodsList();
this.getAgentAccountGood();
this.getList();
},
methods: {
getAgentAccountGood() {
this.loading = true;
listAgentAccountGood({pageNum: 1, pageSize: 10000000, status: 1}).then(res=>{
let data = []
res.rows.forEach(item=>{
this.agentList.forEach(a=>{
if(a.id == item.agentId) {
item.agentName = a.name
}
})
this.goodsList.forEach(a=>{
if(a.id == item.goodId) {
item.goodName = a.name
item.goodContent = a.content
}
})
item.label = item.agentName+'-'+item.goodName+'('+item.saleId+')'
console.log(item)
data.push(item)
})
this.agentGoodList = data
this.loading = false;
})
},
getAgentList() {
this.loading = true;
listAgent({pageNum: 1, pageSize: 10000000, status: 1}).then(res=>{
@@ -568,6 +606,21 @@ export default {
this.goodsList = res.rows
})
},
selectAgentAccountGood(val) {
let item = null;
this.agentGoodList.forEach(r=>{
if (r.id == val) {
item = r
}
})
this.form.agentId = item.agentId
this.form.agentName = item.agentName
this.form.agentAccountId = item.agentAccountId
this.form.saleId = item.saleId
this.form.title = item.goodName
this.form.content = item.goodContent
this.form.storeId = '13'
},
/** 查询订单列表 */
getList() {
this.loading = true;
@@ -576,13 +629,21 @@ export default {
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
}
if (null != this.daterangeActiveTime && '' != this.daterangeActiveTime) {
this.queryParams.params["beginActiveTime"] = this.daterangeActiveTime[0];
this.queryParams.params["endActiveTime"] = this.daterangeActiveTime[1];
}
if (null != this.daterangeRechargeTime && '' != this.daterangeRechargeTime) {
this.queryParams.params["beginRechargeTime"] = this.daterangeRechargeTime[0];
this.queryParams.params["endRechargeTime"] = this.daterangeRechargeTime[1];
}
listAgentOrder(this.queryParams).then(response => {
response.rows.forEach(item=>{
item.routeArrs = item.routeArr != undefined && item.routeArr != null ? JSON.parse(item.routeArr) : []
console.log(item);
})
this.agentOrderList = response.rows;
this.total = response.total;
this.loading = false;
});
@@ -596,10 +657,13 @@ export default {
reset() {
this.form = {
id: undefined,
agentAccountGoodId: undefined,
agentId: undefined,
agentName: undefined,
agentAccountId: undefined,
saleId: undefined,
title: undefined,
content: undefined,
storeId: undefined,
personnelId: undefined,
name: undefined,
@@ -619,11 +683,24 @@ export default {
images: undefined,
orderNum: undefined,
orderStatus: undefined,
status: undefined,
activeTime: undefined,
status: '-2',
expressNum: undefined,
expressVendor: undefined,
expressRoutes: undefined,
statusCd: undefined,
routeArr: undefined,
isRecharge: undefined,
chargeTitle: undefined,
hasError: 1,
rechargeTime: undefined,
orderType: undefined,
apiVersion: undefined,
isExpress: undefined,
idCardFront: undefined,
idCardBack: undefined,
frontFace: undefined,
uploadMsgId: undefined,
delFlag: undefined,
createBy: undefined,
createTime: undefined,
@@ -637,6 +714,27 @@ export default {
this.queryParams.pageNum = 1;
this.getList();
},
syncOrder(row) {
syncOrder(row.id).then(res=>{
console.log("同步结果")
console.log(res)
})
this.getList()
},
syncOffer(row) {
syncOffer(row.id).then(res=>{
console.log("同步结果")
console.log(res)
})
this.getList()
},
syncExpress(row) {
syncExpress(row.id).then(res=>{
console.log("同步结果")
console.log(res)
})
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
@@ -648,6 +746,10 @@ export default {
this.single = selection.length!==1
this.multiple = !selection.length
},
handleBill() {
this.billForm = {}
this.billOpen = true
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
@@ -711,6 +813,25 @@ export default {
this.download('/ct/agentOrder/export', {
...this.queryParams
}, `agentOrder_${new Date().getTime()}.xlsx`)
},
submitBillForm() {
console.log(this.billForm)
if (this.billForm.file == undefined) {
this.$message.error('请选择文件');
return
}
let file = {}
listByIds(this.billForm.file).then(res => {
console.log(res)
file = res.data[0]
let now = new Date();
now = now.toISOString().substring(0, 19).replace("T", " ")
this.download("/ct/agentOrder/updateBill", {
ossId: file.ossId,
originalName: file.originalName
}, `${now}-${file.originalName}`)
});
}
}
};

View File

@@ -17,6 +17,14 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="电信ID" prop="personnelId">
<el-input
v-model="queryParams.personnelId"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option
@@ -84,6 +92,7 @@
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="商品描述" align="center" prop="content" />
<el-table-column label="SaleID" align="center" prop="saleId" />
<el-table-column label="电信ID" width="100" align="center" prop="personnelId" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.good_status" :value="scope.row.status"/>
@@ -141,6 +150,9 @@
<el-form-item label="saleId" prop="saleId">
<el-input v-model="form.saleId" placeholder="请输入" />
</el-form-item>
<el-form-item label="电信ID" prop="personnelId">
<el-input v-model="form.personnelId" placeholder="请输入电信ID" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
@@ -198,6 +210,7 @@ export default {
content: undefined,
saleId: undefined,
status: undefined,
personnelId: undefined
},
// 表单参数
form: {},
@@ -209,6 +222,9 @@ export default {
saleId: [
{ required: true, message: "saleId不能为空", trigger: "blur" }
],
personnelId: [
{ required: true, message: "电信ID不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态不能为空", trigger: "blur" }
]

View File

@@ -35,7 +35,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8180`,
target: `http://127.0.0.1:8180/`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''