From 2ff297dd7af1aa54c7544e3b90ff20d6f1fa071b Mon Sep 17 00:00:00 2001 From: leomon <2233021400@qq.com> Date: Wed, 21 May 2025 02:48:11 +0800 Subject: [PATCH] 消息中心业务1.1 --- oying-system/target/classes/com/oying/modules/message/rest/MessageOrderBuyerController.class | 0 oying-system/target/classes/com/oying/modules/message/service/MessageOrderLeaveService.class | 0 oying-system/target/classes/com/oying/modules/message/domain/MessageSystem.class | 0 oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.class | 0 oying-system/target/classes/com/oying/modules/message/service/impl/MessageSystemServiceImpl.class | 0 oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderLeaveController.java | 177 ++++++++++++++-- oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderLeave.java | 7 oying-system/target/classes/com/oying/modules/message/rest/MessageOrderLeaveController.class | 0 oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.class | 0 oying-system/src/main/java/com/oying/modules/message/rest/MessageSystemController.java | 90 ++++++-- oying-system/target/classes/com/oying/modules/message/domain/MessageOrderBuyer.class | 0 oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderBuyerController.java | 94 ++++++--- oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.java | 26 + oying-system/src/main/java/com/oying/modules/message/domain/MessageSystem.java | 4 oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.java | 6 oying-system/target/classes/com/oying/modules/message/domain/MessageOrderLeave.class | 0 oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderBuyer.java | 2 oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java | 97 ++++++--- oying-system/src/main/java/com/oying/modules/message/service/impl/MessageSystemServiceImpl.java | 13 oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java | 2 oying-system/src/test/java/com/oying/modules/message/rest/MessageSystemControllerTest.java | 14 + oying-system/target/classes/com/oying/modules/message/service/MessageOrderSellerService.class | 0 oying-system/target/classes/com/oying/modules/message/rest/MessageSystemController.class | 0 oying-system/target/classes/com/oying/modules/message/rest/MessageOrderSellerController.class | 0 oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.class | 0 oying-system/src/main/java/com/oying/modules/message/service/MessageOrderLeaveService.java | 11 + oying-system/src/main/java/com/oying/modules/message/service/MessageOrderBuyerService.java | 3 oying-system/target/classes/com/oying/modules/message/service/MessageOrderBuyerService.class | 0 oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java | 7 oying-system/src/main/java/com/oying/modules/message/service/MessageSystemService.java | 4 30 files changed, 422 insertions(+), 135 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderBuyer.java b/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderBuyer.java index 7ba0b0a..01a7ab0 100644 --- a/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderBuyer.java +++ b/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderBuyer.java @@ -22,7 +22,7 @@ public class MessageOrderBuyer implements Serializable { @TableId(value = "id", type = IdType.AUTO) - @ApiModelProperty(value = "主键,自增") + @ApiModelProperty(value = "主键,自增 用户id") private Integer id; @NotNull diff --git a/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderLeave.java b/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderLeave.java index efd47c5..7a6d625 100644 --- a/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderLeave.java +++ b/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderLeave.java @@ -31,14 +31,15 @@ @NotBlank @ApiModelProperty(value = "顾客评价内容") - private String customerReview; + private String customerReview="顾客尚未评价"; + @NotBlank @ApiModelProperty(value = "商家回复内容") - private String sellerReply; + private String sellerReply="商家尚未回复"; @NotBlank @ApiModelProperty(value = "跳转链接") - private String link; + private String link="https://example.com/default-link"; @ApiModelProperty(value = "创建时间") private Timestamp createTime; diff --git a/oying-system/src/main/java/com/oying/modules/message/domain/MessageSystem.java b/oying-system/src/main/java/com/oying/modules/message/domain/MessageSystem.java index 3e4c28d..9b9c06f 100644 --- a/oying-system/src/main/java/com/oying/modules/message/domain/MessageSystem.java +++ b/oying-system/src/main/java/com/oying/modules/message/domain/MessageSystem.java @@ -5,8 +5,11 @@ import io.swagger.annotations.ApiModelProperty; import cn.hutool.core.bean.copier.CopyOptions; import java.sql.Timestamp; +import javax.rmi.CORBA.Tie; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -20,6 +23,7 @@ @TableName("message_system") public class MessageSystem implements Serializable { + //使用数据库的自增策略来生成id @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(value = "id") private Integer id; diff --git a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderBuyerController.java b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderBuyerController.java index 5f6278d..81a7f07 100644 --- a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderBuyerController.java +++ b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderBuyerController.java @@ -24,17 +24,17 @@ @RestController @RequiredArgsConstructor @Api(tags = "买家端订单消息通知") -@RequestMapping("/api/messageOrderBuyer") +@RequestMapping("/api/message/messageOrderBuyer") public class MessageOrderBuyerController { private final MessageOrderBuyerService messageOrderBuyerService; - @ApiOperation("导出数据") - @GetMapping(value = "/download") - @PreAuthorize("@el.check('messageOrderBuyer:list')") - public void exportMessageOrderBuyer(HttpServletResponse response, MessageOrderBuyerQueryCriteria criteria) throws IOException { - messageOrderBuyerService.download(messageOrderBuyerService.queryAll(criteria), response); - } +// @ApiOperation("导出数据") +// @GetMapping(value = "/download") +// @PreAuthorize("@el.check('messageOrderBuyer:list')") +// public void exportMessageOrderBuyer(HttpServletResponse response, MessageOrderBuyerQueryCriteria criteria) throws IOException { +// messageOrderBuyerService.download(messageOrderBuyerService.queryAll(criteria), response); +// } @GetMapping @ApiOperation("查询买家端订单消息通知") @@ -44,30 +44,64 @@ return new ResponseEntity<>(messageOrderBuyerService.queryAll(criteria,page),HttpStatus.OK); } - @PostMapping - @Log("新增买家端订单消息通知") - @ApiOperation("新增买家端订单消息通知") - @PreAuthorize("@el.check('messageOrderBuyer:add')") - public ResponseEntity<Object> createMessageOrderBuyer(@Validated @RequestBody MessageOrderBuyer resources){ - messageOrderBuyerService.create(resources); - return new ResponseEntity<>(HttpStatus.CREATED); +// @PostMapping +// @Log("新增买家端订单消息通知") +// @ApiOperation("新增买家端订单消息通知") +// @PreAuthorize("@el.check('messageOrderBuyer:add')") +// public ResponseEntity<Object> createMessageOrderBuyer(@Validated @RequestBody MessageOrderBuyer resources){ +// messageOrderBuyerService.create(resources); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } +// +// @PutMapping +// @Log("修改买家端订单消息通知") +// @ApiOperation("修改买家端订单消息通知") +// @PreAuthorize("@el.check('messageOrderBuyer:edit')") +// public ResponseEntity<Object> updateMessageOrderBuyer(@Validated @RequestBody MessageOrderBuyer resources){ +// messageOrderBuyerService.update(resources); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } +// +// @DeleteMapping +// @Log("删除买家端订单消息通知") +// @ApiOperation("删除买家端订单消息通知") +// @PreAuthorize("@el.check('messageOrderBuyer:del')") +// public ResponseEntity<Object> deleteMessageOrderBuyer(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { +// messageOrderBuyerService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } + //订单状态变化通知 + @GetMapping("/status/{order_id}") + @ApiOperation("查询一条订单状态变化通知") + public ResponseEntity<String> getMessageOrderBuyer(@PathVariable Integer order_id) { + MessageOrderBuyer messageOrderBuyer = messageOrderBuyerService.findByOrderId(order_id); + String message = messageOrderBuyer.getMessageType(); + + return new ResponseEntity<>(message, HttpStatus.OK); + } + //订单送达通知 + @GetMapping("/deliver/{order_id}") + @ApiOperation("查询一条订单送达通知") + public ResponseEntity<String> getMessageOrderBuyerDeliver(@PathVariable Integer order_id) { + MessageOrderBuyer messageOrderBuyer = messageOrderBuyerService.findByOrderId(order_id); + String message = messageOrderBuyer.getMessageType(); + //如果MessageType为订单送达,则返回message——content + if (message.equals("订单送达")) { + String messageContent = messageOrderBuyer.getMessageContent(); + return new ResponseEntity<>(messageContent, HttpStatus.OK); + }else{ + //返回没送达 + return new ResponseEntity<>("没送达", HttpStatus.OK); + } + } + //实现点击跳转到订单详情 + @GetMapping("/link/{order_id}") + @ApiOperation("点击跳转到订单详情") + public ResponseEntity<String> getMessageOrderBuyerLink(@PathVariable Integer order_id) { + MessageOrderBuyer messageOrderBuyer = messageOrderBuyerService.findByOrderId(order_id); + String link = messageOrderBuyer.getLink(); + return new ResponseEntity<>(link, HttpStatus.OK); } - @PutMapping - @Log("修改买家端订单消息通知") - @ApiOperation("修改买家端订单消息通知") - @PreAuthorize("@el.check('messageOrderBuyer:edit')") - public ResponseEntity<Object> updateMessageOrderBuyer(@Validated @RequestBody MessageOrderBuyer resources){ - messageOrderBuyerService.update(resources); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - @DeleteMapping - @Log("删除买家端订单消息通知") - @ApiOperation("删除买家端订单消息通知") - @PreAuthorize("@el.check('messageOrderBuyer:del')") - public ResponseEntity<Object> deleteMessageOrderBuyer(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { - messageOrderBuyerService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } } diff --git a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderLeaveController.java b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderLeaveController.java index 3244192..8d3dfe9 100644 --- a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderLeaveController.java +++ b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderLeaveController.java @@ -1,10 +1,14 @@ package com.oying.modules.message.rest; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.oying.annotation.Log; import com.oying.modules.message.domain.MessageOrderLeave; import com.oying.modules.message.service.MessageOrderLeaveService; import com.oying.modules.message.domain.dto.MessageOrderLeaveQueryCriteria; import lombok.RequiredArgsConstructor; + +import java.sql.Timestamp; import java.util.List; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -24,17 +28,17 @@ @RestController @RequiredArgsConstructor @Api(tags = "消息留言") -@RequestMapping("/api/messageOrderLeave") +@RequestMapping("/api/message/messageOrderLeave") public class MessageOrderLeaveController { private final MessageOrderLeaveService messageOrderLeaveService; - @ApiOperation("导出数据") - @GetMapping(value = "/download") - @PreAuthorize("@el.check('messageOrderLeave:list')") - public void exportMessageOrderLeave(HttpServletResponse response, MessageOrderLeaveQueryCriteria criteria) throws IOException { - messageOrderLeaveService.download(messageOrderLeaveService.queryAll(criteria), response); - } +// @ApiOperation("导出数据") +// @GetMapping(value = "/download") +// @PreAuthorize("@el.check('messageOrderLeave:list')") +// public void exportMessageOrderLeave(HttpServletResponse response, MessageOrderLeaveQueryCriteria criteria) throws IOException { +// messageOrderLeaveService.download(messageOrderLeaveService.queryAll(criteria), response); +// } @GetMapping @ApiOperation("查询消息留言") @@ -44,30 +48,145 @@ return new ResponseEntity<>(messageOrderLeaveService.queryAll(criteria,page),HttpStatus.OK); } - @PostMapping - @Log("新增消息留言") - @ApiOperation("新增消息留言") - @PreAuthorize("@el.check('messageOrderLeave:add')") - public ResponseEntity<Object> createMessageOrderLeave(@Validated @RequestBody MessageOrderLeave resources){ - messageOrderLeaveService.create(resources); - return new ResponseEntity<>(HttpStatus.CREATED); - } +// @PostMapping +// @Log("新增消息留言") +// @ApiOperation("新增消息留言") +// @PreAuthorize("@el.check('messageOrderLeave:add')") +// public ResponseEntity<Object> createMessageOrderLeave(@Validated @RequestBody MessageOrderLeave resources){ +// messageOrderLeaveService.create(resources); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } - @PutMapping - @Log("修改消息留言") - @ApiOperation("修改消息留言") - @PreAuthorize("@el.check('messageOrderLeave:edit')") - public ResponseEntity<Object> updateMessageOrderLeave(@Validated @RequestBody MessageOrderLeave resources){ - messageOrderLeaveService.update(resources); +// @PutMapping +// @Log("修改消息留言") +// @ApiOperation("修改消息留言") +// @PreAuthorize("@el.check('messageOrderLeave:edit')") +// public ResponseEntity<Object> updateMessageOrderLeave(@Validated @RequestBody MessageOrderLeave resources){ +// messageOrderLeaveService.update(resources); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } + +// @DeleteMapping +// @Log("删除消息留言") +// @ApiOperation("删除消息留言") +// @PreAuthorize("@el.check('messageOrderLeave:del')") +// public ResponseEntity<Object> deleteMessageOrderLeave(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { +// messageOrderLeaveService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } + //顾客点击订单,传回订单id,根据订单id生成一条 消息留言 +// @PutMapping("/customer/{order_id}") +// @ApiOperation("顾客点击订单,传回订单id,根据订单id生成一条 留言,此时顾客可以留言") +// public ResponseEntity<Object> createMessageOrderLeave(@PathVariable("order_id") Integer id,@RequestParam String customerReview) { +// //创建对象 +// MessageOrderLeave messageOrderLeave = new MessageOrderLeave(); +// messageOrderLeave.setOrderId(id); +// //如果customerReview为空,默认为“用户未留言” +// messageOrderLeave.setCustomerReview(customerReview); +// //设置创建时间为当前时间 +// messageOrderLeave.setCreateTime(new Timestamp(System.currentTimeMillis())); +// //若表中order_id订单还没存在则调用update留言 +// +// +// if(messageOrderLeaveService.findByOrderId(id)==null){ +// messageOrderLeaveService.updateById(messageOrderLeave); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } else { +// // 已存在则不保存,返回 OK 表示成功但无新资源创建 +// return new ResponseEntity<>(HttpStatus.OK); +// } +// +// } + + @PutMapping("/customer/{order_id}") + @ApiOperation("顾客点击订单,传回订单id,根据订单id更新一条留言") + public ResponseEntity<Object> updateMessageOrderLeaveCustomer(@PathVariable("order_id") Integer id, @RequestBody MessageOrderLeave messageOrderLeave1) { + // 根据 order_id 查找留言信息 + MessageOrderLeave messageOrderLeave = messageOrderLeaveService.findByOrderId(id); + + // 如果留言信息不存在,返回 404 Not Found + if (messageOrderLeave == null) { + return new ResponseEntity<>("Message order leave not found for order ID: " + id, HttpStatus.NOT_FOUND); + } + + // 设置顾客评价内容 + if (messageOrderLeave1.getCustomerReview() != null && !messageOrderLeave1.getCustomerReview().trim().isEmpty()) { + messageOrderLeave.setCustomerReview(messageOrderLeave1.getCustomerReview()); + } else { + messageOrderLeave.setCustomerReview("用户未留言"); + } + + // 更新最后一次操作的时间 + messageOrderLeave.setCreateTime(new Timestamp(System.currentTimeMillis())); + + // 调用服务层更新数据 + boolean updated = messageOrderLeaveService.updateById(messageOrderLeave); + + // 如果更新失败,返回 500 Internal Server Error + if (!updated) { + return new ResponseEntity<>("Failed to update message order leave", HttpStatus.INTERNAL_SERVER_ERROR); + } + + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + //商家对订单id进行回复 +// @PutMapping("/seller/{order_id}") +// @ApiOperation("商家对订单id进行回复") +// public ResponseEntity<Object> updateMessageOrderLeave(@PathVariable("order_id") Integer id, @RequestParam String sellerReply) { +// // 检查 sellerReply 是否为空 +// if (sellerReply == null || sellerReply.trim().isEmpty()) { +// return new ResponseEntity<>("sellerReply is required", HttpStatus.BAD_REQUEST); +// } +// +// // 根据 order_id 查找留言信息 +// MessageOrderLeave messageOrderLeave = messageOrderLeaveService.findByOrderId(id); +// +// // 如果没有找到对应的留言信息,返回 404 Not Found +// if (messageOrderLeave == null) { +// return new ResponseEntity<>("Message order leave not found for order ID: " + id, HttpStatus.NOT_FOUND); +// } +// +// // 设置商家回复内容 +// messageOrderLeave.setSellerReply(sellerReply); +// // 更新最后一次操作的时间 +// messageOrderLeave.setCreateTime(new Timestamp(System.currentTimeMillis())); +// +// // 调用服务层更新数据 +// boolean updated = messageOrderLeaveService.updateById(messageOrderLeave); +// +// // 如果更新失败,返回 500 Internal Server Error +// if (!updated) { +// return new ResponseEntity<>("Failed to update message order leave", HttpStatus.INTERNAL_SERVER_ERROR); +// } +// +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } + //商家对订单id进行回复 订单id必须唯一限制 否则会报错 + @PutMapping("/seller/{order_id}") + @ApiOperation("商家对订单id进行回复") + public ResponseEntity<Object> updateMessageOrderLeaveSeller(@PathVariable("order_id") Integer id, @RequestBody MessageOrderLeave messageOrderLeave1) { + // 根据 order_id 查找留言信息 + MessageOrderLeave messageOrderLeave = messageOrderLeaveService.findByOrderId(id); + + // 如果没有找到对应的留言信息,返回 404 Not Found + if (messageOrderLeave == null) { + return new ResponseEntity<>("Message order leave not found for order ID: " + id, HttpStatus.NOT_FOUND); + } + + // 设置商家回复内容 + messageOrderLeave.setSellerReply(messageOrderLeave1.getSellerReply()); + // 更新最后一次操作的时间 + messageOrderLeave.setCreateTime(new Timestamp(System.currentTimeMillis())); + + // 调用服务层更新数据 + boolean updated = messageOrderLeaveService.updateById(messageOrderLeave); + + // 如果更新失败,返回 500 Internal Server Error + if (!updated) { + return new ResponseEntity<>("Failed to update message order leave", HttpStatus.INTERNAL_SERVER_ERROR); + } + return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @DeleteMapping - @Log("删除消息留言") - @ApiOperation("删除消息留言") - @PreAuthorize("@el.check('messageOrderLeave:del')") - public ResponseEntity<Object> deleteMessageOrderLeave(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { - messageOrderLeaveService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } } diff --git a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java index eaa6a4b..33909f6 100644 --- a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java +++ b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java @@ -2,6 +2,7 @@ import com.oying.annotation.Log; import com.oying.modules.message.domain.MessageOrderSeller; +import com.oying.modules.message.domain.MessageOrderSeller; import com.oying.modules.message.service.MessageOrderSellerService; import com.oying.modules.message.domain.dto.MessageOrderSellerQueryCriteria; import lombok.RequiredArgsConstructor; @@ -24,17 +25,17 @@ @RestController @RequiredArgsConstructor @Api(tags = "卖家端订单消息通知") -@RequestMapping("/api/messageOrderSeller") +@RequestMapping("/api/message/messageOrderSeller") public class MessageOrderSellerController { private final MessageOrderSellerService messageOrderSellerService; - @ApiOperation("导出数据") - @GetMapping(value = "/download") - @PreAuthorize("@el.check('messageOrderSeller:list')") - public void exportMessageOrderSeller(HttpServletResponse response, MessageOrderSellerQueryCriteria criteria) throws IOException { - messageOrderSellerService.download(messageOrderSellerService.queryAll(criteria), response); - } +// @ApiOperation("导出数据") +// @GetMapping(value = "/download") +// @PreAuthorize("@el.check('messageOrderSeller:list')") +// public void exportMessageOrderSeller(HttpServletResponse response, MessageOrderSellerQueryCriteria criteria) throws IOException { +// messageOrderSellerService.download(messageOrderSellerService.queryAll(criteria), response); +// } @GetMapping @ApiOperation("查询卖家端订单消息通知") @@ -44,30 +45,64 @@ return new ResponseEntity<>(messageOrderSellerService.queryAll(criteria,page),HttpStatus.OK); } - @PostMapping - @Log("新增卖家端订单消息通知") - @ApiOperation("新增卖家端订单消息通知") - @PreAuthorize("@el.check('messageOrderSeller:add')") - public ResponseEntity<Object> createMessageOrderSeller(@Validated @RequestBody MessageOrderSeller resources){ - messageOrderSellerService.create(resources); - return new ResponseEntity<>(HttpStatus.CREATED); +// @PostMapping +// @Log("新增卖家端订单消息通知") +// @ApiOperation("新增卖家端订单消息通知") +// @PreAuthorize("@el.check('messageOrderSeller:add')") +// public ResponseEntity<Object> createMessageOrderSeller(@Validated @RequestBody MessageOrderSeller resources){ +// messageOrderSellerService.create(resources); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } +// +// @PutMapping +// @Log("修改卖家端订单消息通知") +// @ApiOperation("修改卖家端订单消息通知") +// @PreAuthorize("@el.check('messageOrderSeller:edit')") +// public ResponseEntity<Object> updateMessageOrderSeller(@Validated @RequestBody MessageOrderSeller resources){ +// messageOrderSellerService.update(resources); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } +// +// @DeleteMapping +// @Log("删除卖家端订单消息通知") +// @ApiOperation("删除卖家端订单消息通知") +// @PreAuthorize("@el.check('messageOrderSeller:del')") +// public ResponseEntity<Object> deleteMessageOrderSeller(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { +// messageOrderSellerService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } + + //订单状态变化通知 + @GetMapping("/status/{order_id}") + @ApiOperation("查询一条订单状态变化通知") + public ResponseEntity<String> getMessageOrderSeller(@PathVariable Integer order_id) { + MessageOrderSeller messageOrderSeller = messageOrderSellerService.findByOrderId(order_id); + String message = messageOrderSeller.getMessageType(); + + return new ResponseEntity<>(message, HttpStatus.OK); + } + //订单送达通知 + @GetMapping("/deliver/{order_id}") + @ApiOperation("查询一条订单送达通知") + public ResponseEntity<String> getMessageOrderSellerDeliver(@PathVariable Integer order_id) { + MessageOrderSeller messageOrderSeller = messageOrderSellerService.findByOrderId(order_id); + String message = messageOrderSeller.getMessageType(); + //如果MessageType为订单送达,则返回message——content + if (message.equals("买家下单")) { + String messageContent = messageOrderSeller.getMessageContent(); + return new ResponseEntity<>(messageContent, HttpStatus.OK); + }else{ + //返回没送达 + return new ResponseEntity<>("买家没下单", HttpStatus.OK); + } + } + //实现点击跳转到订单详情 + @GetMapping("/link/{order_id}") + @ApiOperation("点击跳转到订单详情") + public ResponseEntity<String> getMessageOrderSellerLink(@PathVariable Integer order_id) { + MessageOrderSeller messageOrderSeller = messageOrderSellerService.findByOrderId(order_id); + String link = messageOrderSeller.getLink(); + return new ResponseEntity<>(link, HttpStatus.OK); } - @PutMapping - @Log("修改卖家端订单消息通知") - @ApiOperation("修改卖家端订单消息通知") - @PreAuthorize("@el.check('messageOrderSeller:edit')") - public ResponseEntity<Object> updateMessageOrderSeller(@Validated @RequestBody MessageOrderSeller resources){ - messageOrderSellerService.update(resources); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @DeleteMapping - @Log("删除卖家端订单消息通知") - @ApiOperation("删除卖家端订单消息通知") - @PreAuthorize("@el.check('messageOrderSeller:del')") - public ResponseEntity<Object> deleteMessageOrderSeller(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { - messageOrderSellerService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } } diff --git a/oying-system/src/main/java/com/oying/modules/message/rest/MessageSystemController.java b/oying-system/src/main/java/com/oying/modules/message/rest/MessageSystemController.java index af58c2a..0df458c 100644 --- a/oying-system/src/main/java/com/oying/modules/message/rest/MessageSystemController.java +++ b/oying-system/src/main/java/com/oying/modules/message/rest/MessageSystemController.java @@ -5,7 +5,12 @@ import com.oying.modules.message.service.MessageSystemService; import com.oying.modules.message.domain.dto.MessageSystemQueryCriteria; import lombok.RequiredArgsConstructor; + +import java.sql.Timestamp; +import java.util.Date; import java.util.List; + +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -24,17 +29,17 @@ @RestController @RequiredArgsConstructor @Api(tags = "消息_系统") -@RequestMapping("/api/messageSystem") +@RequestMapping("/api/message/messageSystem") public class MessageSystemController { private final MessageSystemService messageSystemService; - @ApiOperation("导出数据") - @GetMapping(value = "/download") - @PreAuthorize("@el.check('messageSystem:list')") - public void exportMessageSystem(HttpServletResponse response, MessageSystemQueryCriteria criteria) throws IOException { - messageSystemService.download(messageSystemService.queryAll(criteria), response); - } +// @ApiOperation("导出数据") +// @GetMapping(value = "/download") +// @PreAuthorize("@el.check('messageSystem:list')") +// public void exportMessageSystem(HttpServletResponse response, MessageSystemQueryCriteria criteria) throws IOException { +// messageSystemService.download(messageSystemService.queryAll(criteria), response); +// } @GetMapping @ApiOperation("查询消息_系统") @@ -44,30 +49,57 @@ return new ResponseEntity<>(messageSystemService.queryAll(criteria,page),HttpStatus.OK); } - @PostMapping - @Log("新增消息_系统") - @ApiOperation("新增消息_系统") - @PreAuthorize("@el.check('messageSystem:add')") - public ResponseEntity<Object> createMessageSystem(@Validated @RequestBody MessageSystem resources){ - messageSystemService.create(resources); - return new ResponseEntity<>(HttpStatus.CREATED); - } +// @PostMapping +// @Log("新增消息_系统") +// @ApiOperation("新增消息_系统") +// @PreAuthorize("@el.check('messageSystem:add')") +// public ResponseEntity<Object> createMessageSystem(@Validated @RequestBody MessageSystem resources){ +// messageSystemService.create(resources); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } - @PutMapping - @Log("修改消息_系统") - @ApiOperation("修改消息_系统") - @PreAuthorize("@el.check('messageSystem:edit')") - public ResponseEntity<Object> updateMessageSystem(@Validated @RequestBody MessageSystem resources){ - messageSystemService.update(resources); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } +// @PutMapping +// @Log("修改消息_系统") +// @ApiOperation("修改消息_系统") +// @PreAuthorize("@el.check('messageSystem:edit')") +// public ResponseEntity<Object> updateMessageSystem(@Validated @RequestBody MessageSystem resources){ +// messageSystemService.update(resources); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } - @DeleteMapping - @Log("删除消息_系统") - @ApiOperation("删除消息_系统") - @PreAuthorize("@el.check('messageSystem:del')") - public ResponseEntity<Object> deleteMessageSystem(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { - messageSystemService.deleteAll(ids); +// @DeleteMapping +// @Log("删除消息_系统") +// @ApiOperation("删除消息_系统") +// @PreAuthorize("@el.check('messageSystem:del')") +// public ResponseEntity<Object> deleteMessageSystem(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) { +// messageSystemService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } + + //查询一条系统消息 + @GetMapping("/{id}") + @ApiOperation("查询一条系统消息") + public ResponseEntity<MessageSystem> getMessageSystem(@PathVariable Integer id){ + MessageSystem messageSystem = messageSystemService.getById(id); + return new ResponseEntity<>(messageSystem,HttpStatus.OK); + } + //插入一条系统消息 带两个参数start与end + @PostMapping() + @ApiOperation("插入一条系统消息") + public ResponseEntity<Object> insertMessageSystem( + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date start, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date end) { + + // 创建 MessageSystem 对象 + MessageSystem messageSystem = new MessageSystem(); + messageSystem.setStartTime(new Timestamp(start.getTime())); + messageSystem.setEndTime(new Timestamp(end.getTime())); + + // 调用服务层保存数据 + messageSystemService.save(messageSystem); + return new ResponseEntity<>(HttpStatus.OK); } + + } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderBuyerService.java b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderBuyerService.java index 3abe91b..788bef2 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderBuyerService.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderBuyerService.java @@ -1,6 +1,7 @@ package com.oying.modules.message.service; import com.oying.modules.message.domain.MessageOrderBuyer; +import com.oying.modules.message.domain.MessageOrderLeave; import com.oying.modules.message.domain.dto.MessageOrderBuyerQueryCriteria; import java.util.Map; import java.util.List; @@ -57,4 +58,6 @@ * @throws IOException / */ void download(List<MessageOrderBuyer> all, HttpServletResponse response) throws IOException; + + public MessageOrderBuyer findByOrderId(Integer orderId) ; } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderLeaveService.java b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderLeaveService.java index 1f0ce0d..f20e46e 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderLeaveService.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderLeaveService.java @@ -1,5 +1,6 @@ package com.oying.modules.message.service; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.oying.modules.message.domain.MessageOrderLeave; import com.oying.modules.message.domain.dto.MessageOrderLeaveQueryCriteria; import java.util.Map; @@ -42,7 +43,7 @@ * 编辑 * @param resources / */ - void update(MessageOrderLeave resources); +// void update(MessageOrderLeave resources); /** * 多选删除 @@ -57,4 +58,12 @@ * @throws IOException / */ void download(List<MessageOrderLeave> all, HttpServletResponse response) throws IOException; + + /** + * 根据订单ID查找留言信息 + * @param orderId 订单ID + * @return 匹配的留言记录,若不存在则返回 null + */ + public MessageOrderLeave findByOrderId(Integer orderId) ; + } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java index 038f650..29d672b 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java @@ -1,5 +1,6 @@ package com.oying.modules.message.service; +import com.oying.modules.message.domain.MessageOrderBuyer; import com.oying.modules.message.domain.MessageOrderSeller; import com.oying.modules.message.domain.dto.MessageOrderSellerQueryCriteria; import java.util.Map; @@ -57,4 +58,5 @@ * @throws IOException / */ void download(List<MessageOrderSeller> all, HttpServletResponse response) throws IOException; + public MessageOrderSeller findByOrderId(Integer orderId) ; } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/MessageSystemService.java b/oying-system/src/main/java/com/oying/modules/message/service/MessageSystemService.java index 713df86..38c4ccb 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/MessageSystemService.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/MessageSystemService.java @@ -2,6 +2,8 @@ import com.oying.modules.message.domain.MessageSystem; import com.oying.modules.message.domain.dto.MessageSystemQueryCriteria; + +import java.util.Date; import java.util.Map; import java.util.List; import java.io.IOException; @@ -57,4 +59,6 @@ * @throws IOException / */ void download(List<MessageSystem> all, HttpServletResponse response) throws IOException; + + } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.java b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.java index 72b1b20..212e818 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.java @@ -1,5 +1,6 @@ package com.oying.modules.message.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.oying.modules.message.domain.MessageOrderBuyer; import com.oying.utils.FileUtil; import lombok.RequiredArgsConstructor; @@ -74,4 +75,9 @@ } FileUtil.downloadExcel(list, response); } + + @Override + public MessageOrderBuyer findByOrderId(Integer orderId) { + return baseMapper.selectOne(new QueryWrapper<MessageOrderBuyer>().eq("order_id", orderId)); + } } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.java b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.java index 081c554..9d28813 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.java @@ -1,5 +1,6 @@ package com.oying.modules.message.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.oying.modules.message.domain.MessageOrderLeave; import com.oying.utils.FileUtil; import lombok.RequiredArgsConstructor; @@ -46,13 +47,13 @@ messageOrderLeaveMapper.insert(resources); } - @Override - @Transactional(rollbackFor = Exception.class) - public void update(MessageOrderLeave resources) { - MessageOrderLeave messageOrderLeave = getById(resources.getId()); - messageOrderLeave.copy(resources); - messageOrderLeaveMapper.updateById(messageOrderLeave); - } +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void update(MessageOrderLeave resources) { +// MessageOrderLeave messageOrderLeave = getById(resources.getId()); +// messageOrderLeave.copy(resources); +// messageOrderLeaveMapper.updateById(messageOrderLeave); +// } @Override @Transactional(rollbackFor = Exception.class) @@ -74,4 +75,15 @@ } FileUtil.downloadExcel(list, response); } + + /** + * 根据订单ID查找留言信息 + * @param orderId 订单ID + * @return 匹配的留言记录,若不存在则返回 null + */ + public MessageOrderLeave findByOrderId(Integer orderId) { + return baseMapper.selectOne(new QueryWrapper<MessageOrderLeave>() + .eq("order_id", orderId)); + } + } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java index 5d65145..1668632 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java @@ -1,5 +1,7 @@ package com.oying.modules.message.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.oying.modules.message.domain.MessageOrderBuyer; import com.oying.modules.message.domain.MessageOrderSeller; import com.oying.utils.FileUtil; import lombok.RequiredArgsConstructor; @@ -74,4 +76,9 @@ } FileUtil.downloadExcel(list, response); } + + @Override + public MessageOrderSeller findByOrderId(Integer orderId) { + return baseMapper.selectOne(new QueryWrapper<MessageOrderSeller>().eq("order_id", orderId)); + } } diff --git a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageSystemServiceImpl.java b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageSystemServiceImpl.java index 2ffb55c..0fc9845 100644 --- a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageSystemServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageSystemServiceImpl.java @@ -1,5 +1,7 @@ package com.oying.modules.message.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.oying.modules.message.domain.MessageOrderLeave; import com.oying.modules.message.domain.MessageSystem; import com.oying.utils.FileUtil; import lombok.RequiredArgsConstructor; @@ -11,12 +13,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.oying.utils.PageUtil; -import java.util.List; -import java.util.Map; + +import java.util.*; import java.io.IOException; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.LinkedHashMap; + import com.oying.utils.PageResult; /** @@ -71,4 +72,8 @@ } FileUtil.downloadExcel(list, response); } + + + + } diff --git a/oying-system/src/test/java/com/oying/modules/message/rest/MessageSystemControllerTest.java b/oying-system/src/test/java/com/oying/modules/message/rest/MessageSystemControllerTest.java new file mode 100644 index 0000000..48a3268 --- /dev/null +++ b/oying-system/src/test/java/com/oying/modules/message/rest/MessageSystemControllerTest.java @@ -0,0 +1,14 @@ +package com.oying.modules.message.rest; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class MessageSystemControllerTest { + + + @Test + void insertMessageSystem() { + + } +} \ No newline at end of file diff --git a/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderBuyer.class b/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderBuyer.class index e16cbbe..cb926d0 100644 --- a/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderBuyer.class +++ b/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderBuyer.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderLeave.class b/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderLeave.class index 059811f..7b343d5 100644 --- a/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderLeave.class +++ b/oying-system/target/classes/com/oying/modules/message/domain/MessageOrderLeave.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/domain/MessageSystem.class b/oying-system/target/classes/com/oying/modules/message/domain/MessageSystem.class index 314fac9..da889f0 100644 --- a/oying-system/target/classes/com/oying/modules/message/domain/MessageSystem.class +++ b/oying-system/target/classes/com/oying/modules/message/domain/MessageSystem.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderBuyerController.class b/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderBuyerController.class index 7bc61af..ed78da8 100644 --- a/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderBuyerController.class +++ b/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderBuyerController.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderLeaveController.class b/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderLeaveController.class index 2022d2d..62fcadb 100644 --- a/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderLeaveController.class +++ b/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderLeaveController.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderSellerController.class b/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderSellerController.class index 309b405..806a1f7 100644 --- a/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderSellerController.class +++ b/oying-system/target/classes/com/oying/modules/message/rest/MessageOrderSellerController.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/rest/MessageSystemController.class b/oying-system/target/classes/com/oying/modules/message/rest/MessageSystemController.class index 853a5f5..5d6cbc7 100644 --- a/oying-system/target/classes/com/oying/modules/message/rest/MessageSystemController.class +++ b/oying-system/target/classes/com/oying/modules/message/rest/MessageSystemController.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/MessageOrderBuyerService.class b/oying-system/target/classes/com/oying/modules/message/service/MessageOrderBuyerService.class index 259ff0e..c5c833b 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/MessageOrderBuyerService.class +++ b/oying-system/target/classes/com/oying/modules/message/service/MessageOrderBuyerService.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/MessageOrderLeaveService.class b/oying-system/target/classes/com/oying/modules/message/service/MessageOrderLeaveService.class index 84c8a4a..097fbf7 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/MessageOrderLeaveService.class +++ b/oying-system/target/classes/com/oying/modules/message/service/MessageOrderLeaveService.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/MessageOrderSellerService.class b/oying-system/target/classes/com/oying/modules/message/service/MessageOrderSellerService.class index 3c32be4..d3de918 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/MessageOrderSellerService.class +++ b/oying-system/target/classes/com/oying/modules/message/service/MessageOrderSellerService.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.class b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.class index 55c36dc..20899af 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.class +++ b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderBuyerServiceImpl.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.class b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.class index 5735a7f..450d651 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.class +++ b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderLeaveServiceImpl.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.class b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.class index 4d71a65..9e07328 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.class +++ b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.class Binary files differ diff --git a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageSystemServiceImpl.class b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageSystemServiceImpl.class index f18132c..4022831 100644 --- a/oying-system/target/classes/com/oying/modules/message/service/impl/MessageSystemServiceImpl.class +++ b/oying-system/target/classes/com/oying/modules/message/service/impl/MessageSystemServiceImpl.class Binary files differ -- Gitblit v1.9.3