From b552ee6b9924d7582e726cde5d1782d6d79a7e7f Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 7 Jul 2022 11:03:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97=E3=80=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qs/cost/common/consts/ApiStatusConst.java | 24 ---- .../qs/cost/common/consts/ApiUrlConst.java | 2 + .../qs/cost/module/domain/GetListEntity.java | 23 +++- .../com/qs/cost/module/domain/LzOrder.java | 100 ++++++++++++++++ .../qs/cost/module/domain/LzResponseLog.java | 48 ++++++++ .../qs/cost/module/mapper/LzOrderMapper.java | 14 +++ .../module/mapper/LzResponseLogMapper.java | 14 +++ .../qs/cost/module/service/JiaJinService.java | 111 ++++++++++++++++-- .../cost/module/service/LzOrderService.java | 14 +++ .../module/service/LzResponseLogService.java | 14 +++ .../service/impl/LzOrderServiceImpl.java | 22 ++++ .../impl/LzResponseLogServiceImpl.java | 22 ++++ src/test/java/boot/PrintDemo.java | 2 +- 13 files changed, 375 insertions(+), 35 deletions(-) delete mode 100644 src/main/java/com/qs/cost/common/consts/ApiStatusConst.java create mode 100644 src/main/java/com/qs/cost/module/domain/LzOrder.java create mode 100644 src/main/java/com/qs/cost/module/domain/LzResponseLog.java create mode 100644 src/main/java/com/qs/cost/module/mapper/LzOrderMapper.java create mode 100644 src/main/java/com/qs/cost/module/mapper/LzResponseLogMapper.java create mode 100644 src/main/java/com/qs/cost/module/service/LzOrderService.java create mode 100644 src/main/java/com/qs/cost/module/service/LzResponseLogService.java create mode 100644 src/main/java/com/qs/cost/module/service/impl/LzOrderServiceImpl.java create mode 100644 src/main/java/com/qs/cost/module/service/impl/LzResponseLogServiceImpl.java diff --git a/src/main/java/com/qs/cost/common/consts/ApiStatusConst.java b/src/main/java/com/qs/cost/common/consts/ApiStatusConst.java deleted file mode 100644 index fa92813..0000000 --- a/src/main/java/com/qs/cost/common/consts/ApiStatusConst.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.qs.cost.common.consts; - -/** - * @author YenHex - * @since 2022/2/28 - */ -public class ApiStatusConst { - - /** 无需回调 */ - public static final int ApiRequest_Status_0 = 0; - - /** 等待回调 */ - public static final int ApiRequest_Status_1 = 1; - - /** 请求U8失败 */ - public static final int ApiRequest_Status_2 = 2; - - /** 请求U8成功,但回调客户端失败 */ - public static final int ApiRequest_Status_3 = 3; - - /** 回调客户端成功 */ - public static final int ApiRequest_Status_4 = 4; - -} diff --git a/src/main/java/com/qs/cost/common/consts/ApiUrlConst.java b/src/main/java/com/qs/cost/common/consts/ApiUrlConst.java index 3d90fba..8fa0c89 100644 --- a/src/main/java/com/qs/cost/common/consts/ApiUrlConst.java +++ b/src/main/java/com/qs/cost/common/consts/ApiUrlConst.java @@ -8,6 +8,8 @@ package com.qs.cost.common.consts; **/ public class ApiUrlConst { + public static final String lzyunli = "lzyunli"; + public static final String U8API = "/Service/13Service.asmx/U8API"; /** diff --git a/src/main/java/com/qs/cost/module/domain/GetListEntity.java b/src/main/java/com/qs/cost/module/domain/GetListEntity.java index 09c2897..2317739 100644 --- a/src/main/java/com/qs/cost/module/domain/GetListEntity.java +++ b/src/main/java/com/qs/cost/module/domain/GetListEntity.java @@ -13,7 +13,7 @@ import java.util.List; @Data public class GetListEntity { - private List list; + private List list; private OtherEntity other; @@ -34,11 +34,30 @@ public class GetListEntity { @JsonProperty("page_size") private Integer pageSize; + @Data + public static class ItemEntity{ + @JsonProperty("ERPCode") + private String invCode; + + //数量 + @JsonProperty("Qty") + private Integer qty; + + //总支付金额 + @JsonProperty("SellingPrice") + private BigDecimal saleAmount; + + //销售单价 + @JsonProperty("SellingPrice") + private BigDecimal salePrice; + + } + @Data public static class OrderEntity{ @JsonProperty("OrderNO") - private String orderNO; + private String orderNo; @JsonProperty("OrderAmount") private BigDecimal orderAmount; diff --git a/src/main/java/com/qs/cost/module/domain/LzOrder.java b/src/main/java/com/qs/cost/module/domain/LzOrder.java new file mode 100644 index 0000000..bd6302a --- /dev/null +++ b/src/main/java/com/qs/cost/module/domain/LzOrder.java @@ -0,0 +1,100 @@ +package com.qs.cost.module.domain; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 量子-订单 实体类 + * @author YenHex + * @since 2022-07-07 + */ +@Data +@TableName("lz_order") +public class LzOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 订单编号 */ + @NotBlank(message = "订单编号不能为空") + @Length(max = 20,message = "订单编号长度不能超过20字") + private String orderNo; + + /** 订单金额 */ + @NotNull(message = "订单金额不能为空") + private BigDecimal orderAmount; + + /** 订单运费 */ + private BigDecimal shippingFare; + + /** 收件人 */ + @Length(max = 255,message = "收件人长度不能超过255字") + private String consignee; + + /** 收件人手机号 */ + @Length(max = 255,message = "收件人手机号长度不能超过255字") + private String consigneeMobile; + + /** 收件地址省市区 */ + @Length(max = 255,message = "收件地址省市区长度不能超过255字") + private String provinces; + + /** 详细地址 */ + @Length(max = 255,message = "详细地址长度不能超过255字") + private String detailedAddress; + + /** 销售类型 */ + @Length(max = 255,message = "销售类型长度不能超过255字") + private String saleType; + + /** 销售员 */ + @Length(max = 255,message = "销售员长度不能超过255字") + private String saleMan; + + /** 销售部门 */ + @Length(max = 255,message = "销售部门长度不能超过255字") + private String saleDept; + + /** 下单时间 */ + @Length(max = 30,message = "下单时间长度不能超过30字") + private LocalDateTime orderCreateTime; + + /** 状态:0-未处理;1-调用U8成功;2-回调成功;3-回调结果失败 */ + private Integer status; + + /** 检查item状态:0-正常;1-存货编码缺失;2-数据异常 */ + private Integer checkStatus; + + private Integer callBackStatus; + + private String items; + + /** */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + +} + diff --git a/src/main/java/com/qs/cost/module/domain/LzResponseLog.java b/src/main/java/com/qs/cost/module/domain/LzResponseLog.java new file mode 100644 index 0000000..9389eea --- /dev/null +++ b/src/main/java/com/qs/cost/module/domain/LzResponseLog.java @@ -0,0 +1,48 @@ +package com.qs.cost.module.domain; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 量子云-返回日志 实体类 + * @author YenHex + * @since 2022-07-07 + */ +@Data +@TableName("lz_response_log") +public class LzResponseLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** */ + @TableId(type = IdType.AUTO) + private Long id; + + /** */ + private String json; + + /** */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + +} + diff --git a/src/main/java/com/qs/cost/module/mapper/LzOrderMapper.java b/src/main/java/com/qs/cost/module/mapper/LzOrderMapper.java new file mode 100644 index 0000000..ec1a1aa --- /dev/null +++ b/src/main/java/com/qs/cost/module/mapper/LzOrderMapper.java @@ -0,0 +1,14 @@ +package com.qs.cost.module.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.cost.module.domain.LzOrder; + +/** + * 量子-订单 Mapper + * @author YenHex + * @date 2022-07-07 + */ +public interface LzOrderMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/cost/module/mapper/LzResponseLogMapper.java b/src/main/java/com/qs/cost/module/mapper/LzResponseLogMapper.java new file mode 100644 index 0000000..d2f52d3 --- /dev/null +++ b/src/main/java/com/qs/cost/module/mapper/LzResponseLogMapper.java @@ -0,0 +1,14 @@ +package com.qs.cost.module.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.cost.module.domain.LzResponseLog; + +/** + * 量子云-返回日志 Mapper + * @author YenHex + * @date 2022-07-07 + */ +public interface LzResponseLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/cost/module/service/JiaJinService.java b/src/main/java/com/qs/cost/module/service/JiaJinService.java index 5d0773f..b190e18 100644 --- a/src/main/java/com/qs/cost/module/service/JiaJinService.java +++ b/src/main/java/com/qs/cost/module/service/JiaJinService.java @@ -1,24 +1,39 @@ package com.qs.cost.module.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.cost.common.consts.ApiUrlConst; import com.qs.cost.common.dto.HttpResult; import com.qs.cost.common.dto.R; -import com.qs.cost.common.utils.DateUtil; -import com.qs.cost.common.utils.HttpUtil; -import com.qs.cost.common.utils.JsonUtil; -import com.qs.cost.common.utils.SecureUtil; +import com.qs.cost.common.utils.*; import com.qs.cost.module.domain.GetListEntity; +import com.qs.cost.module.domain.LzOrder; +import com.qs.cost.module.domain.LzResponseLog; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.List; /** * @author YenHex * @since 2022/7/6 */ +@Slf4j public class JiaJinService { - public static final String lzyunli = "lzyunli"; + @Autowired LzResponseLogService responseLogService; + @Autowired LzOrderService lzOrderService; + + /** + * 请求量子app获取订单 + * @param page + */ public void query(Integer page){ if(page==null){ page = 1; @@ -28,7 +43,7 @@ public class JiaJinService { String date = DateUtil.formatDate(now,DateUtil.FORMAT_SIMPLE_DATE2)+"-"+DateUtil.formatDate(lastMonth,DateUtil.FORMAT_SIMPLE_DATE2); String pageSize = "10"; String params = "date="+date+"&page="+page+"&page_size="+pageSize; - String signParam = lzyunli + params + lzyunli; + String signParam = ApiUrlConst.lzyunli + params + ApiUrlConst.lzyunli; String sign = SecureUtil.md5(signParam); params = params+"&sign="+sign; String url = "http://wsapp6.lzyunli.com/index.php/getOrder?"+params; @@ -36,6 +51,50 @@ public class JiaJinService { if(httpResult.getCode()==200){ String json = httpResult.getData(); GetListEntity getListEntity = JsonUtil.jsonToPojo(json,GetListEntity.class); + if(getListEntity==null){ + return; + } + //保存请求json + LzResponseLog responseLog = new LzResponseLog(); + responseLog.setJson(json); + responseLogService.save(responseLog); + GetListEntity.OtherEntity otherEntity = getListEntity.getOther(); + //解析请求json,并保存订单到数据库 + for (GetListEntity.OrderEntity orderEntity : getListEntity.getList()) { + LzOrder lzOrder = new LzOrder(); + lzOrder.setOrderNo(orderEntity.getOrderNo()); + lzOrder.setOrderAmount(orderEntity.getOrderAmount()); + lzOrder.setShippingFare(orderEntity.getShippingFare()); + lzOrder.setConsignee(orderEntity.getConsignee()); + lzOrder.setConsigneeMobile(orderEntity.getConsigneeMobile()); + lzOrder.setProvinces(orderEntity.getProvinces()); + lzOrder.setDetailedAddress(orderEntity.getDetailedAddress()); + lzOrder.setSaleType(otherEntity.getSalesType()); + lzOrder.setSaleDept(otherEntity.getSalesClass()); + lzOrder.setSaleMan(otherEntity.getSalesMan()); + String itemJson = orderEntity.getItems().toString(); + lzOrder.setItems(itemJson); + lzOrder.setCheckStatus(0); + List items = JsonUtil.jsonToList(itemJson,GetListEntity.ItemEntity.class); + if(items!=null&&items.size()>0){ + for (GetListEntity.ItemEntity item : items) { + if(StringUtil.isEmpty(item.getInvCode())){ + lzOrder.setCheckStatus(1); + break; + } + } + }else { + lzOrder.setCheckStatus(2); + } + try { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime orderCreateTime = LocalDateTime.parse(orderEntity.getCreateTime(),df); + lzOrder.setOrderCreateTime(orderCreateTime); + } catch (Exception e) { + log.error(e.getMessage()); + } + lzOrderService.save(lzOrder); + } Integer pageCount = getListEntity.getPageCount(); if(pageCount!=null&&pageCount.equals(page)){ return; @@ -46,13 +105,49 @@ public class JiaJinService { System.out.println(); } + public void task(){ + //获取未同步订单,调用U8服务 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(LzOrder::getStatus,0); + lqw.eq(LzOrder::getCheckStatus,0); + List orders = lzOrderService.list(lqw); + for (LzOrder order : orders) { + //TODO 发起U8服务中台 + + order.setStatus(1); + order.setUpdateTime(LocalDateTime.now()); + } + lzOrderService.updateBatchById(orders); + } + /** * U8中台回调接口 - * @param orderNos * @return */ - public R callback(String orderNos){ + public R callback(){ + // + //接收U8请求 + String orderNo = ""; + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(LzOrder::getOrderNo,orderNo); + LzOrder lzOrder = lzOrderService.getOne(lqw,false); + //发送量子App更新订单状态 + String params = "orderNos="+orderNo; + String signParam = ApiUrlConst.lzyunli + params + ApiUrlConst.lzyunli; + String sign = SecureUtil.md5(signParam); + String url = "http://wsapp6.lzyunli.com/index.php/upOrder"; + Map paramMap = new HashMap<>(10); + paramMap.put("orderNos",orderNo); + paramMap.put("sign",sign); + HttpResult httpResult = HttpUtil.post(url,paramMap); + lzOrder.setCallBackStatus(2); + if(httpResult.getCode()==200){ + if(httpResult.getData().contains("true")){ + lzOrder.setCheckStatus(1); + } + } + lzOrderService.updateById(lzOrder); return R.ok(); } diff --git a/src/main/java/com/qs/cost/module/service/LzOrderService.java b/src/main/java/com/qs/cost/module/service/LzOrderService.java new file mode 100644 index 0000000..6bb596a --- /dev/null +++ b/src/main/java/com/qs/cost/module/service/LzOrderService.java @@ -0,0 +1,14 @@ +package com.qs.cost.module.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.cost.module.domain.LzOrder; + +/** + * 量子-订单 服务接口 + * @author YenHex + * @date 2022-07-07 + */ +public interface LzOrderService extends IService { + +} + diff --git a/src/main/java/com/qs/cost/module/service/LzResponseLogService.java b/src/main/java/com/qs/cost/module/service/LzResponseLogService.java new file mode 100644 index 0000000..4c96d39 --- /dev/null +++ b/src/main/java/com/qs/cost/module/service/LzResponseLogService.java @@ -0,0 +1,14 @@ +package com.qs.cost.module.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.cost.module.domain.LzResponseLog; + +/** + * 量子云-返回日志 服务接口 + * @author YenHex + * @date 2022-07-07 + */ +public interface LzResponseLogService extends IService { + +} + diff --git a/src/main/java/com/qs/cost/module/service/impl/LzOrderServiceImpl.java b/src/main/java/com/qs/cost/module/service/impl/LzOrderServiceImpl.java new file mode 100644 index 0000000..07dd990 --- /dev/null +++ b/src/main/java/com/qs/cost/module/service/impl/LzOrderServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.cost.module.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.cost.module.domain.LzOrder; +import com.qs.cost.module.mapper.LzOrderMapper; +import com.qs.cost.module.service.LzOrderService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 量子-订单 服务实现类 + * @author YenHex + * @since 2022-07-07 + */ +@Slf4j +@Service +@AllArgsConstructor +public class LzOrderServiceImpl extends ServiceImpl implements LzOrderService { + +} + diff --git a/src/main/java/com/qs/cost/module/service/impl/LzResponseLogServiceImpl.java b/src/main/java/com/qs/cost/module/service/impl/LzResponseLogServiceImpl.java new file mode 100644 index 0000000..8ef4fc2 --- /dev/null +++ b/src/main/java/com/qs/cost/module/service/impl/LzResponseLogServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.cost.module.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.cost.module.domain.LzResponseLog; +import com.qs.cost.module.mapper.LzResponseLogMapper; +import com.qs.cost.module.service.LzResponseLogService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 量子云-返回日志 服务实现类 + * @author YenHex + * @since 2022-07-07 + */ +@Slf4j +@Service +@AllArgsConstructor +public class LzResponseLogServiceImpl extends ServiceImpl implements LzResponseLogService { + +} + diff --git a/src/test/java/boot/PrintDemo.java b/src/test/java/boot/PrintDemo.java index a9f2eb2..7c560bc 100644 --- a/src/test/java/boot/PrintDemo.java +++ b/src/test/java/boot/PrintDemo.java @@ -19,7 +19,7 @@ public class PrintDemo { public static void main(String[] args) { String date = "2020/04/25-2022/07/26"; - String page = "2"; + String page = "1"; String pageSize = "10"; String params = "date="+date+"&page="+page+"&page_size="+pageSize; System.out.println(params);