From 353f5c4cc3418cdbcc24316f55556f45fa05f960 Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 7 Jul 2022 15:57:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=8C=E6=88=90=EF=BC=8C?= =?UTF-8?q?=E5=BE=85=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/conf/MainServerProperties.java | 25 +++ .../com/qs/cost/common/utils/DateUtil.java | 20 ++ .../module/controller/LzOrderController.java | 29 +++ .../qs/cost/module/domain/GetListEntity.java | 3 + .../module/domain/dto/U8API4SaleOrder.java | 173 ++++++++++++++++++ .../qs/cost/module/service/JiaJinService.java | 111 ++++++++--- src/main/resources/application-dev.yml | 7 +- 7 files changed, 342 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/qs/cost/common/conf/MainServerProperties.java create mode 100644 src/main/java/com/qs/cost/module/controller/LzOrderController.java create mode 100644 src/main/java/com/qs/cost/module/domain/dto/U8API4SaleOrder.java diff --git a/src/main/java/com/qs/cost/common/conf/MainServerProperties.java b/src/main/java/com/qs/cost/common/conf/MainServerProperties.java new file mode 100644 index 0000000..ebe4221 --- /dev/null +++ b/src/main/java/com/qs/cost/common/conf/MainServerProperties.java @@ -0,0 +1,25 @@ +package com.qs.cost.common.conf; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author YenHex + * @since 2022/7/7 + */ + +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "server.timetable") +public class MainServerProperties { + + private String host; + + private String book; + + private String year; + +} diff --git a/src/main/java/com/qs/cost/common/utils/DateUtil.java b/src/main/java/com/qs/cost/common/utils/DateUtil.java index 838d024..94ff60d 100644 --- a/src/main/java/com/qs/cost/common/utils/DateUtil.java +++ b/src/main/java/com/qs/cost/common/utils/DateUtil.java @@ -2,6 +2,9 @@ package com.qs.cost.common.utils; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Calendar; import java.util.Date; @@ -28,6 +31,23 @@ public class DateUtil { public static final String FORMAT_SIMPLE_MONTH = "yyyy-MM"; public static final String FORMAT_SIMPLE_YEAR = "yyyy"; + + /** + * LocalDateTime转为日期 + * + * @param localDateTime LocalDateTime + * @return 日期 + */ + public static Date localDateTimeToDate(final LocalDateTime localDateTime) { + if (null == localDateTime) { + return null; + } + final ZoneId zoneId = ZoneId.systemDefault(); + final ZonedDateTime zdt = localDateTime.atZone(zoneId); + final Date date = Date.from(zdt.toInstant()); + return date; + } + /** * 转换格式 * @param dateStr diff --git a/src/main/java/com/qs/cost/module/controller/LzOrderController.java b/src/main/java/com/qs/cost/module/controller/LzOrderController.java new file mode 100644 index 0000000..e3011a9 --- /dev/null +++ b/src/main/java/com/qs/cost/module/controller/LzOrderController.java @@ -0,0 +1,29 @@ +package com.qs.cost.module.controller; + +import com.qs.cost.common.dto.R; +import com.qs.cost.common.dto.u8.U8CallbackVo; +import com.qs.cost.module.service.JiaJinService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author YenHex + * @since 2022/7/7 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/lzOrder") +public class LzOrderController { + + private final JiaJinService jiaJinService; + + @PostMapping("/callback") + public R callback(@RequestBody U8CallbackVo requestVo){ + jiaJinService.callback(requestVo); + return R.ok(); + } + +} 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 2317739..4680e55 100644 --- a/src/main/java/com/qs/cost/module/domain/GetListEntity.java +++ b/src/main/java/com/qs/cost/module/domain/GetListEntity.java @@ -51,6 +51,9 @@ public class GetListEntity { @JsonProperty("SellingPrice") private BigDecimal salePrice; + @JsonProperty("TaxPercent") + private BigDecimal taxRate; + } @Data diff --git a/src/main/java/com/qs/cost/module/domain/dto/U8API4SaleOrder.java b/src/main/java/com/qs/cost/module/domain/dto/U8API4SaleOrder.java new file mode 100644 index 0000000..63c2bfd --- /dev/null +++ b/src/main/java/com/qs/cost/module/domain/dto/U8API4SaleOrder.java @@ -0,0 +1,173 @@ +package com.qs.cost.module.domain.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * @Author: YenHex + * @Date: 2021/3/11 + * @Version: 1.0 + **/ +@Getter +@Setter +@Builder +@JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE) +public class U8API4SaleOrder { + + @JsonProperty("AddType") + private int addType; + + /** + * 单据号 + */ + @JsonProperty("cSOCode") + private String code; + + /** + * 订单日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonProperty("dDate") + private Date orderDate; + + /** + * 业务类型 + */ + @JsonProperty("cBusType") + private String bizType; + + /** + * 销售类型 + */ + @JsonProperty("cSTCode") + private String saleType; + + /** + * 客户编码 + */ + @JsonProperty("cCusCode") + private String cusCode; + + /** + * 币种 + */ + @JsonProperty("cexch_name") + private String currencyType; + + /** + * 部门编号 + */ + @JsonProperty("cDepCode") + private String depCode; + + /** + * 制单人 + */ + @JsonProperty("cMaker") + private String createUser; + + /** + * 预发货日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonProperty("dPreDateBT") + private Date preShipmentsDate; + + /** + * 预完工日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonProperty("dPreMoDateBT") + private Date preFinishedDate; + + /** + * 税率 + */ + @JsonProperty("iTaxRate") + private BigDecimal taxRate; + + /** + * 备注 + */ + @JsonProperty("cMemo") + private String remark; + + /** + * 备注(底部) + */ + @JsonProperty("cDefine11") + private String remarkFoot; + + /** + * 存货商品列表 + */ + @JsonProperty("Details") + private List details; + + @Getter + @Setter + @JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE) + public static class OrderDetail{ + + /** + * 存货编码 + */ + @JsonProperty("cInvCode") + private String InvCode; + + /** + * 数量 + */ + @JsonProperty("iQuantity") + private Long quantity; + + /** + * 含税单价 + */ + @JsonProperty("iTaxUnitPrice") + private BigDecimal hasRatePrice; + + /** + * 价税合计 + */ + @JsonProperty("iSum") + private BigDecimal hasRateSumPrice; + + /** + * 备注 + */ + @JsonProperty(value="cMemo") + private String remark; + + /** + * 税率 + */ + @JsonProperty(value="iTaxRate") + private BigDecimal taxRate; + + /** + * 预发货日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonProperty(value="dPreDate") + @JsonProperty("dreleasedate") + private Date preShipmentsDate; + + /** + * 预完工日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonProperty(value="dPreMoDate") + private Date preFinishedDate; + + } + +} 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 6e86071..96bcf73 100644 --- a/src/main/java/com/qs/cost/module/service/JiaJinService.java +++ b/src/main/java/com/qs/cost/module/service/JiaJinService.java @@ -1,36 +1,43 @@ package com.qs.cost.module.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.cost.common.conf.MainServerProperties; import com.qs.cost.common.consts.ApiUrlConst; import com.qs.cost.common.dto.u8.U8CallbackVo; import com.qs.cost.common.dto.HttpResult; import com.qs.cost.common.dto.R; +import com.qs.cost.common.dto.u8.U8RequestBo; 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 com.qs.cost.module.domain.dto.U8API4SaleOrder; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import java.math.BigDecimal; 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; +import java.util.*; /** * @author YenHex * @since 2022/7/6 */ @Slf4j +@Service +@AllArgsConstructor public class JiaJinService { - @Autowired LzResponseLogService responseLogService; - @Autowired LzOrderService lzOrderService; + private final LzResponseLogService responseLogService; + private final LzOrderService lzOrderService; + private final MainServerProperties mainServerProperties; /** @@ -114,9 +121,60 @@ public class JiaJinService { lqw.eq(LzOrder::getStatus,0); lqw.eq(LzOrder::getCheckStatus,0); List orders = lzOrderService.list(lqw); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + Date now = new Date(); for (LzOrder order : orders) { - //TODO 发起U8服务中台 + String host = mainServerProperties.getHost(); + String year = mainServerProperties.getYear(); + String book = mainServerProperties.getBook(); + //封装jsonBody + List details = new ArrayList<>(); + String itemJson = order.getItems(); + List items = JsonUtil.jsonToList(itemJson,GetListEntity.ItemEntity.class); + BigDecimal rate = BigDecimal.ONE; + for (GetListEntity.ItemEntity item : items) { + U8API4SaleOrder.OrderDetail orderDetail = new U8API4SaleOrder.OrderDetail(); + //拿子项税率 + rate = item.getTaxRate(); + orderDetail.setInvCode(item.getInvCode()); + orderDetail.setTaxRate(item.getTaxRate()); + orderDetail.setQuantity(new Long(item.getQty())); + orderDetail.setHasRatePrice(item.getSalePrice()); + orderDetail.setHasRateSumPrice(item.getSaleAmount()); + orderDetail.setPreShipmentsDate(now); + orderDetail.setPreFinishedDate(now); + } + U8API4SaleOrder api4SaleOrder = U8API4SaleOrder.builder() + .addType(0) + .code(order.getOrderNo()) + .orderDate(DateUtil.localDateTimeToDate(order.getOrderCreateTime())) + .bizType("普通销售") + .saleType("01") + //TODO 客户编码未定 + .cusCode("") + .currencyType("人民币") + .depCode(order.getSaleDept()) + .createUser(order.getSaleMan()) + .preShipmentsDate(now) + .preFinishedDate(now) + .taxRate(rate) + .remark("") + .remarkFoot("") + .details(details) + .build(); + String jsonBody = JsonUtil.objectToJson(Arrays.asList(api4SaleOrder)); + //发起U8服务中台 + U8RequestBo requestBo = new U8RequestBo(); + requestBo.setPk(order.getOrderNo()); + requestBo.setCmd("XSDDAdd"); + requestBo.setYear(year); + requestBo.setBook(book); + requestBo.setJsonBody(jsonBody); + requestBo.setKeyId(""); + requestBo.setSettingRetryTimes(2); + requestBo.setCallbackState(1); + requestBo.setCallbackHost( host + "/lzOrder/callback"); order.setStatus(1); order.setUpdateTime(LocalDateTime.now()); } @@ -127,29 +185,32 @@ public class JiaJinService { * U8中台回调接口 * @return */ - @PostMapping("/orderCallBack") public R callback(@RequestBody U8CallbackVo requestVo){ - //TODO 解析VO - - //接收U8请求 String orderNo = requestVo.getId(); 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); + //解析返回结果 + lzOrder.setStatus(2); + String response = requestVo.getRespContext(); + JSONObject jsonObject = JSONObject.parseObject(response); + if(jsonObject.getString("code").equals("200")){ + //发送量子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); + if(httpResult.getCode()==200){ + if(httpResult.getData().contains("true")){ + lzOrder.setCheckStatus(1); + } } + }else { + lzOrder.setStatus(3); } lzOrderService.updateById(lzOrder); return R.ok(); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c939d64..3ec47ed 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,7 +1,12 @@ #服务配置 server: - secret-key: 7c0b22847a4abf282399bdfca150c6b6ca8e67d171e7f948 port: 7701 + #本服务访问根地址,用于读取 + host: '127.0.0.1:7001' + #帐套 + book: 999 + #年份 + year: 2020 #SpringBoot相关 spring: #数据源