ccjgmwz 3 years ago
parent
commit
87edd454b2
100 changed files with 12080 additions and 37 deletions
  1. 72 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCarManagementService.java
  2. 74 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCommodityManagementService.java
  3. 72 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCommodityOrderDetailService.java
  4. 75 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCommodityOrderService.java
  5. 90 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCouponManagementService.java
  6. 66 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunGoodsServicesTypeService.java
  7. 73 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunMemberInfoService.java
  8. 74 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunOrderAddressService.java
  9. 75 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunOrderEvaluationService.java
  10. 72 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunReceivingAddressService.java
  11. 78 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunServiceManagementService.java
  12. 70 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunServiceOrderDetailService.java
  13. 72 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunServiceOrderService.java
  14. 73 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunStoredCardService.java
  15. 69 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunStoredDiscountService.java
  16. 157 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCarManagementServiceImpl.java
  17. 195 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCommodityManagementServiceImpl.java
  18. 158 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCommodityOrderDetailServiceImpl.java
  19. 214 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCommodityOrderServiceImpl.java
  20. 211 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCouponManagementServiceImpl.java
  21. 139 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunGoodsServicesTypeServiceImpl.java
  22. 158 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunMemberInfoServiceImpl.java
  23. 164 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunOrderAddressServiceImpl.java
  24. 168 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunOrderEvaluationServiceImpl.java
  25. 158 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunReceivingAddressServiceImpl.java
  26. 175 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunServiceManagementServiceImpl.java
  27. 152 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunServiceOrderDetailServiceImpl.java
  28. 188 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunServiceOrderServiceImpl.java
  29. 172 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunStoredCardServiceImpl.java
  30. 151 0
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunStoredDiscountServiceImpl.java
  31. 2 2
      unimall-admin/config/dep.env.js
  32. 2 2
      unimall-admin/config/dev.env.js
  33. 73 0
      unimall-admin/src/api/sun/MemberInfo.js
  34. 74 0
      unimall-admin/src/api/sun/carManagement.js
  35. 74 0
      unimall-admin/src/api/sun/commodityManagement.js
  36. 73 0
      unimall-admin/src/api/sun/commodityOrder.js
  37. 73 0
      unimall-admin/src/api/sun/couponManagement.js
  38. 73 0
      unimall-admin/src/api/sun/goodsType.js
  39. 73 0
      unimall-admin/src/api/sun/orderDetail.js
  40. 74 0
      unimall-admin/src/api/sun/serviceManagement.js
  41. 73 0
      unimall-admin/src/api/sun/serviceOrder.js
  42. 73 0
      unimall-admin/src/api/sun/serviceOrderDetail.js
  43. 73 0
      unimall-admin/src/api/sun/storedCard.js
  44. 73 0
      unimall-admin/src/api/sun/storedDiscount.js
  45. 177 0
      unimall-admin/src/router/route.json
  46. 348 0
      unimall-admin/src/views/sun/MemberInfo/index.vue
  47. 403 0
      unimall-admin/src/views/sun/carManagement/index.vue
  48. 407 0
      unimall-admin/src/views/sun/commodityManagement/index.vue
  49. 485 0
      unimall-admin/src/views/sun/commodityOrder/index.vue
  50. 614 0
      unimall-admin/src/views/sun/couponManagement/index.vue
  51. 401 0
      unimall-admin/src/views/sun/goodsType/index.vue
  52. 448 0
      unimall-admin/src/views/sun/orderDetail/index.vue
  53. 417 0
      unimall-admin/src/views/sun/serviceManagement/index.vue
  54. 326 0
      unimall-admin/src/views/sun/serviceOrder/index.vue
  55. 431 0
      unimall-admin/src/views/sun/serviceOrderDetail/index.vue
  56. 383 0
      unimall-admin/src/views/sun/storedCard/index.vue
  57. 433 0
      unimall-admin/src/views/sun/storedDiscount/index.vue
  58. 4 4
      unimall-core/src/main/resources/vm/java/domain.java.vm
  59. 15 12
      unimall-core/src/main/resources/vm/java/service.java.vm
  60. 27 10
      unimall-core/src/main/resources/vm/java/serviceImpl.java.vm
  61. 6 6
      unimall-core/src/main/resources/vm/js/api.js.vm
  62. 32 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/BaseDO.java
  63. 115 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCarManagement.java
  64. 127 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCommodityManagement.java
  65. 136 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCommodityOrder.java
  66. 109 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCommodityOrderDetail.java
  67. 169 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCouponManagement.java
  68. 91 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunGoodsServicesType.java
  69. 108 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunMemberInfo.java
  70. 115 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunOrderAddress.java
  71. 121 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunOrderEvaluation.java
  72. 109 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunReceivingAddress.java
  73. 133 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunServiceManagement.java
  74. 130 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunServiceOrder.java
  75. 103 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunServiceOrderDetail.java
  76. 125 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunStoredCard.java
  77. 103 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunStoredDiscount.java
  78. 4 1
      unimall-data/src/main/java/com/iotechn/unimall/data/enums/BizType.java
  79. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCarManagementMapper.java
  80. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCommodityManagementMapper.java
  81. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderDetailMapper.java
  82. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderMapper.java
  83. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCouponManagementMapper.java
  84. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunGoodsServicesTypeMapper.java
  85. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunMemberInfoMapper.java
  86. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunOrderAddressMapper.java
  87. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunOrderEvaluationMapper.java
  88. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunReceivingAddressMapper.java
  89. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunServiceManagementMapper.java
  90. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunServiceOrderDetailMapper.java
  91. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunServiceOrderMapper.java
  92. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunStoredCardMapper.java
  93. 13 0
      unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunStoredDiscountMapper.java
  94. 25 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCarManagementMapper.xml
  95. 26 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCommodityManagementMapper.xml
  96. 24 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderDetailMapper.xml
  97. 25 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderMapper.xml
  98. 34 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCouponManagementMapper.xml
  99. 21 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunGoodsServicesTypeMapper.xml
  100. 27 0
      unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunMemberInfoMapper.xml

+ 72 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCarManagementService.java

@@ -0,0 +1,72 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunCarManagement;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 车辆信息Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunCarManagement", description = "车辆信息")
+public interface ISunCarManagementService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunCarManagement:add", permissionParentName = "宠物管理", permissionName = "车辆信息管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunCarManagement", type = HttpParamType.COMMON, description = "车辆信息") SunCarManagement sunCarManagement,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunCarManagement:list", permissionParentName = "宠物管理", permissionName = "车辆信息管理")
+    public Page<SunCarManagement> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "车辆名称") String name,
+            @HttpParam(name = "caiNo", type = HttpParamType.COMMON, description = "车牌号") String caiNo,
+            @HttpParam(name = "driver", type = HttpParamType.COMMON, description = "司机姓名") String driver,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "司机电话") String phone,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "车辆照片") String pictureUrl,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunCarManagement:delete", permissionParentName = "宠物管理", permissionName = "车辆信息管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunCarManagement:sunCarManagement:update", permissionParentName = "宠物管理", permissionName = "车辆信息管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunCarManagement", type = HttpParamType.COMMON, description = "车辆信息") SunCarManagement sunCarManagement,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunCarManagement:get", permissionParentName = "宠物管理", permissionName = "车辆信息管理")
+    public SunCarManagement get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunCarManagement:export", permissionParentName = "宠物管理", permissionName = "车辆信息管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "车辆名称") String name,
+            @HttpParam(name = "caiNo", type = HttpParamType.COMMON, description = "车牌号") String caiNo,
+            @HttpParam(name = "driver", type = HttpParamType.COMMON, description = "司机姓名") String driver,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "司机电话") String phone,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "车辆照片") String pictureUrl,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 74 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCommodityManagementService.java

@@ -0,0 +1,74 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunCommodityManagement;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 商品管理Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunCommodityManagement", description = "商品管理")
+public interface ISunCommodityManagementService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunCommodityManagement:add", permissionParentName = "宠物管理", permissionName = "商品管理管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunCommodityManagement", type = HttpParamType.COMMON, description = "商品管理") SunCommodityManagement sunCommodityManagement,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunCommodityManagement:list", permissionParentName = "宠物管理", permissionName = "商品管理管理")
+    public Page<SunCommodityManagement> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+            @HttpParam(name = "category", type = HttpParamType.COMMON, description = "品类") String category,
+            @HttpParam(name = "price", type = HttpParamType.COMMON, description = "单价") Double price,
+            @HttpParam(name = "priceMembership", type = HttpParamType.COMMON, description = "会员价") Double priceMembership,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片") String pictureUrl,
+            @HttpParam(name = "num", type = HttpParamType.COMMON, description = "库存") Long num,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunCommodityManagement:delete", permissionParentName = "宠物管理", permissionName = "商品管理管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunCommodityManagement:sunCommodityManagement:update", permissionParentName = "宠物管理", permissionName = "商品管理管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunCommodityManagement", type = HttpParamType.COMMON, description = "商品管理") SunCommodityManagement sunCommodityManagement,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunCommodityManagement:get", permissionParentName = "宠物管理", permissionName = "商品管理管理")
+    public SunCommodityManagement get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunCommodityManagement:export", permissionParentName = "宠物管理", permissionName = "商品管理管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+            @HttpParam(name = "category", type = HttpParamType.COMMON, description = "品类") String category,
+            @HttpParam(name = "price", type = HttpParamType.COMMON, description = "单价") Double price,
+            @HttpParam(name = "priceMembership", type = HttpParamType.COMMON, description = "会员价") Double priceMembership,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片") String pictureUrl,
+            @HttpParam(name = "num", type = HttpParamType.COMMON, description = "库存") Long num,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 72 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCommodityOrderDetailService.java

@@ -0,0 +1,72 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunCommodityOrderDetail;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 商品详情Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunCommodityOrderDetail", description = "商品详情")
+public interface ISunCommodityOrderDetailService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunCommodityOrderDetail:add", permissionParentName = "宠物管理", permissionName = "商品详情管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunCommodityOrderDetail", type = HttpParamType.COMMON, description = "商品详情") SunCommodityOrderDetail sunCommodityOrderDetail,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunCommodityOrderDetail:list", permissionParentName = "宠物管理", permissionName = "商品详情管理")
+    public Page<SunCommodityOrderDetail> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "商品名称") String name,
+            @HttpParam(name = "price", type = HttpParamType.COMMON, description = "单价") Double price,
+            @HttpParam(name = "num", type = HttpParamType.COMMON, description = "数量") Long num,
+            @HttpParam(name = "amount", type = HttpParamType.COMMON, description = "小计") Double amount,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunCommodityOrderDetail:delete", permissionParentName = "宠物管理", permissionName = "商品详情管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunCommodityOrderDetail:sunCommodityOrderDetail:update", permissionParentName = "宠物管理", permissionName = "商品详情管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunCommodityOrderDetail", type = HttpParamType.COMMON, description = "商品详情") SunCommodityOrderDetail sunCommodityOrderDetail,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunCommodityOrderDetail:get", permissionParentName = "宠物管理", permissionName = "商品详情管理")
+    public SunCommodityOrderDetail get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunCommodityOrderDetail:export", permissionParentName = "宠物管理", permissionName = "商品详情管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "商品名称") String name,
+            @HttpParam(name = "price", type = HttpParamType.COMMON, description = "单价") Double price,
+            @HttpParam(name = "num", type = HttpParamType.COMMON, description = "数量") Long num,
+            @HttpParam(name = "amount", type = HttpParamType.COMMON, description = "小计") Double amount,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 75 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCommodityOrderService.java

@@ -0,0 +1,75 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunCommodityOrder;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 商品订单Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunCommodityOrder", description = "商品订单")
+public interface ISunCommodityOrderService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunCommodityOrder:add", permissionParentName = "宠物管理", permissionName = "商品订单管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunCommodityOrder", type = HttpParamType.COMMON, description = "商品订单") SunCommodityOrder sunCommodityOrder,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunCommodityOrder:list", permissionParentName = "宠物管理", permissionName = "商品订单管理")
+    public Page<SunCommodityOrder> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+            @HttpParam(name = "sumMoney", type = HttpParamType.COMMON, description = "合计") String sumMoney,
+            @HttpParam(name = "refundAppl", type = HttpParamType.COMMON, description = "退款(申请)") Double refundAppl,
+            @HttpParam(name = "refund", type = HttpParamType.COMMON, description = "退款(实际)") Double refund,
+            @HttpParam(name = "customer", type = HttpParamType.COMMON, description = "客户") String customer,
+            @HttpParam(name = "customerPhone", type = HttpParamType.COMMON, description = "客户电话") String customerPhone,
+            @HttpParam(name = "pets", type = HttpParamType.COMMON, description = "收货地址") String pets,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunCommodityOrder:delete", permissionParentName = "宠物管理", permissionName = "商品订单管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunCommodityOrder:sunCommodityOrder:update", permissionParentName = "宠物管理", permissionName = "商品订单管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunCommodityOrder", type = HttpParamType.COMMON, description = "商品订单") SunCommodityOrder sunCommodityOrder,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunCommodityOrder:get", permissionParentName = "宠物管理", permissionName = "商品订单管理")
+    public SunCommodityOrder get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunCommodityOrder:export", permissionParentName = "宠物管理", permissionName = "商品订单管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+            @HttpParam(name = "sumMoney", type = HttpParamType.COMMON, description = "合计") String sumMoney,
+            @HttpParam(name = "refundAppl", type = HttpParamType.COMMON, description = "退款(申请)") Double refundAppl,
+            @HttpParam(name = "refund", type = HttpParamType.COMMON, description = "退款(实际)") Double refund,
+            @HttpParam(name = "customer", type = HttpParamType.COMMON, description = "客户") String customer,
+            @HttpParam(name = "pets", type = HttpParamType.COMMON, description = "收货地址") String pets,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 90 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunCouponManagementService.java

@@ -0,0 +1,90 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunCouponManagement;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 优惠券Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunCouponManagement", description = "优惠券")
+public interface ISunCouponManagementService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunCouponManagement:add", permissionParentName = "宠物管理", permissionName = "优惠券管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunCouponManagement", type = HttpParamType.COMMON, description = "优惠券") SunCouponManagement sunCouponManagement,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunCouponManagement:list", permissionParentName = "宠物管理", permissionName = "优惠券管理")
+    public Page<SunCouponManagement> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+            @HttpParam(name = "couponType", type = HttpParamType.COMMON, description = "类型") String couponType,
+            @HttpParam(name = "distributionMethodKey", type = HttpParamType.COMMON, description = "发放方式key") String distributionMethodKey,
+            @HttpParam(name = "distributionMethod", type = HttpParamType.COMMON, description = "发放方式") String distributionMethod,
+            @HttpParam(name = "num", type = HttpParamType.COMMON, description = "数量") Long num,
+            @HttpParam(name = "limitNum", type = HttpParamType.COMMON, description = "限量") Long limitNum,
+            @HttpParam(name = "fullMoney", type = HttpParamType.COMMON, description = "满") Double fullMoney,
+            @HttpParam(name = "reduceMoney", type = HttpParamType.COMMON, description = "减") Double reduceMoney,
+            @HttpParam(name = "discount", type = HttpParamType.COMMON, description = "折扣") String discount,
+            @HttpParam(name = "termValidity", type = HttpParamType.COMMON, description = "有效期(1.制定时长2.指定区间)") String termValidity,
+            @HttpParam(name = "intervalStart", type = HttpParamType.COMMON, description = "区间开始") Date intervalStart,
+            @HttpParam(name = "intervalEnd", type = HttpParamType.COMMON, description = "区间结束") Date intervalEnd,
+            @HttpParam(name = "effectiveDays", type = HttpParamType.COMMON, description = "有效天数") Long effectiveDays,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片路径") String pictureUrl,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunCouponManagement:delete", permissionParentName = "宠物管理", permissionName = "优惠券管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunCouponManagement:sunCouponManagement:update", permissionParentName = "宠物管理", permissionName = "优惠券管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunCouponManagement", type = HttpParamType.COMMON, description = "优惠券") SunCouponManagement sunCouponManagement,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunCouponManagement:get", permissionParentName = "宠物管理", permissionName = "优惠券管理")
+    public SunCouponManagement get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunCouponManagement:export", permissionParentName = "宠物管理", permissionName = "优惠券管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+            @HttpParam(name = "couponType", type = HttpParamType.COMMON, description = "类型") String couponType,
+            @HttpParam(name = "distributionMethodKey", type = HttpParamType.COMMON, description = "发放方式key") String distributionMethodKey,
+            @HttpParam(name = "distributionMethod", type = HttpParamType.COMMON, description = "发放方式") String distributionMethod,
+            @HttpParam(name = "num", type = HttpParamType.COMMON, description = "数量") Long num,
+            @HttpParam(name = "limitNum", type = HttpParamType.COMMON, description = "限量") Long limitNum,
+            @HttpParam(name = "fullMoney", type = HttpParamType.COMMON, description = "满") Double fullMoney,
+            @HttpParam(name = "reduceMoney", type = HttpParamType.COMMON, description = "减") Double reduceMoney,
+            @HttpParam(name = "discount", type = HttpParamType.COMMON, description = "折扣") String discount,
+            @HttpParam(name = "termValidity", type = HttpParamType.COMMON, description = "有效期(1.制定时长2.指定区间)") String termValidity,
+            @HttpParam(name = "intervalStart", type = HttpParamType.COMMON, description = "区间开始") Date intervalStart,
+            @HttpParam(name = "intervalEnd", type = HttpParamType.COMMON, description = "区间结束") Date intervalEnd,
+            @HttpParam(name = "effectiveDays", type = HttpParamType.COMMON, description = "有效天数") Long effectiveDays,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片路径") String pictureUrl,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 66 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunGoodsServicesTypeService.java

@@ -0,0 +1,66 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunGoodsServicesType;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 服务商品分类Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunGoodsServicesType", description = "服务商品分类")
+public interface ISunGoodsServicesTypeService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunGoodsServicesType:add", permissionParentName = "宠物管理", permissionName = "服务商品分类管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunGoodsServicesType", type = HttpParamType.COMMON, description = "服务商品分类") SunGoodsServicesType sunGoodsServicesType,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunGoodsServicesType:list", permissionParentName = "宠物管理", permissionName = "服务商品分类管理")
+    public Page<SunGoodsServicesType> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "sunType", type = HttpParamType.COMMON, description = "分类(1服务2商品)") Long sunType,
+            @HttpParam(name = "category", type = HttpParamType.COMMON, description = "品类") String category,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunGoodsServicesType:delete", permissionParentName = "宠物管理", permissionName = "服务商品分类管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunGoodsServicesType:sunGoodsServicesType:update", permissionParentName = "宠物管理", permissionName = "服务商品分类管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunGoodsServicesType", type = HttpParamType.COMMON, description = "服务商品分类") SunGoodsServicesType sunGoodsServicesType,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunGoodsServicesType:get", permissionParentName = "宠物管理", permissionName = "服务商品分类管理")
+    public SunGoodsServicesType get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunGoodsServicesType:export", permissionParentName = "宠物管理", permissionName = "服务商品分类管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "sunType", type = HttpParamType.COMMON, description = "分类(1服务2商品)") Long sunType,
+            @HttpParam(name = "category", type = HttpParamType.COMMON, description = "品类") String category,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 73 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunMemberInfoService.java

@@ -0,0 +1,73 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.domain.sun.SunMemberInfo;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 用户信息Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunMemberInfo", description = "用户信息")
+public interface ISunMemberInfoService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunMemberInfo:add", permissionParentName = "用户管理", permissionName = "用户信息管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunMemberInfo", type = HttpParamType.COMMON, description = "用户信息") SunMemberInfo sunMemberInfo,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunMemberInfo:list", permissionParentName = "用户管理", permissionName = "用户信息管理")
+    public Page<SunMemberInfo> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "姓名") String name,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+            @HttpParam(name = "sex", type = HttpParamType.COMMON, description = "性别") Long sex,
+            @HttpParam(name = "stars", type = HttpParamType.COMMON, description = "星级") String stars,
+            @HttpParam(name = "storedValueCard", type = HttpParamType.COMMON, description = "储值卡") String storedValueCard,
+            @HttpParam(name = "cancellations", type = HttpParamType.COMMON, description = "取消预约次数") Long cancellations,
+            @HttpParam(name = "balance", type = HttpParamType.COMMON, description = "余额") Double balance,
+            @HttpParam(name = "remarks", type = HttpParamType.COMMON, description = "备注1") String remarks,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunMemberInfo:delete", permissionParentName = "用户管理", permissionName = "用户信息管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") String ids) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sun:sunMemberInfo:update", permissionParentName = "用户管理", permissionName = "用户信息管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunMemberInfo", type = HttpParamType.COMMON, description = "用户信息") SunMemberInfo sunMemberInfo,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunMemberInfo:get", permissionParentName = "用户管理", permissionName = "用户信息管理")
+    public SunMemberInfo get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunMemberInfo:export", permissionParentName = "用户管理", permissionName = "用户信息管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "姓名") String name,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+            @HttpParam(name = "sex", type = HttpParamType.COMMON, description = "性别") String sex,
+            @HttpParam(name = "stars", type = HttpParamType.COMMON, description = "星级") String stars,
+            @HttpParam(name = "storedValueCard", type = HttpParamType.COMMON, description = "储值卡") String storedValueCard,
+            @HttpParam(name = "cancellations", type = HttpParamType.COMMON, description = "取消预约次数") String cancellations,
+            @HttpParam(name = "balance", type = HttpParamType.COMMON, description = "余额") Double balance,
+            @HttpParam(name = "remarks", type = HttpParamType.COMMON, description = "备注1") String remarks,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 74 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunOrderAddressService.java

@@ -0,0 +1,74 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunOrderAddress;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 订单客户收货地址Service接口
+ *
+ * @author jlb
+ * @date 2022-05-26
+ */
+@HttpOpenApi(group = "admin.sun.sunOrderAddress", description = "订单客户收货地址")
+public interface ISunOrderAddressService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunOrderAddress:add", permissionParentName = "宠物管理", permissionName = "订单客户收货地址管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunOrderAddress", type = HttpParamType.COMMON, description = "订单客户收货地址") SunOrderAddress sunOrderAddress,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunOrderAddress:list", permissionParentName = "宠物管理", permissionName = "订单客户收货地址管理")
+    public Page<SunOrderAddress> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+            @HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+            @HttpParam(name = "consigneeName", type = HttpParamType.COMMON, description = "收货人姓名") String consigneeName,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+            @HttpParam(name = "location", type = HttpParamType.COMMON, description = "所在地区") String location,
+            @HttpParam(name = "address", type = HttpParamType.COMMON, description = "详细地址") String address,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunOrderAddress:delete", permissionParentName = "宠物管理", permissionName = "订单客户收货地址管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunOrderAddress:sunOrderAddress:update", permissionParentName = "宠物管理", permissionName = "订单客户收货地址管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunOrderAddress", type = HttpParamType.COMMON, description = "订单客户收货地址") SunOrderAddress sunOrderAddress,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunOrderAddress:get", permissionParentName = "宠物管理", permissionName = "订单客户收货地址管理")
+    public SunOrderAddress get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunOrderAddress:export", permissionParentName = "宠物管理", permissionName = "订单客户收货地址管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+            @HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+            @HttpParam(name = "consigneeName", type = HttpParamType.COMMON, description = "收货人姓名") String consigneeName,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+            @HttpParam(name = "location", type = HttpParamType.COMMON, description = "所在地区") String location,
+            @HttpParam(name = "address", type = HttpParamType.COMMON, description = "详细地址") String address,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 75 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunOrderEvaluationService.java

