From f39fe1a419d2d83dc8b043ceca083ad6ff4f7e1b Mon Sep 17 00:00:00 2001 From: PQZ Date: Tue, 24 Sep 2024 13:30:27 +0800 Subject: [PATCH 01/13] 1 --- .../custom/controller/admin/CustomerCouponController.java | 3 --- .../custom/controller/admin/CustomerMainController.java | 1 - .../custom/service/impl/CustomerActiveServiceImpl.java | 1 + .../custom/service/impl/CustomerCouponServiceImpl.java | 6 +++--- .../yudao/module/custom/vo/CustomerActiveSaveReqVO.java | 2 ++ .../main/resources/mapper/custom/CustomerCouponMapper.xml | 1 + 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerCouponController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerCouponController.java index 70951a5d..cc1fe147 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerCouponController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerCouponController.java @@ -39,7 +39,6 @@ public class CustomerCouponController { **/ @PostMapping("/couponVerification") @Operation(summary = "核销用户卡券") - @PreAuthorize("@ss.hasPermission('base:customer-coupon:create')") public CommonResult createCustomerCoupon(@Valid @RequestBody CustomerCouponSaveReqVO saveReqVO) { customerCouponService.couponVerification(saveReqVO); return success(true); @@ -57,7 +56,6 @@ public class CustomerCouponController { @DeleteMapping("/delete") @Operation(summary = "删除用户卡券") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('base:customer-coupon:delete')") public CommonResult deleteCustomerCoupon(@RequestParam("id") String id) { customerCouponService.deleteCustomerCoupon(id); return success(true); @@ -74,7 +72,6 @@ public class CustomerCouponController { @GetMapping("/get") @Operation(summary = "获得用户卡券") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('base:customer-coupon:query')") public CommonResult getCustomerCoupon(@RequestParam("id") String id) { return success(customerCouponService.getCustomerCoupon(id)); } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java index 9cfdc8b9..b1c5ccc1 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java @@ -129,7 +129,6 @@ public class CustomerMainController { @GetMapping("/get") @Operation(summary = "获得客户管理") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('base:customer-main:query')") public CommonResult getCustomerMain(@RequestParam("id") String id) { return success(customerMainService.getCustomerById(id)); } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerActiveServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerActiveServiceImpl.java index a1994ab7..413cdd7b 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerActiveServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerActiveServiceImpl.java @@ -147,6 +147,7 @@ public class CustomerActiveServiceImpl extends ServiceImpl selectCoupon; } \ No newline at end of file diff --git a/dl-module-base/src/main/resources/mapper/custom/CustomerCouponMapper.xml b/dl-module-base/src/main/resources/mapper/custom/CustomerCouponMapper.xml index d35a7c11..da826a10 100644 --- a/dl-module-base/src/main/resources/mapper/custom/CustomerCouponMapper.xml +++ b/dl-module-base/src/main/resources/mapper/custom/CustomerCouponMapper.xml @@ -28,5 +28,6 @@ WHERE bcc.cus_id = #{cusId} AND bcc.deleted = 0 + AND bcc.is_valid = 1 \ No newline at end of file From e9b547fbcfdebea5d9a0ca046c48cc9609abca54 Mon Sep 17 00:00:00 2001 From: PQZ Date: Tue, 24 Sep 2024 15:12:38 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/RepairOrderInfoController.java | 16 ++++++++++++++++ .../order/service/RepairOrderInfoService.java | 8 +------- .../service/impl/RepairOrderInfoServiceImpl.java | 5 +---- .../mapper/order/RepairOrderInfoMapper.xml | 6 +++++- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java index 286ed727..3a84dad1 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/controller/admin/RepairOrderInfoController.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.order.entity.RepairOrderInfo; import cn.iocoder.yudao.module.order.service.RepairOrderInfoService; import cn.iocoder.yudao.module.order.vo.RepairOrderInfoPageReqVO; import cn.iocoder.yudao.module.order.vo.RepairOrderInfoRespVO; +import cn.iocoder.yudao.module.order.vo.RepairOrderInfoSaveReqVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; @@ -48,6 +49,21 @@ public class RepairOrderInfoController { return success(BeanUtils.toBean(orderInfo, RepairOrderInfoRespVO.class)); } + + + /** + * 更新订单信息 + * + * @param saveReqVO 订单信息 + */ + @PutMapping("/update") + @Operation(summary = "更新车辆信息") + @PreAuthorize("@ss.hasPermission('base:car-main:update')") + public CommonResult updateCarMain(@RequestBody RepairOrderInfoSaveReqVO saveReqVO) { + repairOrderInfoService.rechargeCallback(saveReqVO.getOrderNo()); + return success(true); + } + /** * 分页查询订单内容 * diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/RepairOrderInfoService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/RepairOrderInfoService.java index 2c895981..2a2e0649 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/RepairOrderInfoService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/RepairOrderInfoService.java @@ -61,13 +61,7 @@ public interface RepairOrderInfoService extends IService { **/ RepairOrderInfo getOrderByOrderNo(String orderNo); - /** - * 获得维修模块 订单分页 - * - * @param pageReqVO 分页查询 - * @return 维修模块 订单分页 - */ - PageResult getOrderInfoPage(RepairOrderInfoPageReqVO pageReqVO); + /** * 分页查询订单信息 diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/impl/RepairOrderInfoServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/impl/RepairOrderInfoServiceImpl.java index 42562e9c..96a27e59 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/impl/RepairOrderInfoServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/order/service/impl/RepairOrderInfoServiceImpl.java @@ -113,10 +113,6 @@ public class RepairOrderInfoServiceImpl extends ServiceImpl getOrderInfoPage(RepairOrderInfoPageReqVO pageReqVO) { - return null; - } /** * 分页查询订单信息 @@ -144,6 +140,7 @@ public class RepairOrderInfoServiceImpl extends ServiceImpl - and roi.goods_totle like concat('%', #{entity.goodsTitle}, '%') + and roi.goods_title like concat('%', #{entity.goodsTitle}, '%') and roi.goods_type = #{entity.goodsType} @@ -31,7 +31,11 @@ and roi.order_status = #{entity.orderStatus} + + and roi.pay_type = #{entity.payType} + + order by roi.create_time desc + + select main.* from base_customer_car car INNER JOIN base_car_main main on car.car_id = main.id + where car.cus_id = ( + select id from base_customer_main + where user_id = #{userId} + and deleted = 0 + ) and main.deleted = 0 + + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java index 8a987f6f..902d09ca 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataRespVO; import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO; @@ -101,4 +102,14 @@ public class DictDataController { ExcelUtils.write(response, "字典数据.xls", "数据", DictDataRespVO.class, BeanUtils.toBean(list, DictDataRespVO.class)); } + + @GetMapping("/type") + @Operation(summary = "根据字典类型查询字典数据信息") + @Parameter(name = "type", description = "字典类型", required = true, example = "common_status") + @TenantIgnore + public CommonResult> getDictDataListByType(@RequestParam("type") String type) { + List list = dictDataService.getDictDataList( + CommonStatusEnum.ENABLE.getStatus(), type); + return success(BeanUtils.toBean(list, AppDictDataRespVO.class)); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java index 8c4b97f6..a421f710 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.app.dict; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.system.controller.app.dict.vo.AppDictDataRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO; import cn.iocoder.yudao.module.system.service.dict.DictDataService; @@ -32,6 +33,7 @@ public class AppDictDataController { @GetMapping("/type") @Operation(summary = "根据字典类型查询字典数据信息") @Parameter(name = "type", description = "字典类型", required = true, example = "common_status") + @TenantIgnore public CommonResult> getDictDataListByType(@RequestParam("type") String type) { List list = dictDataService.getDictDataList( CommonStatusEnum.ENABLE.getStatus(), type); diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index ff6900d0..de144cf1 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -67,6 +67,7 @@ flowable: # MyBatis Plus 的配置项 mybatis-plus: configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: @@ -278,6 +279,7 @@ yudao: - /admin-api/rescue/loginJcApp - /admin-api/system/tenant/getListByWebsite - /admin-api/websocket/** + - /admin-api/system/dict-data/type ignore-tables: - system_tenant - system_tenant_package From 491e3d9e6e28d92106d15d9c8d36cadf27059b8c Mon Sep 17 00:00:00 2001 From: zhaotianfeng <12345678> Date: Tue, 24 Sep 2024 17:16:21 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=8B=A6=E6=88=AA=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-server/src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index e4838938..3b521af0 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -278,7 +278,7 @@ yudao: - /admin-api/rescue/loginJcApp - /admin-api/system/tenant/getListByWebsite - /admin-api/websocket/** - - /userClient/pay/** + - /admin-api/system/dict-data/type ignore-tables: - system_tenant - system_tenant_package From 4ddb4d34dd7088e0f24bea253890895369fa7645 Mon Sep 17 00:00:00 2001 From: PQZ Date: Tue, 24 Sep 2024 17:17:18 +0800 Subject: [PATCH 06/13] 1 --- .../app/customer/admin/CustomerMainAPI.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java new file mode 100644 index 00000000..4aeed257 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.app.customer.admin; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 用于查看需要查dl_base_type的地方 + * 如维修预约需要选服务 + * + * @author 小李 + * @date 14:21 2024/9/23 +**/ +@RestController +@RequestMapping("/api/base/type") +public class CustomerMainAPI { + + +} From aeae65bc6d238a4a493e0b821b97901ae11de1a9 Mon Sep 17 00:00:00 2001 From: PQZ Date: Tue, 24 Sep 2024 18:05:37 +0800 Subject: [PATCH 07/13] 1 --- .../app/customer/admin/CustomerMainAPI.java | 18 ------- .../app/customer/admin/CustomerMainApi.java | 50 +++++++++++++++++++ .../custom/service/CustomerMainService.java | 10 ++++ .../service/impl/CustomerMainServiceImpl.java | 18 +++++++ 4 files changed, 78 insertions(+), 18 deletions(-) delete mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java deleted file mode 100644 index 4aeed257..00000000 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainAPI.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.app.customer.admin; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 用于查看需要查dl_base_type的地方 - * 如维修预约需要选服务 - * - * @author 小李 - * @date 14:21 2024/9/23 -**/ -@RestController -@RequestMapping("/api/base/type") -public class CustomerMainAPI { - - -} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java new file mode 100644 index 00000000..37d9e98c --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.app.customer.admin; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.conf.entity.BaseType; +import cn.iocoder.yudao.module.custom.entity.CustomerMain; +import cn.iocoder.yudao.module.custom.service.CustomerMainService; +import cn.iocoder.yudao.module.custom.vo.CustomerMainRespVO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * 用于查看需要查dl_base_type的地方 + * 如维修预约需要选服务 + * + * @author 小李 + * @date 14:21 2024/9/23 +**/ +@RestController +@RequestMapping("/api/base/type") +public class CustomerMainApi { + + @Resource + private CustomerMainService customerMainService; + + /** + * 查询当前登录客户信息 + * @author PQZ + * @date 17:24 2024/9/24 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/get") + @Operation(summary = "获得客户管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getCustomerMain() { + return success(customerMainService.getUserCustomer()); + } + +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java index 0280ebff..a663a264 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java @@ -50,6 +50,16 @@ public interface CustomerMainService extends IService { **/ CustomerMainRespVO getCustomerById(String id); + /** + * 获取当前登录用户的客户信息 + * @author PQZ + * @date 17:27 2024/9/24 + * @return cn.iocoder.yudao.module.custom.vo.CustomerMainRespVO + **/ + CustomerMainRespVO getUserCustomer(); + + + /** * 根据经办人所属企业查询经办人信息 * diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java index e2ae719d..4721df21 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java @@ -6,6 +6,8 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.custom.entity.CustomerCar; import cn.iocoder.yudao.module.custom.entity.CustomerItem; import cn.iocoder.yudao.module.custom.entity.CustomerMain; @@ -190,6 +192,22 @@ public class CustomerMainServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CustomerMain::getUserId,loginUser.getId()).eq(BaseDO::getDeleted,'0'); + CustomerMain customerMain = getOne(lambdaQueryWrapper); + return getCustomerById(customerMain.getId()); + } + /** * 根据经办人所属企业查询经办人信息 * From 0a2d105eb1651abade6d793d2154469d9f036eb6 Mon Sep 17 00:00:00 2001 From: PQZ Date: Tue, 24 Sep 2024 18:18:00 +0800 Subject: [PATCH 08/13] 1 --- .../app/customer/admin/CustomerMainApi.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java index 37d9e98c..c44359a5 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/admin/CustomerMainApi.java @@ -21,14 +21,12 @@ import javax.annotation.Resource; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** - * 用于查看需要查dl_base_type的地方 - * 如维修预约需要选服务 - * - * @author 小李 - * @date 14:21 2024/9/23 + * 客户管理API + * @author PQZ + * @date 18:17 2024/9/24 **/ @RestController -@RequestMapping("/api/base/type") +@RequestMapping("/userClient/customer") public class CustomerMainApi { @Resource @@ -40,10 +38,9 @@ public class CustomerMainApi { * @date 17:24 2024/9/24 * @return cn.iocoder.yudao.framework.common.pojo.CommonResult **/ - @GetMapping("/get") - @Operation(summary = "获得客户管理") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - public CommonResult getCustomerMain() { + @GetMapping("/getUserCustomer") + @Operation(summary = "获取当前登录用户的客户信息") + public CommonResult getUserCustomer() { return success(customerMainService.getUserCustomer()); } From dd0630ad454e41dc510ff5d9465a7cab7ea5e77a Mon Sep 17 00:00:00 2001 From: Vinjor Date: Tue, 24 Sep 2024 18:35:51 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dl-module-base/pom.xml | 5 + .../iocoder/yudao/common/BaseConstants.java | 10 +- .../cn/iocoder/yudao/common/WechatCommon.java | 27 +++ .../module/app/customer/CustomerAPI.java | 67 ++++++ .../controller/WechatLoginController.java | 40 ++++ .../app/wechat/service/WechatService.java | 17 ++ .../service/impl/WechatServiceImpl.java | 91 +++++++ .../admin/CustomerMainController.java | 21 -- .../custom/service/CustomerMainService.java | 3 +- .../service/impl/CustomerMainServiceImpl.java | 30 ++- .../custom/vo/CustomerMainSaveReqVO.java | 4 +- .../cn/iocoder/yudao/util/NetWorkHelper.java | 222 ++++++++++++++++++ .../iocoder/yudao/util/WeChatLoginUtil.java | 39 +++ .../YudaoWebSecurityConfigurerAdapter.java | 1 + .../module/system/api/user/AdminUserApi.java | 18 ++ .../system/api/user/dto/AdminUserRespDTO.java | 4 + .../module/system/api/user/dto/UserDTO.java | 4 + .../system/api/user/AdminUserApiImpl.java | 28 +++ .../system/dal/mysql/dept/DeptMapper.java | 3 + .../dal/mysql/user/AdminUserMapper.java | 2 + .../system/service/auth/AdminAuthService.java | 10 + .../service/auth/AdminAuthServiceImpl.java | 15 ++ .../system/service/dept/DeptServiceImpl.java | 4 +- .../oauth2/OAuth2TokenServiceImpl.java | 1 + .../system/service/user/AdminUserService.java | 18 ++ .../service/user/AdminUserServiceImpl.java | 32 +++ .../src/main/resources/mapper/DeptMapper.xml | 10 + .../main/resources/mapper/SysUserMapper.xml | 5 +- .../src/main/resources/application-local.yaml | 10 +- .../src/main/resources/application.yaml | 2 + 30 files changed, 705 insertions(+), 38 deletions(-) create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/common/WechatCommon.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/CustomerAPI.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/WechatService.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/impl/WechatServiceImpl.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/util/NetWorkHelper.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/util/WeChatLoginUtil.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/DeptMapper.xml diff --git a/dl-module-base/pom.xml b/dl-module-base/pom.xml index 49b21e0f..f373003a 100644 --- a/dl-module-base/pom.xml +++ b/dl-module-base/pom.xml @@ -15,6 +15,11 @@ 点亮业务基础库 + + cn.iocoder.boot + yudao-module-system-biz + ${revision} + cn.iocoder.boot yudao-module-system-api diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java b/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java index 60b04b6b..763140e8 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java @@ -9,6 +9,10 @@ public class BaseConstants { public static final String CUS_TYPE_CORP_ATTN = "04"; /**政企客户*/ public static final String CUS_TYPE_CORP = "03"; + /**私人客户*/ + public static final String CUS_TYPE_PRIVATE = "01"; + /**代办客户*/ + public static final String CUS_TYPE_AGENT = "02"; /**客户标识*/ public static final String CUS_SIGN_CUSTOMER = "customer"; /**车辆标识*/ @@ -23,8 +27,12 @@ public class BaseConstants { public static final String SIGN_UPDATE = "update"; /**默认密码*/ public static final String PASSWORD_DEFAULT = "123456"; - /**租户下部门名称*/ + /**租户下部门名称--政企客户*/ public static final String DEPT_NAME_CORP_NAME = "政企客户"; + /**租户下部门名称--私人客户*/ + public static final String DEPT_NAME_PRIVATE_NAME = "私人客户"; + /**租户下部门名称--代办客户*/ + public static final String DEPT_NAME_AGENT_NAME = "代办客户"; /**私家车*/ public static final String CAR_CATEGORY_PRIVATE = "01"; /**货车*/ diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/common/WechatCommon.java b/dl-module-base/src/main/java/cn/iocoder/yudao/common/WechatCommon.java new file mode 100644 index 00000000..dcdf51c0 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/common/WechatCommon.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.common; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class WechatCommon { + /** + * 微信公众号APPID + */ + @Value(value = "${wx.mp.app-id}") + public String APP_ID; + /** + * 微信公众号秘钥 + */ + @Value(value = "${wx.mp.secret}") + public String APP_SECRET; + + /** + * 获取网页的token,后续还有+"&code=&grant_type=authorization_code" + **/ + public String getTokeUrl(){ + String appId = APP_ID; + String appSecret = APP_SECRET; + return "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + appSecret; + } +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/CustomerAPI.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/CustomerAPI.java new file mode 100644 index 00000000..ac651765 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/customer/CustomerAPI.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.app.customer; + +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.custom.service.CustomerMainService; +import cn.iocoder.yudao.module.custom.vo.CustomerMainSaveReqVO; +import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; +import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import static cn.iocoder.yudao.common.BaseConstants.SIGN_CREATE; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * 客户管理 + * + * @author : http://www.chiner.pro + * @date : 2024-7-31 + */ +@RestController +@RequestMapping("/base/custom-app") +@Tag(name = "客户管理-小程序端接口") +@Validated +public class CustomerAPI { + @Resource + private CustomerMainService customerMainService; + @Resource + private AdminAuthService loginService; + + /** + * 新增客户 + * + * @param saveReqVO 保存客户信息扩展实体 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + * @author PQZ + * @date 15:42 2024/8/1 + **/ + @PostMapping("/register") + @Operation(summary = "客户自行注册") + public CommonResult createCustomerMain(@Valid @RequestBody CustomerMainSaveReqVO saveReqVO, HttpServletRequest request) { + //客户类型,统一为私人客户 + saveReqVO.setTypeCode("01"); + //客户来源,统一为04-维修 + saveReqVO.setDataFrom("04"); + //注册方式,统一为自主创建 + saveReqVO.setInviterType("01"); + try { + UserDTO userDTO = customerMainService.saveCustomer(saveReqVO,SIGN_CREATE); + //注册并登录 + return success(loginService.wxLoginByUserId(userDTO.getId(),userDTO.getUsername())); + }catch (ServiceException e){ + return error(e); + } + } +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java new file mode 100644 index 00000000..26535eaf --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.app.wechat.controller; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.app.wechat.service.WechatService; +import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 微信登录控制层 + * + */ +@RestController +@RequestMapping("/userClient/weChat") +@Tag(name = "微信登录") +@Validated +public class WechatLoginController { + @Autowired + private WechatService wechatService; + + /** + * 微信获取openId + * @author vinjor-M + * @date 9:53 2024/8/2 + * @param code 请求参数 + **/ + @GetMapping("/wechatLogin") + @Operation(summary = "微信获取openId") + public CommonResult createCompany(String code) { + return wechatService.loginByOpenId(code); + } + +} \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/WechatService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/WechatService.java new file mode 100644 index 00000000..d08add78 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/WechatService.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.app.wechat.service; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; + +/** + * @author vinjor-m + * @description 微信模块服务层 + **/ +public interface WechatService { + /** + * 微信自动登录 + * @author vinjor-M + * @date 23:53 2024/9/23 + * @param map 参数 + **/ + CommonResult loginByOpenId(String code); +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/impl/WechatServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/impl/WechatServiceImpl.java new file mode 100644 index 00000000..3cc6460a --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/service/impl/WechatServiceImpl.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.app.wechat.service.impl; + +import cn.hutool.json.JSONObject; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.app.wechat.service.WechatService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginReqVO; +import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; +import cn.iocoder.yudao.util.WeChatLoginUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.LOCKED; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * @Author vinjor-m + * @Description 微信模块服务层 + **/ +@Service +public class WechatServiceImpl implements WechatService { + @Autowired + private WeChatLoginUtil weChatLoginUtil; + @Autowired + private AdminUserApi adminUserApi; + @Resource + private AdminAuthService loginService; + /** + * 微信自动登录 + * + * @param code 参数 + * @return java.lang.String + * @author vinjor-M + * @date 23:53 2024/9/23 + **/ + @Override + public CommonResult loginByOpenId(String code) { + try { + //当前登录用户的openId + Map authMap = getWeChatOpenId(code); + String openId = authMap.getOrDefault("openId",null); + //默认租户180,查是否有user表数据 + AdminUserRespDTO userRespDTO = adminUserApi.getUserByOpenId(openId,null); + if(null==userRespDTO){ + //未找到用户,去注册 + return CommonResult.success(openId); + }else{ + //找到用户,登录并返回 + return success(loginService.wxLoginByUserId(userRespDTO.getId(),userRespDTO.getUsername())); + } + }catch (Exception e){ + e.printStackTrace(); + return CommonResult.error(LOCKED.getCode(),e.getMessage()); + } + } + + /** + * 获取openId + * @author vinjor-M + * @date 23:56 2024/9/23 + * @param code (静默/非静默)授权拿到的code + * @return java.util.Map + **/ + private Map getWeChatOpenId(String code) throws Exception { + Map rtnMap = new HashMap<>(2); + try { + //code为空为没有获取到code + if (StringUtils.isNotBlank(code)) { + JSONObject tokenJson = weChatLoginUtil.getTokenJson(code); + //获取到tokenJson后,解析tokenJson获取其openId + if (null != tokenJson && tokenJson.containsKey("openid")) { + rtnMap.put("openId",tokenJson.getStr("openid")); + rtnMap.put("token",tokenJson.getStr("access_token")); + }else{ + throw new Exception("code过期"); + } + }else{ + throw new Exception("没有code"); + } + return rtnMap; + } catch (Exception e) { + throw new Exception(e.getMessage()); + } + } +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java index 9cfdc8b9..a55afc83 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CustomerMainController.java @@ -180,26 +180,5 @@ public class CustomerMainController { return success(true); } - /** - * 小程序客户注册 - * cusName,phoneNumber,birthday,sex,inviter - */ - @PostMapping("/addUniUser") - public CommonResult addUniUser(@Valid @RequestBody CustomerMainSaveReqVO saveReqVO) { - if(!saveReqVO.getCode().isEmpty()){ - String code = saveReqVO.getCode(); - JSONObject jsonObj = new JSONObject(); - String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=" - +code+"&grant_type=authorization_code"; - String response = HttpRequest.get(url).execute().body(); - JSONObject json = JSONUtil.parseObj(response); - if (json.containsKey("access_token") && json.containsKey("openid")) { - String accessToken = json.getStr("access_token"); - String openid = json.getStr("openid"); - } - - } - return null; - } } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java index 0280ebff..f90b9c95 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.custom.entity.CustomerMain; import cn.iocoder.yudao.module.custom.vo.CustomerMainPageReqVO; import cn.iocoder.yudao.module.custom.vo.CustomerMainRespVO; import cn.iocoder.yudao.module.custom.vo.CustomerMainSaveReqVO; +import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -38,7 +39,7 @@ public interface CustomerMainService extends IService { * @author PQZ * @date 15:46 2024/8/1 **/ - void saveCustomer(CustomerMainSaveReqVO saveReqVO, String sign); + UserDTO saveCustomer(CustomerMainSaveReqVO saveReqVO, String sign); /** * 根据客户id查询客户信息 diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java index e2ae719d..0f417167 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java @@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -98,12 +99,12 @@ public class CustomerMainServiceImpl extends ServiceImpl labelList; /** - * Code + * 微信openId */ - private String Code; + private String openId; } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/util/NetWorkHelper.java b/dl-module-base/src/main/java/cn/iocoder/yudao/util/NetWorkHelper.java new file mode 100644 index 00000000..e5720b8d --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/util/NetWorkHelper.java @@ -0,0 +1,222 @@ +package cn.iocoder.yudao.util; + +import javax.net.ssl.*; +import java.io.*; +import java.net.URL; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + + +public class NetWorkHelper { + + public String getHttpsResponse(String hsUrl, String requestMethod) { + URL url; + InputStream is = null; + String resultData = ""; + try { + url = new URL(hsUrl); + HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); + TrustManager[] tm = {xtm}; + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(null, tm, null); + + con.setSSLSocketFactory(ctx.getSocketFactory()); + con.setHostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String arg0, SSLSession arg1) { + return true; + } + }); + + + con.setDoInput(true); //允许输入流,即允许下载 + + //在android中必须将此项设置为false + con.setDoOutput(false); //允许输出流,即允许上传 + con.setUseCaches(false); //不使用缓冲 + if(null!=requestMethod && !requestMethod.equals("")) { + con.setRequestMethod(requestMethod); //使用指定的方式 + } + else{ + con.setRequestMethod("GET"); //使用get请求 + } + is = con.getInputStream(); //获取输入流,此时才真正建立链接 + InputStreamReader isr = new InputStreamReader(is); + BufferedReader bufferReader = new BufferedReader(isr); + String inputLine = ""; + while ((inputLine = bufferReader.readLine()) != null) { + resultData += inputLine + "\n"; + } + + Certificate[] certs = con.getServerCertificates(); + + int certNum = 1; + + for (Certificate cert : certs) { + X509Certificate xcert = (X509Certificate) cert; + } + + } catch (Exception e) { + e.printStackTrace(); + } + return resultData; + } + + + /** + * 下载文件 + * @param hsUrl + * @return + */ + public String DownLoadHttpsFile(String hsUrl, String fileName, String path) { + URL url; + InputStream is = null; + String filePath = path+fileName; + try { + url = new URL(hsUrl); + HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); + TrustManager[] tm = {xtm}; + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(null, tm, null); + + con.setSSLSocketFactory(ctx.getSocketFactory()); + con.setHostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String arg0, SSLSession arg1) { + return true; + } + }); + + + con.setDoInput(true); //允许输入流,即允许下载 + + //在android中必须将此项设置为false + con.setDoOutput(false); //允许输出流,即允许上传 + con.setUseCaches(false); //不使用缓冲 + con.setRequestMethod("GET"); //使用get请求 + is = con.getInputStream(); //获取输入流,此时才真正建立链接 + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while( (len=is.read(buffer)) != -1 ){ + outStream.write(buffer, 0, len); + } + is.close(); + byte[] fileBytes = outStream.toByteArray(); + + File file = new File(filePath); + FileOutputStream fops = new FileOutputStream(file); + fops.write(fileBytes); + fops.flush(); + fops.close(); + /* Certificate[] certs = con.getServerCertificates(); + for (Certificate cert : certs) { + X509Certificate xcert = (X509Certificate) cert; + }*/ + + } catch (Exception e) { + e.printStackTrace(); + } + return filePath; + } + + /** + * HTTPS协议的POST请求 + * @param hsUrl 请求地址 + * @param json 请求数据 + * @return + */ + public String PostHttpsResponse(String hsUrl, String json) { + URL url; + InputStream is = null; + String resultData = ""; + try { + url = new URL(hsUrl); + HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); + TrustManager[] tm = {xtm}; + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(null, tm, null); + + con.setSSLSocketFactory(ctx.getSocketFactory()); + con.setHostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String arg0, SSLSession arg1) { + return true; + } + }); + + + con.setDoInput(true); //允许输入流,即允许下载 + + //在android中必须将此项设置为false + con.setDoOutput(true); //允许输出流,即允许上传 + con.setUseCaches(false); //不使用缓冲 + con.setRequestMethod("POST"); //使用get请求 + + //表单数据 + if (null != json) { + OutputStream outputStream = con.getOutputStream(); + outputStream.write(json.getBytes("UTF-8")); + outputStream.close(); + } + + + is = con.getInputStream(); //获取输入流,此时才真正建立链接 + InputStreamReader isr = new InputStreamReader(is); + BufferedReader bufferReader = new BufferedReader(isr); + String inputLine = ""; + while ((inputLine = bufferReader.readLine()) != null) { + resultData += inputLine + "\n"; + } + /* log(con.getResponseCode()); + log(con.getCipherSuite()); + log("");*/ + Certificate[] certs = con.getServerCertificates(); + + int certNum = 1; + + for (Certificate cert : certs) { + X509Certificate xcert = (X509Certificate) cert; + /*log("Cert No. " + certNum++); + log(xcert.getType()); + log(xcert.getPublicKey().getAlgorithm()); + log(xcert.getIssuerDN()); + log(xcert.getIssuerDN()); + log(xcert.getNotAfter()); + log(xcert.getNotBefore()); + log("");*/ + } + + } catch (Exception e) { + e.printStackTrace(); + } + return resultData; + } + + X509TrustManager xtm = new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void checkServerTrusted(X509Certificate[] arg0, String arg1) + throws CertificateException { + // TODO Auto-generated method stub + + } + + @Override + public void checkClientTrusted(X509Certificate[] arg0, String arg1) + throws CertificateException { + // TODO Auto-generated method stub + + } + }; +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/util/WeChatLoginUtil.java b/dl-module-base/src/main/java/cn/iocoder/yudao/util/WeChatLoginUtil.java new file mode 100644 index 00000000..87c14400 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/util/WeChatLoginUtil.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.util; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.common.WechatCommon; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import java.util.Map; + + +/** + * @Author vinjor-m + * @Description 微信模块工具类 + **/ +@Component +public class WeChatLoginUtil { + @Autowired + private WechatCommon wechatCommon; + + /** + * @param code 授权后拿到的code + * @return net.sf.json.JSONObject + * ---modify history--- + * Modify By Date Description + * @Author PQZ + * @Description 获取网页的token + * @Date 17:12 2021/1/26 + **/ + public JSONObject getTokenJson(String code) { + //请求获取网页的token + String url = wechatCommon.getTokeUrl() + "&code=" + code + "&grant_type=authorization_code"; + NetWorkHelper helper = new NetWorkHelper(); + String response = helper.getHttpsResponse(url, ""); + return JSONUtil.parseObj(response); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index beb47d3a..547aa114 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -146,6 +146,7 @@ public class YudaoWebSecurityConfigurerAdapter { // 微信支付接口 .antMatchers("/admin-api/notify/**").permitAll() .antMatchers("/userClient/pay/**").permitAll() + .antMatchers("/userClient/weChat/**").permitAll() .antMatchers("/admin-api/websocket/**").permitAll() // 小程序首页 .antMatchers("/admin-api/system/notice/listWx","/admin-api/system/swiper/listWx","/admin-api/system/shopconfig/listWx").permitAll() diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java index 0a29eaf6..bb12285e 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApi.java @@ -41,6 +41,16 @@ public interface AdminUserApi { */ AdminUserRespDTO getUser(Long id); + /** + * 根据openid和租户id查询用户 + * @author vinjor-M + * @date 11:29 2024/9/24 + * @param openId 微信id + * @param tenantId 租户id,可能为null + * @return cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO + **/ + AdminUserRespDTO getUserByOpenId(String openId,String tenantId); + /** * 通过用户 登录账户 查询用户 * @@ -137,5 +147,13 @@ public interface AdminUserApi { */ AdminUserRespDTO getUserByMobile(String mobile); + /** + * 设置用户openId + * @author vinjor-M + * @date 15:45 2024/9/24 + * @param userId 用户id + * @param openId 微信id + **/ + void setOpenId(Long userId,String openId); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java index 39233952..8066577c 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/AdminUserRespDTO.java @@ -18,6 +18,10 @@ public class AdminUserRespDTO { * 用户ID */ private Long id; + /** + * 用户登录账号 + */ + private String username; /** * 用户昵称 */ diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/UserDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/UserDTO.java index e49a6193..72414253 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/UserDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/user/dto/UserDTO.java @@ -47,5 +47,9 @@ public class UserDTO { * 用户性别 **/ private String sex; + /** + * 用户openId + **/ + private String openId; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java index caea71ec..a7bf43c0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java @@ -64,6 +64,21 @@ public class AdminUserApiImpl implements AdminUserApi { return BeanUtils.toBean(user, AdminUserRespDTO.class); } + /** + * 根据openid和租户id查询用户 + * + * @param openId 微信id + * @param tenantId 租户id,可能为null + * @return cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO + * @author vinjor-M + * @date 11:29 2024/9/24 + **/ + @Override + public AdminUserRespDTO getUserByOpenId(String openId, String tenantId) { + AdminUserDO user = userService.selectUserByOpenId(openId,tenantId); + return BeanUtils.toBean(user, AdminUserRespDTO.class); + } + /** * 通过用户 登录账户 查询用户 * @@ -153,4 +168,17 @@ public class AdminUserApiImpl implements AdminUserApi { return BeanUtils.toBean(user, AdminUserRespDTO.class); } + /** + * 设置用户openId + * + * @param userId 用户id + * @param openId 微信id + * @author vinjor-M + * @date 15:45 2024/9/24 + **/ + @Override + public void setOpenId(Long userId, String openId) { + userService.setOpenId(userId, openId); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java index 2aa68e32..d0fe80e7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; @@ -41,4 +42,6 @@ public interface DeptMapper extends BaseMapperX { default DeptDO selectTenantDeptTop(Long parentId, Long tenantId) { return selectOne(DeptDO::getParentId, parentId, DeptDO::getTenantId, tenantId); } + + List selectDeptByName(@Param("name")String name); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java index a7311bf0..8108a7ed 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java @@ -57,4 +57,6 @@ public interface AdminUserMapper extends BaseMapperX { AdminUserDO selectUserByPhone(String phone); AdminUserDO getUserByMobileWithoutTenant(String phoneNumber); + + int updateSetOpenId(@Param("userId")Long userId,@Param("openId")String openId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index e6498cc1..29ca03e1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -75,4 +75,14 @@ public interface AdminAuthService { AuthLoginRespVO wxLoginRescue(String decryptResult, String openId, Long inviteId); AuthLoginRespVO wxLoginJc(String decryptResult, String openId, Long inviteId); + + /** + * 根据用户id自动登录 + * @author vinjor-M + * @date 12:17 2024/9/24 + * @param userId 用户id + * @param userName 用户名称 + * @return cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO + **/ + AuthLoginRespVO wxLoginByUserId(Long userId,String userName); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index 6b8a1a53..ac6f73de 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -439,4 +439,19 @@ public class AdminAuthServiceImpl implements AdminAuthService { // 生成token return createTokenAfterLoginSuccess(wxUser.getId(), wxUser.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); } + + /** + * 根据用户id自动登录 + * + * @param userId 用户id + * @param userName 用户名称 + * @return cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO + * @author vinjor-M + * @date 12:17 2024/9/24 + **/ + @Override + public AuthLoginRespVO wxLoginByUserId(Long userId, String userName) { + // 生成token + return createTokenAfterLoginSuccess(userId, userName, LoginLogTypeEnum.LOGIN_USERNAME); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index b894a796..736e12e2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqV import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -244,7 +245,8 @@ public class DeptServiceImpl implements DeptService { **/ @Override public DeptDO selectDeptByName(String name) { - return deptMapper.selectByDeptName(name); + List list = deptMapper.selectDeptByName(name); + return list.size()>0?list.get(0):new DeptDO(); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java index 3853347c..7c947cc0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2AccessTokenMapper; import cn.iocoder.yudao.module.system.dal.mysql.oauth2.OAuth2RefreshTokenMapper; import cn.iocoder.yudao.module.system.dal.redis.oauth2.OAuth2AccessTokenRedisDAO; import cn.iocoder.yudao.module.system.service.user.AdminUserService; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index ec78e30f..73e370f8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -219,4 +219,22 @@ public interface AdminUserService { AdminUserDO selectUserByPhone(String phone); AdminUserDO getUserByMobileWithoutTenant(String phoneNumber); + + /** + * 根据openid和租户id查询用户 + * @author vinjor-M + * @date 11:29 2024/9/24 + * @param openId 微信id + * @param tenantId 租户id,可能为null + **/ + AdminUserDO selectUserByOpenId(String openId,String tenantId); + /** + * 设置用户openId + * + * @param userId 用户id + * @param openId 微信id + * @author vinjor-M + * @date 15:45 2024/9/24 + **/ + void setOpenId(Long userId,String openId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 529c16a7..15ade9ba 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -28,6 +28,7 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.annotations.VisibleForTesting; import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; @@ -530,6 +531,37 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.getUserByMobileWithoutTenant(phoneNumber); } + /** + * 根据openid和租户id查询用户 + * + * @param openId 微信id + * @param tenantId 租户id,可能为null + * @author vinjor-M + * @date 11:29 2024/9/24 + **/ + @Override + public AdminUserDO selectUserByOpenId(String openId, String tenantId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(AdminUserDO::getOpenId,openId); + if(StringUtils.isNotEmpty(tenantId)){ + queryWrapper.eq(AdminUserDO::getTenantId,tenantId); + } + return userMapper.selectOne(queryWrapper); + } + + /** + * 设置用户openId + * + * @param userId 用户id + * @param openId 微信id + * @author vinjor-M + * @date 15:45 2024/9/24 + **/ + @Override + public void setOpenId(Long userId, String openId) { + userMapper.updateSetOpenId(userId,openId); + } + /** * 对密码进行加密 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/DeptMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/DeptMapper.xml new file mode 100644 index 00000000..2b6b70c9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/DeptMapper.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml index ed069135..9bc0a9cb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml @@ -3,8 +3,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + UPDATE system_users SET open_id = #{openId} WHERE id = #{userId} + - SELECT distinct su.* FROM diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index c42fd801..b29532e3 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -185,12 +185,10 @@ debug: false --- #################### 微信公众号、小程序相关配置 #################### wx: mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 -# app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) -# secret: 5abee519483bc9f8cb37ce280e814bd0 - app-id: wx5b23ba7a5589ecbb # 测试号(自己的) - secret: 2a7b3b20c537e52e74afd395eb85f61f -# app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) -# secret: bd4f9fab889591b62aeac0d7b8d8b4a0 +# app-id: wx8653afe16dffec37 # 蓝安 +# secret: ab94673dd0cca78abd0a453d0aac9f98 + app-id: wxb1f71e5e0c5f9ee7 # 点亮 + secret: 2e9864a6b224feb6fba4ab73b70212cd # 存储配置,解决 AccessToken 的跨节点的共享 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index cee7bbe6..6fc8e49d 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -223,6 +223,7 @@ yudao: - /admin-api/system/config/configKey/** - /websocket/** - /userClient/pay/** + - /userClient/weChat/** - /admin-api/websocket/** - /admin-api/rescue/wxLoginRescue - /admin-api/rescue/wxLoginJc @@ -281,6 +282,7 @@ yudao: - /admin-api/system/tenant/getListByWebsite - /admin-api/websocket/** - /userClient/pay/** + - /userClient/weChat/** ignore-tables: - system_tenant - system_tenant_package From 5429922982baaf6c19a2260c5e908836e3354867 Mon Sep 17 00:00:00 2001 From: Vinjor Date: Tue, 24 Sep 2024 19:41:52 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WechatLoginController.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java index 26535eaf..350f77e1 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/wechat/controller/WechatLoginController.java @@ -2,16 +2,20 @@ package cn.iocoder.yudao.module.app.wechat.controller; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.app.wechat.service.WechatService; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO; import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.annotation.security.PermitAll; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** * 微信登录控制层 @@ -24,6 +28,8 @@ import javax.annotation.Resource; public class WechatLoginController { @Autowired private WechatService wechatService; + @Resource + private AdminAuthService authService; /** * 微信获取openId @@ -37,4 +43,10 @@ public class WechatLoginController { return wechatService.loginByOpenId(code); } + @PostMapping("/login") + @PermitAll + @Operation(summary = "使用账号密码登录") + public CommonResult login(@RequestBody @Valid AuthLoginReqVO reqVO) { + return success(authService.login(reqVO)); + } } \ No newline at end of file From 2d111bd7b1c95f1d8ec1ec3c28ed6c2d2f8eb5b6 Mon Sep 17 00:00:00 2001 From: zhaotianfeng <12345678> Date: Tue, 24 Sep 2024 19:50:08 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=BD=A6=E8=BE=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../car/controller/AppCarBrandController.java | 32 ++++++++++++ .../car/controller/AppCarMainController.java | 5 +- .../car/controller/AppCarModelController.java | 52 ------------------- .../module/app/car/entity/AppCarMain.java | 6 +-- .../app/car/mapper/AppCarMainMapper.java | 3 +- .../app/car/service/AppCarMainService.java | 3 +- .../service/impl/AppCarMainServiceImpl.java | 5 +- .../module/app/car/vo/AppCarMainResVo.java | 13 +++++ 8 files changed, 56 insertions(+), 63 deletions(-) create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarBrandController.java delete mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarModelController.java create mode 100644 dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/vo/AppCarMainResVo.java diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarBrandController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarBrandController.java new file mode 100644 index 00000000..31c42fa7 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarBrandController.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.app.car.controller; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.custom.entity.CarBrand; +import cn.iocoder.yudao.module.custom.service.CarBrandService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import java.util.List; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "小程序 - 车辆品牌维护") +@RestController +@RequestMapping("/userClient/base/carBrand") +@Validated +public class AppCarBrandController { + + @Resource + private CarBrandService carBrandService; + + + @GetMapping("/list") + @Operation(summary = "获得全部车辆品牌") + public CommonResult> getCarBrandList() { + List carBrandList = carBrandService.getCarBrandList(); + return success(carBrandList); + } + + +} \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarMainController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarMainController.java index 37874f74..fd37be12 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarMainController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarMainController.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.app.car.controller; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.app.car.entity.AppCarMain; import cn.iocoder.yudao.module.app.car.service.AppCarMainService; +import cn.iocoder.yudao.module.app.car.vo.AppCarMainResVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -71,9 +72,9 @@ public class AppCarMainController { @GetMapping("/get") @Operation(summary = "获得车辆信息") // @PreAuthorize("@ss.hasPermission('base:car-main:query')") - public CommonResult> getCarMain() { + public CommonResult> getCarMain() { - List carMain = carMainService.getCarMain(); + List carMain = carMainService.getCarMain(); return CommonResult.success(carMain); } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarModelController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarModelController.java deleted file mode 100644 index 40c7320c..00000000 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/controller/AppCarModelController.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.yudao.module.app.car.controller; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.module.custom.entity.CarModel; -import cn.iocoder.yudao.module.custom.service.CarModelService; -import cn.iocoder.yudao.module.custom.vo.CarModelReqVO; -import cn.iocoder.yudao.module.custom.vo.CarModelRespVO; -import cn.iocoder.yudao.module.custom.vo.CascaderOptionsVO; -import com.baomidou.mybatisplus.core.metadata.IPage; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - - -@Tag(name = "管理后台 - 车辆品牌型号") -@RestController -@RequestMapping("/userClient/base/carModel") -@Validated -public class AppCarModelController { - - @Autowired - private CarModelService carModelService; - - - /** - * 获得全部车辆品牌 - * - * @return - */ - @GetMapping("/list") - @Operation(summary = "查询车辆品牌") - public CommonResult> getList() { - List carModelList = carModelService.getCarModelList(); - return success(carModelList); - } - - - -} \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/entity/AppCarMain.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/entity/AppCarMain.java index 51fdd255..84d76465 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/entity/AppCarMain.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/entity/AppCarMain.java @@ -7,13 +7,9 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; -import org.springframework.format.annotation.DateTimeFormat; - import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.Date; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; /** * 车辆信息 DO @@ -109,7 +105,7 @@ public class AppCarMain extends TenantBaseDO { /** * 车辆注册日期 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") private Date carRegisterDate; /** * 行驶证图片 diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/mapper/AppCarMainMapper.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/mapper/AppCarMainMapper.java index 3a0c852e..e75552bc 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/mapper/AppCarMainMapper.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/mapper/AppCarMainMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.app.car.mapper; import cn.iocoder.yudao.module.app.car.entity.AppCarMain; +import cn.iocoder.yudao.module.app.car.vo.AppCarMainResVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -12,6 +13,6 @@ public interface AppCarMainMapper extends BaseMapper { // 查询当前用户的所有车辆 - List getUserCarMain(@Param("userId") Long userId); + List getUserCarMain(@Param("userId") Long userId); } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/AppCarMainService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/AppCarMainService.java index 50f23cb4..069e9cf3 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/AppCarMainService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/AppCarMainService.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.app.car.service; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.app.car.entity.AppCarMain; +import cn.iocoder.yudao.module.app.car.vo.AppCarMainResVo; import cn.iocoder.yudao.module.custom.vo.CarMainRespVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -41,7 +42,7 @@ public interface AppCarMainService extends IService { * * @return 车辆信息 */ - List getCarMain(); + List getCarMain(); diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/impl/AppCarMainServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/impl/AppCarMainServiceImpl.java index 84204cf1..767847ac 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/impl/AppCarMainServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/service/impl/AppCarMainServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.app.car.entity.AppCarMain; import cn.iocoder.yudao.module.app.car.mapper.AppCarMainMapper; import cn.iocoder.yudao.module.app.car.service.AppCarMainService; +import cn.iocoder.yudao.module.app.car.vo.AppCarMainResVo; import cn.iocoder.yudao.module.custom.entity.CustomerCar; import cn.iocoder.yudao.module.custom.entity.CustomerMain; import cn.iocoder.yudao.module.custom.mapper.CustomerCarMapper; @@ -99,9 +100,9 @@ public class AppCarMainServiceImpl extends ServiceImpl getCarMain() { + public List getCarMain() { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - List userCarMain = super.baseMapper.getUserCarMain(loginUser.getId()); + List userCarMain = super.baseMapper.getUserCarMain(loginUser.getId()); return userCarMain; diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/vo/AppCarMainResVo.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/vo/AppCarMainResVo.java new file mode 100644 index 00000000..096fa623 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/car/vo/AppCarMainResVo.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.app.car.vo; + +import cn.iocoder.yudao.module.app.car.entity.AppCarMain; +import lombok.Data; + +@Data +public class AppCarMainResVo extends AppCarMain { + +// 品牌名称 + private String brandName; +// 品牌图片路径 + private String logoImg; +} From 753d0f52002caa3d2ff6f6b3b9af96ad6a325c45 Mon Sep 17 00:00:00 2001 From: zhaotianfeng <12345678> Date: Tue, 24 Sep 2024 19:54:03 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E8=A1=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/module/custom/service/CarBrandService.java | 4 ++++ .../module/custom/service/impl/CarBrandServiceImpl.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CarBrandService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CarBrandService.java index 819e5a5a..e41f01db 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CarBrandService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CarBrandService.java @@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.custom.vo.CarBrandRespVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 车辆品牌维护 Service 接口 * @@ -53,4 +55,6 @@ public interface CarBrandService extends IService { */ IPage getCarBrandPage(CarBrandReqVO pageReqVO); + List getCarBrandList(); + } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarBrandServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarBrandServiceImpl.java index 4cb46d9e..6a479c4d 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarBrandServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarBrandServiceImpl.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import java.util.List; import java.util.UUID; /** @@ -86,4 +87,9 @@ public class CarBrandServiceImpl extends ServiceImpl i return baseMapper.findPage(page,pageReqVO); } + @Override + public List getCarBrandList() { + return baseMapper.selectList(null); + } + } \ No newline at end of file From 8a2bf03a20319c1aacfa535eb130006c0f0c3a52 Mon Sep 17 00:00:00 2001 From: zhaotianfeng <12345678> Date: Tue, 24 Sep 2024 20:05:16 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E8=A1=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/car/AppCarMainMapper.xml | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/dl-module-base/src/main/resources/mapper/car/AppCarMainMapper.xml b/dl-module-base/src/main/resources/mapper/car/AppCarMainMapper.xml index 9ecbb1a6..f9aa9664 100644 --- a/dl-module-base/src/main/resources/mapper/car/AppCarMainMapper.xml +++ b/dl-module-base/src/main/resources/mapper/car/AppCarMainMapper.xml @@ -3,13 +3,19 @@ - - select main.* from base_customer_car car INNER JOIN base_car_main main on car.car_id = main.id - where car.cus_id = ( - select id from base_customer_main - where user_id = #{userId} - and deleted = 0 - ) and main.deleted = 0 + SELECT main.*, brand.brand_name as brandName, brand.logo_img as logoImg + from (select main.* + from base_customer_car car + INNER JOIN base_car_main main on car.car_id = main.id + where car.cus_id = ( + select id + from base_customer_main + where user_id = #{userId} + and deleted = 0 + ) + and main.deleted = 0) as main + LEFT JOIN base_car_brand brand on main.car_brand = brand.id \ No newline at end of file