|
|
@@ -23,10 +23,16 @@ import com.fs.company.mapper.CompanyUserMapper;
|
|
|
import com.fs.company.service.ICompanyUserService;
|
|
|
import com.fs.company.util.WechatApi;
|
|
|
import com.fs.core.utils.OrderCodeUtils;
|
|
|
+import com.fs.erp.domain.ErpOrder;
|
|
|
+import com.fs.erp.domain.ErpOrderPayment;
|
|
|
+import com.fs.erp.dto.ErpOrderResponse;
|
|
|
+import com.fs.erp.service.IErpOrderService;
|
|
|
import com.fs.event.TemplateBean;
|
|
|
import com.fs.event.TemplateEvent;
|
|
|
import com.fs.event.TemplateListenEnum;
|
|
|
+import com.fs.his.config.FsSysConfig;
|
|
|
import com.fs.his.domain.*;
|
|
|
+import com.fs.his.dto.ErpRemarkDTO;
|
|
|
import com.fs.his.enums.BusinessTypeEnum;
|
|
|
import com.fs.his.enums.FsInquiryOrderStatusEnum;
|
|
|
import com.fs.his.enums.FsUserIntegralLogTypeEnum;
|
|
|
@@ -34,6 +40,7 @@ import com.fs.his.enums.PaymentMethodEnum;
|
|
|
import com.fs.his.mapper.*;
|
|
|
import com.fs.his.param.*;
|
|
|
import com.fs.his.service.*;
|
|
|
+import com.fs.his.utils.ConfigUtil;
|
|
|
import com.fs.his.utils.PhoneUtil;
|
|
|
import com.fs.his.vo.FsIntegralOrderListUVO;
|
|
|
import com.fs.his.vo.FsIntegralOrderListVO;
|
|
|
@@ -55,18 +62,25 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.context.ApplicationEventPublisher;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
|
|
|
+import javax.annotation.PostConstruct;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.sql.Timestamp;
|
|
|
+import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
+import static com.fs.his.utils.PhoneUtil.decryptPhone;
|
|
|
+
|
|
|
/**
|
|
|
* 积分商品订单Service业务层处理
|
|
|
*
|
|
|
@@ -123,6 +137,55 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
|
|
|
@Autowired
|
|
|
private ApplicationEventPublisher publisher;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ConfigUtil configUtil;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsExpressService expressService;
|
|
|
+
|
|
|
+ @Value("${jst.shop_code:''}")
|
|
|
+ private String shopCode;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IErpOrderService jstErpOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("erpOrderServiceImpl")
|
|
|
+ private IErpOrderService gyOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("wdtErpOrderServiceImpl")
|
|
|
+ private IErpOrderService wdtOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("hzOMSErpOrderServiceImpl")
|
|
|
+ private IErpOrderService hzOMSOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("dfOrderServiceImpl")
|
|
|
+ private IErpOrderService dfOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("JSTErpOrderServiceImpl")
|
|
|
+ private IErpOrderService jSTOrderService;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("k9OrderScrmServiceImpl")
|
|
|
+ private IErpOrderService k9OrderService;
|
|
|
+
|
|
|
+ //ERP 类型到服务的映射
|
|
|
+ private Map<Integer, IErpOrderService> erpServiceMap;
|
|
|
+
|
|
|
+ @PostConstruct
|
|
|
+ public void initErpServiceMap() {
|
|
|
+ erpServiceMap = new HashMap<>();
|
|
|
+ erpServiceMap.put(1, gyOrderService); // 管易
|
|
|
+ erpServiceMap.put(2, wdtOrderService); // 旺店通
|
|
|
+ erpServiceMap.put(3, hzOMSOrderService); // 瀚智OMS
|
|
|
+ erpServiceMap.put(4, dfOrderService); // 代服
|
|
|
+ erpServiceMap.put(5, jSTOrderService); // 聚水潭
|
|
|
+ erpServiceMap.put(6, k9OrderService); // K9
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询积分商品订单
|
|
|
*
|
|
|
@@ -548,6 +611,7 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
|
|
|
}
|
|
|
|
|
|
PayOrderParam payOrderParam = buildPayOrderParam(paymentMethod, order);
|
|
|
+ payOrderParam.setAppId(param.getAppId());
|
|
|
return storePaymentService.processPayment(payOrderParam);
|
|
|
}
|
|
|
|
|
|
@@ -827,6 +891,192 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
|
|
|
return fsIntegralOrderMapper.finishOrder(fsIntegralOrder.getOrderId(), fsIntegralOrder.getStatus());
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void createOmsIntegralOrder(List<Long> orderIds) throws ParseException, InterruptedException {
|
|
|
+ List<ErpOrder> erpOrders = new ArrayList<>();
|
|
|
+
|
|
|
+ // 1. 检查 ERP 是否开启
|
|
|
+ FsSysConfig sysConfig = configUtil.getSysConfig();
|
|
|
+ Integer erpOpen = sysConfig.getErpOpen();
|
|
|
+ if (erpOpen == null || erpOpen == 0) {
|
|
|
+ log.info("ERP未开启,跳过同步");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Integer erpType = sysConfig.getErpType();
|
|
|
+ if (erpType == null || !erpServiceMap.containsKey(erpType)) {
|
|
|
+ log.info("ERP类型配置无效: {}", erpType);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (Long orderId : orderIds) {
|
|
|
+ FsIntegralOrder fsIntegralOrder = fsIntegralOrderMapper.selectFsIntegralOrderByOrderId(orderId);
|
|
|
+ if (fsIntegralOrder != null && StringUtils.isEmpty(fsIntegralOrder.getExtendOrderId()) && fsIntegralOrder.getStatus() != 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (fsIntegralOrder == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ErpOrder erpOrder = new ErpOrder();
|
|
|
+ erpOrder.setVip_code(fsIntegralOrder.getUserId().toString());
|
|
|
+ erpOrder.setPlatform_code(fsIntegralOrder.getOrderCode());
|
|
|
+// if(order.getStoreHouseCode()==null){
|
|
|
+// erpOrder.setWarehouse_code("CQDS001");
|
|
|
+// }else{
|
|
|
+// erpOrder.setWarehouse_code(order.getStoreHouseCode());
|
|
|
+// }
|
|
|
+ erpOrder.setShop_code(sysConfig.getErpShopCode());
|
|
|
+ erpOrder.setSeller_memo(fsIntegralOrder.getRemark());
|
|
|
+ List<ErpOrderPayment> payments = new ArrayList<>();
|
|
|
+ ErpOrderPayment payment = new ErpOrderPayment();
|
|
|
+ payment.setPay_type_code("weixin");
|
|
|
+ payment.setPayment(0.00);
|
|
|
+ erpOrder.setBuyer_account(fsIntegralOrder.getUserName());
|
|
|
+ erpOrder.setRemark(fsIntegralOrder.getRemark());
|
|
|
+ if (fsIntegralOrder.getCreateTime() != null) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String timeString = sdf.format(fsIntegralOrder.getCreateTime());
|
|
|
+ Date date = sdf.parse(timeString); // 时间格式转为时间戳
|
|
|
+ long timeLong = date.getTime();
|
|
|
+ payment.setPaytime(new Timestamp(timeLong));
|
|
|
+ }
|
|
|
+ payments.add(payment);
|
|
|
+
|
|
|
+ FsExpress express = expressService.selectFsExpressByOmsCode("YUNDA");
|
|
|
+ erpOrder.setExpress_code(express.getOmsCode());
|
|
|
+ fsIntegralOrder.setDeliveryName(express.getName());
|
|
|
+ fsIntegralOrder.setDeliveryCode(express.getCode());
|
|
|
+ erpOrder.setPayments(payments);
|
|
|
+
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(0);
|
|
|
+ ErpRemarkDTO remarkDTO = new ErpRemarkDTO();
|
|
|
+ remarkDTO.setTotalPrice(bigDecimal);
|
|
|
+ remarkDTO.setPayPrice(bigDecimal);
|
|
|
+ remarkDTO.setDeliveryMoney(bigDecimal);
|
|
|
+ remarkDTO.setPayMoney(bigDecimal);
|
|
|
+ remarkDTO.setCouponMoney(bigDecimal);
|
|
|
+ remarkDTO.setOrderId(fsIntegralOrder.getOrderCode());
|
|
|
+ remarkDTO.setYdMoney(bigDecimal);
|
|
|
+ if (fsIntegralOrder.getCreateTime() != null) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String format = sdf.format(fsIntegralOrder.getCreateTime());
|
|
|
+ remarkDTO.setPayTime(format);
|
|
|
+ }
|
|
|
+ erpOrder.setSeller_memo(erpOrder.getSeller_memo() + JSONUtil.toJsonStr(remarkDTO));
|
|
|
+ erpOrder.setRemark(erpOrder.getRemark() + JSONUtil.toJsonStr(remarkDTO));
|
|
|
+ erpOrder.setOrder_type_code("order");
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ erpOrder.setDeal_datetime(sdf.format(new Date()));
|
|
|
+ erpOrder.setReceiver_name(fsIntegralOrder.getUserName().replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9]", ""));
|
|
|
+ if (fsIntegralOrder.getUserPhone().length() > 11) {
|
|
|
+ String phone = decryptPhone(fsIntegralOrder.getUserPhone());
|
|
|
+ erpOrder.setReceiver_mobile(phone);
|
|
|
+ } else {
|
|
|
+ erpOrder.setReceiver_mobile(fsIntegralOrder.getUserPhone());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(fsIntegralOrder.getUserAddress())){
|
|
|
+ erpOrder.setReceiver_address(fsIntegralOrder.getUserAddress());
|
|
|
+ }
|
|
|
+// String[] address = fsIntegralOrder.getUserAddress().split(" ");
|
|
|
+// if (address.length < 3) {
|
|
|
+// String kdnAddress = fsUserAddressService.getKdnAddress(fsIntegralOrder.getUserAddress());
|
|
|
+// Map<String, Object> addDAta = (Map<String, Object>) JSON.parse(kdnAddress);
|
|
|
+// Map<String, String> add = (Map<String, String>) addDAta.get("Data");
|
|
|
+// erpOrder.setReceiver_province(add.get("ProvinceName"));
|
|
|
+// erpOrder.setReceiver_city(add.get("CityName"));
|
|
|
+// erpOrder.setReceiver_district(add.get("ExpAreaName"));
|
|
|
+// erpOrder.setReceiver_address(add.get("StreetName") + add.get("Address"));
|
|
|
+// } else {
|
|
|
+// erpOrder.setReceiver_province(address[0]);
|
|
|
+// erpOrder.setReceiver_city(address[1]);
|
|
|
+// erpOrder.setReceiver_district(address[2]);
|
|
|
+// //处理地址多空隔问题
|
|
|
+// if (address.length > 3) {
|
|
|
+// StringBuffer addrs = new StringBuffer();
|
|
|
+// for (int i = 3; i < address.length; i++) {
|
|
|
+// addrs.append(address[i]);
|
|
|
+// }
|
|
|
+// erpOrder.setReceiver_address(addrs.toString());
|
|
|
+// } else if (address.length == 3) {
|
|
|
+// erpOrder.setReceiver_address(address[2]);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// erpOrder.setReceiver_address(erpOrder.getReceiver_address().replace("+", "加"));
|
|
|
+// erpOrder.setReceiver_address(erpOrder.getReceiver_address().replace("\n", ""));
|
|
|
+
|
|
|
+ // 处方图片生成
|
|
|
+// String s = fsPrescribeService.PrescribeImg(order.getPrescribeId());
|
|
|
+// erpOrder.setSeller_memo(erpOrder.getSeller_memo() + "||" + s + "||");
|
|
|
+// erpOrder.setRemark(erpOrder.getRemark() + "||" + s + "||");
|
|
|
+ erpOrder.setShop_code(shopCode);
|
|
|
+ erpOrders.add(erpOrder);
|
|
|
+ fsIntegralOrderMapper.updateFsIntegralOrder(fsIntegralOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ ErpOrderResponse response = new ErpOrderResponse();
|
|
|
+ //推送聚水潭
|
|
|
+ IErpOrderService erpService = erpServiceMap.get(erpType);
|
|
|
+ response = erpService.batchAddIntegralCartOrder(erpOrders);
|
|
|
+ //写入日志
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deliveryIntegralOrderOrder(String orderCode, String deliveryId, String deliverCode, String deliverName) {
|
|
|
+ FsIntegralOrder fsIntegralOrder = fsIntegralOrderMapper.selectFsIntegralOrderByOrderCode(orderCode);
|
|
|
+ if (fsIntegralOrder != null && fsIntegralOrder.getStatus() == 1) {
|
|
|
+ FsExpress express = expressService.selectFsExpressByOmsCode(deliverCode);
|
|
|
+ if (express != null) {
|
|
|
+ fsIntegralOrder.setDeliveryName(deliverName);
|
|
|
+ fsIntegralOrder.setDeliveryCode(express.getCode());
|
|
|
+ }
|
|
|
+ fsIntegralOrder.setStatus(2);
|
|
|
+ fsIntegralOrder.setDeliverySn(deliveryId);
|
|
|
+ fsIntegralOrder.setDeliveryTime(DateUtils.getNowDate());
|
|
|
+ fsIntegralOrderMapper.updateFsIntegralOrder(fsIntegralOrder);
|
|
|
+// fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
|
|
|
+// if (order.getCompanyId() != null && order.getCompanyId() > 0) {
|
|
|
+// companyService.subtractCompanyMoney(order);
|
|
|
+// }
|
|
|
+
|
|
|
+// FsStore store = fsStoreMapper.selectFsStoreByStoreId(order.getStoreId());
|
|
|
+// //订阅物流回调
|
|
|
+// String lastFourNumber = "";
|
|
|
+// if (order.getDeliveryCode().equals(ShipperCodeEnum.SF.getValue())) {
|
|
|
+// if (store != null && store.getSendPhone() != null) {
|
|
|
+// lastFourNumber = store.getSendPhone();
|
|
|
+// } else {
|
|
|
+// lastFourNumber = order.getUserPhone();
|
|
|
+// }
|
|
|
+// if (lastFourNumber.length() == 11) {
|
|
|
+// lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
|
|
|
+// }
|
|
|
+// }
|
|
|
+ expressService.subscribeEspress(fsIntegralOrder.getOrderCode(), fsIntegralOrder.getDeliveryCode(), fsIntegralOrder.getDeliverySn(), fsIntegralOrder.getUserPhone());
|
|
|
+// List<FsStorePayment> fsStorePayments;
|
|
|
+
|
|
|
+ // 同步微信物流
|
|
|
+// if (order.getPackageOrderId()!= null){
|
|
|
+// fsStorePayments = fsStorePaymentMapper.selectFsStorePaymentByPackageOrderId(String.valueOf(order.getPackageOrderId()));
|
|
|
+// } else {
|
|
|
+// fsStorePayments = fsStorePaymentMapper.selectFsStorePaymentByOrderId(order.getOrderId().toString());
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(CollectionUtils.isNotEmpty(fsStorePayments)){
|
|
|
+// FsStorePayment fsStorePayment = fsStorePayments.get(0);
|
|
|
+// FsWxExpressTask fsWxExpressTask = new FsWxExpressTask();
|
|
|
+// fsWxExpressTask.setUserId(order.getUserId());
|
|
|
+// fsWxExpressTask.setStatus(0);
|
|
|
+// fsWxExpressTask.setRetryCount(0);
|
|
|
+// fsWxExpressTask.setCreateTime(LocalDateTime.now());
|
|
|
+// fsWxExpressTask.setUpdateTime(LocalDateTime.now());
|
|
|
+// fsWxExpressTask.setOrderCode(order.getOrderCode());
|
|
|
+// fsWxExpressTask.setExpressCompany(express.getCode());
|
|
|
+// fsWxExpressTask.setExpressNo(deliveryId);
|
|
|
+// fsWxExpressTask.setAppid(fsStorePayment.getAppid());
|
|
|
+// fsWxExpressTaskMapper.insert(fsWxExpressTask);
|
|
|
+// }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 处理手机号脱敏
|
|
|
*/
|