diff --git a/hope-winery/src/main/java/com/ruoyi/winery/controller/AppOrderController.java b/hope-winery/src/main/java/com/ruoyi/winery/controller/AppOrderController.java new file mode 100644 index 000000000..91182775b --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/controller/AppOrderController.java @@ -0,0 +1,221 @@ +package com.ruoyi.winery.controller; + +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; +import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; +import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; +import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.winery.domain.AppOrder; +import com.ruoyi.winery.domain.AppOrderDetail; +import com.ruoyi.winery.domain.goods.GoodsMain; +import com.ruoyi.winery.domain.winery.WineryOrders; +import com.ruoyi.winery.service.IAppOrderDetailService; +import com.ruoyi.winery.service.IAppOrderService; +import com.ruoyi.winery.service.IGoodsMainService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.ruoyi.common.core.domain.AjaxResult.error; +import static com.ruoyi.common.core.domain.AjaxResult.success; +import static com.ruoyi.common.utils.SecurityUtils.*; + +/** + * 订单Controller + * + * @author ruoyi + * @date 2021-01-18 + */ +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/winery/order") +public class AppOrderController extends BaseController { + + private final IAppOrderService iAppOrderService; + + @Autowired + private WxPayService wxPayService; + + @Autowired + private IGoodsMainService goodsMainService; + + @Autowired + private IAppOrderDetailService detailService; + + /** + * 查询订单列表 + */ + @PreAuthorize("@ss.hasPermi('winery:order:list')") + @GetMapping("/list") + public TableDataInfo list(AppOrder appOrder) { + startPage(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(appOrder); + if (appOrder.getDeptId() != null) { + lqw.eq(AppOrder::getDeptId, appOrder.getDeptId()); + } + if (appOrder.getUserId() != null) { + lqw.eq(AppOrder::getUserId, appOrder.getUserId()); + } + if (StringUtils.isNotBlank(appOrder.getAddressId())) { + lqw.eq(AppOrder::getAddressId, appOrder.getAddressId()); + } + if (StringUtils.isNotBlank(appOrder.getPayMsg())) { + lqw.eq(AppOrder::getPayMsg, appOrder.getPayMsg()); + } + if (appOrder.getTotalFee() != null) { + lqw.eq(AppOrder::getTotalFee, appOrder.getTotalFee()); + } + if (StringUtils.isNotBlank(appOrder.getTransportNo())) { + lqw.eq(AppOrder::getTransportNo, appOrder.getTransportNo()); + } + if (appOrder.getStatus() != null) { + lqw.eq(AppOrder::getStatus, appOrder.getStatus()); + } + if (appOrder.getPayTime() != null) { + lqw.eq(AppOrder::getPayTime, appOrder.getPayTime()); + } + if (appOrder.getCancelTime() != null) { + lqw.eq(AppOrder::getCancelTime, appOrder.getCancelTime()); + } + lqw.orderByDesc(AppOrder::getCreateTime); + List list = iAppOrderService.list(lqw); + for (AppOrder order : list) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); + wrapper.eq(AppOrderDetail::getOrderId, order.getId()); + List detailList = detailService.list(wrapper); + for (AppOrderDetail detail : detailList) { + detail.setGoods(goodsMainService.getById(detail.getGoodsId())); + } + order.setOrderDetailList(detailList); + } + return getDataTable(list); + } + + /** + * 导出订单列表 + */ + @PreAuthorize("@ss.hasPermi('winery:order:export')") + @Log(title = "订单", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(AppOrder appOrder) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper(appOrder); + List list = iAppOrderService.list(lqw); + ExcelUtil util = new ExcelUtil(AppOrder.class); + return util.exportExcel(list, "order"); + } + + /** + * 获取订单详细信息 + */ + @PreAuthorize("@ss.hasPermi('winery:order:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") String id) { + AppOrder order = iAppOrderService.getById(id); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); + wrapper.eq(AppOrderDetail::getOrderId, order.getId()); + List detailList = detailService.list(wrapper); + order.setOrderDetailList(detailList); + for (AppOrderDetail detail : detailList) { + detail.setGoods(goodsMainService.getById(detail.getGoodsId())); + } + return success(order); + } + + /** + * 新增订单 + */ + @PreAuthorize("@ss.hasPermi('winery:order:add')") + @Log(title = "订单", businessType = BusinessType.INSERT) + @PostMapping + @Transactional + public AjaxResult add(@RequestBody AppOrder appOrder, HttpServletRequest req) { + Long userId = getLoginUser().getUser().getUserId(); + String username = getUsername(); + Long deptId = getDeptId(); + String id = System.currentTimeMillis() + RandomUtil.randomNumbers(6); + appOrder.setId(id); + appOrder.setDeptId(getDeptId()); + appOrder.setUserId(userId); + + // 计算总金额 + List orderDetailList = appOrder.getOrderDetailList(); + Integer totalFee = 0; + for (AppOrderDetail detail : orderDetailList) { + GoodsMain goods = goodsMainService.getById(detail.getGoodsId()); + detail.setUserId(userId); + detail.setOrderId(id); + detail.setDeptId(deptId); + detail.setStatus(0); + detailService.save(detail); + totalFee += (goods.getGoodsPrice().multiply(new BigDecimal(100)).intValue() * detail.getGoodsCount()); + } + appOrder.setTotalFee(totalFee); + + // 统一下单 + WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); + String openId = ""; + if (username.contains("mini-")) { + openId = username.split("-")[1]; + } + request.setOpenid(openId); + request.setTotalFee(totalFee); + request.setBody("订单编号" + id); + request.setOutTradeNo(id); + request.setSpbillCreateIp(req.getRemoteAddr()); + request.setTradeType("JSAPI"); + + try { + WxPayMpOrderResult payMsg = wxPayService.createOrder(request); + appOrder.setPayMsg(((JSONObject) JSONObject.toJSON(payMsg)).toJSONString()); + appOrder.setStatus(0); + iAppOrderService.save(appOrder); + + return success("success", payMsg); + } catch (WxPayException e) { + e.printStackTrace(); + return error(); + } + } + + /** + * 修改订单 + */ + @PreAuthorize("@ss.hasPermi('winery:order:edit')") + @Log(title = "订单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody AppOrder appOrder) { + return toAjax(iAppOrderService.updateById(appOrder) ? 1 : 0); + } + + /** + * 删除订单 + */ + @PreAuthorize("@ss.hasPermi('winery:order:remove')") + @Log(title = "订单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) { + return toAjax(iAppOrderService.removeByIds(Arrays.asList(ids)) ? 1 : 0); + } +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/controller/AppOrderDetailController.java b/hope-winery/src/main/java/com/ruoyi/winery/controller/AppOrderDetailController.java new file mode 100644 index 000000000..1398bf099 --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/controller/AppOrderDetailController.java @@ -0,0 +1,188 @@ +package com.ruoyi.winery.controller; + +import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Arrays; + +import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; +import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.WxPayService; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.winery.domain.AppOrder; +import com.ruoyi.winery.domain.goods.GoodsMain; +import com.ruoyi.winery.service.IAppOrderService; +import com.ruoyi.winery.service.IGoodsMainService; +import lombok.RequiredArgsConstructor; +import org.checkerframework.checker.units.qual.A; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.winery.domain.AppOrderDetail; +import com.ruoyi.winery.service.IAppOrderDetailService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +import static com.ruoyi.common.core.domain.AjaxResult.error; + +/** + * 订单明细Controller + * + * @author ruoyi + * @date 2021-01-18 + */ +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/winery/detail" ) +public class AppOrderDetailController extends BaseController { + + private final IAppOrderDetailService iAppOrderDetailService; + + @Autowired + private IGoodsMainService goodsMainService; + + @Autowired + private WxPayService wxPayService; + + @Autowired + private IAppOrderService orderService; + + /** + * 查询订单明细列表 + */ + @PreAuthorize("@ss.hasPermi('winery:detail:list')") + @GetMapping("/list") + public TableDataInfo list(AppOrderDetail appOrderDetail) + { + startPage(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(appOrderDetail); + if (appOrderDetail.getDeptId() != null){ + lqw.eq(AppOrderDetail::getDeptId ,appOrderDetail.getDeptId()); + } + if (appOrderDetail.getUserId() != null){ + lqw.eq(AppOrderDetail::getUserId ,appOrderDetail.getUserId()); + } + if (StringUtils.isNotBlank(appOrderDetail.getOrderId())){ + lqw.eq(AppOrderDetail::getOrderId ,appOrderDetail.getOrderId()); + } + if (StringUtils.isNotBlank(appOrderDetail.getGoodsId())){ + lqw.eq(AppOrderDetail::getGoodsId ,appOrderDetail.getGoodsId()); + } + if (appOrderDetail.getGoodsCount() != null){ + lqw.eq(AppOrderDetail::getGoodsCount ,appOrderDetail.getGoodsCount()); + } + if (appOrderDetail.getStatus() != null){ + lqw.eq(AppOrderDetail::getStatus ,appOrderDetail.getStatus()); + } + if (StringUtils.isNotBlank(appOrderDetail.getRefundNo())){ + lqw.eq(AppOrderDetail::getRefundNo ,appOrderDetail.getRefundNo()); + } + if (appOrderDetail.getRefundTime() != null){ + lqw.eq(AppOrderDetail::getRefundTime ,appOrderDetail.getRefundTime()); + } + List list = iAppOrderDetailService.list(lqw); + for (AppOrderDetail detail : list) { + detail.setGoods(goodsMainService.getById(detail.getGoodsId())); + } + return getDataTable(list); + } + + /** + * 导出订单明细列表 + */ + @PreAuthorize("@ss.hasPermi('winery:detail:export')" ) + @Log(title = "订单明细" , businessType = BusinessType.EXPORT) + @GetMapping("/export" ) + public AjaxResult export(AppOrderDetail appOrderDetail) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper(appOrderDetail); + List list = iAppOrderDetailService.list(lqw); + ExcelUtil util = new ExcelUtil(AppOrderDetail. class); + return util.exportExcel(list, "detail" ); + } + + /** + * 获取订单明细详细信息 + */ + @PreAuthorize("@ss.hasPermi('winery:detail:query')" ) + @GetMapping(value = "/{id}" ) + public AjaxResult getInfo(@PathVariable("id" ) String id) { + AppOrderDetail detail = iAppOrderDetailService.getById(id); + detail.setGoods(goodsMainService.getById(detail.getGoodsId())); + return AjaxResult.success(detail); + } + + /** + * 新增订单明细 + */ + @PreAuthorize("@ss.hasPermi('winery:detail:add')" ) + @Log(title = "订单明细" , businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody AppOrderDetail appOrderDetail) { + return toAjax(iAppOrderDetailService.save(appOrderDetail) ? 1 : 0); + } + + /** + * 修改订单明细 + */ + @PreAuthorize("@ss.hasPermi('winery:detail:edit')" ) + @Log(title = "订单明细" , businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody AppOrderDetail appOrderDetail) { + return toAjax(iAppOrderDetailService.updateById(appOrderDetail) ? 1 : 0); + } + + /** + * 删除订单明细 + */ + @PreAuthorize("@ss.hasPermi('winery:detail:remove')" ) + @Log(title = "订单明细" , businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}" ) + public AjaxResult remove(@PathVariable String[] ids) { + return toAjax(iAppOrderDetailService.removeByIds(Arrays.asList(ids)) ? 1 : 0); + } + + @PreAuthorize("@ss.hasPermi('winery:detail:remove')") + @Log(title = "退款", businessType = BusinessType.OTHER) + @PostMapping("/refund/{id}") + AjaxResult refund(@PathVariable String id) { + AppOrderDetail detail = iAppOrderDetailService.getById(id); + AppOrder order = orderService.getById(detail.getOrderId()); + GoodsMain goods = goodsMainService.getById(detail.getGoodsId()); + Integer fee = goods.getGoodsPrice().multiply(new BigDecimal(100)).intValue() * detail.getGoodsCount(); + + String refundNo = System.currentTimeMillis() + RandomUtil.randomNumbers(6); + WxPayRefundRequest request = new WxPayRefundRequest(); + request.setRefundFee(fee); + request.setTotalFee(order.getTotalFee()); + request.setOutTradeNo(detail.getOrderId()); + request.setOutRefundNo(refundNo); + WxPayRefundResult refund = null; + try { + wxPayService.refund(request); + detail.setRefundTime(DateUtils.getNowDate()); + detail.setRefundNo(refundNo); + detail.setStatus(3); + iAppOrderDetailService.updateById(detail); + return AjaxResult.success(detail); + } catch (WxPayException e) { + e.printStackTrace(); + return error(); + } + } +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/controller/winery/WineryOrdersController.java b/hope-winery/src/main/java/com/ruoyi/winery/controller/winery/WineryOrdersController.java index 3704ca490..37180b47f 100644 --- a/hope-winery/src/main/java/com/ruoyi/winery/controller/winery/WineryOrdersController.java +++ b/hope-winery/src/main/java/com/ruoyi/winery/controller/winery/WineryOrdersController.java @@ -1,5 +1,6 @@ package com.ruoyi.winery.controller.winery; +import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -114,45 +115,47 @@ public class WineryOrdersController extends BaseController { /** * 新增客户订单 */ - @PreAuthorize("@ss.hasPermi('winery:user_orders:add')") - @Log(title = "客户订单", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody WineryOrders wineryOrders, HttpServletRequest req) { - wineryOrders.setCreateBy(getUsername()); - wineryOrders.setDeptId(getDeptId()); - - // 统一下单 - WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); - String userName = getLoginUser().getUser().getUserName(); - String openId = ""; - if (userName.contains("mini-")) { - openId = userName.split("-")[1]; - } - request.setOpenid(openId); - request.setTotalFee(wineryOrders.getGoodsPrice().multiply(new BigDecimal(100)).intValue()); - request.setBody(wineryOrders.getGoodsName()); - String outTradeNo = UUID.randomUUID().toString().replace("-", ""); - request.setOutTradeNo(outTradeNo); - request.setNotifyUrl(""); - request.setSpbillCreateIp(req.getRemoteAddr()); - request.setTradeType("JSAPI"); - - - Map map = new HashMap<>(); - try { - map.put("orderId", wineryOrders.getId()); - WxPayMpOrderResult payMsg = wxPayService.createOrder(request); - map.put("payMsg", payMsg); - wineryOrders.setPayMsg(((JSONObject) JSONObject.toJSON(payMsg)).toJSONString()); - wineryOrders.setOutTradeNo(outTradeNo); - wineryOrders.setOrderStatus(0); - iWineryOrdersService.save(wineryOrders); - return success("success", map); - } catch (WxPayException e) { - e.printStackTrace(); - return error(); - } - } + // @PreAuthorize("@ss.hasPermi('winery:user_orders:add')") + // @Log(title = "客户订单", businessType = BusinessType.INSERT) + // @PostMapping + // public AjaxResult add(@RequestBody List wineryOrders, HttpServletRequest req) { + // String username = getUsername(); + // Long deptId = getDeptId(); + // String outTradeNo = RandomUtil.randomNumbers(15); + // wineryOrders.setCreateBy(getUsername()); + // wineryOrders.setDeptId(getDeptId()); + // + // // 统一下单 + // WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); + // String userName = getLoginUser().getUser().getUserName(); + // String openId = ""; + // if (userName.contains("mini-")) { + // openId = userName.split("-")[1]; + // } + // request.setOpenid(openId); + // request.setTotalFee(wineryOrders.getGoodsPrice().multiply(new BigDecimal(100)).intValue()); + // request.setBody("小程序名-订单编号"); + // request.setOutTradeNo(outTradeNo); + // request.setNotifyUrl(""); + // request.setSpbillCreateIp(req.getRemoteAddr()); + // request.setTradeType("JSAPI"); + // + // + // Map map = new HashMap<>(); + // try { + // map.put("orderId", wineryOrders.getId()); + // WxPayMpOrderResult payMsg = wxPayService.createOrder(request); + // map.put("payMsg", payMsg); + // wineryOrders.setPayMsg(((JSONObject) JSONObject.toJSON(payMsg)).toJSONString()); + // wineryOrders.setOutTradeNo(outTradeNo); + // wineryOrders.setOrderStatus(0); + // iWineryOrdersService.save(wineryOrders); + // return success("success", map); + // } catch (WxPayException e) { + // e.printStackTrace(); + // return error(); + // } + // } /** * 修改客户订单 diff --git a/hope-winery/src/main/java/com/ruoyi/winery/domain/AppOrder.java b/hope-winery/src/main/java/com/ruoyi/winery/domain/AppOrder.java new file mode 100644 index 000000000..7de131c8c --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/domain/AppOrder.java @@ -0,0 +1,94 @@ +package com.ruoyi.winery.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; +import com.ruoyi.common.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; +import java.util.List; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 订单对象 app_order + * + * @author ruoyi + * @date 2021-01-18 + */ +@Data +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@Accessors(chain = true) +@TableName("app_order") +public class AppOrder implements Serializable { + +private static final long serialVersionUID=1L; + + + /** 订单ID */ + @TableId(value = "id", type = IdType.INPUT) + private String id; + + /** 部门ID */ + @Excel(name = "部门ID") + private Long deptId; + + /** 用户ID */ + @Excel(name = "用户ID") + private Long userId; + + /** 收货地址ID */ + @Excel(name = "收货地址ID") + private String addressId; + + /** 支付参数 */ + @Excel(name = "支付参数") + private String payMsg; + + /** 总金额 */ + @Excel(name = "总金额") + private Integer totalFee; + + /** 运单号 */ + @Excel(name = "运单号") + private String transportNo; + + /** 订单状态(0待支付1已取消2已支付3待收货4交易完成) */ + @Excel(name = "订单状态" , readConverterExp = "0=待支付,1=已取消,2=已支付,3=待收货,4=交易完成") + private Integer status; + + /** 支付时间 */ + @Excel(name = "支付时间" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date payTime; + + /** 备注 */ + @Excel(name = "备注") + private String remark; + + /** 取消时间 */ + @Excel(name = "取消时间" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date cancelTime; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @TableField(exist = false) + private List orderDetailList; +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/domain/AppOrderDetail.java b/hope-winery/src/main/java/com/ruoyi/winery/domain/AppOrderDetail.java new file mode 100644 index 000000000..1bf4e5e2d --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/domain/AppOrderDetail.java @@ -0,0 +1,88 @@ +package com.ruoyi.winery.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.winery.domain.goods.GoodsMain; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; +import com.ruoyi.common.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 订单明细对象 app_order_detail + * + * @author ruoyi + * @date 2021-01-18 + */ +@Data +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@Accessors(chain = true) +@TableName("app_order_detail") +public class AppOrderDetail implements Serializable { + +private static final long serialVersionUID=1L; + + + /** 明细ID */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + /** 部门ID */ + @Excel(name = "部门ID") + private Long deptId; + + /** 用户ID */ + @Excel(name = "用户ID") + private Long userId; + + /** 订单ID */ + @Excel(name = "订单ID") + private String orderId; + + /** 商品ID */ + @Excel(name = "商品ID") + private String goodsId; + + /** 商品数量 */ + @Excel(name = "商品数量") + private Integer goodsCount; + + /** 明细状态: + * 0 未退款 +1.退款申请 +2.退款中 +3.退款成功 */ + @Excel(name = "明细状态") + private Integer status; + + /** 统一退单号 */ + @Excel(name = "统一退单号") + private String refundNo; + + /** 退款时间 */ + @Excel(name = "退款时间" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date refundTime; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @TableField(exist = false) + private GoodsMain goods; +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/mapper/AppOrderDetailMapper.java b/hope-winery/src/main/java/com/ruoyi/winery/mapper/AppOrderDetailMapper.java new file mode 100644 index 000000000..baee8d81f --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/mapper/AppOrderDetailMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.winery.mapper; + +import com.ruoyi.winery.domain.AppOrderDetail; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 订单明细Mapper接口 + * + * @author ruoyi + * @date 2021-01-18 + */ +public interface AppOrderDetailMapper extends BaseMapper { + +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/mapper/AppOrderMapper.java b/hope-winery/src/main/java/com/ruoyi/winery/mapper/AppOrderMapper.java new file mode 100644 index 000000000..18b0a0875 --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/mapper/AppOrderMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.winery.mapper; + +import com.ruoyi.winery.domain.AppOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 订单Mapper接口 + * + * @author ruoyi + * @date 2021-01-18 + */ +public interface AppOrderMapper extends BaseMapper { + +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/service/IAppOrderDetailService.java b/hope-winery/src/main/java/com/ruoyi/winery/service/IAppOrderDetailService.java new file mode 100644 index 000000000..7d3dbe860 --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/service/IAppOrderDetailService.java @@ -0,0 +1,14 @@ +package com.ruoyi.winery.service; + +import com.ruoyi.winery.domain.AppOrderDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 订单明细Service接口 + * + * @author ruoyi + * @date 2021-01-18 + */ +public interface IAppOrderDetailService extends IService { + +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/service/IAppOrderService.java b/hope-winery/src/main/java/com/ruoyi/winery/service/IAppOrderService.java new file mode 100644 index 000000000..80a9455ea --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/service/IAppOrderService.java @@ -0,0 +1,14 @@ +package com.ruoyi.winery.service; + +import com.ruoyi.winery.domain.AppOrder; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 订单Service接口 + * + * @author ruoyi + * @date 2021-01-18 + */ +public interface IAppOrderService extends IService { + +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/service/impl/AppOrderDetailServiceImpl.java b/hope-winery/src/main/java/com/ruoyi/winery/service/impl/AppOrderDetailServiceImpl.java new file mode 100644 index 000000000..d1bff85bc --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/service/impl/AppOrderDetailServiceImpl.java @@ -0,0 +1,18 @@ +package com.ruoyi.winery.service.impl; + +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.winery.mapper.AppOrderDetailMapper; +import com.ruoyi.winery.domain.AppOrderDetail; +import com.ruoyi.winery.service.IAppOrderDetailService; + +/** + * 订单明细Service业务层处理 + * + * @author ruoyi + * @date 2021-01-18 + */ +@Service +public class AppOrderDetailServiceImpl extends ServiceImpl implements IAppOrderDetailService { + +} diff --git a/hope-winery/src/main/java/com/ruoyi/winery/service/impl/AppOrderServiceImpl.java b/hope-winery/src/main/java/com/ruoyi/winery/service/impl/AppOrderServiceImpl.java new file mode 100644 index 000000000..cc1bb1fd7 --- /dev/null +++ b/hope-winery/src/main/java/com/ruoyi/winery/service/impl/AppOrderServiceImpl.java @@ -0,0 +1,18 @@ +package com.ruoyi.winery.service.impl; + +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.winery.mapper.AppOrderMapper; +import com.ruoyi.winery.domain.AppOrder; +import com.ruoyi.winery.service.IAppOrderService; + +/** + * 订单Service业务层处理 + * + * @author ruoyi + * @date 2021-01-18 + */ +@Service +public class AppOrderServiceImpl extends ServiceImpl implements IAppOrderService { + +} diff --git a/hope-winery/src/main/resources/mapper/winery/AppOrderDetailMapper.xml b/hope-winery/src/main/resources/mapper/winery/AppOrderDetailMapper.xml new file mode 100644 index 000000000..98c2617f3 --- /dev/null +++ b/hope-winery/src/main/resources/mapper/winery/AppOrderDetailMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hope-winery/src/main/resources/mapper/winery/AppOrderMapper.xml b/hope-winery/src/main/resources/mapper/winery/AppOrderMapper.xml new file mode 100644 index 000000000..6df632455 --- /dev/null +++ b/hope-winery/src/main/resources/mapper/winery/AppOrderMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index b152ee230..b90c49019 100644 --- a/pom.xml +++ b/pom.xml @@ -1,331 +1,344 @@ - - - 4.0.0 - - com.ruoyi - ruoyi - 3.3.0 - - ruoyi - http://www.ruoyi.vip - 若依管理系统 - - - 3.3.0 - 1.0.0 - UTF-8 - UTF-8 - 1.8 - 3.1.1 - 1.2.2 - 1.21 - 2.9.2 - 2.3.2 - 1.3.0 - 1.2.74 - 5.3.6 - 5.6.0 - 2.5 - 1.3.3 - 4.1.2 - 1.7 - 0.9.1 - 3.4.1 - 5.4.0 - 4.0.0 - 5.6.34 - 7.1.13 - - - - - - - - - org.springframework.boot - spring-boot-dependencies - 2.2.12.RELEASE - pom - import - - - - - com.alibaba - druid-spring-boot-starter - ${druid.version} - - - - - eu.bitwalker - UserAgentUtils - ${bitwalker.version} - - - - - com.github.pagehelper - pagehelper-spring-boot-starter - ${pagehelper.boot.version} - - - org.mybatis - mybatis - - - - - - - com.github.oshi - oshi-core - ${oshi.version} - - - - net.java.dev.jna - jna - ${jna.version} - - - - net.java.dev.jna - jna-platform - ${jna.version} - - - - - io.springfox - springfox-swagger2 - ${swagger.version} - - - io.swagger - swagger-annotations - - - io.swagger - swagger-models - - - - - - - io.springfox - springfox-swagger-ui - ${swagger.version} - - - - - commons-io - commons-io - ${commons.io.version} - - - - - commons-fileupload - commons-fileupload - ${commons.fileupload.version} - - - - - org.apache.poi - poi-ooxml - ${poi.version} - - - - - org.apache.velocity - velocity - ${velocity.version} - - - - - com.alibaba - fastjson - ${fastjson.version} - - - - - io.jsonwebtoken - jjwt - ${jwt.version} - - - - - com.github.penggle - kaptcha - ${kaptcha.version} - - - - com.baomidou - mybatis-plus-boot-starter - ${mybatis-plus.version} - - - com.baomidou - mybatis-plus-extension - ${mybatis-plus.version} - - - cn.hutool - hutool-all - ${hutool.version} - - - - - com.ruoyi - ruoyi-quartz - ${ruoyi.version} - - - - - com.ruoyi - ruoyi-generator - ${ruoyi.version} - - - - - com.ruoyi - ruoyi-framework - ${ruoyi.version} - - - - - com.ruoyi - ruoyi-system - ${ruoyi.version} - - - - - com.ruoyi - ruoyi-common - ${ruoyi.version} - - - - - - com.ruoyi - hope-winery - ${ruoyi.version} - - - - - com.itextpdf - itext7-core - ${itext7-core.version} - pom - - - - - - - - ruoyi-admin - ruoyi-framework - ruoyi-system - ruoyi-quartz - ruoyi-generator - ruoyi-common - hope-winery - - pom - - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - ${java.version} - ${java.version} - ${project.build.sourceEncoding} - - - - - - - src/main/resources - - true - - - - - - - public - aliyun nexus - http://maven.aliyun.com/nexus/content/groups/public/ - - true - - - - - - - public - aliyun nexus - http://maven.aliyun.com/nexus/content/groups/public/ - - true - - - false - - - - - - - dev - - - dev - debug - - - - true - - - - prod - - prod - warn - - - - + + + 4.0.0 + + com.ruoyi + ruoyi + 3.3.0 + + ruoyi + http://www.ruoyi.vip + 若依管理系统 + + + 3.3.0 + 1.0.0 + UTF-8 + UTF-8 + 1.8 + 3.1.1 + 1.2.2 + 1.21 + 2.9.2 + 2.3.2 + 1.3.0 + 1.2.74 + 5.3.6 + 5.6.0 + 2.5 + 1.3.3 + 4.1.2 + 1.7 + 0.9.1 + 3.4.1 + 5.4.0 + 4.0.0 + 5.6.34 + 7.1.13 + + + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.2.12.RELEASE + pom + import + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + org.mybatis + mybatis + + + + + + + com.github.oshi + oshi-core + ${oshi.version} + + + + net.java.dev.jna + jna + ${jna.version} + + + + net.java.dev.jna + jna-platform + ${jna.version} + + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.swagger + swagger-annotations + + + io.swagger + swagger-models + + + + + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + + + commons-io + commons-io + ${commons.io.version} + + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity + ${velocity.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-extension + ${mybatis-plus.version} + + + cn.hutool + hutool-all + ${hutool.version} + + + + + com.ruoyi + ruoyi-quartz + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-generator + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-framework + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-system + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-common + ${ruoyi.version} + + + + + + com.ruoyi + hope-winery + ${ruoyi.version} + + + + + com.itextpdf + itext7-core + ${itext7-core.version} + pom + + + + + + + + ruoyi-admin + ruoyi-framework + ruoyi-system + ruoyi-quartz + ruoyi-generator + ruoyi-common + hope-winery + + pom + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + UTF-8 + + + p12 + + + + + + + + + src/main/resources + + true + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + false + + + + + + + dev + + + dev + debug + + + + true + + + + prod + + prod + warn + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/cert/apiclient_cert1486984962.p12 b/ruoyi-admin/src/main/resources/cert/apiclient_cert1486984962.p12 new file mode 100644 index 000000000..8b968b3bf Binary files /dev/null and b/ruoyi-admin/src/main/resources/cert/apiclient_cert1486984962.p12 differ diff --git a/ruoyi-ui/src/api/winery/detail.js b/ruoyi-ui/src/api/winery/detail.js new file mode 100644 index 000000000..0ff0cbedd --- /dev/null +++ b/ruoyi-ui/src/api/winery/detail.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询订单明细列表 +export function listDetail(query) { + return request({ + url: '/winery/detail/list', + method: 'get', + params: query + }) +} + +// 查询订单明细详细 +export function getDetail(id) { + return request({ + url: '/winery/detail/' + id, + method: 'get' + }) +} + +// 新增订单明细 +export function addDetail(data) { + return request({ + url: '/winery/detail', + method: 'post', + data: data + }) +} + +// 修改订单明细 +export function updateDetail(data) { + return request({ + url: '/winery/detail', + method: 'put', + data: data + }) +} + +// 删除订单明细 +export function delDetail(id) { + return request({ + url: '/winery/detail/' + id, + method: 'delete' + }) +} + +// 导出订单明细 +export function exportDetail(query) { + return request({ + url: '/winery/detail/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/winery/order.js b/ruoyi-ui/src/api/winery/order.js new file mode 100644 index 000000000..32288f88d --- /dev/null +++ b/ruoyi-ui/src/api/winery/order.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询订单列表 +export function listOrder(query) { + return request({ + url: '/winery/order/list', + method: 'get', + params: query + }) +} + +// 查询订单详细 +export function getOrder(id) { + return request({ + url: '/winery/order/' + id, + method: 'get' + }) +} + +// 新增订单 +export function addOrder(data) { + return request({ + url: '/winery/order', + method: 'post', + data: data + }) +} + +// 修改订单 +export function updateOrder(data) { + return request({ + url: '/winery/order', + method: 'put', + data: data + }) +} + +// 删除订单 +export function delOrder(id) { + return request({ + url: '/winery/order/' + id, + method: 'delete' + }) +} + +// 导出订单 +export function exportOrder(query) { + return request({ + url: '/winery/order/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/views/winery/detail/index.vue b/ruoyi-ui/src/views/winery/detail/index.vue new file mode 100644 index 000000000..ec8abe0a4 --- /dev/null +++ b/ruoyi-ui/src/views/winery/detail/index.vue @@ -0,0 +1,401 @@ + + + diff --git a/ruoyi-ui/src/views/winery/order/index.vue b/ruoyi-ui/src/views/winery/order/index.vue new file mode 100644 index 000000000..5fc5c953d --- /dev/null +++ b/ruoyi-ui/src/views/winery/order/index.vue @@ -0,0 +1,408 @@ + + +