@@ -0,0 +1,75 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunOrderEvaluation;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 订单评价Service接口
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+@HttpOpenApi(group = "admin.sun.sunOrderEvaluation", description = "订单评价")
+public interface ISunOrderEvaluationService{
+	@HttpMethod(description = "新增", permission = "admin:sun:sunOrderEvaluation:add", permissionParentName = "宠物管理", permissionName = "订单评价管理")
+	public Boolean add(@NotNull @HttpParam(name = "sunOrderEvaluation", type = HttpParamType.COMMON, description = "订单评价") SunOrderEvaluation sunOrderEvaluation,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:sun:sunOrderEvaluation:list",permissionParentName = "宠物管理", permissionName = "订单评价管理")
+	public Page<SunOrderEvaluation> list(
+								@HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+							@HttpParam(name = "orderType", type = HttpParamType.COMMON, description = "订单类型") String orderType,
+							@HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+							@HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+							@HttpParam(name = "tradeName", type = HttpParamType.COMMON, description = "商品名称") String tradeName,
+							@HttpParam(name = "commoditySatisfaction", type = HttpParamType.COMMON, description = "商品满意度") String commoditySatisfaction,
+							@HttpParam(name = "expressSatisfaction", type = HttpParamType.COMMON, description = "快递满意度") String expressSatisfaction,
+							@HttpParam(name = "address", type = HttpParamType.COMMON, description = "评价内容") String address,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+							@HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:sun:sunOrderEvaluation:delete",permissionParentName = "宠物管理", permissionName = "订单评价管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:sunOrderEvaluation:sunOrderEvaluation:update",permissionParentName = "宠物管理", permissionName = "订单评价管理")
+	public Boolean update(@NotNull @HttpParam(name = "sunOrderEvaluation", type = HttpParamType.COMMON, description = "订单评价") SunOrderEvaluation sunOrderEvaluation,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:sun:sunOrderEvaluation:get",permissionParentName = "宠物管理", permissionName = "订单评价管理")
+	public SunOrderEvaluation get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:sun:sunOrderEvaluation:export",permissionParentName = "宠物管理", permissionName = "订单评价管理")
+	public String export(
+								@HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+							@HttpParam(name = "orderType", type = HttpParamType.COMMON, description = "订单类型") String orderType,
+							@HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+							@HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+							@HttpParam(name = "tradeName", type = HttpParamType.COMMON, description = "商品名称") String tradeName,
+							@HttpParam(name = "commoditySatisfaction", type = HttpParamType.COMMON, description = "商品满意度") String commoditySatisfaction,
+							@HttpParam(name = "expressSatisfaction", type = HttpParamType.COMMON, description = "快递满意度") String expressSatisfaction,
+							@HttpParam(name = "address", type = HttpParamType.COMMON, description = "评价内容") String address,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+							@HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 72 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunReceivingAddressService.java

@@ -0,0 +1,72 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunReceivingAddress;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 客户收货地址 Service接口
+ *
+ * @author jlb
+ * @date 2022-05-26
+ */
+@HttpOpenApi(group = "admin.sun.sunReceivingAddress", description = "客户收货地址 ")
+public interface ISunReceivingAddressService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunReceivingAddress:add", permissionParentName = "宠物管理", permissionName = "客户收货地址 管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunReceivingAddress", type = HttpParamType.COMMON, description = "客户收货地址 ") SunReceivingAddress sunReceivingAddress,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunReceivingAddress:list", permissionParentName = "宠物管理", permissionName = "客户收货地址 管理")
+    public Page<SunReceivingAddress> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "cusId", type = HttpParamType.COMMON, description = "客户id") String cusId,
+            @HttpParam(name = "consigneeName", type = HttpParamType.COMMON, description = "收货人姓名") String consigneeName,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+            @HttpParam(name = "location", type = HttpParamType.COMMON, description = "所在地区") String location,
+            @HttpParam(name = "address", type = HttpParamType.COMMON, description = "详细地址") String address,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunReceivingAddress:delete", permissionParentName = "宠物管理", permissionName = "客户收货地址 管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunReceivingAddress:sunReceivingAddress:update", permissionParentName = "宠物管理", permissionName = "客户收货地址 管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunReceivingAddress", type = HttpParamType.COMMON, description = "客户收货地址 ") SunReceivingAddress sunReceivingAddress,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunReceivingAddress:get", permissionParentName = "宠物管理", permissionName = "客户收货地址 管理")
+    public SunReceivingAddress get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunReceivingAddress:export", permissionParentName = "宠物管理", permissionName = "客户收货地址 管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "cusId", type = HttpParamType.COMMON, description = "客户id") String cusId,
+            @HttpParam(name = "consigneeName", type = HttpParamType.COMMON, description = "收货人姓名") String consigneeName,
+            @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "手机号") String phone,
+            @HttpParam(name = "location", type = HttpParamType.COMMON, description = "所在地区") String location,
+            @HttpParam(name = "address", type = HttpParamType.COMMON, description = "详细地址") String address,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 78 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunServiceManagementService.java

@@ -0,0 +1,78 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunServiceManagement;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 服务管理Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunServiceManagement", description = "服务管理")
+public interface ISunServiceManagementService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunServiceManagement:add", permissionParentName = "宠物管理", permissionName = "服务管理管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunServiceManagement", type = HttpParamType.COMMON, description = "服务管理") SunServiceManagement sunServiceManagement,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunServiceManagement:list", permissionParentName = "宠物管理", permissionName = "服务管理管理")
+    public Page<SunServiceManagement> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+            @HttpParam(name = "category", type = HttpParamType.COMMON, description = "品类") String category,
+            @HttpParam(name = "priceMin", type = HttpParamType.COMMON, description = "单价(迷你)") Double priceMin,
+            @HttpParam(name = "priceXiao", type = HttpParamType.COMMON, description = "单价(小型)") Double priceXiao,
+            @HttpParam(name = "priceZhong", type = HttpParamType.COMMON, description = "单价(中型)") Double priceZhong,
+            @HttpParam(name = "priceDa", type = HttpParamType.COMMON, description = "单价(大型)") Double priceDa,
+            @HttpParam(name = "priceJu", type = HttpParamType.COMMON, description = "单价(巨型)") Double priceJu,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片路径") String pictureUrl,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunServiceManagement:delete", permissionParentName = "宠物管理", permissionName = "服务管理管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunServiceManagement:sunServiceManagement:update", permissionParentName = "宠物管理", permissionName = "服务管理管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunServiceManagement", type = HttpParamType.COMMON, description = "服务管理") SunServiceManagement sunServiceManagement,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunServiceManagement:get", permissionParentName = "宠物管理", permissionName = "服务管理管理")
+    public SunServiceManagement get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunServiceManagement:export", permissionParentName = "宠物管理", permissionName = "服务管理管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+            @HttpParam(name = "category", type = HttpParamType.COMMON, description = "品类") String category,
+            @HttpParam(name = "priceMin", type = HttpParamType.COMMON, description = "单价(迷你)") Double priceMin,
+            @HttpParam(name = "priceXiao", type = HttpParamType.COMMON, description = "单价(小型)") Double priceXiao,
+            @HttpParam(name = "priceZhong", type = HttpParamType.COMMON, description = "单价(中型)") Double priceZhong,
+            @HttpParam(name = "priceDa", type = HttpParamType.COMMON, description = "单价(大型)") Double priceDa,
+            @HttpParam(name = "priceJu", type = HttpParamType.COMMON, description = "单价(巨型)") Double priceJu,
+            @HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片路径") String pictureUrl,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 70 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunServiceOrderDetailService.java

@@ -0,0 +1,70 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunServiceOrderDetail;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 服务订单详情Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunServiceOrderDetail", description = "服务订单详情")
+public interface ISunServiceOrderDetailService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunServiceOrderDetail:add", permissionParentName = "宠物管理", permissionName = "服务订单详情管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunServiceOrderDetail", type = HttpParamType.COMMON, description = "服务订单详情") SunServiceOrderDetail sunServiceOrderDetail,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunServiceOrderDetail:list", permissionParentName = "宠物管理", permissionName = "服务订单详情管理")
+    public Page<SunServiceOrderDetail> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "服务名称") String name,
+            @HttpParam(name = "appointment", type = HttpParamType.COMMON, description = "预约时间") String appointment,
+            @HttpParam(name = "price", type = HttpParamType.COMMON, description = "价格") Double price,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunServiceOrderDetail:delete", permissionParentName = "宠物管理", permissionName = "服务订单详情管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunServiceOrderDetail:sunServiceOrderDetail:update", permissionParentName = "宠物管理", permissionName = "服务订单详情管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunServiceOrderDetail", type = HttpParamType.COMMON, description = "服务订单详情") SunServiceOrderDetail sunServiceOrderDetail,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunServiceOrderDetail:get", permissionParentName = "宠物管理", permissionName = "服务订单详情管理")
+    public SunServiceOrderDetail get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunServiceOrderDetail:export", permissionParentName = "宠物管理", permissionName = "服务订单详情管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderId", type = HttpParamType.COMMON, description = "订单id") String orderId,
+            @HttpParam(name = "name", type = HttpParamType.COMMON, description = "服务名称") String name,
+            @HttpParam(name = "appointment", type = HttpParamType.COMMON, description = "预约时间") String appointment,
+            @HttpParam(name = "price", type = HttpParamType.COMMON, description = "价格") Double price,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 72 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunServiceOrderService.java

@@ -0,0 +1,72 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunServiceOrder;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 服务订单Service接口
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunServiceOrder", description = "服务订单")
+public interface ISunServiceOrderService {
+    @HttpMethod(description = "新增", permission = "admin:sun:sunServiceOrder:add", permissionParentName = "宠物管理", permissionName = "服务订单管理")
+    public Boolean add(@NotNull @HttpParam(name = "sunServiceOrder", type = HttpParamType.COMMON, description = "服务订单") SunServiceOrder sunServiceOrder,
+                       @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "列表", permission = "admin:sun:sunServiceOrder:list", permissionParentName = "宠物管理", permissionName = "服务订单管理")
+    public Page<SunServiceOrder> list(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+            @HttpParam(name = "sumMoney", type = HttpParamType.COMMON, description = "合计") String sumMoney,
+            @HttpParam(name = "refund", type = HttpParamType.COMMON, description = "退款") Double refund,
+            @HttpParam(name = "customer", type = HttpParamType.COMMON, description = "客户") String customer,
+            @HttpParam(name = "pets", type = HttpParamType.COMMON, description = "宠物") String pets,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+            throws ServiceException;
+
+    @HttpMethod(description = "删除", permission = "admin:sun:sunServiceOrder:delete", permissionParentName = "宠物管理", permissionName = "服务订单管理")
+    public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "修改", permission = "admin:sunServiceOrder:sunServiceOrder:update", permissionParentName = "宠物管理", permissionName = "服务订单管理")
+    public Boolean update(@NotNull @HttpParam(name = "sunServiceOrder", type = HttpParamType.COMMON, description = "服务订单") SunServiceOrder sunServiceOrder,
+                          @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId) throws ServiceException;
+
+    @HttpMethod(description = "查询", permission = "admin:sun:sunServiceOrder:get", permissionParentName = "宠物管理", permissionName = "服务订单管理")
+    public SunServiceOrder get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "") Long id) throws ServiceException;
+
+    @HttpMethod(description = "导出excl表", permission = "admin:sun:sunServiceOrder:export", permissionParentName = "宠物管理", permissionName = "服务订单管理")
+    public String export(
+            @HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+            @HttpParam(name = "orderNo", type = HttpParamType.COMMON, description = "订单编号") String orderNo,
+            @HttpParam(name = "sumMoney", type = HttpParamType.COMMON, description = "合计") String sumMoney,
+            @HttpParam(name = "refund", type = HttpParamType.COMMON, description = "退款") Double refund,
+            @HttpParam(name = "customer", type = HttpParamType.COMMON, description = "客户") String customer,
+            @HttpParam(name = "pets", type = HttpParamType.COMMON, description = "宠物") String pets,
+            @HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+            @HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+            @HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+            @HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+            @HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+            @HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit) throws ServiceException;
+
+}

+ 73 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunStoredCardService.java

