订单短信发送1

This commit is contained in:
syruan 2025-02-25 17:10:55 +08:00
parent 50b984ba3b
commit 7cd842073e
4 changed files with 88 additions and 16 deletions

View File

@ -273,7 +273,9 @@ public class OrderController extends BaseController {
String text = run.getText(0); String text = run.getText(0);
if (text != null) { if (text != null) {
for (Map.Entry<String, String> entry : replacements.entrySet()) { for (Map.Entry<String, String> entry : replacements.entrySet()) {
text = text.replace(entry.getKey(), entry.getValue()); String entryValue = entry.getValue();
if (entryValue == null) {continue;}
text = text.replace(entry.getKey(), entryValue);
} }
run.setText(text, 0); run.setText(text, 0);
} }
@ -491,22 +493,30 @@ public class OrderController extends BaseController {
} }
private static void fillOrderTable(XWPFDocument document, List<OrderDetailDto> orderDetails, String cost) { private static void fillOrderTable(XWPFDocument document, List<OrderDetailDto> orderDetails, String cost) {
XWPFTable table = null;
int headerRowIndex = 0; // 表头行索引
int footerRowIndex = 0; // 合计行索引
int cellCount = 0;
try {
// 获取第一个表格假设模板中只有一个表格 // 获取第一个表格假设模板中只有一个表格
XWPFTable table = document.getTables().get(1); table = document.getTables().get(1);
// 保留第一行表头和最后一行合计行仅在中间插入数据行 // 保留第一行表头和最后一行合计行仅在中间插入数据行
int headerRowIndex = 0; // 表头行索引 headerRowIndex = 0;
int footerRowIndex = table.getRows().size(); // 合计行索引 footerRowIndex = table.getRows().size();
// 删除中间的所有行如果有的话 // 删除中间的所有行如果有的话
for (int i = table.getRows().size() - 2; i > headerRowIndex; i--) { for (int i = table.getRows().size() - 2; i > headerRowIndex; i--) {
table.removeRow(i); table.removeRow(i);
} }
// 获取表头行的单元格数量 // 获取表头行的单元格数量
int cellCount = table.getRow(headerRowIndex).getTableCells().size(); cellCount = table.getRow(headerRowIndex).getTableCells().size();
// 遍历订单详情并动态插入数据行 // 遍历订单详情并动态插入数据行
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} catch (IndexOutOfBoundsException e) {
throw new RuntimeException("模板表处理异常,请检查合同信息");
}
int num = orderDetails.size(); int num = orderDetails.size();
for (OrderDetailDto detail : orderDetails) { for (OrderDetailDto detail : orderDetails) {
XWPFTableRow newRow = table.insertNewTableRow(headerRowIndex + 1); XWPFTableRow newRow = table.insertNewTableRow(headerRowIndex + 1);

View File

@ -165,12 +165,18 @@ public class OrderDetailDto {
@ApiModelProperty(value = "买方承租方公司名称") @ApiModelProperty(value = "买方承租方公司名称")
private String buyerCompanyName; private String buyerCompanyName;
@ApiModelProperty(value = "买方承租方电话")
private String buyerPhoneNumber;
@ApiModelProperty(value = "卖方出租方公司id") @ApiModelProperty(value = "卖方出租方公司id")
private Integer sellerCompany; private Integer sellerCompany;
@ApiModelProperty(value = "卖方出租方公司名称") @ApiModelProperty(value = "卖方出租方公司名称")
private String sellerCompanyName; private String sellerCompanyName;
@ApiModelProperty(value = "卖方出租方电话")
private String sellerPhoneNumber;
@ApiModelProperty(value = "单位") @ApiModelProperty(value = "单位")
private String unitName; private String unitName;

View File

@ -43,6 +43,7 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* @Authorliang.chao * @Authorliang.chao
@ -320,7 +321,7 @@ public class OrderServiceImpl implements OrderService {
} }
// 退租 // 退租
if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_UNDER_LEASE.getStatus().toString())) { if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_UNDER_LEASE.getStatus().toString())) {
if (dtos.size() > 0 && CollectionUtil.isNotEmpty(dtos)) { if (!dtos.isEmpty() && CollectionUtil.isNotEmpty(dtos)) {
if (CollectionUtil.isNotEmpty(orderInfoDto.getMaIds())) { if (CollectionUtil.isNotEmpty(orderInfoDto.getMaIds())) {
for (OrderDetailDto dto : dtos) { for (OrderDetailDto dto : dtos) {
if (orderInfoDto.getMaIds().contains(dto.getMaId())) { if (orderInfoDto.getMaIds().contains(dto.getMaId())) {
@ -334,6 +335,13 @@ public class OrderServiceImpl implements OrderService {
orderMapper.updateDeviceStatus(dto); orderMapper.updateDeviceStatus(dto);
} }
} }
String sendMessage = sendMsgToSms(Arrays.asList(dtos.get(0).getBuyerPhoneNumber(), dtos.get(0).getSellerPhoneNumber()), orderInfoDto.getOrderCode() + "订单,退租成功");
if (StringUtils.isBlank(sendMessage)) {
System.err.println("短信发送失败");
} else {
System.out.println("短信发送消息:" + sendMessage);
}
} }
} }
// 取消 // 取消
@ -344,10 +352,11 @@ public class OrderServiceImpl implements OrderService {
orderMapper.updateDeviceStatus(dto); orderMapper.updateDeviceStatus(dto);
} }
} }
sendMsgToSms(Arrays.asList(dtos.get(0).getBuyerPhoneNumber(), dtos.get(0).getSellerPhoneNumber()), orderInfoDto.getOrderCode() + "订单已被取消");
} }
// 订单完成修改装备为下架状态 // 订单完成修改装备为下架状态
if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_FINISHED.getStatus().toString())) { if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_FINISHED.getStatus().toString())) {
if (dtos.size() > 0 && CollectionUtil.isNotEmpty(dtos)) { if (!dtos.isEmpty() && CollectionUtil.isNotEmpty(dtos)) {
if (CollectionUtil.isNotEmpty(orderInfoDto.getMaIds())) { if (CollectionUtil.isNotEmpty(orderInfoDto.getMaIds())) {
for (OrderDetailDto dto : dtos) { for (OrderDetailDto dto : dtos) {
if (orderInfoDto.getMaIds().contains(dto.getMaId())) { if (orderInfoDto.getMaIds().contains(dto.getMaId())) {
@ -361,6 +370,7 @@ public class OrderServiceImpl implements OrderService {
orderMapper.updateDeviceStatus(dto); orderMapper.updateDeviceStatus(dto);
} }
} }
sendMsgToSms(Arrays.asList(dtos.get(0).getBuyerPhoneNumber(), dtos.get(0).getSellerPhoneNumber()), orderInfoDto.getOrderCode() + "订单已完成。");
} }
} }
String userName = SecurityUtils.getLoginUser().getUsername(); String userName = SecurityUtils.getLoginUser().getUsername();
@ -375,11 +385,14 @@ public class OrderServiceImpl implements OrderService {
if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_PENDING_SHIPMENT.getStatus().toString()) || if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_PENDING_SHIPMENT.getStatus().toString()) ||
orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_TERMINATED.getStatus().toString())) { orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_TERMINATED.getStatus().toString())) {
tmTask.setNoticeCompanyId(tmTask.getBuyerCompanyId()); tmTask.setNoticeCompanyId(tmTask.getBuyerCompanyId());
sendMsgToSms(Collections.singletonList(dtos.get(0).getBuyerPhoneNumber()), dtos.get(0).getOrderCode() + "订单已出库,请注意查收。");
} else if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_RECEIVE.getStatus().toString()) || } else if (orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_RECEIVE.getStatus().toString()) ||
orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_AWAITING_RECEIPT.getStatus().toString()) || orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_AWAITING_RECEIPT.getStatus().toString()) ||
orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_UNDER_LEASE.getStatus().toString()) || orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_UNDER_LEASE.getStatus().toString()) ||
orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_REPAIRED.getStatus().toString())) { orderInfoDto.getOrderStatus().equals(OrderStatusEnum.ORDER_REPAIRED.getStatus().toString())) {
tmTask.setNoticeCompanyId(tmTask.getSellerCompanyId()); tmTask.setNoticeCompanyId(tmTask.getSellerCompanyId());
sendMsgToSms(Collections.singletonList(dtos.get(0).getBuyerPhoneNumber()), dtos.get(0).getOrderCode() + "订单已接单,待出库。");
} }
tmTaskMapper.updateTaskStatus(tmTask); tmTaskMapper.updateTaskStatus(tmTask);
} }
@ -424,6 +437,46 @@ public class OrderServiceImpl implements OrderService {
return i; return i;
} }
/**
* 发送消息到短信
*
* @param phoneNumbers 电话号码列表可能包含无效或重复的号码
* @param msg 要发送的短信消息内容
* @return 发送短信的结果具体形式依赖于SmsUtils.smsToken的实现
* 此方法首先检查电话号码列表是否为空如果为空则直接返回空字符串接下来它会移除列表中所有为空的电话号码
* 然后对列表中超过11位的电话号码进行解密处理
* 确保只有有效的电话号码被用来发送短信
*/
private String sendMsgToSms(List<String> phoneNumbers, String msg) {
// 检查电话号码列表是否为空
if (CollectionUtils.isEmpty(phoneNumbers)) {
return "";
}
// 先用迭代器
Iterator<String> iterator = phoneNumbers.iterator();
while (iterator.hasNext()) {
String phoneNumber = iterator.next();
if (StringUtils.isEmpty(phoneNumber)) {
iterator.remove();
}
}
// 遍历电话号码列表
for (String phoneNumber : phoneNumbers) {
if (StringUtils.isEmpty(phoneNumber)) {
continue;
}
// 对超过11位的电话号码进行解密处理
if (phoneNumber.length() > 11) {
Sm4Utils.decrypt(phoneNumber);
}
}
// 使用处理后的电话号码列表发送短信
return SmsUtils.smsToken(String.join(",", phoneNumbers), msg, "");
}
/** /**
* 生成六位随机数取件码 * 生成六位随机数取件码
* @return * @return

View File

@ -314,6 +314,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="getOrderDetailsByOrderId" resultType="com.bonus.material.order.domain.OrderDetailDto"> <select id="getOrderDetailsByOrderId" resultType="com.bonus.material.order.domain.OrderDetailDto">
SELECT SELECT
su1.phonenumber as buyerPhoneNumber,
mdi.person_phone as sellerPhoneNumber,
hh.id, hh.id,
hh.ma_id, hh.ma_id,
hh.num, hh.num,
@ -338,6 +340,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN ma_type mt ON mdi.type_id = mt.type_id LEFT JOIN ma_type mt ON mdi.type_id = mt.type_id
LEFT JOIN sys_dept bdept on bdept.dept_id = moi.buyer_company LEFT JOIN sys_dept bdept on bdept.dept_id = moi.buyer_company
LEFT JOIN sys_dept sdept on sdept.dept_id = mdi.own_co LEFT JOIN sys_dept sdept on sdept.dept_id = mdi.own_co
LEFT JOIN sys_user su1 ON moi.buyer_id = su1.user_id AND su1.del_flag != 2
WHERE WHERE
mt.del_flag = 0 and hh.order_id = #{orderId} mt.del_flag = 0 and hh.order_id = #{orderId}
</select> </select>