@@ -0,0 +1,73 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunStoredCard;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 储值卡Service接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunStoredCard", description = "储值卡")
+public interface ISunStoredCardService{
+	@HttpMethod(description = "新增", permission = "admin:sun:sunStoredCard:add", permissionParentName = "宠物管理", permissionName = "储值卡管理")
+	public Boolean add(@NotNull @HttpParam(name = "sunStoredCard", type = HttpParamType.COMMON, description = "储值卡") SunStoredCard sunStoredCard,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:sun:sunStoredCard:list",permissionParentName = "宠物管理", permissionName = "储值卡管理")
+	public Page<SunStoredCard> list(
+								@HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+							@HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+							@HttpParam(name = "price", type = HttpParamType.COMMON, description = "价格") Double price,
+							@HttpParam(name = "freeShuttle", type = HttpParamType.COMMON, description = "免费接送公里数") String freeShuttle,
+							@HttpParam(name = "coupon", type = HttpParamType.COMMON, description = "优惠券") String coupon,
+							@HttpParam(name = "other", type = HttpParamType.COMMON, description = "其他服务") String other,
+							@HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片路径") String pictureUrl,
+										@HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+							@HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:sun:sunStoredCard:delete",permissionParentName = "宠物管理", permissionName = "储值卡管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:sunStoredCard:sunStoredCard:update",permissionParentName = "宠物管理", permissionName = "储值卡管理")
+	public Boolean update(@NotNull @HttpParam(name = "sunStoredCard", type = HttpParamType.COMMON, description = "储值卡") SunStoredCard sunStoredCard,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:sun:sunStoredCard:get",permissionParentName = "宠物管理", permissionName = "储值卡管理")
+	public SunStoredCard get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:sun:sunStoredCard:export",permissionParentName = "宠物管理", permissionName = "储值卡管理")
+	public String export(
+								@HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+							@HttpParam(name = "name", type = HttpParamType.COMMON, description = "名称") String name,
+							@HttpParam(name = "price", type = HttpParamType.COMMON, description = "价格") Double price,
+							@HttpParam(name = "freeShuttle", type = HttpParamType.COMMON, description = "免费接送公里数") String freeShuttle,
+							@HttpParam(name = "coupon", type = HttpParamType.COMMON, description = "优惠券") String coupon,
+							@HttpParam(name = "other", type = HttpParamType.COMMON, description = "其他服务") String other,
+							@HttpParam(name = "pictureUrl", type = HttpParamType.COMMON, description = "图片路径") String pictureUrl,
+										@HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+							@HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 69 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/ISunStoredDiscountService.java

@@ -0,0 +1,69 @@
+package com.iotechn.unimall.admin.api.sun;
+
+
+import com.iotechn.unimall.data.domain.sun.SunStoredDiscount;
+import com.iotechn.unimall.core.annotation.HttpMethod;
+import com.iotechn.unimall.core.annotation.HttpOpenApi;
+import com.iotechn.unimall.core.annotation.HttpParam;
+import com.iotechn.unimall.core.annotation.HttpParamType;
+import com.iotechn.unimall.core.annotation.param.NotNull;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+
+/**
+ * 储值卡关系Service接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@HttpOpenApi(group = "admin.sun.sunStoredDiscount", description = "储值卡关系")
+public interface ISunStoredDiscountService{
+	@HttpMethod(description = "新增", permission = "admin:sun:sunStoredDiscount:add", permissionParentName = "宠物管理", permissionName = "储值卡关系管理")
+	public Boolean add(@NotNull @HttpParam(name = "sunStoredDiscount", type = HttpParamType.COMMON, description = "储值卡关系") SunStoredDiscount sunStoredDiscount,
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "列表", permission = "admin:sun:sunStoredDiscount:list",permissionParentName = "宠物管理", permissionName = "储值卡关系管理")
+	public Page<SunStoredDiscount> list(
+								@HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+							@HttpParam(name = "storedId", type = HttpParamType.COMMON, description = "储值卡id") Long storedId,
+							@HttpParam(name = "serviceCategoryKey", type = HttpParamType.COMMON, description = "服务品类key") String serviceCategoryKey,
+							@HttpParam(name = "serviceCategory", type = HttpParamType.COMMON, description = "服务品类") String serviceCategory,
+							@HttpParam(name = "discount", type = HttpParamType.COMMON, description = "折扣") String discount,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+							@HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+					@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
+		throws ServiceException;
+
+	@HttpMethod(description = "删除", permission = "admin:sun:sunStoredDiscount:delete",permissionParentName = "宠物管理", permissionName = "储值卡关系管理")
+	public Boolean delete(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+
+	@HttpMethod(description = "修改", permission = "admin:sunStoredDiscount:sunStoredDiscount:update",permissionParentName = "宠物管理", permissionName = "储值卡关系管理")
+	public Boolean update(@NotNull @HttpParam(name = "sunStoredDiscount", type = HttpParamType.COMMON, description = "储值卡关系") SunStoredDiscount sunStoredDiscount,
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
+
+	@HttpMethod(description = "查询", permission = "admin:sun:sunStoredDiscount:get",permissionParentName = "宠物管理", permissionName = "储值卡关系管理")
+	public SunStoredDiscount get(@NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "")Long id)throws ServiceException;
+	
+	@HttpMethod(description = "导出excl表", permission = "admin:sun:sunStoredDiscount:export",permissionParentName = "宠物管理", permissionName = "储值卡关系管理")
+	public String export(
+								@HttpParam(name = "companyId", type = HttpParamType.COMMON, description = "") Long companyId,
+							@HttpParam(name = "storedId", type = HttpParamType.COMMON, description = "储值卡id") Long storedId,
+							@HttpParam(name = "serviceCategoryKey", type = HttpParamType.COMMON, description = "服务品类key") String serviceCategoryKey,
+							@HttpParam(name = "serviceCategory", type = HttpParamType.COMMON, description = "服务品类") String serviceCategory,
+							@HttpParam(name = "discount", type = HttpParamType.COMMON, description = "折扣") String discount,
+							@HttpParam(name = "status", type = HttpParamType.COMMON, description = "状态") String status,
+							@HttpParam(name = "deleteFlag", type = HttpParamType.COMMON, description = "0:否(默认) 1:是") Integer deleteFlag,
+							@HttpParam(name = "gmtCreate", type = HttpParamType.COMMON, description = "") Date gmtCreate,
+							@HttpParam(name = "gmtUpdate", type = HttpParamType.COMMON, description = "") Date gmtUpdate,
+							@HttpParam(name = "userId", type = HttpParamType.COMMON, description = "") Long userId,
+							@HttpParam(name = "adminId", type = HttpParamType.COMMON, description = "") Long adminId,
+				@HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
+	@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)throws ServiceException;
+	
+}

+ 157 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCarManagementServiceImpl.java

@@ -0,0 +1,157 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunCarManagementMapper;
+import com.iotechn.unimall.data.domain.sun.SunCarManagement;
+import com.iotechn.unimall.admin.api.sun.ISunCarManagementService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 车辆信息Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunCarManagementServiceImpl implements ISunCarManagementService {
+    @Autowired
+    private SunCarManagementMapper sunCarManagementMapper;
+
+    @Override
+    public Boolean add(SunCarManagement sunCarManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCarManagement.setGmtCreate(now);
+        sunCarManagement.setGmtUpdate(now);
+        sunCarManagement.setAdminId(adminId);
+        return sunCarManagementMapper.insert(sunCarManagement) > 0;
+    }
+
+    @Override
+    public Page<SunCarManagement> list(Long companyId, String name, String caiNo, String driver, String phone, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCarManagement> wrapper = new EntityWrapper<SunCarManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(caiNo)) {
+            wrapper.eq("cai_no", caiNo);
+        }
+        if (!StringUtils.isEmpty(driver)) {
+            wrapper.eq("driver", driver);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunCarManagement> list = sunCarManagementMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunCarManagementMapper.selectCount(wrapper);
+        return new Page<SunCarManagement>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        Wrapper<SunCarManagement> wrapper = new EntityWrapper<SunCarManagement>();
+        wrapper.in("id", ids);
+        List<SunCarManagement> list = sunCarManagementMapper.selectList(wrapper);
+        for (SunCarManagement tmp : list) {
+            tmp.setDeleteFlag(1);
+            sunCarManagementMapper.updateById(tmp);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunCarManagement sunCarManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCarManagement.setGmtUpdate(now);
+        sunCarManagement.setAdminId(adminId);
+        return sunCarManagementMapper.updateById(sunCarManagement) > 0;
+    }
+
+    @Override
+    public SunCarManagement get(Long id) throws ServiceException {
+        return sunCarManagementMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String name, String caiNo, String driver, String phone, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCarManagement> wrapper = new EntityWrapper<SunCarManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(caiNo)) {
+            wrapper.eq("cai_no", caiNo);
+        }
+        if (!StringUtils.isEmpty(driver)) {
+            wrapper.eq("driver", driver);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunCarManagement> list = sunCarManagementMapper.selectList(wrapper);
+        ExcelUtil<SunCarManagement> util = new ExcelUtil<SunCarManagement>(SunCarManagement.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 195 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCommodityManagementServiceImpl.java

@@ -0,0 +1,195 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import com.iotechn.unimall.data.domain.ImgDO;
+import com.iotechn.unimall.data.dto.goods.SpuDTO;
+import com.iotechn.unimall.data.enums.BizType;
+import com.iotechn.unimall.data.mapper.ImgMapper;
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunCommodityManagementMapper;
+import com.iotechn.unimall.data.domain.sun.SunCommodityManagement;
+import com.iotechn.unimall.admin.api.sun.ISunCommodityManagementService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+import java.util.stream.Collectors;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 商品管理Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunCommodityManagementServiceImpl implements ISunCommodityManagementService {
+    @Autowired
+    private SunCommodityManagementMapper sunCommodityManagementMapper;
+
+    @Autowired
+    private ImgMapper imgMapper;
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean add(SunCommodityManagement sunCommodityManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCommodityManagement.setGmtCreate(now);
+        sunCommodityManagement.setGmtUpdate(now);
+        sunCommodityManagement.setAdminId(adminId);
+        sunCommodityManagementMapper.insert(sunCommodityManagement);
+        //插入IMG
+        insertSpuImg(sunCommodityManagement, sunCommodityManagement.getId(), now);
+        return true;
+    }
+    private void insertSpuImg(SunCommodityManagement sunCommodityManagement, Long bizId, Date now) {
+        List<String> imgList = sunCommodityManagement.getImgList();
+        List<ImgDO> imgDOList = imgList.stream().map(item -> {
+            ImgDO imgDO = new ImgDO();
+            imgDO.setBizType(BizType.GOODS.getCode());
+            imgDO.setBizId(bizId);
+            imgDO.setUrl(item);
+            imgDO.setGmtCreate(now);
+            imgDO.setGmtUpdate(now);
+            return imgDO;
+        }).collect(Collectors.toList());
+        imgMapper.insertImgs(imgDOList);
+    }
+
+    @Override
+    public Page<SunCommodityManagement> list(Long companyId, String name, String category, Double price, Double priceMembership, String pictureUrl, Long num, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCommodityManagement> wrapper = new EntityWrapper<SunCommodityManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(category)) {
+            wrapper.eq("category", category);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(priceMembership)) {
+            wrapper.eq("price_membership", priceMembership);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(num)) {
+            wrapper.eq("num", num);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunCommodityManagement> list = sunCommodityManagementMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunCommodityManagementMapper.selectCount(wrapper);
+        return new Page<SunCommodityManagement>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunCommodityManagement tmp = sunCommodityManagementMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunCommodityManagementMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean update(SunCommodityManagement sunCommodityManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCommodityManagement.setGmtUpdate(now);
+        sunCommodityManagement.setAdminId(adminId);
+        sunCommodityManagementMapper.updateById(sunCommodityManagement);
+
+        //插入IMG
+        insertSpuImg(sunCommodityManagement, sunCommodityManagement.getId(), now);
+        return true;
+    }
+
+    @Override
+    public SunCommodityManagement get(Long id) throws ServiceException {
+        SunCommodityManagement sunCommodityManagement = sunCommodityManagementMapper.selectById(id);
+        sunCommodityManagement.setImgList(imgMapper.getImgs(BizType.GOODS.getCode(), sunCommodityManagement.getId()));
+        return sunCommodityManagement;
+    }
+
+    @Override
+    public String export(Long companyId, String name, String category, Double price, Double priceMembership, String pictureUrl, Long num, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCommodityManagement> wrapper = new EntityWrapper<SunCommodityManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(category)) {
+            wrapper.eq("category", category);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(priceMembership)) {
+            wrapper.eq("price_membership", priceMembership);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(num)) {
+            wrapper.eq("num", num);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunCommodityManagement> list = sunCommodityManagementMapper.selectList(wrapper);
+        ExcelUtil<SunCommodityManagement> util = new ExcelUtil<SunCommodityManagement>(SunCommodityManagement.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 158 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCommodityOrderDetailServiceImpl.java

@@ -0,0 +1,158 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunCommodityOrderDetailMapper;
+import com.iotechn.unimall.data.domain.sun.SunCommodityOrderDetail;
+import com.iotechn.unimall.admin.api.sun.ISunCommodityOrderDetailService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 商品详情Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunCommodityOrderDetailServiceImpl implements ISunCommodityOrderDetailService {
+    @Autowired
+    private SunCommodityOrderDetailMapper sunCommodityOrderDetailMapper;
+
+    @Override
+    public Boolean add(SunCommodityOrderDetail sunCommodityOrderDetail, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCommodityOrderDetail.setGmtCreate(now);
+        sunCommodityOrderDetail.setGmtUpdate(now);
+        sunCommodityOrderDetail.setAdminId(adminId);
+        return sunCommodityOrderDetailMapper.insert(sunCommodityOrderDetail) > 0;
+    }
+
+    @Override
+    public Page<SunCommodityOrderDetail> list(Long companyId, String orderId, String name, Double price, Long num, Double amount, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCommodityOrderDetail> wrapper = new EntityWrapper<SunCommodityOrderDetail>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderId)) {
+            wrapper.eq("order_id", orderId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(num)) {
+            wrapper.eq("num", num);
+        }
+        if (!StringUtils.isEmpty(amount)) {
+            wrapper.eq("amount", amount);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunCommodityOrderDetail> list = sunCommodityOrderDetailMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunCommodityOrderDetailMapper.selectCount(wrapper);
+        return new Page<SunCommodityOrderDetail>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunCommodityOrderDetail tmp = sunCommodityOrderDetailMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunCommodityOrderDetailMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunCommodityOrderDetail sunCommodityOrderDetail, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCommodityOrderDetail.setGmtUpdate(now);
+        sunCommodityOrderDetail.setAdminId(adminId);
+        return sunCommodityOrderDetailMapper.updateById(sunCommodityOrderDetail) > 0;
+    }
+
+    @Override
+    public SunCommodityOrderDetail get(Long id) throws ServiceException {
+        return sunCommodityOrderDetailMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String orderId, String name, Double price, Long num, Double amount, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCommodityOrderDetail> wrapper = new EntityWrapper<SunCommodityOrderDetail>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderId)) {
+            wrapper.eq("order_id", orderId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(num)) {
+            wrapper.eq("num", num);
+        }
+        if (!StringUtils.isEmpty(amount)) {
+            wrapper.eq("amount", amount);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunCommodityOrderDetail> list = sunCommodityOrderDetailMapper.selectList(wrapper);
+        ExcelUtil<SunCommodityOrderDetail> util = new ExcelUtil<SunCommodityOrderDetail>(SunCommodityOrderDetail.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 214 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCommodityOrderServiceImpl.java

@@ -0,0 +1,214 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import com.iotechn.unimall.data.domain.sun.*;
+import com.iotechn.unimall.data.mapper.sun.*;
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.admin.api.sun.ISunCommodityOrderService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+import java.util.stream.Collectors;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 商品订单Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunCommodityOrderServiceImpl implements ISunCommodityOrderService {
+    @Autowired
+    private SunCommodityOrderMapper sunCommodityOrderMapper;
+    @Autowired
+    private SunCommodityOrderDetailMapper sunCommodityOrderDetailMapper;
+    @Autowired
+    private SunMemberInfoMapper sunMemberInfoMapper;
+    @Autowired
+    private SunOrderAddressMapper sunOrderAddressMapper;
+    @Autowired
+    private SunOrderEvaluationMapper sunOrderEvaluationMapper;
+
+    @Override
+    public Boolean add(SunCommodityOrder sunCommodityOrder, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCommodityOrder.setGmtCreate(now);
+        sunCommodityOrder.setGmtUpdate(now);
+        sunCommodityOrder.setAdminId(adminId);
+        return sunCommodityOrderMapper.insert(sunCommodityOrder) > 0;
+    }
+
+    @Override
+    public Page<SunCommodityOrder> list(Long companyId, String orderNo, String sumMoney, Double refundAppl, Double refund, String customer,String customerPhone, String pets, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCommodityOrder> wrapper = new EntityWrapper<SunCommodityOrder>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderNo)) {
+            wrapper.eq("order_no", orderNo);
+        }
+        if (!StringUtils.isEmpty(sumMoney)) {
+            wrapper.eq("sum_money", sumMoney);
+        }
+        if (!StringUtils.isEmpty(refundAppl)) {
+            wrapper.eq("refund_appl", refundAppl);
+        }
+        if (!StringUtils.isEmpty(refund)) {
+            wrapper.eq("refund", refund);
+        }
+        if (!StringUtils.isEmpty(customer)) {
+            List<SunMemberInfo> sunMemberInfos = sunMemberInfoMapper.selectList(new EntityWrapper<SunMemberInfo>()
+            .eq("name",customer));
+            //  客户信息
+            if(!CollectionUtils.isEmpty(sunMemberInfos)){
+                List<Long> ids = sunMemberInfos.stream().map(SunMemberInfo::getId).collect(Collectors.toList());
+                wrapper.in("customer",ids);
+            }
+
+        }
+        if (!StringUtils.isEmpty(customerPhone)) {
+            List<SunMemberInfo> sunMemberInfos = sunMemberInfoMapper.selectList(new EntityWrapper<SunMemberInfo>()
+                    .eq("phone",customerPhone));
+            //  客户信息
+            if(!CollectionUtils.isEmpty(sunMemberInfos)){
+                List<Long> ids = sunMemberInfos.stream().map(SunMemberInfo::getId).collect(Collectors.toList());
+                wrapper.in("customer",ids);
+            }
+        }
+        if (!StringUtils.isEmpty(pets)) {
+            wrapper.eq("pets", pets);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunCommodityOrder> list = sunCommodityOrderMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        if(!CollectionUtils.isEmpty(list)){
+            for(SunCommodityOrder sunCommodityOrder : list){
+                // 订单详情
+                sunCommodityOrder.setSunCommodityOrderDetails(sunCommodityOrderDetailMapper.selectList(new EntityWrapper<SunCommodityOrderDetail>()
+                        .eq("delete_flag","0")
+                        .eq("order_id",sunCommodityOrder.getId())));
+                SunMemberInfo sunMemberInfo = sunMemberInfoMapper.selectById(sunCommodityOrder.getCustomer());
+                //  客户信息
+                if(sunMemberInfo!= null){
+                    sunCommodityOrder.setCustomer(sunMemberInfo.getName());
+                    sunCommodityOrder.setCustomerPhone(sunMemberInfo.getPhone());
+                }
+                // 收货地址
+                SunOrderAddress sunOrderAddress = new SunOrderAddress();
+                sunOrderAddress.setOrderId(String.valueOf(sunCommodityOrder.getId()));
+                sunCommodityOrder.setSunOrderAddress(sunOrderAddressMapper.selectOne(sunOrderAddress));
+                // 评价
+                List<SunOrderEvaluation> sunOrderEvaluations = sunOrderEvaluationMapper.selectList(new EntityWrapper<SunOrderEvaluation>()
+                .eq("delete_flag","0")
+                .eq("order_id",sunCommodityOrder.getId()));
+                sunCommodityOrder.setSunOrderEvaluations(sunOrderEvaluations);
+            }
+
+        }
+        Integer count = sunCommodityOrderMapper.selectCount(wrapper);
+        return new Page<SunCommodityOrder>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunCommodityOrder tmp = sunCommodityOrderMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunCommodityOrderMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunCommodityOrder sunCommodityOrder, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCommodityOrder.setGmtUpdate(now);
+        sunCommodityOrder.setAdminId(adminId);
+        return sunCommodityOrderMapper.updateById(sunCommodityOrder) > 0;
+    }
+
+    @Override
+    public SunCommodityOrder get(Long id) throws ServiceException {
+        return sunCommodityOrderMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String orderNo, String sumMoney, Double refundAppl, Double refund, String customer, String pets, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCommodityOrder> wrapper = new EntityWrapper<SunCommodityOrder>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderNo)) {
+            wrapper.eq("order_no", orderNo);
+        }
+        if (!StringUtils.isEmpty(sumMoney)) {
+            wrapper.eq("sum_money", sumMoney);
+        }
+        if (!StringUtils.isEmpty(refundAppl)) {
+            wrapper.eq("refund_appl", refundAppl);
+        }
+        if (!StringUtils.isEmpty(refund)) {
+            wrapper.eq("refund", refund);
+        }
+        if (!StringUtils.isEmpty(customer)) {
+            wrapper.eq("customer", customer);
+        }
+        if (!StringUtils.isEmpty(pets)) {
+            wrapper.eq("pets", pets);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunCommodityOrder> list = sunCommodityOrderMapper.selectList(wrapper);
+        ExcelUtil<SunCommodityOrder> util = new ExcelUtil<SunCommodityOrder>(SunCommodityOrder.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 211 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunCouponManagementServiceImpl.java

@@ -0,0 +1,211 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunCouponManagementMapper;
+import com.iotechn.unimall.data.domain.sun.SunCouponManagement;
+import com.iotechn.unimall.admin.api.sun.ISunCouponManagementService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+/**
+ * 优惠券Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunCouponManagementServiceImpl implements ISunCouponManagementService {
+    @Autowired
+    private SunCouponManagementMapper sunCouponManagementMapper;
+
+    @Override
+    public Boolean add(SunCouponManagement sunCouponManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCouponManagement.setGmtCreate(now);
+        sunCouponManagement.setGmtUpdate(now);
+        sunCouponManagement.setAdminId(adminId);
+        return sunCouponManagementMapper.insert(sunCouponManagement) > 0;
+    }
+
+    @Override
+    public Page<SunCouponManagement> list(Long companyId, String name, String couponType, String distributionMethodKey, String distributionMethod, Long num, Long limitNum, Double fullMoney, Double reduceMoney, String discount, String termValidity, Date intervalStart, Date intervalEnd, Long effectiveDays, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCouponManagement> wrapper = new EntityWrapper<SunCouponManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(couponType)) {
+            wrapper.eq("coupon_type", couponType);
+        }
+        if (!StringUtils.isEmpty(distributionMethodKey)) {
+            wrapper.eq("distribution_method_key", distributionMethodKey);
+        }
+        if (!StringUtils.isEmpty(distributionMethod)) {
+            wrapper.eq("distribution_method", distributionMethod);
+        }
+        if (!StringUtils.isEmpty(num)) {
+            wrapper.eq("num", num);
+        }
+        if (!StringUtils.isEmpty(limitNum)) {
+            wrapper.eq("limit_num", limitNum);
+        }
+        if (!StringUtils.isEmpty(fullMoney)) {
+            wrapper.eq("full_money", fullMoney);
+        }
+        if (!StringUtils.isEmpty(reduceMoney)) {
+            wrapper.eq("reduce_money", reduceMoney);
+        }
+        if (!StringUtils.isEmpty(discount)) {
+            wrapper.eq("discount", discount);
+        }
+        if (!StringUtils.isEmpty(termValidity)) {
+            wrapper.eq("term_validity", termValidity);
+        }
+        if (!StringUtils.isEmpty(intervalStart)) {
+            wrapper.eq("interval_start", intervalStart);
+        }
+        if (!StringUtils.isEmpty(intervalEnd)) {
+            wrapper.eq("interval_end", intervalEnd);
+        }
+        if (!StringUtils.isEmpty(effectiveDays)) {
+            wrapper.eq("effective_days", effectiveDays);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunCouponManagement> list = sunCouponManagementMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunCouponManagementMapper.selectCount(wrapper);
+        return new Page<SunCouponManagement>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        Wrapper<SunCouponManagement> wrapper = new EntityWrapper<SunCouponManagement>();
+        wrapper.in("id", ids);
+        List<SunCouponManagement> list = sunCouponManagementMapper.selectList(wrapper);
+        for (SunCouponManagement tmp : list) {
+            tmp.setDeleteFlag(1);
+            sunCouponManagementMapper.updateById(tmp);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunCouponManagement sunCouponManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunCouponManagement.setGmtUpdate(now);
+        sunCouponManagement.setAdminId(adminId);
+        return sunCouponManagementMapper.updateById(sunCouponManagement) > 0;
+    }
+
+    @Override
+    public SunCouponManagement get(Long id) throws ServiceException {
+        return sunCouponManagementMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String name, String couponType, String distributionMethodKey, String distributionMethod, Long num, Long limitNum, Double fullMoney, Double reduceMoney, String discount, String termValidity, Date intervalStart, Date intervalEnd, Long effectiveDays, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunCouponManagement> wrapper = new EntityWrapper<SunCouponManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(couponType)) {
+            wrapper.eq("coupon_type", couponType);
+        }
+        if (!StringUtils.isEmpty(distributionMethodKey)) {
+            wrapper.eq("distribution_method_key", distributionMethodKey);
+        }
+        if (!StringUtils.isEmpty(distributionMethod)) {
+            wrapper.eq("distribution_method", distributionMethod);
+        }
+        if (!StringUtils.isEmpty(num)) {
+            wrapper.eq("num", num);
+        }
+        if (!StringUtils.isEmpty(limitNum)) {
+            wrapper.eq("limit_num", limitNum);
+        }
+        if (!StringUtils.isEmpty(fullMoney)) {
+            wrapper.eq("full_money", fullMoney);
+        }
+        if (!StringUtils.isEmpty(reduceMoney)) {
+            wrapper.eq("reduce_money", reduceMoney);
+        }
+        if (!StringUtils.isEmpty(discount)) {
+            wrapper.eq("discount", discount);
+        }
+        if (!StringUtils.isEmpty(termValidity)) {
+            wrapper.eq("term_validity", termValidity);
+        }
+        if (!StringUtils.isEmpty(intervalStart)) {
+            wrapper.eq("interval_start", intervalStart);
+        }
+        if (!StringUtils.isEmpty(intervalEnd)) {
+            wrapper.eq("interval_end", intervalEnd);
+        }
+        if (!StringUtils.isEmpty(effectiveDays)) {
+            wrapper.eq("effective_days", effectiveDays);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunCouponManagement> list = sunCouponManagementMapper.selectList(wrapper);
+        ExcelUtil<SunCouponManagement> util = new ExcelUtil<SunCouponManagement>(SunCouponManagement.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 139 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunGoodsServicesTypeServiceImpl.java

@@ -0,0 +1,139 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunGoodsServicesTypeMapper;
+import com.iotechn.unimall.data.domain.sun.SunGoodsServicesType;
+import com.iotechn.unimall.admin.api.sun.ISunGoodsServicesTypeService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 服务商品分类Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunGoodsServicesTypeServiceImpl implements ISunGoodsServicesTypeService {
+    @Autowired
+    private SunGoodsServicesTypeMapper sunGoodsServicesTypeMapper;
+
+    @Override
+    public Boolean add(SunGoodsServicesType sunGoodsServicesType, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunGoodsServicesType.setGmtCreate(now);
+        sunGoodsServicesType.setGmtUpdate(now);
+        sunGoodsServicesType.setAdminId(adminId);
+        return sunGoodsServicesTypeMapper.insert(sunGoodsServicesType) > 0;
+    }
+
+    @Override
+    public Page<SunGoodsServicesType> list(Long companyId, Long sunType, String category, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunGoodsServicesType> wrapper = new EntityWrapper<SunGoodsServicesType>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(sunType)) {
+            wrapper.eq("sun_type", sunType);
+        }
+        if (!StringUtils.isEmpty(category)) {
+            wrapper.eq("category", category);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunGoodsServicesType> list = sunGoodsServicesTypeMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunGoodsServicesTypeMapper.selectCount(wrapper);
+        return new Page<SunGoodsServicesType>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        Wrapper<SunGoodsServicesType> wrapper = new EntityWrapper<SunGoodsServicesType>();
+        wrapper.in("id", ids);
+        List<SunGoodsServicesType> list = sunGoodsServicesTypeMapper.selectList(wrapper);
+        for (SunGoodsServicesType tmp : list) {
+            tmp.setDeleteFlag(1);
+            sunGoodsServicesTypeMapper.updateById(tmp);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunGoodsServicesType sunGoodsServicesType, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunGoodsServicesType.setGmtUpdate(now);
+        sunGoodsServicesType.setAdminId(adminId);
+        return sunGoodsServicesTypeMapper.updateById(sunGoodsServicesType) > 0;
+    }
+
+    @Override
+    public SunGoodsServicesType get(Long id) throws ServiceException {
+        return sunGoodsServicesTypeMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, Long sunType, String category, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunGoodsServicesType> wrapper = new EntityWrapper<SunGoodsServicesType>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(sunType)) {
+            wrapper.eq("sun_type", sunType);
+        }
+        if (!StringUtils.isEmpty(category)) {
+            wrapper.eq("category", category);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunGoodsServicesType> list = sunGoodsServicesTypeMapper.selectList(wrapper);
+        ExcelUtil<SunGoodsServicesType> util = new ExcelUtil<SunGoodsServicesType>(SunGoodsServicesType.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 158 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunMemberInfoServiceImpl.java

@@ -0,0 +1,158 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import com.iotechn.unimall.data.model.Page;
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunMemberInfoMapper;
+import com.iotechn.unimall.data.domain.sun.SunMemberInfo;
+import com.iotechn.unimall.admin.api.sun.ISunMemberInfoService;
+
+/**
+ * 用户信息Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunMemberInfoServiceImpl implements ISunMemberInfoService {
+    @Autowired
+    private SunMemberInfoMapper sunMemberInfoMapper;
+
+    @Override
+    public Boolean add(SunMemberInfo sunMemberInfo,Long adminId) throws ServiceException {
+
+        Date now = new Date();
+        sunMemberInfo.setGmtCreate(now);
+        sunMemberInfo.setGmtUpdate(now);
+        sunMemberInfo.setAdminId(adminId);
+        return sunMemberInfoMapper.insert(sunMemberInfo) > 0;
+    }
+
+    @Override
+    public Page<SunMemberInfo> list(Long companyId, String name, String phone, Long sex, String stars, String storedValueCard, Long cancellations, Double balance, String remarks, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunMemberInfo> wrapper = new EntityWrapper<SunMemberInfo>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(sex)) {
+            wrapper.eq("sex", sex);
+        }
+        if (!StringUtils.isEmpty(stars)) {
+            wrapper.eq("stars", stars);
+        }
+        if (!StringUtils.isEmpty(storedValueCard)) {
+            wrapper.eq("stored_value_card", storedValueCard);
+        }
+        if (!StringUtils.isEmpty(cancellations)) {
+            wrapper.eq("cancellations", cancellations);
+        }
+        if (!StringUtils.isEmpty(balance)) {
+            wrapper.eq("balance", balance);
+        }
+        if (!StringUtils.isEmpty(remarks)) {
+            wrapper.eq("remarks", remarks);
+        }
+
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunMemberInfo> list = sunMemberInfoMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunMemberInfoMapper.selectCount(wrapper);
+        return new Page<SunMemberInfo>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(String id) {
+        String[] ids = id.split(",");
+        for (String tt:ids) {
+            SunMemberInfo tmp =  sunMemberInfoMapper.selectById(Long.parseLong(tt));
+            if(tmp != null){
+                tmp.setDeleteFlag(1);
+                sunMemberInfoMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunMemberInfo sunMemberInfo,Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunMemberInfo.setGmtUpdate(now);
+        sunMemberInfo.setAdminId(adminId);
+        return sunMemberInfoMapper.updateById(sunMemberInfo) > 0;
+    }
+
+    @Override
+    public SunMemberInfo get(Long id) throws ServiceException {
+        return sunMemberInfoMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String name, String phone, String sex, String stars, String storedValueCard, String cancellations, Double balance, String remarks, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunMemberInfo> wrapper = new EntityWrapper<SunMemberInfo>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(sex)) {
+            wrapper.eq("sex", sex);
+        }
+        if (!StringUtils.isEmpty(stars)) {
+            wrapper.eq("stars", stars);
+        }
+        if (!StringUtils.isEmpty(storedValueCard)) {
+            wrapper.eq("stored_value_card", storedValueCard);
+        }
+        if (!StringUtils.isEmpty(cancellations)) {
+            wrapper.eq("cancellations", cancellations);
+        }
+        if (!StringUtils.isEmpty(balance)) {
+            wrapper.eq("balance", balance);
+        }
+        if (!StringUtils.isEmpty(remarks)) {
+            wrapper.eq("remarks", remarks);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunMemberInfo> list = sunMemberInfoMapper.selectList(wrapper);
+        ExcelUtil<SunMemberInfo> util = new ExcelUtil<SunMemberInfo>(SunMemberInfo.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 164 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunOrderAddressServiceImpl.java

@@ -0,0 +1,164 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunOrderAddressMapper;
+import com.iotechn.unimall.data.domain.sun.SunOrderAddress;
+import com.iotechn.unimall.admin.api.sun.ISunOrderAddressService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 订单客户收货地址Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-26
+ */
+@Service
+public class SunOrderAddressServiceImpl implements ISunOrderAddressService {
+    @Autowired
+    private SunOrderAddressMapper sunOrderAddressMapper;
+
+    @Override
+    public Boolean add(SunOrderAddress sunOrderAddress, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunOrderAddress.setGmtCreate(now);
+        sunOrderAddress.setGmtUpdate(now);
+        sunOrderAddress.setAdminId(adminId);
+        return sunOrderAddressMapper.insert(sunOrderAddress) > 0;
+    }
+
+    @Override
+    public Page<SunOrderAddress> list(Long companyId, String orderId, String orderNo, String consigneeName, String phone, String location, String address, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunOrderAddress> wrapper = new EntityWrapper<SunOrderAddress>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderId)) {
+            wrapper.eq("order_id", orderId);
+        }
+        if (!StringUtils.isEmpty(orderNo)) {
+            wrapper.eq("order_no", orderNo);
+        }
+        if (!StringUtils.isEmpty(consigneeName)) {
+            wrapper.eq("consignee_name", consigneeName);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(location)) {
+            wrapper.eq("location", location);
+        }
+        if (!StringUtils.isEmpty(address)) {
+            wrapper.eq("address", address);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunOrderAddress> list = sunOrderAddressMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunOrderAddressMapper.selectCount(wrapper);
+        return new Page<SunOrderAddress>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunOrderAddress tmp = sunOrderAddressMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunOrderAddressMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunOrderAddress sunOrderAddress, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunOrderAddress.setGmtUpdate(now);
+        sunOrderAddress.setAdminId(adminId);
+        return sunOrderAddressMapper.updateById(sunOrderAddress) > 0;
+    }
+
+    @Override
+    public SunOrderAddress get(Long id) throws ServiceException {
+        return sunOrderAddressMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String orderId, String orderNo, String consigneeName, String phone, String location, String address, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunOrderAddress> wrapper = new EntityWrapper<SunOrderAddress>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderId)) {
+            wrapper.eq("order_id", orderId);
+        }
+        if (!StringUtils.isEmpty(orderNo)) {
+            wrapper.eq("order_no", orderNo);
+        }
+        if (!StringUtils.isEmpty(consigneeName)) {
+            wrapper.eq("consignee_name", consigneeName);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(location)) {
+            wrapper.eq("location", location);
+        }
+        if (!StringUtils.isEmpty(address)) {
+            wrapper.eq("address", address);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunOrderAddress> list = sunOrderAddressMapper.selectList(wrapper);
+        ExcelUtil<SunOrderAddress> util = new ExcelUtil<SunOrderAddress>(SunOrderAddress.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 168 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunOrderEvaluationServiceImpl.java

@@ -0,0 +1,168 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunOrderEvaluationMapper;
+import com.iotechn.unimall.data.domain.sun.SunOrderEvaluation;
+import com.iotechn.unimall.admin.api.sun.ISunOrderEvaluationService;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 订单评价Service业务层处理
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+@Service
+public class SunOrderEvaluationServiceImpl implements ISunOrderEvaluationService{
+	@Autowired
+	private SunOrderEvaluationMapper sunOrderEvaluationMapper;
+	
+	@Override
+	public Boolean add(SunOrderEvaluation sunOrderEvaluation,Long adminId) throws ServiceException {
+		Date now = new Date();
+		sunOrderEvaluation.setGmtCreate(now);
+		sunOrderEvaluation.setGmtUpdate(now);
+		sunOrderEvaluation.setAdminId(adminId);
+		return sunOrderEvaluationMapper.insert(sunOrderEvaluation)>0;
+	}
+
+	@Override
+	public Page<SunOrderEvaluation> list(Long companyId,String orderType,String orderId,String orderNo,String tradeName,String commoditySatisfaction,String expressSatisfaction,String address,String status,Integer deleteFlag,Date gmtCreate,Date gmtUpdate,Long userId,Long adminId, Integer page, Integer limit)throws ServiceException {
+		Wrapper<SunOrderEvaluation> wrapper = new EntityWrapper<SunOrderEvaluation>();
+														if (!StringUtils.isEmpty(companyId)) {
+					wrapper.eq("company_id", companyId);
+				}
+												if (!StringUtils.isEmpty(orderType)) {
+					wrapper.eq("order_type", orderType);
+				}
+												if (!StringUtils.isEmpty(orderId)) {
+					wrapper.eq("order_id", orderId);
+				}
+												if (!StringUtils.isEmpty(orderNo)) {
+					wrapper.eq("order_no", orderNo);
+				}
+												if (!StringUtils.isEmpty(tradeName)) {
+					wrapper.eq("trade_name", tradeName);
+				}
+												if (!StringUtils.isEmpty(commoditySatisfaction)) {
+					wrapper.eq("commodity_satisfaction", commoditySatisfaction);
+				}
+												if (!StringUtils.isEmpty(expressSatisfaction)) {
+					wrapper.eq("express_satisfaction", expressSatisfaction);
+				}
+												if (!StringUtils.isEmpty(address)) {
+					wrapper.eq("address", address);
+				}
+												if (!StringUtils.isEmpty(status)) {
+					wrapper.eq("status", status);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(userId)) {
+					wrapper.eq("user_id", userId);
+				}
+												if (!StringUtils.isEmpty(adminId)) {
+					wrapper.eq("admin_id", adminId);
+				}
+							wrapper.eq("delete_flag", 0);
+		List<SunOrderEvaluation> list = sunOrderEvaluationMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+		Integer count = sunOrderEvaluationMapper.selectCount(wrapper);
+		return new Page<SunOrderEvaluation>(list, page, limit, count);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(Long id) {
+		String[] ids = String.valueOf(id).split(",");
+		for (String tt:ids) {
+			SunOrderEvaluation tmp =  sunOrderEvaluationMapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1);
+				sunOrderEvaluationMapper.updateById(tmp);
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Boolean update(SunOrderEvaluation sunOrderEvaluation,Long adminId) throws ServiceException {
+		Date now = new Date();
+		sunOrderEvaluation.setGmtUpdate(now);
+		sunOrderEvaluation.setAdminId(adminId);
+		return sunOrderEvaluationMapper.updateById(sunOrderEvaluation)>0;
+	}
+
+	@Override
+	public SunOrderEvaluation get(Long id) throws ServiceException {
+		return sunOrderEvaluationMapper.selectById(id);
+	}
+	
+	@Override
+	public String export(Long companyId,String orderType,String orderId,String orderNo,String tradeName,String commoditySatisfaction,String expressSatisfaction,String address,String status,Integer deleteFlag,Date gmtCreate,Date gmtUpdate,Long userId,Long adminId, Integer page, Integer limit)throws ServiceException {
+		Wrapper<SunOrderEvaluation> wrapper = new EntityWrapper<SunOrderEvaluation>();
+														if (!StringUtils.isEmpty(companyId)) {
+					wrapper.eq("company_id", companyId);
+				}
+												if (!StringUtils.isEmpty(orderType)) {
+					wrapper.eq("order_type", orderType);
+				}
+												if (!StringUtils.isEmpty(orderId)) {
+					wrapper.eq("order_id", orderId);
+				}
+												if (!StringUtils.isEmpty(orderNo)) {
+					wrapper.eq("order_no", orderNo);
+				}
+												if (!StringUtils.isEmpty(tradeName)) {
+					wrapper.eq("trade_name", tradeName);
+				}
+												if (!StringUtils.isEmpty(commoditySatisfaction)) {
+					wrapper.eq("commodity_satisfaction", commoditySatisfaction);
+				}
+												if (!StringUtils.isEmpty(expressSatisfaction)) {
+					wrapper.eq("express_satisfaction", expressSatisfaction);
+				}
+												if (!StringUtils.isEmpty(address)) {
+					wrapper.eq("address", address);
+				}
+												if (!StringUtils.isEmpty(status)) {
+					wrapper.eq("status", status);
+				}
+												if (!StringUtils.isEmpty(deleteFlag)) {
+					wrapper.eq("delete_flag", deleteFlag);
+				}
+												if (!StringUtils.isEmpty(gmtCreate)) {
+					wrapper.eq("gmt_create", gmtCreate);
+				}
+												if (!StringUtils.isEmpty(gmtUpdate)) {
+					wrapper.eq("gmt_update", gmtUpdate);
+				}
+												if (!StringUtils.isEmpty(userId)) {
+					wrapper.eq("user_id", userId);
+				}
+												if (!StringUtils.isEmpty(adminId)) {
+					wrapper.eq("admin_id", adminId);
+				}
+							List<SunOrderEvaluation> list = sunOrderEvaluationMapper.selectList(wrapper);
+		ExcelUtil<SunOrderEvaluation> util = new ExcelUtil<SunOrderEvaluation>(SunOrderEvaluation.class);
+		return util.exportExcel(list, "操作日志");
+	}
+}

+ 158 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunReceivingAddressServiceImpl.java

@@ -0,0 +1,158 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunReceivingAddressMapper;
+import com.iotechn.unimall.data.domain.sun.SunReceivingAddress;
+import com.iotechn.unimall.admin.api.sun.ISunReceivingAddressService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 客户收货地址 Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-26
+ */
+@Service
+public class SunReceivingAddressServiceImpl implements ISunReceivingAddressService {
+    @Autowired
+    private SunReceivingAddressMapper sunReceivingAddressMapper;
+
+    @Override
+    public Boolean add(SunReceivingAddress sunReceivingAddress, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunReceivingAddress.setGmtCreate(now);
+        sunReceivingAddress.setGmtUpdate(now);
+        sunReceivingAddress.setAdminId(adminId);
+        return sunReceivingAddressMapper.insert(sunReceivingAddress) > 0;
+    }
+
+    @Override
+    public Page<SunReceivingAddress> list(Long companyId, String cusId, String consigneeName, String phone, String location, String address, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunReceivingAddress> wrapper = new EntityWrapper<SunReceivingAddress>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(cusId)) {
+            wrapper.eq("cus_id", cusId);
+        }
+        if (!StringUtils.isEmpty(consigneeName)) {
+            wrapper.eq("consignee_name", consigneeName);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(location)) {
+            wrapper.eq("location", location);
+        }
+        if (!StringUtils.isEmpty(address)) {
+            wrapper.eq("address", address);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunReceivingAddress> list = sunReceivingAddressMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunReceivingAddressMapper.selectCount(wrapper);
+        return new Page<SunReceivingAddress>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunReceivingAddress tmp = sunReceivingAddressMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunReceivingAddressMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunReceivingAddress sunReceivingAddress, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunReceivingAddress.setGmtUpdate(now);
+        sunReceivingAddress.setAdminId(adminId);
+        return sunReceivingAddressMapper.updateById(sunReceivingAddress) > 0;
+    }
+
+    @Override
+    public SunReceivingAddress get(Long id) throws ServiceException {
+        return sunReceivingAddressMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String cusId, String consigneeName, String phone, String location, String address, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunReceivingAddress> wrapper = new EntityWrapper<SunReceivingAddress>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(cusId)) {
+            wrapper.eq("cus_id", cusId);
+        }
+        if (!StringUtils.isEmpty(consigneeName)) {
+            wrapper.eq("consignee_name", consigneeName);
+        }
+        if (!StringUtils.isEmpty(phone)) {
+            wrapper.eq("phone", phone);
+        }
+        if (!StringUtils.isEmpty(location)) {
+            wrapper.eq("location", location);
+        }
+        if (!StringUtils.isEmpty(address)) {
+            wrapper.eq("address", address);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunReceivingAddress> list = sunReceivingAddressMapper.selectList(wrapper);
+        ExcelUtil<SunReceivingAddress> util = new ExcelUtil<SunReceivingAddress>(SunReceivingAddress.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 175 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunServiceManagementServiceImpl.java

@@ -0,0 +1,175 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunServiceManagementMapper;
+import com.iotechn.unimall.data.domain.sun.SunServiceManagement;
+import com.iotechn.unimall.admin.api.sun.ISunServiceManagementService;
+import com.iotechn.unimall.data.model.Page;
+
+import org.springframework.transaction.annotation.Transactional;
+import java.util.Date;
+
+/**
+ * 服务管理Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunServiceManagementServiceImpl implements ISunServiceManagementService {
+    @Autowired
+    private SunServiceManagementMapper sunServiceManagementMapper;
+
+    @Override
+    public Boolean add(SunServiceManagement sunServiceManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunServiceManagement.setGmtCreate(now);
+        sunServiceManagement.setGmtUpdate(now);
+        sunServiceManagement.setAdminId(adminId);
+        return sunServiceManagementMapper.insert(sunServiceManagement) > 0;
+    }
+
+    @Override
+    public Page<SunServiceManagement> list(Long companyId, String name, String category, Double priceMin, Double priceXiao, Double priceZhong, Double priceDa, Double priceJu, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunServiceManagement> wrapper = new EntityWrapper<SunServiceManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(category)) {
+            wrapper.eq("category", category);
+        }
+        if (!StringUtils.isEmpty(priceMin)) {
+            wrapper.eq("price_min", priceMin);
+        }
+        if (!StringUtils.isEmpty(priceXiao)) {
+            wrapper.eq("price_xiao", priceXiao);
+        }
+        if (!StringUtils.isEmpty(priceZhong)) {
+            wrapper.eq("price_zhong", priceZhong);
+        }
+        if (!StringUtils.isEmpty(priceDa)) {
+            wrapper.eq("price_da", priceDa);
+        }
+        if (!StringUtils.isEmpty(priceJu)) {
+            wrapper.eq("price_ju", priceJu);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunServiceManagement> list = sunServiceManagementMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunServiceManagementMapper.selectCount(wrapper);
+        return new Page<SunServiceManagement>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        Wrapper<SunServiceManagement> wrapper = new EntityWrapper<SunServiceManagement>();
+        wrapper.in("id", ids);
+        List<SunServiceManagement> list = sunServiceManagementMapper.selectList(wrapper);
+        for (SunServiceManagement tmp : list) {
+            tmp.setDeleteFlag(1);
+            sunServiceManagementMapper.updateById(tmp);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunServiceManagement sunServiceManagement, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunServiceManagement.setGmtUpdate(now);
+        sunServiceManagement.setAdminId(adminId);
+        return sunServiceManagementMapper.updateById(sunServiceManagement) > 0;
+    }
+
+    @Override
+    public SunServiceManagement get(Long id) throws ServiceException {
+        return sunServiceManagementMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String name, String category, Double priceMin, Double priceXiao, Double priceZhong, Double priceDa, Double priceJu, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunServiceManagement> wrapper = new EntityWrapper<SunServiceManagement>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(category)) {
+            wrapper.eq("category", category);
+        }
+        if (!StringUtils.isEmpty(priceMin)) {
+            wrapper.eq("price_min", priceMin);
+        }
+        if (!StringUtils.isEmpty(priceXiao)) {
+            wrapper.eq("price_xiao", priceXiao);
+        }
+        if (!StringUtils.isEmpty(priceZhong)) {
+            wrapper.eq("price_zhong", priceZhong);
+        }
+        if (!StringUtils.isEmpty(priceDa)) {
+            wrapper.eq("price_da", priceDa);
+        }
+        if (!StringUtils.isEmpty(priceJu)) {
+            wrapper.eq("price_ju", priceJu);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunServiceManagement> list = sunServiceManagementMapper.selectList(wrapper);
+        ExcelUtil<SunServiceManagement> util = new ExcelUtil<SunServiceManagement>(SunServiceManagement.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 152 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunServiceOrderDetailServiceImpl.java

@@ -0,0 +1,152 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunServiceOrderDetailMapper;
+import com.iotechn.unimall.data.domain.sun.SunServiceOrderDetail;
+import com.iotechn.unimall.admin.api.sun.ISunServiceOrderDetailService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 服务订单详情Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunServiceOrderDetailServiceImpl implements ISunServiceOrderDetailService {
+    @Autowired
+    private SunServiceOrderDetailMapper sunServiceOrderDetailMapper;
+
+    @Override
+    public Boolean add(SunServiceOrderDetail sunServiceOrderDetail, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunServiceOrderDetail.setGmtCreate(now);
+        sunServiceOrderDetail.setGmtUpdate(now);
+        sunServiceOrderDetail.setAdminId(adminId);
+        return sunServiceOrderDetailMapper.insert(sunServiceOrderDetail) > 0;
+    }
+
+    @Override
+    public Page<SunServiceOrderDetail> list(Long companyId, String orderId, String name, String appointment, Double price, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunServiceOrderDetail> wrapper = new EntityWrapper<SunServiceOrderDetail>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderId)) {
+            wrapper.eq("order_id", orderId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(appointment)) {
+            wrapper.eq("appointment", appointment);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunServiceOrderDetail> list = sunServiceOrderDetailMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunServiceOrderDetailMapper.selectCount(wrapper);
+        return new Page<SunServiceOrderDetail>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunServiceOrderDetail tmp = sunServiceOrderDetailMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunServiceOrderDetailMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunServiceOrderDetail sunServiceOrderDetail, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunServiceOrderDetail.setGmtUpdate(now);
+        sunServiceOrderDetail.setAdminId(adminId);
+        return sunServiceOrderDetailMapper.updateById(sunServiceOrderDetail) > 0;
+    }
+
+    @Override
+    public SunServiceOrderDetail get(Long id) throws ServiceException {
+        return sunServiceOrderDetailMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String orderId, String name, String appointment, Double price, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunServiceOrderDetail> wrapper = new EntityWrapper<SunServiceOrderDetail>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderId)) {
+            wrapper.eq("order_id", orderId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(appointment)) {
+            wrapper.eq("appointment", appointment);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunServiceOrderDetail> list = sunServiceOrderDetailMapper.selectList(wrapper);
+        ExcelUtil<SunServiceOrderDetail> util = new ExcelUtil<SunServiceOrderDetail>(SunServiceOrderDetail.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 188 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunServiceOrderServiceImpl.java

@@ -0,0 +1,188 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import com.iotechn.unimall.data.domain.sun.*;
+import com.iotechn.unimall.data.mapper.sun.SunMemberInfoMapper;
+import com.iotechn.unimall.data.mapper.sun.SunOrderEvaluationMapper;
+import com.iotechn.unimall.data.mapper.sun.SunServiceOrderDetailMapper;
+import jodd.util.CollectionUtil;
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunServiceOrderMapper;
+import com.iotechn.unimall.admin.api.sun.ISunServiceOrderService;
+import com.iotechn.unimall.data.model.Page;
+
+import java.util.Date;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 服务订单Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunServiceOrderServiceImpl implements ISunServiceOrderService {
+    @Autowired
+    private SunServiceOrderMapper sunServiceOrderMapper;
+    @Autowired
+    private SunServiceOrderDetailMapper sunServiceOrderDetailMapper;
+    @Autowired
+    private SunMemberInfoMapper sunMemberInfoMapper;
+    @Autowired
+    private SunOrderEvaluationMapper sunOrderEvaluationMapper;
+    @Override
+    public Boolean add(SunServiceOrder sunServiceOrder, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunServiceOrder.setGmtCreate(now);
+        sunServiceOrder.setGmtUpdate(now);
+        sunServiceOrder.setAdminId(adminId);
+        return sunServiceOrderMapper.insert(sunServiceOrder) > 0;
+    }
+
+    @Override
+    public Page<SunServiceOrder> list(Long companyId, String orderNo, String sumMoney, Double refund, String customer, String pets, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunServiceOrder> wrapper = new EntityWrapper<SunServiceOrder>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderNo)) {
+            wrapper.eq("order_no", orderNo);
+        }
+        if (!StringUtils.isEmpty(sumMoney)) {
+            wrapper.eq("sum_money", sumMoney);
+        }
+        if (!StringUtils.isEmpty(refund)) {
+            wrapper.eq("refund", refund);
+        }
+        if (!StringUtils.isEmpty(customer)) {
+            wrapper.eq("customer", customer);
+        }
+        if (!StringUtils.isEmpty(pets)) {
+            wrapper.eq("pets", pets);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunServiceOrder> list = sunServiceOrderMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        if(!CollectionUtils.isEmpty(list)){
+            for(SunServiceOrder sunServiceOrder : list){
+                sunServiceOrder.setSunServiceOrderDetails(sunServiceOrderDetailMapper.selectList(new EntityWrapper<SunServiceOrderDetail>()
+                .eq("delete_flag","0")
+                .eq("order_id",sunServiceOrder.getId())));
+                SunMemberInfo sunMemberInfo = sunMemberInfoMapper.selectById(sunServiceOrder.getCustomer());
+                if(sunMemberInfo!= null){
+
+                    sunServiceOrder.setCustomer(sunMemberInfo.getName());
+                    sunServiceOrder.setCustomerPhone(sunMemberInfo.getPhone());
+                }
+
+                // 评价
+                List<SunOrderEvaluation> sunOrderEvaluations = sunOrderEvaluationMapper.selectList(new EntityWrapper<SunOrderEvaluation>()
+                        .eq("delete_flag","0")
+                        .eq("order_id",sunServiceOrder.getId()));
+                sunServiceOrder.setSunOrderEvaluations(sunOrderEvaluations);
+            }
+
+        }
+        Integer count = sunServiceOrderMapper.selectCount(wrapper);
+        return new Page<SunServiceOrder>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        for (String tt : ids) {
+            SunServiceOrder tmp = sunServiceOrderMapper.selectById(Long.parseLong(tt));
+            if (tmp != null) {
+                tmp.setDeleteFlag(1);
+                sunServiceOrderMapper.updateById(tmp);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunServiceOrder sunServiceOrder, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunServiceOrder.setGmtUpdate(now);
+        sunServiceOrder.setAdminId(adminId);
+        return sunServiceOrderMapper.updateById(sunServiceOrder) > 0;
+    }
+
+    @Override
+    public SunServiceOrder get(Long id) throws ServiceException {
+        return sunServiceOrderMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String orderNo, String sumMoney, Double refund, String customer, String pets, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunServiceOrder> wrapper = new EntityWrapper<SunServiceOrder>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(orderNo)) {
+            wrapper.eq("order_no", orderNo);
+        }
+        if (!StringUtils.isEmpty(sumMoney)) {
+            wrapper.eq("sum_money", sumMoney);
+        }
+        if (!StringUtils.isEmpty(refund)) {
+            wrapper.eq("refund", refund);
+        }
+        if (!StringUtils.isEmpty(customer)) {
+            wrapper.eq("customer", customer);
+        }
+        if (!StringUtils.isEmpty(pets)) {
+            wrapper.eq("pets", pets);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunServiceOrder> list = sunServiceOrderMapper.selectList(wrapper);
+        ExcelUtil<SunServiceOrder> util = new ExcelUtil<SunServiceOrder>(SunServiceOrder.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 172 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunStoredCardServiceImpl.java

@@ -0,0 +1,172 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import com.iotechn.unimall.data.domain.sun.SunStoredDiscount;
+import com.iotechn.unimall.data.mapper.sun.SunStoredDiscountMapper;
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunStoredCardMapper;
+import com.iotechn.unimall.data.domain.sun.SunStoredCard;
+import com.iotechn.unimall.admin.api.sun.ISunStoredCardService;
+import com.iotechn.unimall.data.model.Page;
+
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+/**
+ * 储值卡Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunStoredCardServiceImpl implements ISunStoredCardService {
+    @Autowired
+    private SunStoredCardMapper sunStoredCardMapper;
+    @Autowired
+    private SunStoredDiscountMapper sunStoredDiscountMapper;
+
+    @Override
+    public Boolean add(SunStoredCard sunStoredCard, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunStoredCard.setGmtCreate(now);
+        sunStoredCard.setGmtUpdate(now);
+        sunStoredCard.setAdminId(adminId);
+        return sunStoredCardMapper.insert(sunStoredCard) > 0;
+    }
+
+    @Override
+    public Page<SunStoredCard> list(Long companyId, String name, Double price, String freeShuttle, String coupon, String other, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunStoredCard> wrapper = new EntityWrapper<SunStoredCard>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(freeShuttle)) {
+            wrapper.eq("free_shuttle", freeShuttle);
+        }
+        if (!StringUtils.isEmpty(coupon)) {
+            wrapper.eq("coupon", coupon);
+        }
+        if (!StringUtils.isEmpty(other)) {
+            wrapper.eq("other", other);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunStoredCard> list = sunStoredCardMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunStoredCardMapper.selectCount(wrapper);
+        return new Page<SunStoredCard>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        Wrapper<SunStoredCard> wrapper = new EntityWrapper<SunStoredCard>();
+        wrapper.in("id", ids);
+        List<SunStoredCard> list = sunStoredCardMapper.selectList(wrapper);
+        for (SunStoredCard tmp : list) {
+            tmp.setDeleteFlag(1);
+            sunStoredCardMapper.updateById(tmp);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunStoredCard sunStoredCard, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunStoredCard.setGmtUpdate(now);
+        sunStoredCard.setAdminId(adminId);
+        return sunStoredCardMapper.updateById(sunStoredCard) > 0;
+    }
+
+    @Override
+    public SunStoredCard get(Long id) throws ServiceException {
+        SunStoredCard sunStoredCard = sunStoredCardMapper.selectById(id);
+        sunStoredCard.setSunStoredDiscount(sunStoredDiscountMapper.selectList(new EntityWrapper<SunStoredDiscount>()
+                .eq("delete_flag", 0)
+                .eq("stored_id", id)));
+        return sunStoredCardMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, String name, Double price, String freeShuttle, String coupon, String other, String pictureUrl, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunStoredCard> wrapper = new EntityWrapper<SunStoredCard>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            wrapper.eq("name", name);
+        }
+        if (!StringUtils.isEmpty(price)) {
+            wrapper.eq("price", price);
+        }
+        if (!StringUtils.isEmpty(freeShuttle)) {
+            wrapper.eq("free_shuttle", freeShuttle);
+        }
+        if (!StringUtils.isEmpty(coupon)) {
+            wrapper.eq("coupon", coupon);
+        }
+        if (!StringUtils.isEmpty(other)) {
+            wrapper.eq("other", other);
+        }
+        if (!StringUtils.isEmpty(pictureUrl)) {
+            wrapper.eq("picture_url", pictureUrl);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunStoredCard> list = sunStoredCardMapper.selectList(wrapper);
+        ExcelUtil<SunStoredCard> util = new ExcelUtil<SunStoredCard>(SunStoredCard.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 151 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sun/impl/SunStoredDiscountServiceImpl.java

@@ -0,0 +1,151 @@
+package com.iotechn.unimall.admin.api.sun.impl;
+
+import java.util.List;
+
+import org.apache.ibatis.session.RowBounds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.util.ExcelUtil;
+import com.iotechn.unimall.data.mapper.sun.SunStoredDiscountMapper;
+import com.iotechn.unimall.data.domain.sun.SunStoredDiscount;
+import com.iotechn.unimall.admin.api.sun.ISunStoredDiscountService;
+import com.iotechn.unimall.data.model.Page;
+
+import org.springframework.transaction.annotation.Transactional;
+import java.util.Date;
+
+/**
+ * 储值卡关系Service业务层处理
+ *
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Service
+public class SunStoredDiscountServiceImpl implements ISunStoredDiscountService {
+    @Autowired
+    private SunStoredDiscountMapper sunStoredDiscountMapper;
+
+    @Override
+    public Boolean add(SunStoredDiscount sunStoredDiscount, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunStoredDiscount.setGmtCreate(now);
+        sunStoredDiscount.setGmtUpdate(now);
+        sunStoredDiscount.setAdminId(adminId);
+        return sunStoredDiscountMapper.insert(sunStoredDiscount) > 0;
+    }
+
+    @Override
+    public Page<SunStoredDiscount> list(Long companyId, Long storedId, String serviceCategoryKey, String serviceCategory, String discount, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunStoredDiscount> wrapper = new EntityWrapper<SunStoredDiscount>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(storedId)) {
+            wrapper.eq("stored_id", storedId);
+        }
+        if (!StringUtils.isEmpty(serviceCategoryKey)) {
+            wrapper.eq("service_category_key", serviceCategoryKey);
+        }
+        if (!StringUtils.isEmpty(serviceCategory)) {
+            wrapper.eq("service_category", serviceCategory);
+        }
+        if (!StringUtils.isEmpty(discount)) {
+            wrapper.eq("discount", discount);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        wrapper.eq("delete_flag", 0);
+        List<SunStoredDiscount> list = sunStoredDiscountMapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
+        Integer count = sunStoredDiscountMapper.selectCount(wrapper);
+        return new Page<SunStoredDiscount>(list, page, limit, count);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(Long id) {
+        String[] ids = String.valueOf(id).split(",");
+        Wrapper<SunStoredDiscount> wrapper = new EntityWrapper<SunStoredDiscount>();
+        wrapper.in("id", ids);
+        List<SunStoredDiscount> list = sunStoredDiscountMapper.selectList(wrapper);
+        for (SunStoredDiscount tmp : list) {
+            tmp.setDeleteFlag(1);
+            sunStoredDiscountMapper.updateById(tmp);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean update(SunStoredDiscount sunStoredDiscount, Long adminId) throws ServiceException {
+        Date now = new Date();
+        sunStoredDiscount.setGmtUpdate(now);
+        sunStoredDiscount.setAdminId(adminId);
+        return sunStoredDiscountMapper.updateById(sunStoredDiscount) > 0;
+    }
+
+    @Override
+    public SunStoredDiscount get(Long id) throws ServiceException {
+        return sunStoredDiscountMapper.selectById(id);
+    }
+
+    @Override
+    public String export(Long companyId, Long storedId, String serviceCategoryKey, String serviceCategory, String discount, String status, Integer deleteFlag, Date gmtCreate, Date gmtUpdate, Long userId, Long adminId, Integer page, Integer limit) throws ServiceException {
+        Wrapper<SunStoredDiscount> wrapper = new EntityWrapper<SunStoredDiscount>();
+        if (!StringUtils.isEmpty(companyId)) {
+            wrapper.eq("company_id", companyId);
+        }
+        if (!StringUtils.isEmpty(storedId)) {
+            wrapper.eq("stored_id", storedId);
+        }
+        if (!StringUtils.isEmpty(serviceCategoryKey)) {
+            wrapper.eq("service_category_key", serviceCategoryKey);
+        }
+        if (!StringUtils.isEmpty(serviceCategory)) {
+            wrapper.eq("service_category", serviceCategory);
+        }
+        if (!StringUtils.isEmpty(discount)) {
+            wrapper.eq("discount", discount);
+        }
+        if (!StringUtils.isEmpty(status)) {
+            wrapper.eq("status", status);
+        }
+        if (!StringUtils.isEmpty(deleteFlag)) {
+            wrapper.eq("delete_flag", deleteFlag);
+        }
+        if (!StringUtils.isEmpty(gmtCreate)) {
+            wrapper.eq("gmt_create", gmtCreate);
+        }
+        if (!StringUtils.isEmpty(gmtUpdate)) {
+            wrapper.eq("gmt_update", gmtUpdate);
+        }
+        if (!StringUtils.isEmpty(userId)) {
+            wrapper.eq("user_id", userId);
+        }
+        if (!StringUtils.isEmpty(adminId)) {
+            wrapper.eq("admin_id", adminId);
+        }
+        List<SunStoredDiscount> list = sunStoredDiscountMapper.selectList(wrapper);
+        ExcelUtil<SunStoredDiscount> util = new ExcelUtil<SunStoredDiscount>(SunStoredDiscount.class);
+        return util.exportExcel(list, "操作日志");
+    }
+}

+ 2 - 2
unimall-admin/config/dep.env.js

@@ -1,6 +1,6 @@
 module.exports = {
 	NODE_ENV: '"production"',
   ENV_CONFIG: '"dep"',
-  HOST: '"http://localhost:8080"',
-  BASE_API: '"http://localhost:8080/m.api"'
+  HOST: '"http://localhost:8081"',
+  BASE_API: '"http://localhost:8081/m.api"'
 }

+ 2 - 2
unimall-admin/config/dev.env.js

@@ -1,6 +1,6 @@
 module.exports = {
 	NODE_ENV: '"development"',
   ENV_CONFIG: '"dev"',
-  HOST: '"http://localhost:8080"',
-  BASE_API: '"http://localhost:8080/m.api"'
+    HOST: '"http://localhost:8081"',
+    BASE_API: '"http://localhost:8081/m.api"'
 }

+ 73 - 0
unimall-admin/src/api/sun/MemberInfo.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询用户信息列表
+export function listMemberInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunMemberInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询用户信息详细
+export function getMemberInfo(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunMemberInfo',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增用户信息
+export function addMemberInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunMemberInfo',
+      _mt: 'add',
+      sunMemberInfo: data
+    }
+  })
+}
+
+// 修改用户信息
+export function updateMemberInfo(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunMemberInfo',
+      _mt: 'update',
+      sunMemberInfo: data
+    }
+  })
+}
+
+// 删除用户信息
+export function delMemberInfo(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunMemberInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出用户信息
+export function exportMemberInfo(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunMemberInfo',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 74 - 0
unimall-admin/src/api/sun/carManagement.js

@@ -0,0 +1,74 @@
+import request from '@/utils/request'
+import Qs from 'qs'
+
+// 查询车辆信息列表
+export function listCarManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCarManagement',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询车辆信息详细
+export function getCarManagement(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCarManagement',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增车辆信息
+export function addCarManagement(data) {
+  return request({
+    method: 'post',
+    data: Qs.stringify({
+      _gp: 'admin.sun.sunCarManagement',
+      _mt: 'add',
+      sunCarManagement: JSON.stringify(data)
+    })
+  })
+}
+
+// 修改车辆信息
+export function updateCarManagement(data) {
+  return request({
+    method: 'post',
+    data: Qs.stringify({
+      _gp: 'admin.sun.sunCarManagement',
+      _mt: 'update',
+      sunCarManagement: JSON.stringify(data)
+    })
+  })
+}
+
+// 删除车辆信息
+export function delCarManagement(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCarManagement',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出车辆信息
+export function exportCarManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCarManagement',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 74 - 0
unimall-admin/src/api/sun/commodityManagement.js

@@ -0,0 +1,74 @@
+import request from '@/utils/request'
+import Qs from 'qs'
+
+// 查询商品管理列表
+export function listCommodityManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityManagement',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询商品管理详细
+export function getCommodityManagement(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityManagement',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增商品管理
+export function addCommodityManagement(data) {
+  return request({
+    method: 'post',
+    data: Qs.stringify({
+      _gp: 'admin.sun.sunCommodityManagement',
+      _mt: 'add',
+      sunCommodityManagement: JSON.stringify(data)
+    })
+  })
+}
+
+// 修改商品管理
+export function updateCommodityManagement(data) {
+  return request({
+    method: 'post',
+    data: Qs.stringify({
+      _gp: 'admin.sun.sunCommodityManagement',
+      _mt: 'update',
+      sunCommodityManagement: JSON.stringify(data)
+    })
+  })
+}
+
+// 删除商品管理
+export function delCommodityManagement(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityManagement',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出商品管理
+export function exportCommodityManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityManagement',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/commodityOrder.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询商品订单列表
+export function listCommodityOrder(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrder',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询商品订单详细
+export function getCommodityOrder(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrder',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增商品订单
+export function addCommodityOrder(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrder',
+      _mt: 'add',
+      sunCommodityOrder: data
+    }
+  })
+}
+
+// 修改商品订单
+export function updateCommodityOrder(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrder',
+      _mt: 'update',
+      sunCommodityOrder: data
+    }
+  })
+}
+
+// 删除商品订单
+export function delCommodityOrder(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrder',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出商品订单
+export function exportCommodityOrder(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrder',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/couponManagement.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询优惠券列表
+export function listCouponManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCouponManagement',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询优惠券详细
+export function getCouponManagement(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCouponManagement',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增优惠券
+export function addCouponManagement(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCouponManagement',
+      _mt: 'add',
+      sunCouponManagement: data
+    }
+  })
+}
+
+// 修改优惠券
+export function updateCouponManagement(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCouponManagement',
+      _mt: 'update',
+      sunCouponManagement: data
+    }
+  })
+}
+
+// 删除优惠券
+export function delCouponManagement(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCouponManagement',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出优惠券
+export function exportCouponManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCouponManagement',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/goodsType.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询服务商品分类列表
+export function listGoodsType(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunGoodsServicesType',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询服务商品分类详细
+export function getGoodsType(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunGoodsServicesType',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增服务商品分类
+export function addGoodsType(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunGoodsServicesType',
+      _mt: 'add',
+      sunGoodsServicesType: data
+    }
+  })
+}
+
+// 修改服务商品分类
+export function updateGoodsType(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunGoodsServicesType',
+      _mt: 'update',
+      sunGoodsServicesType: data
+    }
+  })
+}
+
+// 删除服务商品分类
+export function delGoodsType(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunGoodsServicesType',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出服务商品分类
+export function exportGoodsType(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunGoodsServicesType',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/orderDetail.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询商品详情列表
+export function listOrderDetail(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrderDetail',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询商品详情详细
+export function getOrderDetail(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrderDetail',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增商品详情
+export function addOrderDetail(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrderDetail',
+      _mt: 'add',
+      sunCommodityOrderDetail: data
+    }
+  })
+}
+
+// 修改商品详情
+export function updateOrderDetail(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrderDetail',
+      _mt: 'update',
+      sunCommodityOrderDetail: data
+    }
+  })
+}
+
+// 删除商品详情
+export function delOrderDetail(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrderDetail',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出商品详情
+export function exportOrderDetail(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunCommodityOrderDetail',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 74 - 0
unimall-admin/src/api/sun/serviceManagement.js

@@ -0,0 +1,74 @@
+import request from '@/utils/request'
+
+import Qs from 'qs'
+// 查询服务管理列表
+export function listServiceManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceManagement',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询服务管理详细
+export function getServiceManagement(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceManagement',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增服务管理
+export function addServiceManagement(data) {
+  return request({
+    method: 'post',
+    data: Qs.stringify({
+      _gp: 'admin.sun.sunServiceManagement',
+      _mt: 'add',
+      sunServiceManagement: JSON.stringify(data)
+    })
+  })
+}
+
+// 修改服务管理
+export function updateServiceManagement(data) {
+  return request({
+    method: 'post',
+    data: Qs.stringify({
+      _gp: 'admin.sun.sunServiceManagement',
+      _mt: 'update',
+      sunServiceManagement: JSON.stringify(data)
+    })
+  })
+}
+
+// 删除服务管理
+export function delServiceManagement(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceManagement',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出服务管理
+export function exportServiceManagement(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceManagement',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/serviceOrder.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询服务订单列表
+export function listServiceOrder(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceOrder',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询服务订单详细
+export function getServiceOrder(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceOrder',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增服务订单
+export function addServiceOrder(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceOrder',
+      _mt: 'add',
+      sunServiceOrder: data
+    }
+  })
+}
+
+// 修改服务订单
+export function updateServiceOrder(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceOrder',
+      _mt: 'update',
+      sunServiceOrder: data
+    }
+  })
+}
+
+// 删除服务订单
+export function delServiceOrder(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceOrder',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出服务订单
+export function exportServiceOrder(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceOrder',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/serviceOrderDetail.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询服务订单详情列表
+export function listServiceOrderDetail(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceOrderDetail',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询服务订单详情详细
+export function getServiceOrderDetail(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceOrderDetail',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增服务订单详情
+export function addServiceOrderDetail(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceOrderDetail',
+      _mt: 'add',
+      sunServiceOrderDetail: data
+    }
+  })
+}
+
+// 修改服务订单详情
+export function updateServiceOrderDetail(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceOrderDetail',
+      _mt: 'update',
+      sunServiceOrderDetail: data
+    }
+  })
+}
+
+// 删除服务订单详情
+export function delServiceOrderDetail(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunServiceOrderDetail',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出服务订单详情
+export function exportServiceOrderDetail(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunServiceOrderDetail',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/storedCard.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询储值卡列表
+export function listStoredCard(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunStoredCard',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询储值卡详细
+export function getStoredCard(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunStoredCard',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增储值卡
+export function addStoredCard(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunStoredCard',
+      _mt: 'add',
+      sunStoredCard: data
+    }
+  })
+}
+
+// 修改储值卡
+export function updateStoredCard(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunStoredCard',
+      _mt: 'update',
+      sunStoredCard: data
+    }
+  })
+}
+
+// 删除储值卡
+export function delStoredCard(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunStoredCard',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出储值卡
+export function exportStoredCard(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunStoredCard',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 73 - 0
unimall-admin/src/api/sun/storedDiscount.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询储值卡关系列表
+export function listStoredDiscount(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunStoredDiscount',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 查询储值卡关系详细
+export function getStoredDiscount(id) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunStoredDiscount',
+      _mt: 'get',
+      id: id
+    }
+  })
+}
+
+// 新增储值卡关系
+export function addStoredDiscount(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunStoredDiscount',
+      _mt: 'add',
+      sunStoredDiscount: data
+    }
+  })
+}
+
+// 修改储值卡关系
+export function updateStoredDiscount(data) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunStoredDiscount',
+      _mt: 'update',
+      sunStoredDiscount: data
+    }
+  })
+}
+
+// 删除储值卡关系
+export function delStoredDiscount(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.sun.sunStoredDiscount',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}
+
+// 导出储值卡关系
+export function exportStoredDiscount(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.sun.sunStoredDiscount',
+      _mt: 'export',
+      ...query
+    }
+  })
+}

+ 177 - 0
unimall-admin/src/router/route.json

@@ -476,5 +476,182 @@
 		"redirect": "/404",
 		"path": "*",
 		"hidden": true
+	},
+	{"redirect": "noredirect",
+		"name": "commodityManagement",
+		"path": "/sun/commodityManagement",
+		"meta": {
+			"icon": "log",
+			"title": "商品管理"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "commodityManagement",
+				"name": "commodityManagement",
+				"page": "/sun/commodityManagement",
+				"meta": {
+					"title": "商品管理",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	{"redirect": "noredirect",
+		"name": "carManagement",
+		"path": "/sun/carManagement",
+		"meta": {
+			"icon": "log",
+			"title": "车辆管理"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "carManagement",
+				"name": "carManagement",
+				"page": "/sun/carManagement",
+				"meta": {
+					"title": "车辆管理",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	{"redirect": "noredirect",
+		"name": "serviceManagement",
+		"path": "/sun/serviceManagement",
+		"meta": {
+			"icon": "log",
+			"title": "服务管理"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "serviceManagement",
+				"name": "serviceManagement",
+				"page": "/sun/serviceManagement",
+				"meta": {
+					"title": "服务管理",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	{"redirect": "noredirect",
+		"name": "storedCard",
+		"path": "/sun/storedCard",
+		"meta": {
+			"icon": "log",
+			"title": "储值卡管理"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "storedCard",
+				"name": "storedCard",
+				"page": "/sun/storedCard",
+				"meta": {
+					"title": "储值卡管理",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	
+	{"redirect": "noredirect",
+		"name": "couponManagement",
+		"path": "/sun/couponManagement",
+		"meta": {
+			"icon": "log",
+			"title": "优惠券管理"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "couponManagement",
+				"name": "couponManagement",
+				"page": "/sun/couponManagement",
+				"meta": {
+					"title": "优惠券管理",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	{"redirect": "noredirect",
+		"name": "MemberInfo",
+		"path": "/sun/MemberInfo",
+		"meta": {
+			"icon": "log",
+			"title": "会员管理"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "MemberInfo",
+				"name": "MemberInfo",
+				"page": "/sun/MemberInfo",
+				"meta": {
+					"title": "会员管理",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	{"redirect": "noredirect",
+		"name": "serviceOrder",
+		"path": "/sun/serviceOrder",
+		"meta": {
+			"icon": "log",
+			"title": "服务订单"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "serviceOrder",
+				"name": "serviceOrder",
+				"page": "/sun/serviceOrder",
+				"meta": {
+					"title": "服务订单",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
+	},
+	{"redirect": "noredirect",
+		"name": "commodityOrder",
+		"path": "/sun/commodityOrder",
+		"meta": {
+			"icon": "log",
+			"title": "商品订单"
+		},
+		"alwaysShow": true,
+		"children": [
+			{
+				"path": "commodityOrder",
+				"name": "commodityOrder",
+				"page": "/sun/commodityOrder",
+				"meta": {
+					"title": "商品订单",
+					"icon": "operlog",
+					"noCache": true,
+					"perms": [
+					]
+				}
+			}]
 	}
 ]

+ 348 - 0
unimall-admin/src/views/sun/MemberInfo/index.vue

@@ -0,0 +1,348 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+
+      <el-form-item label="姓名" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入手机号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:MemberInfo:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:MemberInfo:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:MemberInfo:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:MemberInfo:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="MemberInfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="手机号" align="center" prop="phone" />
+      <el-table-column align="center" label="性别" prop="sex">
+        <template slot-scope="scope">
+          <el-tag>{{ scope.row.sex | genderDicFilter }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column :formatter="storedFormat" label="储值卡" align="center" prop="storedValueCard" />
+      <el-table-column label="取消预约次数" align="center" prop="cancellations" />
+      <el-table-column label="余额" align="center" prop="balance" />
+      <el-table-column label="备注1" align="center" prop="remarks" />
+      <el-table-column label="备注2" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:MemberInfo:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:MemberInfo:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改用户信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="姓名" prop="name">
+          <el-input v-model="form.name" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="手机号" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入手机号" />
+        </el-form-item>
+        <el-form-item label="用户性别" prop="sex">
+          <el-select v-model="form.sex" placeholder="请选择性别">
+            <el-option v-for="(key, index) in genderDic" :key="index" :label="key.name" :value="key.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="储值卡" prop="storedValueCard">
+          <el-select v-model="form.storedValueCard" placeholder="请选择储值卡">
+            <el-option v-for="(key, index) in storedValueCardDic" :key="index" :label="key.dictLabel" :value="key.dictValue" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="余额" prop="balance">
+          <el-input v-model="form.balance" placeholder="请输入余额" />
+        </el-form-item>
+        <el-form-item label="备注1" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="备注2" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listMemberInfo, getMemberInfo, delMemberInfo, addMemberInfo, updateMemberInfo, exportMemberInfo } from '@/api/sun/MemberInfo'
+
+const genderDic = [{ value: 1, name: '男' }, { value: 2, name: '女' }]
+export default {
+  filters: {
+    genderDicFilter(code) {
+      if (code === 1 || code === 2) {
+        return genderDic[code - 1].name
+      } else {
+        return '未知'
+      }
+    }
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 用户信息表格数据
+      MemberInfoList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        name: undefined,
+        phone: undefined,
+        sex: undefined,
+        stars: undefined,
+        storedValueCard: undefined,
+        cancellations: undefined,
+        balance: undefined,
+        remarks: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [{ required: true, message: '请填写用户名', trigger: 'blur' }],
+        phone: [{ required: true, message: '请填写用户手机号', trigger: 'blur' }],
+        sex: [{ required: true, message: '请选择用户性别类型', trigger: 'blur' }],
+        balance: [{ required: true, message: '请选择用户余额', trigger: 'blur' }]
+      },
+      genderDic,
+      storedValueCardDic: []
+    }
+  },
+  created() {
+    this.getList()
+    this.getDicts('sun_stored_card').then(response => {
+      this.storedValueCardDic = response.data.data
+    })
+  },
+  methods: {
+    // 登录状态字典翻译
+    storedFormat(row, column) {
+      return this.selectDictLabel(this.storedValueCardDic, row.storedValueCard)
+    },
+    /** 查询用户信息列表 */
+    getList() {
+      this.loading = true
+      listMemberInfo(this.queryParams).then(response => {
+        this.MemberInfoList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        name: undefined,
+        phone: undefined,
+        sex: undefined,
+        stars: undefined,
+        storedValueCard: undefined,
+        cancellations: undefined,
+        balance: undefined,
+        remarks: undefined,
+        remark: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加用户信息'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getMemberInfo(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改用户信息'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateMemberInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addMemberInfo(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除用户信息编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delMemberInfo(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有用户信息数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportMemberInfo(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 403 - 0
unimall-admin/src/views/sun/carManagement/index.vue

@@ -0,0 +1,403 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="车牌号" prop="caiNo">
+        <el-input
+          v-model="queryParams.caiNo"
+          placeholder="请输入车牌号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:carManagement:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:carManagement:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:carManagement:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:carManagement:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col> -->
+    </el-row>
+
+    <el-table v-loading="loading" :data="carManagementList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号">
+        <template slot-scope="scope">
+          <span v-if="scope.$index < 9">0{{ scope.$index + 1 }}</span>
+          <span v-else>{{ scope.$index + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="车辆名称" align="center" prop="name" />
+      <el-table-column align="center" property="pictureUrl" label="车辆照片">
+        <template slot-scope="scope">
+          <img :src="scope.row.pictureUrl" width="40" >
+        </template>
+      </el-table-column>
+      <el-table-column label="车牌号" align="center" prop="caiNo" />
+      <el-table-column label="司机姓名" align="center" prop="driver" />
+      <el-table-column label="司机电话" align="center" prop="phone" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:carManagement:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:carManagement:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改车辆信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="车辆名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入车辆名称" />
+        </el-form-item>
+        <el-form-item label="车牌号" prop="caiNo">
+          <el-input v-model="form.caiNo" placeholder="请输入车牌号" />
+        </el-form-item>
+        <el-form-item label="司机姓名" prop="driver">
+          <el-input v-model="form.driver" placeholder="请输入司机姓名" />
+        </el-form-item>
+        <el-form-item label="司机电话" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入司机电话" />
+        </el-form-item>
+        <el-form-item label="车辆照片">
+          <el-upload
+            :action="uploadPath"
+            :headers="headers"
+            :limit="5"
+            :file-list="imgsFileList"
+            :on-exceed="uploadOverrun"
+            :on-success="handleimgsUrl"
+            :on-remove="handleRemove"
+            multiple
+            accept=".jpg, .jpeg, .png, .gif"
+            list-type="picture-card"
+          >
+            <i class="el-icon-plus" />
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCarManagement, getCarManagement, delCarManagement, addCarManagement, updateCarManagement, exportCarManagement } from '@/api/sun/carManagement'
+
+import { getToken } from '@/utils/auth'
+import { uploadPath } from '@/api/storage'
+export default {
+  data() {
+    return {
+      imgsFileList: [],
+      uploadPath,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 车辆信息表格数据
+      carManagementList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        name: undefined,
+        caiNo: undefined,
+        driver: undefined,
+        phone: undefined,
+        pictureUrl: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {
+        imgList: []
+      },
+      // 表单校验
+      rules: {
+        name: [{ required: true, message: '车辆名称不能为空', trigger: 'blur' }, {
+          min: 2,
+          max: 20,
+          message: '车辆名称在 2 到 20 个字符',
+          trigger: 'blur'
+        }],
+        caiNo: [{ required: true, message: '车牌号不能为空', trigger: 'blur' }, {
+          min: 7,
+          max: 8,
+          message: '车牌号在 7 到 8 个字符',
+          trigger: 'blur'
+        }],
+        driver: [{ required: true, message: '司机姓名不能为空', trigger: 'blur' }, {
+          min: 2,
+          max: 20,
+          message: '司机姓名在 2 到 20 个字符',
+          trigger: 'blur'
+        }],
+        phone: [{ required: true, message: '司机电话不能为空', trigger: 'blur' }, {
+          min: 11,
+          max: 11,
+          message: '手机号必须为11个字符',
+          trigger: 'blur'
+        }]
+      }
+    }
+  },
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询车辆信息列表 */
+    getList() {
+      this.loading = true
+      listCarManagement(this.queryParams).then(response => {
+        this.carManagementList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        name: undefined,
+        caiNo: undefined,
+        driver: undefined,
+        phone: undefined,
+        pictureUrl: undefined,
+        remark: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined,
+        imgList: []
+      }
+      this.imgsFileList = []
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加车辆信息'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getCarManagement(id).then(response => {
+        this.form = response.data.data
+        for (var i = 0; i < this.form.imgList.length; i++) {
+          this.imgsFileList.push({
+            url: this.form.imgList[i]
+          })
+        }
+        this.open = true
+        this.title = '修改车辆信息'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (!this.form.pictureUrl) {
+            this.msgError('图片不能为空')
+            return
+          }
+          if (this.form.id != undefined) {
+            updateCarManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addCarManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除车辆信息编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delCarManagement(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有车辆信息数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportCarManagement(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    },
+    uploadOverrun: function() {
+      this.$message({
+        type: 'error',
+        message: '上传文件个数超出限制!最多上传5张图片!'
+      })
+    },
+    handleimgsUrl(response, file, fileList) {
+      if (response.errno === 200) {
+        this.form.imgList.push(response.url)
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    },
+    handleRemove: function(file, fileList) {
+      for (var i = 0; i < this.form.imgList.length; i++) {
+        // 这里存在两种情况
+        // 1. 如果所删除图片是刚刚上传的图片,那么图片地址是file.response.url
+        //    此时的file.url虽然存在,但是是本机地址,而不是远程地址。
+        // 2. 如果所删除图片是后台返回的已有图片,那么图片地址是file.url
+        var url
+        if (file.response === undefined) {
+          url = file.url
+        } else {
+          url = file.response.url
+        }
+
+        if (this.form.imgList[i] === url) {
+          this.form.imgList.splice(i, 1)
+        }
+      }
+      if (this.form.imgList.length > 0) {
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    }
+  }
+}
+</script>

+ 407 - 0
unimall-admin/src/views/sun/commodityManagement/index.vue

@@ -0,0 +1,407 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityManagement:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityManagement:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityManagement:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityManagement:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col> -->
+    </el-row>
+
+    <el-table v-loading="loading" :data="commodityManagementList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号">
+        <template slot-scope="scope">
+          <span v-if="scope.$index < 9">0{{ scope.$index + 1 }}</span>
+          <span v-else>{{ scope.$index + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :formatter="categoryFormat" label="品类" align="center" prop="category" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column align="center" property="pictureUrl" label="图片">
+        <template slot-scope="scope">
+          <img :src="scope.row.pictureUrl" width="40" >
+        </template>
+      </el-table-column>
+      <el-table-column label="单价" align="center" prop="price" />
+      <el-table-column label="会员价" align="center" prop="priceMembership" />
+      <el-table-column label="库存" align="center" prop="num" />
+      <el-table-column label="商品介绍" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:commodityManagement:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:commodityManagement:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改商品管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="品类" prop="category">
+          <el-select v-model="form.category" placeholder="选择品类">
+            <el-option v-for="(item, index) in categoryDic" :key="index" :label="item.dictLabel" :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="单价" prop="price">
+          <el-input v-model="form.price" placeholder="请输入单价" />
+        </el-form-item>
+        <el-form-item label="会员价" prop="priceMembership">
+          <el-input v-model="form.priceMembership" placeholder="请输入会员价" />
+        </el-form-item>
+        <el-form-item label="商品图片">
+          <el-upload
+            :action="uploadPath"
+            :headers="headers"
+            :limit="5"
+            :file-list="imgsFileList"
+            :on-exceed="uploadOverrun"
+            :on-success="handleimgsUrl"
+            :on-remove="handleRemove"
+            multiple
+            accept=".jpg, .jpeg, .png, .gif"
+            list-type="picture-card"
+          >
+            <i class="el-icon-plus" />
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="库存" prop="num">
+          <el-input v-model="form.num" placeholder="请输入库存" />
+        </el-form-item>
+        <el-form-item label="商品介绍" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCommodityManagement, getCommodityManagement, delCommodityManagement, addCommodityManagement, updateCommodityManagement, exportCommodityManagement } from '@/api/sun/commodityManagement'
+
+import { getToken } from '@/utils/auth'
+import { uploadPath } from '@/api/storage'
+export default {
+  data() {
+    return {
+      uploadPath,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 商品管理表格数据
+      commodityManagementList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      imgsFileList: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        name: undefined,
+        category: undefined,
+        price: undefined,
+        priceMembership: undefined,
+        pictureUrl: undefined,
+        num: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {
+        imgList: []
+      },
+      // 表单校验
+      rules: {
+        name: [{ required: true, message: '商品名称不能为空', trigger: 'blur' }, {
+          min: 2,
+          max: 10,
+          message: '名称在 2 到 10 个字符',
+          trigger: 'blur'
+        }],
+        category: [{ required: true, message: '品类不能为空', trigger: 'blur' }],
+        price: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
+        priceMembership: [{ required: true, message: '会员价不能为空', trigger: 'blur' }],
+        num: [{ required: true, message: '库存不能为空', trigger: 'blur' }],
+        remark: [{ required: true, message: '商品介绍不能为空', trigger: 'blur' }, {
+          min: 6,
+          max: 200,
+          message: '商品介绍在 6 到 200 个字符',
+          trigger: 'blur'
+        }] },
+      categoryDic: []
+    }
+  },
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getDicts('sun_commodity_type').then(response => {
+      this.categoryDic = response.data.data
+    })
+  },
+  methods: {
+    // 字典翻译
+    categoryFormat(row, column) {
+      return this.selectDictLabel(this.categoryDic, row.category)
+    },
+    /** 查询商品管理列表 */
+    getList() {
+      this.loading = true
+      listCommodityManagement(this.queryParams).then(response => {
+        this.commodityManagementList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        name: undefined,
+        category: undefined,
+        price: undefined,
+        priceMembership: undefined,
+        pictureUrl: undefined,
+        num: undefined,
+        remark: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined,
+        imgList: []
+      }
+      this.imgsFileList = []
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加商品管理'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getCommodityManagement(id).then(response => {
+        this.form = response.data.data
+
+        for (var i = 0; i < this.form.imgList.length; i++) {
+          this.imgsFileList.push({
+            url: this.form.imgList[i]
+          })
+        }
+        this.open = true
+        this.title = '修改商品管理'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCommodityManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addCommodityManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除商品管理编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delCommodityManagement(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有商品管理数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportCommodityManagement(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    },
+    uploadOverrun: function() {
+      this.$message({
+        type: 'error',
+        message: '上传文件个数超出限制!最多上传5张图片!'
+      })
+    },
+    handleimgsUrl(response, file, fileList) {
+      if (response.errno === 200) {
+        this.form.imgList.push(response.url)
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    },
+    handleRemove: function(file, fileList) {
+      for (var i = 0; i < this.form.imgList.length; i++) {
+        // 这里存在两种情况
+        // 1. 如果所删除图片是刚刚上传的图片,那么图片地址是file.response.url
+        //    此时的file.url虽然存在,但是是本机地址,而不是远程地址。
+        // 2. 如果所删除图片是后台返回的已有图片,那么图片地址是file.url
+        var url
+        if (file.response === undefined) {
+          url = file.url
+        } else {
+          url = file.response.url
+        }
+
+        if (this.form.imgList[i] === url) {
+          this.form.imgList.splice(i, 1)
+        }
+      }
+      if (this.form.imgList.length > 0) {
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    }
+  }
+}
+</script>

+ 485 - 0
unimall-admin/src/views/sun/commodityOrder/index.vue

@@ -0,0 +1,485 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item prop="orderNo">
+        <el-input
+          v-model="queryParams.orderNo"
+          placeholder="请输入订单编号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item prop="customer">
+        <el-input
+          v-model="queryParams.customer"
+          placeholder="请输入客户"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item prop="customerPhone">
+        <el-input
+          v-model="queryParams.customerPhone"
+          placeholder="请输入客户手机号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityOrder:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityOrder:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityOrder:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col> -->
+      <!-- <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:commodityOrder:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col> -->
+    </el-row>
+
+    <el-table
+      v-loading="loading"
+      :data="dataList"
+      :span-method="arraySpanMethod"
+      size="small"
+      border
+      @selection-change="handleSelectionChange">
+
+      <el-table-column label="订单编号" align="center" prop="orderNo" />
+      <el-table-column label="商品名称" align="center" prop="name" />
+      <el-table-column label="单价(元)" align="center" prop="price" />
+      <el-table-column label="数量" align="center" prop="num" />
+      <el-table-column label="小计" align="center" prop="amount" />
+      <el-table-column min-width="100" align="center" label="合计(元)">
+        <template slot-scope="scope">
+          <el-tag type="info" >{{ scope.row.originalSum }}</el-tag>
+          <el-tag type="success">{{ scope.row.sumMoney }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column min-width="120" align="center" label="退款(元)">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.refundAppl" type="info">{{ scope.row.refundAppl }}(请)</el-tag>
+          <el-tag v-if="scope.row.refund" type="success">{{ scope.row.refund }}(实)</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="客户">
+        <template slot-scope="scope">
+          <el-tag >{{ scope.row.customer }}</el-tag>
+          <el-tag >{{ scope.row.customerPhone }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column align="center" label="收货地址">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="clickAddress(scope.row)"
+          >查看</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="评价">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="clickPingjia(scope.row)"
+          >查看</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" min-width="100" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-if="scope.row.status == '待发货'||scope.row.status == '换货中'"
+            size="mini"
+            type="primary"
+          >发货</el-button>
+          <el-button
+            v-if="scope.row.status != '申请退货'&& scope.row.status != '申请换货'"
+            size="mini"
+            type="warning"
+          >退款</el-button>
+          <el-button
+            v-if="scope.row.status == '已收货'||scope.row.status == '退货中'"
+            size="mini"
+            type="success"
+          >完成</el-button>
+          <el-button
+            v-if="scope.row.status == '申请退货'||scope.row.status == '申请换货'"
+            size="mini"
+            type="success"
+          >通过</el-button>
+          <el-button
+            v-if="scope.row.status == '申请退货'||scope.row.status == '申请换货'"
+            size="mini"
+            type="danger"
+          >拒绝</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <el-dialog
+      v-if="checkRow.sunOrderAddress"
+      :visible.sync="addressVisible"
+      title="收货地址"
+      width="30%">
+      <el-row>
+        <el-col :span="12" :offset="6"><span >编号:{{ checkRow.sunOrderAddress.orderNo }}</span></el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12" :offset="6"><span>{{ checkRow.sunOrderAddress.consigneeName }}{{ checkRow.sunOrderAddress.phone }}</span></el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12" :offset="6"><span>{{ checkRow.sunOrderAddress.location }}{{ checkRow.sunOrderAddress.address }}</span></el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="addressVisible = false">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      v-if="checkRow.sunOrderEvaluations"
+      :visible.sync="pingjiaVisible"
+      title="评价"
+      width="30%">
+      <el-table
+        :data="checkRow.sunOrderEvaluations"
+        size="small"
+        border>
+        <el-table-column label="订单编号" align="center" prop="orderNo" />
+        <el-table-column label="商品名称" align="center" prop="tradeName" />
+        <el-table-column label="商品满意度" align="center" prop="commoditySatisfaction" />
+        <el-table-column label="快递满意度" align="center" prop="expressSatisfaction" />
+        <el-table-column label="评价内容" align="center" prop="address" />
+      </el-table>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="pingjiaVisible = false">确 定</el-button>
+      </span>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import { listCommodityOrder, getCommodityOrder, delCommodityOrder, addCommodityOrder, updateCommodityOrder, exportCommodityOrder } from '@/api/sun/commodityOrder'
+
+export default {
+  data() {
+    return {
+      checkRow: {},
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 商品订单表格数据
+      commodityOrderList: [],
+      // 商品订单表格数据
+      dataList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        orderNo: undefined,
+        sumMoney: undefined,
+        refundAppl: undefined,
+        refund: undefined,
+        customer: undefined,
+        pets: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      addressVisible: false,
+      pingjiaVisible: false
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    clickAddress(row) {
+      if (row.sunOrderAddress) {
+        this.checkRow = row
+        this.addressVisible = true
+      }
+    },
+    clickPingjia(row) {
+      if (row.sunOrderEvaluations) {
+        this.checkRow = row
+        this.pingjiaVisible = true
+      }
+    },
+    // 设置单元格
+    getSpanArr(list) {
+      // 先给所有的数据都加一个v.rowspan = 1
+      list.forEach(item => {
+        item.rowspan = 1
+      })
+      // 双层循环
+      for (let i = 0; i < list.length; i++) {
+        for (let j = i + 1; j < list.length; j++) {
+          // 此处可根据相同字段进行合并,此处是根据的id
+          if (list[i].orderNo === list[j].orderNo) {
+            list[i].rowspan++
+            list[j].rowspan--
+          }
+        }
+        // 这里跳过已经重复的数据
+        i = i + list[i].rowspan - 1
+      }
+      this.dataList = list
+    },
+    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 5) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 6) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 7) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 8) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 9) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 10) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+      if (columnIndex === 11) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        }
+      }
+    },
+    /** 查询商品订单列表 */
+    getList() {
+      this.loading = true
+      this.dataList = []
+      listCommodityOrder(this.queryParams).then(response => {
+        this.commodityOrderList = response.data.data.items
+        for (var i=0; i<this.commodityOrderList.length; i++) {
+          for (var j=0; j<this.commodityOrderList[i].sunCommodityOrderDetails.length; j++) {
+            var tmp = this.commodityOrderList[i].sunCommodityOrderDetails[j]
+            tmp.orderNo = this.commodityOrderList[i].orderNo
+            tmp.originalSum = this.commodityOrderList[i].originalSum
+            tmp.sumMoney = this.commodityOrderList[i].sumMoney
+            tmp.refundAppl = this.commodityOrderList[i].refundAppl
+            tmp.refund = this.commodityOrderList[i].refund
+            tmp.status = this.commodityOrderList[i].status
+            tmp.customer = this.commodityOrderList[i].customer
+            tmp.customerPhone = this.commodityOrderList[i].customerPhone
+            tmp.pets = this.commodityOrderList[i].pets
+            tmp.gmtCreate = this.commodityOrderList[i].gmtCreate
+            tmp.sunOrderAddress = this.commodityOrderList[i].sunOrderAddress
+            tmp.sunOrderEvaluations = this.commodityOrderList[i].sunOrderEvaluations
+            this.dataList.push(tmp)
+          }
+        }
+        this.getSpanArr(this.dataList)
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        orderNo: undefined,
+        sumMoney: undefined,
+        refundAppl: undefined,
+        refund: undefined,
+        customer: undefined,
+        pets: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加商品订单'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getCommodityOrder(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改商品订单'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCommodityOrder(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addCommodityOrder(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除商品订单编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delCommodityOrder(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有商品订单数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportCommodityOrder(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 614 - 0
unimall-admin/src/views/sun/couponManagement/index.vue

@@ -0,0 +1,614 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="" prop="companyId">
+        <el-input
+          v-model="queryParams.companyId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="类型" prop="couponType">
+        <el-select v-model="queryParams.couponType" placeholder="请选择类型" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="发放方式key" prop="distributionMethodKey">
+        <el-input
+          v-model="queryParams.distributionMethodKey"
+          placeholder="请输入发放方式key"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发放方式" prop="distributionMethod">
+        <el-input
+          v-model="queryParams.distributionMethod"
+          placeholder="请输入发放方式"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="数量" prop="num">
+        <el-input
+          v-model="queryParams.num"
+          placeholder="请输入数量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="限量" prop="limitNum">
+        <el-input
+          v-model="queryParams.limitNum"
+          placeholder="请输入限量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="满" prop="fullMoney">
+        <el-input
+          v-model="queryParams.fullMoney"
+          placeholder="请输入满"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="减" prop="reduceMoney">
+        <el-input
+          v-model="queryParams.reduceMoney"
+          placeholder="请输入减"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="折扣" prop="discount">
+        <el-input
+          v-model="queryParams.discount"
+          placeholder="请输入折扣"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="有效期(1.制定时长2.指定区间)" prop="termValidity">
+        <el-input
+          v-model="queryParams.termValidity"
+          placeholder="请输入有效期(1.制定时长2.指定区间)"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="区间开始" prop="intervalStart">
+        <el-date-picker
+          v-model="queryParams.intervalStart"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择区间开始"/>
+      </el-form-item>
+      <el-form-item label="区间结束" prop="intervalEnd">
+        <el-date-picker
+          v-model="queryParams.intervalEnd"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择区间结束"/>
+      </el-form-item>
+      <el-form-item label="有效天数" prop="effectiveDays">
+        <el-input
+          v-model="queryParams.effectiveDays"
+          placeholder="请输入有效天数"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="图片路径" prop="pictureUrl">
+        <el-input
+          v-model="queryParams.pictureUrl"
+          placeholder="请输入图片路径"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="0:否" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入0:否"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker
+          v-model="queryParams.gmtCreate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker
+          v-model="queryParams.gmtUpdate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="adminId">
+        <el-input
+          v-model="queryParams.adminId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:couponManagement:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:couponManagement:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:couponManagement:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:couponManagement:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="couponManagementList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="" align="center" prop="companyId" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="类型" align="center" prop="couponType" />
+      <el-table-column label="发放方式key" align="center" prop="distributionMethodKey" />
+      <el-table-column label="发放方式" align="center" prop="distributionMethod" />
+      <el-table-column label="数量" align="center" prop="num" />
+      <el-table-column label="限量" align="center" prop="limitNum" />
+      <el-table-column label="满" align="center" prop="fullMoney" />
+      <el-table-column label="减" align="center" prop="reduceMoney" />
+      <el-table-column label="折扣" align="center" prop="discount" />
+      <el-table-column label="有效期(1.制定时长2.指定区间)" align="center" prop="termValidity" />
+      <el-table-column label="区间开始" align="center" prop="intervalStart" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.intervalStart) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="区间结束" align="center" prop="intervalEnd" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.intervalEnd) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="有效天数" align="center" prop="effectiveDays" />
+      <el-table-column label="图片路径" align="center" prop="pictureUrl" />
+      <el-table-column label="描述" align="center" prop="remark" />
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column label="0:否" align="center" prop="deleteFlag" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="userId" />
+      <el-table-column label="" align="center" prop="adminId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:couponManagement:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:couponManagement:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改优惠券对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="类型">
+          <el-select v-model="form.couponType" placeholder="请选择类型">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="发放方式key" prop="distributionMethodKey">
+          <el-input v-model="form.distributionMethodKey" placeholder="请输入发放方式key" />
+        </el-form-item>
+        <el-form-item label="发放方式" prop="distributionMethod">
+          <el-input v-model="form.distributionMethod" placeholder="请输入发放方式" />
+        </el-form-item>
+        <el-form-item label="数量" prop="num">
+          <el-input v-model="form.num" placeholder="请输入数量" />
+        </el-form-item>
+        <el-form-item label="限量" prop="limitNum">
+          <el-input v-model="form.limitNum" placeholder="请输入限量" />
+        </el-form-item>
+        <el-form-item label="满" prop="fullMoney">
+          <el-input v-model="form.fullMoney" placeholder="请输入满" />
+        </el-form-item>
+        <el-form-item label="减" prop="reduceMoney">
+          <el-input v-model="form.reduceMoney" placeholder="请输入减" />
+        </el-form-item>
+        <el-form-item label="折扣" prop="discount">
+          <el-input v-model="form.discount" placeholder="请输入折扣" />
+        </el-form-item>
+        <el-form-item label="有效期(1.制定时长2.指定区间)" prop="termValidity">
+          <el-input v-model="form.termValidity" placeholder="请输入有效期(1.制定时长2.指定区间)" />
+        </el-form-item>
+        <el-form-item label="区间开始" prop="intervalStart">
+          <el-date-picker
+            v-model="form.intervalStart"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择区间开始"/>
+        </el-form-item>
+        <el-form-item label="区间结束" prop="intervalEnd">
+          <el-date-picker
+            v-model="form.intervalEnd"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择区间结束"/>
+        </el-form-item>
+        <el-form-item label="有效天数" prop="effectiveDays">
+          <el-input v-model="form.effectiveDays" placeholder="请输入有效天数" />
+        </el-form-item>
+        <el-form-item label="图片路径" prop="pictureUrl">
+          <el-input v-model="form.pictureUrl" placeholder="请输入图片路径" />
+        </el-form-item>
+        <el-form-item label="描述" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker
+            v-model="form.gmtCreate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker
+            v-model="form.gmtUpdate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCouponManagement, getCouponManagement, delCouponManagement, addCouponManagement, updateCouponManagement, exportCouponManagement } from '@/api/sun/couponManagement'
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 优惠券表格数据
+      couponManagementList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        name: undefined,
+        couponType: undefined,
+        distributionMethodKey: undefined,
+        distributionMethod: undefined,
+        num: undefined,
+        limitNum: undefined,
+        fullMoney: undefined,
+        reduceMoney: undefined,
+        discount: undefined,
+        termValidity: undefined,
+        intervalStart: undefined,
+        intervalEnd: undefined,
+        effectiveDays: undefined,
+        pictureUrl: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        num: [
+          { required: true, message: '数量不能为空', trigger: 'blur' }
+        ], limitNum: [
+          { required: true, message: '限量不能为空', trigger: 'blur' }
+        ], effectiveDays: [
+          { required: true, message: '有效天数不能为空', trigger: 'blur' }
+        ], deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询优惠券列表 */
+    getList() {
+      this.loading = true
+      listCouponManagement(this.queryParams).then(response => {
+        this.couponManagementList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        name: undefined,
+        couponType: undefined,
+        distributionMethodKey: undefined,
+        distributionMethod: undefined,
+        num: undefined,
+        limitNum: undefined,
+        fullMoney: undefined,
+        reduceMoney: undefined,
+        discount: undefined,
+        termValidity: undefined,
+        intervalStart: undefined,
+        intervalEnd: undefined,
+        effectiveDays: undefined,
+        pictureUrl: undefined,
+        remark: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加优惠券'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getCouponManagement(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改优惠券'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateCouponManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addCouponManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除优惠券编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delCouponManagement(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有优惠券数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportCouponManagement(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 401 - 0
unimall-admin/src/views/sun/goodsType/index.vue

@@ -0,0 +1,401 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="" prop="companyId">
+        <el-input
+          v-model="queryParams.companyId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分类" prop="sunType">
+        <el-select v-model="queryParams.sunType" placeholder="请选择分类" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="品类" prop="category">
+        <el-input
+          v-model="queryParams.category"
+          placeholder="请输入品类"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="0:否" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入0:否"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker
+          v-model="queryParams.gmtCreate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker
+          v-model="queryParams.gmtUpdate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="adminId">
+        <el-input
+          v-model="queryParams.adminId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:goodsType:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:goodsType:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:goodsType:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:goodsType:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="goodsTypeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="" align="center" prop="companyId" />
+      <el-table-column label="分类" align="center" prop="sunType" />
+      <el-table-column label="品类" align="center" prop="category" />
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column label="0:否" align="center" prop="deleteFlag" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="userId" />
+      <el-table-column label="" align="center" prop="adminId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:goodsType:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:goodsType:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改服务商品分类对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="分类">
+          <el-select v-model="form.sunType" placeholder="请选择分类">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="品类" prop="category">
+          <el-input v-model="form.category" placeholder="请输入品类" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker
+            v-model="form.gmtCreate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker
+            v-model="form.gmtUpdate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listGoodsType, getGoodsType, delGoodsType, addGoodsType, updateGoodsType, exportGoodsType } from '@/api/sun/goodsType'
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 服务商品分类表格数据
+      goodsTypeList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        sunType: undefined,
+        category: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        sunType: [
+          { required: true, message: '分类(1服务2商品)不能为空', trigger: 'blur' }
+        ], deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询服务商品分类列表 */
+    getList() {
+      this.loading = true
+      listGoodsType(this.queryParams).then(response => {
+        this.goodsTypeList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        sunType: undefined,
+        category: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加服务商品分类'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getGoodsType(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改服务商品分类'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateGoodsType(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addGoodsType(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除服务商品分类编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delGoodsType(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有服务商品分类数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportGoodsType(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 448 - 0
unimall-admin/src/views/sun/orderDetail/index.vue

@@ -0,0 +1,448 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="" prop="companyId">
+        <el-input
+          v-model="queryParams.companyId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="订单id" prop="orderId">
+        <el-input
+          v-model="queryParams.orderId"
+          placeholder="请输入订单id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="商品名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入商品名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="单价" prop="price">
+        <el-input
+          v-model="queryParams.price"
+          placeholder="请输入单价"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="数量" prop="num">
+        <el-input
+          v-model="queryParams.num"
+          placeholder="请输入数量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="小计" prop="amount">
+        <el-input
+          v-model="queryParams.amount"
+          placeholder="请输入小计"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="0:否" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入0:否"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker
+          v-model="queryParams.gmtCreate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker
+          v-model="queryParams.gmtUpdate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="adminId">
+        <el-input
+          v-model="queryParams.adminId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:orderDetail:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:orderDetail:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:orderDetail:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:orderDetail:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="orderDetailList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="" align="center" prop="companyId" />
+      <el-table-column label="订单id" align="center" prop="orderId" />
+      <el-table-column label="商品名称" align="center" prop="name" />
+      <el-table-column label="单价" align="center" prop="price" />
+      <el-table-column label="数量" align="center" prop="num" />
+      <el-table-column label="小计" align="center" prop="amount" />
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column label="0:否" align="center" prop="deleteFlag" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="userId" />
+      <el-table-column label="" align="center" prop="adminId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:orderDetail:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:orderDetail:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改商品详情对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="订单id" prop="orderId">
+          <el-input v-model="form.orderId" placeholder="请输入订单id" />
+        </el-form-item>
+        <el-form-item label="商品名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入商品名称" />
+        </el-form-item>
+        <el-form-item label="单价" prop="price">
+          <el-input v-model="form.price" placeholder="请输入单价" />
+        </el-form-item>
+        <el-form-item label="数量" prop="num">
+          <el-input v-model="form.num" placeholder="请输入数量" />
+        </el-form-item>
+        <el-form-item label="小计" prop="amount">
+          <el-input v-model="form.amount" placeholder="请输入小计" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker
+            v-model="form.gmtCreate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker
+            v-model="form.gmtUpdate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listOrderDetail, getOrderDetail, delOrderDetail, addOrderDetail, updateOrderDetail, exportOrderDetail } from '@/api/sun/orderDetail'
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 商品详情表格数据
+      orderDetailList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        orderId: undefined,
+        name: undefined,
+        price: undefined,
+        num: undefined,
+        amount: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        num: [
+          { required: true, message: '数量不能为空', trigger: 'blur' }
+        ], deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询商品详情列表 */
+    getList() {
+      this.loading = true
+      listOrderDetail(this.queryParams).then(response => {
+        this.orderDetailList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        orderId: undefined,
+        name: undefined,
+        price: undefined,
+        num: undefined,
+        amount: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加商品详情'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getOrderDetail(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改商品详情'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateOrderDetail(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addOrderDetail(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除商品详情编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delOrderDetail(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有商品详情数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportOrderDetail(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 417 - 0
unimall-admin/src/views/sun/serviceManagement/index.vue

@@ -0,0 +1,417 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceManagement:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceManagement:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceManagement:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceManagement:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col> -->
+    </el-row>
+
+    <el-table v-loading="loading" :data="serviceManagementList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号">
+        <template slot-scope="scope">
+          <span v-if="scope.$index < 9">0{{ scope.$index + 1 }}</span>
+          <span v-else>{{ scope.$index + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :formatter="categoryFormat" label="品类" align="center" prop="category" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column align="center" property="pictureUrl" label="图片">
+        <template slot-scope="scope">
+          <img :src="scope.row.pictureUrl" width="40" >
+        </template>
+      </el-table-column>
+      <el-table-column label="简介" align="center" prop="remark" />
+      <el-table-column label="单价" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-tag v-text="scope.row.priceMin"/>
+          <el-tag v-text="scope.row.priceXiao"/>
+          <el-tag v-text="scope.row.priceZhong"/>
+          <el-tag v-text="scope.row.priceDa"/>
+          <el-tag v-text="scope.row.priceJu"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:serviceManagement:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:serviceManagement:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改服务管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="品类" prop="category">
+          <el-select v-model="form.category" placeholder="选择品类">
+            <el-option v-for="(item, index) in categoryDic" :key="index" :label="item.dictLabel" :value="item.dictValue"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="单价" prop="priceMin">
+          <el-input v-model="form.priceMin" placeholder="迷你" />
+          <el-input v-model="form.priceXiao" placeholder="小型" />
+          <el-input v-model="form.priceZhong" placeholder="中型" />
+          <el-input v-model="form.priceDa" placeholder="大型" />
+          <el-input v-model="form.priceJu" placeholder="巨型" />
+        </el-form-item>
+        <el-form-item label="图片">
+          <el-upload
+            :action="uploadPath"
+            :headers="headers"
+            :limit="5"
+            :file-list="imgsFileList"
+            :on-exceed="uploadOverrun"
+            :on-success="handleimgsUrl"
+            :on-remove="handleRemove"
+            multiple
+            accept=".jpg, .jpeg, .png, .gif"
+            list-type="picture-card"
+          >
+            <i class="el-icon-plus" />
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="服务介绍" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listServiceManagement, getServiceManagement, delServiceManagement, addServiceManagement, updateServiceManagement, exportServiceManagement } from '@/api/sun/serviceManagement'
+
+import { getToken } from '@/utils/auth'
+import { uploadPath } from '@/api/storage'
+export default {
+  data() {
+    return {
+      imgsFileList: [],
+      uploadPath,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 服务管理表格数据
+      serviceManagementList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        name: undefined,
+        category: undefined,
+        priceMin: undefined,
+        priceXiao: undefined,
+        priceZhong: undefined,
+        priceDa: undefined,
+        priceJu: undefined,
+        pictureUrl: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {
+        imgList: []
+      },
+      // 表单校验
+      rules: {
+        name: [{ required: true, message: '服务名称不能为空', trigger: 'blur' }, {
+          min: 2,
+          max: 10,
+          message: '名称在 2 到 10 个字符',
+          trigger: 'blur'
+        }],
+        category: [{ required: true, message: '品类不能为空', trigger: 'blur' }],
+        priceMin: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
+        priceXiao: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
+        priceZhong: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
+        priceDa: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
+        priceJu: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
+        remark: [{ required: true, message: '服务介绍不能为空', trigger: 'blur' }, {
+          min: 6,
+          max: 200,
+          message: '商品介绍在 6 到 200 个字符',
+          trigger: 'blur'
+        }] },
+      categoryDic: []
+    }
+  },
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
+  created() {
+    this.getList()
+    this.getDicts('sun_service_type').then(response => {
+      this.categoryDic = response.data.data
+    })
+  },
+  methods: {
+    // 字典翻译
+    categoryFormat(row, column) {
+      return this.selectDictLabel(this.categoryDic, row.category)
+    },
+    /** 查询服务管理列表 */
+    getList() {
+      this.loading = true
+      listServiceManagement(this.queryParams).then(response => {
+        this.serviceManagementList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        name: undefined,
+        category: undefined,
+        priceMin: undefined,
+        priceXiao: undefined,
+        priceZhong: undefined,
+        priceDa: undefined,
+        priceJu: undefined,
+        pictureUrl: undefined,
+        remark: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined,
+        imgList: []
+      }
+      this.imgsFileList = []
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加服务管理'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      var that = this
+      getServiceManagement(id).then(response => {
+        that.form = response.data.data
+        that.open = true
+        for (var i = 0; i < that.form.imgList.length; i++) {
+          that.imgsFileList.push({
+            url: that.form.imgList[i]
+          })
+        }
+        that.title = '修改服务管理'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateServiceManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addServiceManagement(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除服务管理编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delServiceManagement(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有服务管理数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportServiceManagement(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    },
+    uploadOverrun: function() {
+      this.$message({
+        type: 'error',
+        message: '上传文件个数超出限制!最多上传5张图片!'
+      })
+    },
+    handleimgsUrl(response, file, fileList) {
+      if (response.errno === 200) {
+        this.form.imgList.push(response.url)
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    },
+    handleRemove: function(file, fileList) {
+      for (var i = 0; i < this.form.imgList.length; i++) {
+        // 这里存在两种情况
+        // 1. 如果所删除图片是刚刚上传的图片,那么图片地址是file.response.url
+        //    此时的file.url虽然存在,但是是本机地址,而不是远程地址。
+        // 2. 如果所删除图片是后台返回的已有图片,那么图片地址是file.url
+        var url
+        if (file.response === undefined) {
+          url = file.url
+        } else {
+          url = file.response.url
+        }
+
+        if (this.form.imgList[i] === url) {
+          this.form.imgList.splice(i, 1)
+        }
+      }
+      if (this.form.imgList.length > 0) {
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    }
+  }
+}
+</script>

+ 326 - 0
unimall-admin/src/views/sun/serviceOrder/index.vue

@@ -0,0 +1,326 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item prop="orderNo">
+        <el-input
+          v-model="queryParams.orderNo"
+          placeholder="请输入订单编号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item prop="customer">
+        <el-input
+          v-model="queryParams.customer"
+          placeholder="请输入客户"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item prop="customerPhone">
+        <el-input
+          v-model="queryParams.customerPhone"
+          placeholder="请输入客户手机号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="serviceOrderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="" align="center" prop="companyId" />
+      <el-table-column label="订单编号" align="center" prop="orderNo" />
+      <el-table-column label="合计" align="center" prop="sumMoney" />
+      <el-table-column label="退款" align="center" prop="refund" />
+      <el-table-column label="客户" align="center" prop="pictureUrl" />
+      <el-table-column label="宠物" align="center" prop="pets" />
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column label="0:否" align="center" prop="deleteFlag" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="userId" />
+      <el-table-column label="" align="center" prop="adminId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:serviceOrder:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:serviceOrder:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改服务订单对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="订单编号" prop="orderNo">
+          <el-input v-model="form.orderNo" placeholder="请输入订单编号" />
+        </el-form-item>
+        <el-form-item label="合计" prop="sumMoney">
+          <el-input v-model="form.sumMoney" placeholder="请输入合计" />
+        </el-form-item>
+        <el-form-item label="退款" prop="refund">
+          <el-input v-model="form.refund" placeholder="请输入退款" />
+        </el-form-item>
+        <el-form-item label="客户" prop="pictureUrl">
+          <el-input v-model="form.pictureUrl" placeholder="请输入客户" />
+        </el-form-item>
+        <el-form-item label="宠物" prop="pets">
+          <el-input v-model="form.pets" placeholder="请输入宠物" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker
+            v-model="form.gmtCreate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker
+            v-model="form.gmtUpdate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listServiceOrder, getServiceOrder, delServiceOrder, addServiceOrder, updateServiceOrder, exportServiceOrder } from '@/api/sun/serviceOrder'
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 服务订单表格数据
+      serviceOrderList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        orderNo: undefined,
+        sumMoney: undefined,
+        refund: undefined,
+        pictureUrl: undefined,
+        pets: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询服务订单列表 */
+    getList() {
+      this.loading = true
+      listServiceOrder(this.queryParams).then(response => {
+        this.serviceOrderList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        orderNo: undefined,
+        sumMoney: undefined,
+        refund: undefined,
+        pictureUrl: undefined,
+        pets: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加服务订单'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getServiceOrder(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改服务订单'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateServiceOrder(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addServiceOrder(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除服务订单编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delServiceOrder(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有服务订单数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportServiceOrder(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 431 - 0
unimall-admin/src/views/sun/serviceOrderDetail/index.vue

@@ -0,0 +1,431 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="" prop="companyId">
+        <el-input
+          v-model="queryParams.companyId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="订单id" prop="orderId">
+        <el-input
+          v-model="queryParams.orderId"
+          placeholder="请输入订单id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="服务名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入服务名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="预约时间" prop="appointment">
+        <el-input
+          v-model="queryParams.appointment"
+          placeholder="请输入预约时间"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="价格" prop="price">
+        <el-input
+          v-model="queryParams.price"
+          placeholder="请输入价格"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="0:否" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入0:否"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker
+          v-model="queryParams.gmtCreate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker
+          v-model="queryParams.gmtUpdate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="adminId">
+        <el-input
+          v-model="queryParams.adminId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceOrderDetail:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceOrderDetail:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceOrderDetail:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:serviceOrderDetail:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="serviceOrderDetailList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="" align="center" prop="companyId" />
+      <el-table-column label="订单id" align="center" prop="orderId" />
+      <el-table-column label="服务名称" align="center" prop="name" />
+      <el-table-column label="预约时间" align="center" prop="appointment" />
+      <el-table-column label="价格" align="center" prop="price" />
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column label="0:否" align="center" prop="deleteFlag" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="userId" />
+      <el-table-column label="" align="center" prop="adminId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:serviceOrderDetail:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:serviceOrderDetail:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改服务订单详情对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="订单id" prop="orderId">
+          <el-input v-model="form.orderId" placeholder="请输入订单id" />
+        </el-form-item>
+        <el-form-item label="服务名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入服务名称" />
+        </el-form-item>
+        <el-form-item label="预约时间" prop="appointment">
+          <el-input v-model="form.appointment" placeholder="请输入预约时间" />
+        </el-form-item>
+        <el-form-item label="价格" prop="price">
+          <el-input v-model="form.price" placeholder="请输入价格" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker
+            v-model="form.gmtCreate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker
+            v-model="form.gmtUpdate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listServiceOrderDetail, getServiceOrderDetail, delServiceOrderDetail, addServiceOrderDetail, updateServiceOrderDetail, exportServiceOrderDetail } from '@/api/sun/serviceOrderDetail'
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 服务订单详情表格数据
+      serviceOrderDetailList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        orderId: undefined,
+        name: undefined,
+        appointment: undefined,
+        price: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询服务订单详情列表 */
+    getList() {
+      this.loading = true
+      listServiceOrderDetail(this.queryParams).then(response => {
+        this.serviceOrderDetailList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        orderId: undefined,
+        name: undefined,
+        appointment: undefined,
+        price: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加服务订单详情'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getServiceOrderDetail(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改服务订单详情'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateServiceOrderDetail(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addServiceOrderDetail(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除服务订单详情编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delServiceOrderDetail(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有服务订单详情数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportServiceOrderDetail(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 383 - 0
unimall-admin/src/views/sun/storedCard/index.vue

@@ -0,0 +1,383 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedCard:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedCard:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedCard:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedCard:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col> -->
+    </el-row>
+
+    <el-table v-loading="loading" :data="storedCardList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号">
+        <template slot-scope="scope">
+          <span v-if="scope.$index < 9">0{{ scope.$index + 1 }}</span>
+          <span v-else>{{ scope.$index + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="价格" align="center" prop="price" />
+      <el-table-column align="center" property="pictureUrl" label="图片">
+        <template slot-scope="scope">
+          <img :src="scope.row.pictureUrl" width="40" >
+        </template>
+      </el-table-column>
+      <el-table-column label="免费接送公里数" align="center" prop="freeShuttle" />
+      <el-table-column label="优惠券" align="center" prop="coupon" />
+      <el-table-column label="其他服务" align="center" prop="other" />
+      <el-table-column label="描述" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:storedCard:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:storedCard:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改储值卡对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="价格" prop="price">
+          <el-input v-model="form.price" placeholder="请输入价格" />
+        </el-form-item>
+        <el-form-item label="图片">
+          <el-upload
+            :action="uploadPath"
+            :headers="headers"
+            :limit="5"
+            :file-list="imgsFileList"
+            :on-exceed="uploadOverrun"
+            :on-success="handleimgsUrl"
+            :on-remove="handleRemove"
+            multiple
+            accept=".jpg, .jpeg, .png, .gif"
+            list-type="picture-card"
+          >
+            <i class="el-icon-plus" />
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="公里数" prop="freeShuttle">
+          <el-input v-model="form.freeShuttle" placeholder="请输入免费接送公里数" />
+        </el-form-item>
+        <el-form-item label="优惠券" prop="coupon">
+          <el-input v-model="form.coupon" placeholder="请输入优惠券" />
+        </el-form-item>
+        <el-form-item label="其他服务" prop="other">
+          <el-input v-model="form.other" placeholder="请输入其他服务" />
+        </el-form-item>
+        <el-form-item label="描述" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listStoredCard, getStoredCard, delStoredCard, addStoredCard, updateStoredCard, exportStoredCard } from '@/api/sun/storedCard'
+
+import { getToken } from '@/utils/auth'
+import { uploadPath } from '@/api/storage'
+export default {
+  data() {
+    return {
+      imgsFileList: [],
+      uploadPath,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 储值卡表格数据
+      storedCardList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        name: undefined,
+        price: undefined,
+        freeShuttle: undefined,
+        coupon: undefined,
+        other: undefined,
+        pictureUrl: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {
+        imgList: []
+      },
+      // 表单校验
+      rules: {
+        deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询储值卡列表 */
+    getList() {
+      this.loading = true
+      listStoredCard(this.queryParams).then(response => {
+        this.storedCardList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        name: undefined,
+        price: undefined,
+        freeShuttle: undefined,
+        coupon: undefined,
+        other: undefined,
+        pictureUrl: undefined,
+        remark: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined,
+        imgList: []
+      }
+      this.imgsFileList = []
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加储值卡'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getStoredCard(id).then(response => {
+        this.form = response.data.data
+        for (var i = 0; i < this.form.imgList.length; i++) {
+          this.imgsFileList.push({
+            url: this.form.imgList[i]
+          })
+        }
+        this.open = true
+        this.title = '修改储值卡'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateStoredCard(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addStoredCard(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除储值卡编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delStoredCard(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有储值卡数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportStoredCard(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    },
+    uploadOverrun: function() {
+      this.$message({
+        type: 'error',
+        message: '上传文件个数超出限制!最多上传5张图片!'
+      })
+    },
+    handleimgsUrl(response, file, fileList) {
+      if (response.errno === 200) {
+        this.form.imgList.push(response.url)
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    },
+    handleRemove: function(file, fileList) {
+      for (var i = 0; i < this.form.imgList.length; i++) {
+        // 这里存在两种情况
+        // 1. 如果所删除图片是刚刚上传的图片,那么图片地址是file.response.url
+        //    此时的file.url虽然存在,但是是本机地址,而不是远程地址。
+        // 2. 如果所删除图片是后台返回的已有图片,那么图片地址是file.url
+        var url
+        if (file.response === undefined) {
+          url = file.url
+        } else {
+          url = file.response.url
+        }
+
+        if (this.form.imgList[i] === url) {
+          this.form.imgList.splice(i, 1)
+        }
+      }
+      if (this.form.imgList.length > 0) {
+        this.form.pictureUrl = this.form.imgList[0]
+      }
+    }
+  }
+}
+</script>

+ 433 - 0
unimall-admin/src/views/sun/storedDiscount/index.vue

@@ -0,0 +1,433 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px">
+      <el-form-item label="" prop="companyId">
+        <el-input
+          v-model="queryParams.companyId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="储值卡id" prop="storedId">
+        <el-input
+          v-model="queryParams.storedId"
+          placeholder="请输入储值卡id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="服务品类key" prop="serviceCategoryKey">
+        <el-input
+          v-model="queryParams.serviceCategoryKey"
+          placeholder="请输入服务品类key"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="服务品类" prop="serviceCategory">
+        <el-input
+          v-model="queryParams.serviceCategory"
+          placeholder="请输入服务品类"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="折扣" prop="discount">
+        <el-input
+          v-model="queryParams.discount"
+          placeholder="请输入折扣"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="0:否" prop="deleteFlag">
+        <el-input
+          v-model="queryParams.deleteFlag"
+          placeholder="请输入0:否"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="gmtCreate">
+        <el-date-picker
+          v-model="queryParams.gmtCreate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="gmtUpdate">
+        <el-date-picker
+          v-model="queryParams.gmtUpdate"
+          clearable
+          size="small"
+          style="width: 200px"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择"/>
+      </el-form-item>
+      <el-form-item label="" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="adminId">
+        <el-input
+          v-model="queryParams.adminId"
+          placeholder="请输入"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedDiscount:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedDiscount:edit']"
+          :disabled="single"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedDiscount:remove']"
+          :disabled="multiple"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-permission="['sun:storedDiscount:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="storedDiscountList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="" align="center" prop="id" />
+      <el-table-column label="" align="center" prop="companyId" />
+      <el-table-column label="储值卡id" align="center" prop="storedId" />
+      <el-table-column label="服务品类key" align="center" prop="serviceCategoryKey" />
+      <el-table-column label="服务品类" align="center" prop="serviceCategory" />
+      <el-table-column label="折扣" align="center" prop="discount" />
+      <el-table-column label="状态" align="center" prop="status" />
+      <el-table-column label="0:否" align="center" prop="deleteFlag" />
+      <el-table-column label="" align="center" prop="gmtCreate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="userId" />
+      <el-table-column label="" align="center" prop="adminId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-permission="['sun:storedDiscount:edit']"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            v-permission="['sun:storedDiscount:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改储值卡关系对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="储值卡id" prop="storedId">
+          <el-input v-model="form.storedId" placeholder="请输入储值卡id" />
+        </el-form-item>
+        <el-form-item label="服务品类key" prop="serviceCategoryKey">
+          <el-input v-model="form.serviceCategoryKey" placeholder="请输入服务品类key" />
+        </el-form-item>
+        <el-form-item label="服务品类" prop="serviceCategory">
+          <el-input v-model="form.serviceCategory" placeholder="请输入服务品类" />
+        </el-form-item>
+        <el-form-item label="折扣" prop="discount">
+          <el-input v-model="form.discount" placeholder="请输入折扣" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item>
+        <el-form-item label="" prop="gmtCreate">
+          <el-date-picker
+            v-model="form.gmtCreate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker
+            v-model="form.gmtUpdate"
+            clearable
+            size="small"
+            style="width: 200px"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择"/>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listStoredDiscount, getStoredDiscount, delStoredDiscount, addStoredDiscount, updateStoredDiscount, exportStoredDiscount } from '@/api/sun/storedDiscount'
+
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 储值卡关系表格数据
+      storedDiscountList: [],
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyId: undefined,
+        storedId: undefined,
+        serviceCategoryKey: undefined,
+        serviceCategory: undefined,
+        discount: undefined,
+        status: undefined,
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        storedId: [
+          { required: true, message: '储值卡id不能为空', trigger: 'blur' }
+        ], deleteFlag: [
+          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
+        ] }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询储值卡关系列表 */
+    getList() {
+      this.loading = true
+      listStoredDiscount(this.queryParams).then(response => {
+        this.storedDiscountList = response.data.data.items
+        this.total = response.data.data.count
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        companyId: undefined,
+        storedId: undefined,
+        serviceCategoryKey: undefined,
+        serviceCategory: undefined,
+        discount: undefined,
+        status: '0',
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = '添加储值卡关系'
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids.join(',')
+      getStoredDiscount(id).then(response => {
+        this.form = response.data.data
+        this.open = true
+        this.title = '修改储值卡关系'
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateStoredDiscount(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          } else {
+            addStoredDiscount(this.form).then(response => {
+              if (response.data) {
+                this.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              } else {
+                this.msgError(response.msg)
+              }
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除储值卡关系编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delStoredDiscount(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(function() {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有储值卡关系数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportStoredDiscount(queryParams)
+      }).then(response => {
+        this.download(response.data.data)
+      }).catch(function() {})
+    }
+  }
+}
+</script>

+ 4 - 4
unimall-core/src/main/resources/vm/java/domain.java.vm

@@ -4,9 +4,9 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
 import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.enums.FieldFill;
 import com.iotechn.unimall.core.util.StringUtils;
@@ -23,7 +23,7 @@ import ${import};
 #set($Entity="BaseEntity")
 @Data
 @TableName("${tableName}")
-public class ${ClassName}{
+public class ${ClassName} extends BaseDO{
     private static final long serialVersionUID = 1L;
 
 #foreach ($column in $columns)

+ 15 - 12
unimall-core/src/main/resources/vm/java/service.java.vm

@@ -1,7 +1,7 @@
 package ${packageName}.admin.api.${moduleName};
 
 
-import ${packageName}.domain.${moduleName}.${ClassName};
+import ${packageName}.data.domain.${moduleName}.${ClassName};
 import com.iotechn.unimall.core.annotation.HttpMethod;
 import com.iotechn.unimall.core.annotation.HttpOpenApi;
 import com.iotechn.unimall.core.annotation.HttpParam;
@@ -9,6 +9,7 @@ import com.iotechn.unimall.core.annotation.HttpParamType;
 import com.iotechn.unimall.core.annotation.param.NotNull;
 import com.iotechn.unimall.core.exception.ServiceException;
 import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
 
 /**
  * ${functionName}Service接口
@@ -17,11 +18,12 @@ import com.iotechn.unimall.data.model.Page;
  * @date ${datetime}
  */
 @HttpOpenApi(group = "admin.${moduleName}.${className}", description = "${functionName}")
-public interface ${ClassName}Service{
-	@HttpMethod(description = "新增", permission = "admin:${className}:${className}:add", permissionName = "${functionName}管理")
-	public Boolean add(@NotNull @HttpParam(name = "${className}", type = HttpParamType.COMMON, description = "${functionName}") ${ClassName} ${className})throws ServiceException;
+public interface I${ClassName}Service{
+	@HttpMethod(description = "新增", permission = "admin:${moduleName}:${className}:add", permissionParentName = "宠物管理", permissionName = "${functionName}管理")
+	public Boolean add(@NotNull @HttpParam(name = "${className}", type = HttpParamType.COMMON, description = "${functionName}") ${ClassName} ${className},
+						   @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
 
-	@HttpMethod(description = "列表", permission = "admin:${className}:${className}:list", permissionName = "${functionName}管理")
+	@HttpMethod(description = "列表", permission = "admin:${moduleName}:${className}:list",permissionParentName = "宠物管理", permissionName = "${functionName}管理")
 	public Page<${ClassName}> list(
 	#foreach ($column in $columns)
 		#if($column.isQuery==1)
@@ -32,16 +34,17 @@ public interface ${ClassName}Service{
 		@HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit)
 		throws ServiceException;
 
-	@HttpMethod(description = "删除", permission = "admin:${className}:${className}:delete", permissionName = "${functionName}管理")
-	public Boolean delete(@NotNull @HttpParam(name = "${pkColumn.javaField}s", type = HttpParamType.COMMON, description = "${pkColumn.columnComment}")${pkColumn.javaType} ${pkColumn.javaField}s)throws ServiceException;
+	@HttpMethod(description = "删除", permission = "admin:${moduleName}:${className}:delete",permissionParentName = "宠物管理", permissionName = "${functionName}管理")
+	public Boolean delete(@NotNull @HttpParam(name = "${pkColumn.javaField}", type = HttpParamType.COMMON, description = "${pkColumn.columnComment}")${pkColumn.javaType} ${pkColumn.javaField})throws ServiceException;
 
-	@HttpMethod(description = "修改", permission = "admin:${className}:${className}:update", permissionName = "${functionName}管理")
-	public Boolean update(@NotNull @HttpParam(name = "${className}", type = HttpParamType.COMMON, description = "${functionName}") ${ClassName} ${className})throws ServiceException;
+	@HttpMethod(description = "修改", permission = "admin:${className}:${className}:update",permissionParentName = "宠物管理", permissionName = "${functionName}管理")
+	public Boolean update(@NotNull @HttpParam(name = "${className}", type = HttpParamType.COMMON, description = "${functionName}") ${ClassName} ${className},
+						  @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "adminId") Long adminId)throws ServiceException;
 
-	@HttpMethod(description = "查询", permission = "admin:${className}:${className}:get", permissionName = "${functionName}管理")
-	public SysDictData get(@NotNull @HttpParam(name = "${pkColumn.javaField}", type = HttpParamType.COMMON, description = "${pkColumn.columnComment}")${pkColumn.javaType} ${pkColumn.javaField})throws ServiceException;
+	@HttpMethod(description = "查询", permission = "admin:${moduleName}:${className}:get",permissionParentName = "宠物管理", permissionName = "${functionName}管理")
+	public ${ClassName} get(@NotNull @HttpParam(name = "${pkColumn.javaField}", type = HttpParamType.COMMON, description = "${pkColumn.columnComment}")${pkColumn.javaType} ${pkColumn.javaField})throws ServiceException;
 	
-	@HttpMethod(description = "导出excl表", permission = "admin:${className}:${className}:export", permissionName = "${functionName}管理")
+	@HttpMethod(description = "导出excl表", permission = "admin:${moduleName}:${className}:export",permissionParentName = "宠物管理", permissionName = "${functionName}管理")
 	public String export(
 	#foreach ($column in $columns)
 		#if($column.isQuery==1)

+ 27 - 10
unimall-core/src/main/resources/vm/java/serviceImpl.java.vm

@@ -13,7 +13,10 @@ import com.iotechn.unimall.core.exception.ServiceException;
 import com.iotechn.unimall.data.util.ExcelUtil;
 import ${packageName}.data.mapper.${moduleName}.${ClassName}Mapper;
 import ${packageName}.data.domain.${moduleName}.${ClassName};
-import ${packageName}.admin.api.${moduleName}.${ClassName}Service;
+import ${packageName}.admin.api.${moduleName}.I${ClassName}Service;
+import com.iotechn.unimall.data.model.Page;
+import java.util.Date;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * ${functionName}Service业务层处理
@@ -22,12 +25,16 @@ import ${packageName}.admin.api.${moduleName}.${ClassName}Service;
  * @date ${datetime}
  */
 @Service
-public class ${ClassName}ServiceImpl implements ${ClassName}Service{
+public class ${ClassName}ServiceImpl implements I${ClassName}Service{
 	@Autowired
 	private ${ClassName}Mapper ${className}Mapper;
 	
 	@Override
-	public Boolean add(${ClassName} ${className}) throws ServiceException {
+	public Boolean add(${ClassName} ${className},Long adminId) throws ServiceException {
+		Date now = new Date();
+		${className}.setGmtCreate(now);
+		${className}.setGmtUpdate(now);
+		${className}.setAdminId(adminId);
 		return ${className}Mapper.insert(${className})>0;
 	}
 
@@ -40,22 +47,32 @@ public class ${ClassName}ServiceImpl implements ${ClassName}Service{
 					wrapper.eq("$column.columnName", $column.javaField);
 				}
 			#end
-		#end 
+		#end
+		wrapper.eq("delete_flag", 0);
 		List<${ClassName}> list = ${className}Mapper.selectPage(new RowBounds((page - 1) * limit, limit), wrapper);
 		Integer count = ${className}Mapper.selectCount(wrapper);
 		return new Page<${ClassName}>(list, page, limit, count);
 	}
 
 	@Override
-	public Boolean delete(${pkColumn.javaField}s)) throws ServiceException {
-		String[] ids=${pkColumn.javaField}.split(",");
-		Wrapper<${ClassName}> wrapper = new EntityWrapper<${ClassName}>();
-		wrapper.in("${pkColumn.columnName}", ids);
-		return ${className}Mapper.delete(wrapper)>0;
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean delete(${pkColumn.javaType} ${pkColumn.javaField}) {
+		String[] ids = String.valueOf(${pkColumn.javaField}).split(",");
+		for (String tt:ids) {
+			${ClassName} tmp =  ${className}Mapper.selectById(Long.parseLong(tt));
+			if(tmp != null){
+				tmp.setDeleteFlag(1);
+				${className}Mapper.updateById(tmp);
+			}
+		}
+		return true;
 	}
 
 	@Override
-	public Boolean update(${ClassName} ${className}) throws ServiceException {
+	public Boolean update(${ClassName} ${className},Long adminId) throws ServiceException {
+		Date now = new Date();
+		${className}.setGmtUpdate(now);
+		${className}.setAdminId(adminId);
 		return ${className}Mapper.updateById(${className})>0;
 	}
 

+ 6 - 6
unimall-core/src/main/resources/vm/js/api.js.vm

@@ -19,7 +19,7 @@ export function get${BusinessName}(${pkColumn.javaField}) {
     params: {
       _gp: 'admin.${moduleName}.${className}',
       _mt: 'get',
-      ${pkColumn.javaField}:${pkColumn.javaField}
+      ${pkColumn.javaField}: ${pkColumn.javaField}
     }
   })
 }
@@ -31,7 +31,7 @@ export function add${BusinessName}(data) {
     params: {
       _gp: 'admin.${moduleName}.${className}',
       _mt: 'add',
-      ${className}:data
+      ${className}: data
     }
   })
 }
@@ -43,7 +43,7 @@ export function update${BusinessName}(data) {
     params: {
       _gp: 'admin.${moduleName}.${className}',
       _mt: 'update',
-      ${className}:data
+      ${className}: data
     }
   })
 }
@@ -54,8 +54,8 @@ export function del${BusinessName}(${pkColumn.javaField}) {
     method: 'post',
     params: {
       _gp: 'admin.${moduleName}.${className}',
-      _mt: 'update',
-      ${pkColumn.javaField}s:${pkColumn.javaField}
+      _mt: 'delete',
+      ${pkColumn.javaField}: ${pkColumn.javaField}
     }
   })
 }
@@ -70,4 +70,4 @@ export function export${BusinessName}(query) {
       ...query
     }
   })
-}
+}

+ 32 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/BaseDO.java

@@ -0,0 +1,32 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author:chengchangjiang
+ * @Description:
+ * @Date:Created in 10:46 2022-05-24
+ */
+@Data
+public class BaseDO {
+    /**  */
+    @TableId("id")
+    private Long id;
+    /**  */
+    @Excel(name = "", width = 30)
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30)
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+    /**  */
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+}

+ 115 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCarManagement.java

@@ -0,0 +1,115 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 车辆信息对象 sun_car_management
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_car_management")
+public class SunCarManagement extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 车辆名称 */
+    @Excel(name = "车辆名称")
+    @TableField("name")
+    private String name;
+
+    /** 车牌号 */
+    @Excel(name = "车牌号")
+    @TableField("cai_no")
+    private String caiNo;
+
+    /** 司机姓名 */
+    @Excel(name = "司机姓名")
+    @TableField("driver")
+    private String driver;
+
+    /** 司机电话 */
+    @Excel(name = "司机电话")
+    @TableField("phone")
+    private String phone;
+
+    /** 车辆照片 */
+    @Excel(name = "车辆照片")
+    @TableField("picture_url")
+    private String pictureUrl;
+
+    /** 服务介绍 */
+    @Excel(name = "服务介绍")
+    @TableField("remark")
+    private String remark;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("name", getName())
+            .append("caiNo", getCaiNo())
+            .append("driver", getDriver())
+            .append("phone", getPhone())
+            .append("pictureUrl", getPictureUrl())
+            .append("remark", getRemark())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 127 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCommodityManagement.java

@@ -0,0 +1,127 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 商品管理对象 sun_commodity_management
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_commodity_management")
+public class SunCommodityManagement extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    @TableField("name")
+    private String name;
+
+    /** 品类 */
+    @Excel(name = "品类")
+    @TableField("category")
+    private String category;
+
+    /** 单价 */
+    @Excel(name = "单价")
+    @TableField("price")
+    private Double price;
+
+    /** 会员价 */
+    @Excel(name = "会员价")
+    @TableField("price_membership")
+    private Double priceMembership;
+
+    /** 图片 */
+    @Excel(name = "图片")
+    @TableField("picture_url")
+    private String pictureUrl;
+
+    /** 库存 */
+    @Excel(name = "库存")
+    @TableField("num")
+    private Long num;
+
+    /** 商品介绍 */
+    @Excel(name = "商品介绍")
+    @TableField("remark")
+    private String remark;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    /**
+     * 图片列表
+     */
+    @TableField(exist = false)
+    private List<String> imgList;
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("name", getName())
+            .append("category", getCategory())
+            .append("price", getPrice())
+            .append("priceMembership", getPriceMembership())
+            .append("pictureUrl", getPictureUrl())
+            .append("num", getNum())
+            .append("remark", getRemark())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 136 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCommodityOrder.java

@@ -0,0 +1,136 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 商品订单对象 sun_commodity_order
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_commodity_order")
+public class SunCommodityOrder extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 订单编号 */
+    @Excel(name = "订单编号")
+    @TableField("order_no")
+    private String orderNo;
+
+    /** 原价合计 */
+    @Excel(name = "原价合计")
+    @TableField("original_sum")
+    private Double originalSum;
+
+    /** 合计 */
+    @Excel(name = "合计")
+    @TableField("sum_money")
+    private Double sumMoney;
+
+    /** 退款(申请) */
+    @Excel(name = "退款(申请)")
+    @TableField("refund_appl")
+    private Double refundAppl;
+
+    /** 退款(实际) */
+    @Excel(name = "退款", readConverterExp = "实=际")
+    @TableField("refund")
+    private Double refund;
+
+    /** 客户 */
+    @Excel(name = "客户")
+    @TableField("customer")
+    private String customer;
+
+    /** 收货地址 */
+    @Excel(name = "收货地址")
+    @TableField("pets")
+    private String pets;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+    @TableField(exist = false)
+    private List<SunCommodityOrderDetail> sunCommodityOrderDetails;
+
+    @TableField(exist = false)
+    private SunMemberInfo sunMemberInfo;
+
+    @TableField(exist = false)
+    private String customerPhone;
+
+    @TableField(exist = false)
+    private SunOrderAddress sunOrderAddress;
+
+    @TableField(exist = false)
+    private List<SunOrderEvaluation> sunOrderEvaluations;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("orderNo", getOrderNo())
+            .append("sumMoney", getSumMoney())
+            .append("refundAppl", getRefundAppl())
+            .append("refund", getRefund())
+            .append("pictureUrl", getCustomer())
+            .append("pets", getPets())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 109 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCommodityOrderDetail.java

@@ -0,0 +1,109 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 商品详情对象 sun_commodity_order_detail
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_commodity_order_detail")
+public class SunCommodityOrderDetail extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    @TableField("order_id")
+    private String orderId;
+
+    /** 商品名称 */
+    @Excel(name = "商品名称")
+    @TableField("name")
+    private String name;
+
+    /** 单价 */
+    @Excel(name = "单价")
+    @TableField("price")
+    private Double price;
+
+    /** 数量 */
+    @Excel(name = "数量")
+    @TableField("num")
+    private Long num;
+
+    /** 小计 */
+    @Excel(name = "小计")
+    @TableField("amount")
+    private Double amount;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("orderId", getOrderId())
+            .append("name", getName())
+            .append("price", getPrice())
+            .append("num", getNum())
+            .append("amount", getAmount())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 169 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunCouponManagement.java

@@ -0,0 +1,169 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 优惠券对象 sun_coupon_management
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_coupon_management")
+public class SunCouponManagement extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    @TableField("name")
+    private String name;
+
+    /** 类型 */
+    @Excel(name = "类型")
+    @TableField("coupon_type")
+    private String couponType;
+
+    /** 发放方式key */
+    @Excel(name = "发放方式key")
+    @TableField("distribution_method_key")
+    private String distributionMethodKey;
+
+    /** 发放方式 */
+    @Excel(name = "发放方式")
+    @TableField("distribution_method")
+    private String distributionMethod;
+
+    /** 数量 */
+    @Excel(name = "数量")
+    @TableField("num")
+    private Long num;
+
+    /** 限量 */
+    @Excel(name = "限量")
+    @TableField("limit_num")
+    private Long limitNum;
+
+    /** 满 */
+    @Excel(name = "满")
+    @TableField("full_money")
+    private Double fullMoney;
+
+    /** 减 */
+    @Excel(name = "减")
+    @TableField("reduce_money")
+    private Double reduceMoney;
+
+    /** 折扣 */
+    @Excel(name = "折扣")
+    @TableField("discount")
+    private String discount;
+
+    /** 有效期(1.制定时长2.指定区间) */
+    @Excel(name = "有效期(1.制定时长2.指定区间)")
+    @TableField("term_validity")
+    private String termValidity;
+
+    /** 区间开始 */
+    @Excel(name = "区间开始", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("interval_start")
+    private Date intervalStart;
+
+    /** 区间结束 */
+    @Excel(name = "区间结束", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("interval_end")
+    private Date intervalEnd;
+
+    /** 有效天数 */
+    @Excel(name = "有效天数")
+    @TableField("effective_days")
+    private Long effectiveDays;
+
+    /** 图片路径 */
+    @Excel(name = "图片路径")
+    @TableField("picture_url")
+    private String pictureUrl;
+
+    /** 描述 */
+    @Excel(name = "描述")
+    @TableField("remark")
+    private String remark;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("name", getName())
+            .append("couponType", getCouponType())
+            .append("distributionMethodKey", getDistributionMethodKey())
+            .append("distributionMethod", getDistributionMethod())
+            .append("num", getNum())
+            .append("limitNum", getLimitNum())
+            .append("fullMoney", getFullMoney())
+            .append("reduceMoney", getReduceMoney())
+            .append("discount", getDiscount())
+            .append("termValidity", getTermValidity())
+            .append("intervalStart", getIntervalStart())
+            .append("intervalEnd", getIntervalEnd())
+            .append("effectiveDays", getEffectiveDays())
+            .append("pictureUrl", getPictureUrl())
+            .append("remark", getRemark())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 91 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunGoodsServicesType.java

@@ -0,0 +1,91 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 服务商品分类对象 sun_goods_services_type
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_goods_services_type")
+public class SunGoodsServicesType extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 分类(1服务2商品) */
+    @Excel(name = "分类", readConverterExp = "1=服务2商品")
+    @TableField("sun_type")
+    private Long sunType;
+
+    /** 品类 */
+    @Excel(name = "品类")
+    @TableField("category")
+    private String category;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("sunType", getSunType())
+            .append("category", getCategory())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 108 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunMemberInfo.java

@@ -0,0 +1,108 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 用户信息对象 sun_member_info
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_member_info")
+public class SunMemberInfo extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    @TableField("name")
+    private String name;
+
+    /** 手机号 */
+    @Excel(name = "手机号")
+    @TableField("phone")
+    private String phone;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    @TableField("sex")
+    private Long sex;
+
+    /** 星级 */
+    @Excel(name = "星级")
+    @TableField("stars")
+    private String stars;
+
+    /** 储值卡 */
+    @Excel(name = "储值卡")
+    @TableField("stored_value_card")
+    private String storedValueCard;
+
+    /** 取消预约次数 */
+    @Excel(name = "取消预约次数")
+    @TableField("cancellations")
+    private Long cancellations;
+
+    /** 余额 */
+    @Excel(name = "余额")
+    @TableField("balance")
+    private Double balance;
+
+    /** 备注1 */
+    @Excel(name = "备注1")
+    @TableField("remarks")
+    private String remarks;
+
+    /** 备注2 */
+    @Excel(name = "备注2")
+    @TableField("remark")
+    private String remark;
+
+
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("name", getName())
+            .append("phone", getPhone())
+            .append("sex", getSex())
+            .append("stars", getStars())
+            .append("storedValueCard", getStoredValueCard())
+            .append("cancellations", getCancellations())
+            .append("balance", getBalance())
+            .append("remarks", getRemarks())
+            .append("remark", getRemark())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 115 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunOrderAddress.java

@@ -0,0 +1,115 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 订单客户收货地址对象 sun_order_address
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+@Data
+@TableName("sun_order_address")
+public class SunOrderAddress extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    @TableField("order_id")
+    private String orderId;
+
+    /** 订单编号 */
+    @Excel(name = "订单编号")
+    @TableField("order_no")
+    private String orderNo;
+
+    /** 收货人姓名 */
+    @Excel(name = "收货人姓名")
+    @TableField("consignee_name")
+    private String consigneeName;
+
+    /** 手机号 */
+    @Excel(name = "手机号")
+    @TableField("phone")
+    private String phone;
+
+    /** 所在地区 */
+    @Excel(name = "所在地区")
+    @TableField("location")
+    private String location;
+
+    /** 详细地址 */
+    @Excel(name = "详细地址")
+    @TableField("address")
+    private String address;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("orderId", getOrderId())
+            .append("orderNo", getOrderNo())
+            .append("consigneeName", getConsigneeName())
+            .append("phone", getPhone())
+            .append("location", getLocation())
+            .append("address", getAddress())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 121 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunOrderEvaluation.java

@@ -0,0 +1,121 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 订单评价对象 sun_order_evaluation
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+@Data
+@TableName("sun_order_evaluation")
+public class SunOrderEvaluation extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 订单类型 */
+    @Excel(name = "订单类型")
+    @TableField("order_type")
+    private String orderType;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    @TableField("order_id")
+    private String orderId;
+
+    /** 订单编号 */
+    @Excel(name = "订单编号")
+    @TableField("order_no")
+    private String orderNo;
+
+    /** 商品名称 */
+    @Excel(name = "商品名称")
+    @TableField("trade_name")
+    private String tradeName;
+
+    /** 商品满意度 */
+    @Excel(name = "商品满意度")
+    @TableField("commodity_satisfaction")
+    private String commoditySatisfaction;
+
+    /** 快递满意度 */
+    @Excel(name = "快递满意度")
+    @TableField("express_satisfaction")
+    private String expressSatisfaction;
+
+    /** 评价内容 */
+    @Excel(name = "评价内容")
+    @TableField("address")
+    private String address;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("orderType", getOrderType())
+            .append("orderId", getOrderId())
+            .append("orderNo", getOrderNo())
+            .append("tradeName", getTradeName())
+            .append("commoditySatisfaction", getCommoditySatisfaction())
+            .append("expressSatisfaction", getExpressSatisfaction())
+            .append("address", getAddress())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 109 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunReceivingAddress.java

@@ -0,0 +1,109 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 客户收货地址 对象 sun_receiving_address
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+@Data
+@TableName("sun_receiving_address")
+public class SunReceivingAddress extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 客户id */
+    @Excel(name = "客户id")
+    @TableField("cus_id")
+    private String cusId;
+
+    /** 收货人姓名 */
+    @Excel(name = "收货人姓名")
+    @TableField("consignee_name")
+    private String consigneeName;
+
+    /** 手机号 */
+    @Excel(name = "手机号")
+    @TableField("phone")
+    private String phone;
+
+    /** 所在地区 */
+    @Excel(name = "所在地区")
+    @TableField("location")
+    private String location;
+
+    /** 详细地址 */
+    @Excel(name = "详细地址")
+    @TableField("address")
+    private String address;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("cusId", getCusId())
+            .append("consigneeName", getConsigneeName())
+            .append("phone", getPhone())
+            .append("location", getLocation())
+            .append("address", getAddress())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 133 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunServiceManagement.java

@@ -0,0 +1,133 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 服务管理对象 sun_service_management
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_service_management")
+public class SunServiceManagement extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    @TableField("name")
+    private String name;
+
+    /** 品类 */
+    @Excel(name = "品类")
+    @TableField("category")
+    private String category;
+
+    /** 单价(迷你) */
+    @Excel(name = "单价", readConverterExp = "迷=你")
+    @TableField("price_min")
+    private Double priceMin;
+
+    /** 单价(小型) */
+    @Excel(name = "单价", readConverterExp = "小=型")
+    @TableField("price_xiao")
+    private Double priceXiao;
+
+    /** 单价(中型) */
+    @Excel(name = "单价", readConverterExp = "中=型")
+    @TableField("price_zhong")
+    private Double priceZhong;
+
+    /** 单价(大型) */
+    @Excel(name = "单价", readConverterExp = "大=型")
+    @TableField("price_da")
+    private Double priceDa;
+
+    /** 单价(巨型) */
+    @Excel(name = "单价", readConverterExp = "巨=型")
+    @TableField("price_ju")
+    private Double priceJu;
+
+    /** 图片路径 */
+    @Excel(name = "图片路径")
+    @TableField("picture_url")
+    private String pictureUrl;
+
+    /** 服务介绍 */
+    @Excel(name = "服务介绍")
+    @TableField("remark")
+    private String remark;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("name", getName())
+            .append("category", getCategory())
+            .append("priceMin", getPriceMin())
+            .append("priceXiao", getPriceXiao())
+            .append("priceZhong", getPriceZhong())
+            .append("priceDa", getPriceDa())
+            .append("priceJu", getPriceJu())
+            .append("pictureUrl", getPictureUrl())
+            .append("remark", getRemark())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 130 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunServiceOrder.java

@@ -0,0 +1,130 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 服务订单对象 sun_service_order
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_service_order")
+public class SunServiceOrder extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 订单编号 */
+    @Excel(name = "订单编号")
+    @TableField("order_no")
+    private String orderNo;
+
+
+    /** 原价合计 */
+    @Excel(name = "原价合计")
+    @TableField("original_sum")
+    private Double originalSum;
+
+    /** 合计 */
+    @Excel(name = "合计")
+    @TableField("sum_money")
+    private Double sumMoney;
+
+    /** 退款 */
+    @Excel(name = "退款")
+    @TableField("refund")
+    private Double refund;
+
+    /** 客户 */
+    @Excel(name = "客户")
+    @TableField("customer")
+    private String customer;
+
+    /** 宠物 */
+    @Excel(name = "宠物")
+    @TableField("pets")
+    private String pets;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+    @TableField(exist = false)
+    private List<SunServiceOrderDetail> sunServiceOrderDetails;
+
+    @TableField(exist = false)
+    private SunMemberInfo sunMemberInfo;
+
+    @TableField(exist = false)
+    private String customerPhone;
+
+    @TableField(exist = false)
+    private SunOrderAddress sunOrderAddress;
+
+    @TableField(exist = false)
+    private List<SunOrderEvaluation> sunOrderEvaluations;
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("orderNo", getOrderNo())
+            .append("sumMoney", getSumMoney())
+            .append("refund", getRefund())
+            .append("pictureUrl", getCustomer())
+            .append("pets", getPets())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 103 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunServiceOrderDetail.java

@@ -0,0 +1,103 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 服务订单详情对象 sun_service_order_detail
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_service_order_detail")
+public class SunServiceOrderDetail extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    @TableField("order_id")
+    private String orderId;
+
+    /** 服务名称 */
+    @Excel(name = "服务名称")
+    @TableField("name")
+    private String name;
+
+    /** 预约时间 */
+    @Excel(name = "预约时间")
+    @TableField("appointment")
+    private String appointment;
+
+    /** 价格 */
+    @Excel(name = "价格")
+    @TableField("price")
+    private Double price;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("orderId", getOrderId())
+            .append("name", getName())
+            .append("appointment", getAppointment())
+            .append("price", getPrice())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 125 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunStoredCard.java

@@ -0,0 +1,125 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 储值卡对象 sun_stored_card
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_stored_card")
+public class SunStoredCard extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    @TableField("name")
+    private String name;
+
+    /** 价格 */
+    @Excel(name = "价格")
+    @TableField("price")
+    private Double price;
+
+    /** 免费接送公里数 */
+    @Excel(name = "免费接送公里数")
+    @TableField("free_shuttle")
+    private String freeShuttle;
+
+    /** 优惠券 */
+    @Excel(name = "优惠券")
+    @TableField("coupon")
+    private String coupon;
+
+    /** 其他服务 */
+    @Excel(name = "其他服务")
+    @TableField("other")
+    private String other;
+
+    /** 图片路径 */
+    @Excel(name = "图片路径")
+    @TableField("picture_url")
+    private String pictureUrl;
+
+    /** 描述 */
+    @Excel(name = "描述")
+    @TableField("remark")
+    private String remark;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+    @TableField(exist = false)
+    private List<SunStoredDiscount> sunStoredDiscount;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("name", getName())
+            .append("price", getPrice())
+            .append("freeShuttle", getFreeShuttle())
+            .append("coupon", getCoupon())
+            .append("other", getOther())
+            .append("pictureUrl", getPictureUrl())
+            .append("remark", getRemark())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 103 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/sun/SunStoredDiscount.java

@@ -0,0 +1,103 @@
+package com.iotechn.unimall.data.domain.sun;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel;
+import com.iotechn.unimall.core.framework.aspectj.lang.annotaion.Excel.ColumnType;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.FieldFill;
+import com.iotechn.unimall.core.util.StringUtils;
+import java.util.Date;
+
+/**
+ * 储值卡关系对象 sun_stored_discount
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+@Data
+@TableName("sun_stored_discount")
+public class SunStoredDiscount extends BaseDO{
+    private static final long serialVersionUID = 1L;
+
+    /**  */
+    @TableId("id")
+    private Long id;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("company_id")
+    private Long companyId;
+
+    /** 储值卡id */
+    @Excel(name = "储值卡id")
+    @TableField("stored_id")
+    private Long storedId;
+
+    /** 服务品类key */
+    @Excel(name = "服务品类key")
+    @TableField("service_category_key")
+    private String serviceCategoryKey;
+
+    /** 服务品类 */
+    @Excel(name = "服务品类")
+    @TableField("service_category")
+    private String serviceCategory;
+
+    /** 折扣 */
+    @Excel(name = "折扣")
+    @TableField("discount")
+    private String discount;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    @TableField("status")
+    private String status;
+
+    /** 0:否(默认) 1:是 */
+    @Excel(name = "0:否", readConverterExp = "默=认")
+    @TableField("delete_flag")
+    private Integer deleteFlag;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**  */
+    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("gmt_update")
+    private Date gmtUpdate;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("user_id")
+    private Long userId;
+
+    /**  */
+    @Excel(name = "")
+    @TableField("admin_id")
+    private Long adminId;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyId", getCompanyId())
+            .append("storedId", getStoredId())
+            .append("serviceCategoryKey", getServiceCategoryKey())
+            .append("serviceCategory", getServiceCategory())
+            .append("discount", getDiscount())
+            .append("status", getStatus())
+            .append("deleteFlag", getDeleteFlag())
+            .append("gmtCreate", getGmtCreate())
+            .append("gmtUpdate", getGmtUpdate())
+            .append("userId", getUserId())
+            .append("adminId", getAdminId())
+            .toString();
+    }
+}

+ 4 - 1
unimall-data/src/main/java/com/iotechn/unimall/data/enums/BizType.java

@@ -5,7 +5,10 @@ package com.iotechn.unimall.data.enums;
  */
 public enum BizType {
     GOODS(1, "商品"),
-    COMMENT(2, "评价")
+    COMMENT(2, "评价"),
+    COMMODITY(3,"商品"),
+    CAR(4,"车辆"),
+    SERVICE(5,"服务")
     ;
 
     BizType(int code, String msg) {

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCarManagementMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunCarManagement;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 车辆信息Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunCarManagementMapper extends BaseMapper<SunCarManagement>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCommodityManagementMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunCommodityManagement;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 商品管理Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunCommodityManagementMapper extends BaseMapper<SunCommodityManagement>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderDetailMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunCommodityOrderDetail;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 商品详情Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunCommodityOrderDetailMapper extends BaseMapper<SunCommodityOrderDetail>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunCommodityOrder;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 商品订单Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunCommodityOrderMapper extends BaseMapper<SunCommodityOrder>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunCouponManagementMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunCouponManagement;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 优惠券Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunCouponManagementMapper extends BaseMapper<SunCouponManagement>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunGoodsServicesTypeMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunGoodsServicesType;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 服务商品分类Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunGoodsServicesTypeMapper extends BaseMapper<SunGoodsServicesType>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunMemberInfoMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunMemberInfo;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 用户信息Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunMemberInfoMapper extends BaseMapper<SunMemberInfo>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunOrderAddressMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunOrderAddress;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 订单客户收货地址Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+public interface SunOrderAddressMapper extends BaseMapper<SunOrderAddress>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunOrderEvaluationMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunOrderEvaluation;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 订单评价Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+public interface SunOrderEvaluationMapper extends BaseMapper<SunOrderEvaluation>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunReceivingAddressMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunReceivingAddress;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 客户收货地址 Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-26
+ */
+public interface SunReceivingAddressMapper extends BaseMapper<SunReceivingAddress>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunServiceManagementMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunServiceManagement;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 服务管理Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunServiceManagementMapper extends BaseMapper<SunServiceManagement>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunServiceOrderDetailMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunServiceOrderDetail;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 服务订单详情Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunServiceOrderDetailMapper extends BaseMapper<SunServiceOrderDetail>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunServiceOrderMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunServiceOrder;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 服务订单Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunServiceOrderMapper extends BaseMapper<SunServiceOrder>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunStoredCardMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunStoredCard;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 储值卡Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunStoredCardMapper extends BaseMapper<SunStoredCard>{
+
+}

+ 13 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/mapper/sun/SunStoredDiscountMapper.java

@@ -0,0 +1,13 @@
+package com.iotechn.unimall.data.mapper.sun;
+
+import com.iotechn.unimall.data.domain.sun.SunStoredDiscount;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+/**
+ * 储值卡关系Mapper接口
+ * 
+ * @author jlb
+ * @date 2022-05-24
+ */
+public interface SunStoredDiscountMapper extends BaseMapper<SunStoredDiscount>{
+
+}

+ 25 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCarManagementMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunCarManagementMapper">
+    
+    <resultMap type="SunCarManagement" id="SunCarManagementResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="name" column="name"/>
+      <result property="caiNo" column="cai_no"/>
+      <result property="driver" column="driver"/>
+      <result property="phone" column="phone"/>
+      <result property="pictureUrl" column="picture_url"/>
+      <result property="remark" column="remark"/>
+      <result property="status" column="status"/>
+      <result property="deleteFlag" column="delete_flag"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+    </resultMap>
+
+
+</mapper>

+ 26 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCommodityManagementMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunCommodityManagementMapper">
+    
+    <resultMap type="SunCommodityManagement" id="SunCommodityManagementResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="name" column="name"/>
+      <result property="category" column="category"/>
+      <result property="price" column="price"/>
+      <result property="priceMembership" column="price_membership"/>
+      <result property="pictureUrl" column="picture_url"/>
+      <result property="num" column="num"/>
+      <result property="remark" column="remark"/>
+      <result property="status" column="status"/>
+      <result property="deleteFlag" column="delete_flag"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+    </resultMap>
+
+
+</mapper>

+ 24 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderDetailMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunCommodityOrderDetailMapper">
+    
+    <resultMap type="SunCommodityOrderDetail" id="SunCommodityOrderDetailResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="orderId" column="order_id"/>
+      <result property="name" column="name"/>
+      <result property="price" column="price"/>
+      <result property="num" column="num"/>
+      <result property="amount" column="amount"/>
+      <result property="status" column="status"/>
+      <result property="deleteFlag" column="delete_flag"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+    </resultMap>
+
+
+</mapper>

+ 25 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCommodityOrderMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunCommodityOrderMapper">
+    
+    <resultMap type="SunCommodityOrder" id="SunCommodityOrderResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="orderNo" column="order_no"/>
+      <result property="sumMoney" column="sum_money"/>
+      <result property="refundAppl" column="refund_appl"/>
+      <result property="refund" column="refund"/>
+      <result property="pictureUrl" column="picture_url"/>
+      <result property="pets" column="pets"/>
+      <result property="status" column="status"/>
+      <result property="deleteFlag" column="delete_flag"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+    </resultMap>
+
+
+</mapper>

+ 34 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunCouponManagementMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunCouponManagementMapper">
+    
+    <resultMap type="SunCouponManagement" id="SunCouponManagementResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="name" column="name"/>
+      <result property="couponType" column="coupon_type"/>
+      <result property="distributionMethodKey" column="distribution_method_key"/>
+      <result property="distributionMethod" column="distribution_method"/>
+      <result property="num" column="num"/>
+      <result property="limitNum" column="limit_num"/>
+      <result property="fullMoney" column="full_money"/>
+      <result property="reduceMoney" column="reduce_money"/>
+      <result property="discount" column="discount"/>
+      <result property="termValidity" column="term_validity"/>
+      <result property="intervalStart" column="interval_start"/>
+      <result property="intervalEnd" column="interval_end"/>
+      <result property="effectiveDays" column="effective_days"/>
+      <result property="pictureUrl" column="picture_url"/>
+      <result property="remark" column="remark"/>
+      <result property="status" column="status"/>
+      <result property="deleteFlag" column="delete_flag"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+    </resultMap>
+
+
+</mapper>

+ 21 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunGoodsServicesTypeMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunGoodsServicesTypeMapper">
+    
+    <resultMap type="SunGoodsServicesType" id="SunGoodsServicesTypeResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="sunType" column="sun_type"/>
+      <result property="category" column="category"/>
+      <result property="status" column="status"/>
+      <result property="deleteFlag" column="delete_flag"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+    </resultMap>
+
+
+</mapper>

+ 27 - 0
unimall-data/src/main/resources/com/iotechn/unimall/data/mapper/sun/SunMemberInfoMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iotechn.unimall.data.mapper.sun.SunMemberInfoMapper">
+    
+    <resultMap type="SunMemberInfo" id="SunMemberInfoResult">
+      <result property="id" column="id"/>
+      <result property="companyId" column="company_id"/>
+      <result property="name" column="name"/>
+      <result property="phone" column="phone"/>
+      <result property="sex" column="sex"/>
+      <result property="stars" column="stars"/>
+      <result property="storedValueCard" column="stored_value_card"/>
+      <result property="cancellations" column="cancellations"/>
+      <result property="balance" column="balance"/>
+      <result property="remarks" column="remarks"/>
+      <result property="remark" column="remark"/>
+      <result property="gmtCreate" column="gmt_create"/>
+      <result property="gmtUpdate" column="gmt_update"/>
+      <result property="userId" column="user_id"/>
+      <result property="adminId" column="admin_id"/>
+      <result property="deleteFlag" column="delete_flag"/>
+    </resultMap>
+
+
+</mapper>

Some files were not shown because too many files changed in this diff