diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 276a117..9dc58b3 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -85,6 +85,8 @@ 1.6.2 + + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/AfterServiceStarted.java b/ruoyi-admin/src/main/java/com/ruoyi/AfterServiceStarted.java index 97ef850..4cc029a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/AfterServiceStarted.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/AfterServiceStarted.java @@ -30,7 +30,7 @@ public class AfterServiceStarted implements ApplicationRunner { // || ip.equals(CodeConstants.IP_28) || ip.equals(CodeConstants.IP_29) // || ip.equals(CodeConstants.IP_30) ) { // logger.info("--------------是否启动导入文件---------------:{}", ip); - queueUploadTask.queueUploadFile(); +// queueUploadTask.queueUploadFile(); // } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/controller/ZcBaseUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/controller/ZcBaseUserController.java index 5bb4295..4bbfbd2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/controller/ZcBaseUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/controller/ZcBaseUserController.java @@ -53,6 +53,10 @@ public class ZcBaseUserController extends BaseController public TableDataInfo list(ZcBaseUser zcBaseUser) { startPage(); + // 运营者账号,只能查询所属商户数据 + if(UserConstants.USER_TYPE_02.equals(getSysUser().getUserType())){ + zcBaseUser.setOperatorId(getSysUser().getGroupId()); + } List list = zcBaseUserService.selectZcBaseUserList(zcBaseUser); return getDataTable(list); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/domain/ZcBaseUser.java b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/domain/ZcBaseUser.java index 6094cde..cfe4272 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/domain/ZcBaseUser.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/domain/ZcBaseUser.java @@ -5,6 +5,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.data.annotation.Transient; /** * 租车用户信息对象 zc_base_user @@ -54,6 +55,11 @@ public class ZcBaseUser extends BaseEntity /** 删除标志(0代表存在 2代表删除) */ private String delFlag; + @Transient + private Long operatorId; + @Transient + private Long storeId; + /** 用户与门店信息信息 */ private List zcBaseUserStoreList; @@ -166,6 +172,22 @@ public class ZcBaseUser extends BaseEntity this.zcBaseUserStoreList = zcBaseUserStoreList; } + public Long getOperatorId() { + return operatorId; + } + + public void setOperatorId(Long operatorId) { + this.operatorId = operatorId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/mapper/ZcBaseUserMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/mapper/ZcBaseUserMapper.java index 6a86213..9fd1c73 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/mapper/ZcBaseUserMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/mapper/ZcBaseUserMapper.java @@ -3,6 +3,7 @@ package com.ruoyi.baseUser.mapper; import java.util.List; import com.ruoyi.baseUser.domain.ZcBaseUser; import com.ruoyi.baseUser.domain.ZcBaseUserStore; +import org.apache.ibatis.annotations.Param; /** * 租车用户信息Mapper接口 @@ -28,7 +29,7 @@ public interface ZcBaseUserMapper */ public List selectZcBaseUserList(ZcBaseUser zcBaseUser); - public List selectZcBaseUserByStoreId(Long storeId); + public List selectZcBaseUserByStoreId(@Param("storeId") Long storeId, @Param("operatorId") Long operatorId); public ZcBaseUser selectZcBaseUserByPhone(String phone); /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/IZcBaseUserService.java b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/IZcBaseUserService.java index 10031cd..8adc7a4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/IZcBaseUserService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/IZcBaseUserService.java @@ -28,7 +28,7 @@ public interface IZcBaseUserService public List selectZcBaseUserList(ZcBaseUser zcBaseUser); - public List selectZcBaseUserByStoreId(Long storeId); + public List selectZcBaseUserByStoreId(Long storeId, Long operatorId); /** * 新增租车用户信息 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/impl/ZcBaseUserServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/impl/ZcBaseUserServiceImpl.java index f9e795f..e897007 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/impl/ZcBaseUserServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/baseUser/service/impl/ZcBaseUserServiceImpl.java @@ -53,8 +53,8 @@ public class ZcBaseUserServiceImpl implements IZcBaseUserService } @Override - public List selectZcBaseUserByStoreId(Long storeId){ - return zcBaseUserMapper.selectZcBaseUserByStoreId(storeId); + public List selectZcBaseUserByStoreId(Long storeId, Long operatorId){ + return zcBaseUserMapper.selectZcBaseUserByStoreId(storeId,operatorId); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyController.java b/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyController.java index cca02ec..0b80d68 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyController.java @@ -68,6 +68,7 @@ public class CompanyController extends BaseController @ResponseBody public TableDataInfo list(Company company) { + getUserId(); startPage(); // 运营者账号,只能查询所属商户数据 if(UserConstants.USER_TYPE_02 .equals(getSysUser().getUserType())){ @@ -124,32 +125,6 @@ public class CompanyController extends BaseController } company.setCreateBy(getLoginName()); int flag = companyService.insertCompany(company); - if(flag > 0) { - // 创建运营商成功,添加运营商账号 - SysUser user = new SysUser(); - user.setSalt(""); - String password = UserConstants.DEFAULT_PASSWORD; - user.setLoginName(company.getPhone()); - user.setUserName(company.getCompanyName()); - user.setUserType(UserConstants.USER_TYPE_02); - user.setPhonenumber(company.getPhone()); - user.setPassword(passwordService.encryptPassword(user.getLoginName(), password, user.getSalt())); - //所属区域转换省市县乡村组字段 - Zoning zoning = areaHnService.getAreaSuperior(company.getCitys()); - user.setCityCode(zoning.getCityCode()); - user.setCityName(zoning.getCityName()); - user.setDistrictCode(zoning.getDistrictCode()); - user.setDistrictName(zoning.getDistrictName()); - user.setTownCode(zoning.getTownCode()); - user.setTownName(zoning.getTownName()); - user.setCreateBy(getLoginName()); - user.setCreateTime(DateUtils.getNowDate()); - user.setUpdateTime(DateUtils.getNowDate()); - user.setStatus("0"); - user.setCreateById(getUserId()); - user.setGroupId(company.getId()); - userService.insertUser(user); - } return toAjax(flag); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyStoreController.java b/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyStoreController.java index 1a5a4e4..23a3226 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyStoreController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/operation/controller/CompanyStoreController.java @@ -157,7 +157,7 @@ public class CompanyStoreController extends BaseController CompanyStore companyStore = companyStoreService.selectCompanyStoreById(id); mmap.put("companyStore", companyStore); - List zcBaseUserList = zcBaseUserService.selectZcBaseUserByStoreId(id); + List zcBaseUserList = zcBaseUserService.selectZcBaseUserByStoreId(id,null); mmap.put("zcBaseUserList", zcBaseUserList); return prefix + "/addStoreUser"; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/operation/service/impl/CompanyServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/operation/service/impl/CompanyServiceImpl.java index f1e307e..393c18b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/operation/service/impl/CompanyServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/operation/service/impl/CompanyServiceImpl.java @@ -5,10 +5,15 @@ import java.util.List; import com.ruoyi.common.constant.CompanyConstants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.RRException; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.operation.domain.CompanyStore; import com.ruoyi.operation.service.ICompanyStoreService; +import com.ruoyi.system.domain.Zoning; +import com.ruoyi.system.service.ISysAreaHnService; import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,6 +37,12 @@ public class CompanyServiceImpl implements ICompanyService private ISysUserService userService; @Autowired private ICompanyStoreService companyStoreService; + @Autowired + private SysPasswordService passwordService; + @Autowired + private ISysAreaHnService areaHnService; + @Autowired + private ISysUserService sysUserService; /** * 查询运营商 * @@ -88,7 +99,38 @@ public class CompanyServiceImpl implements ICompanyService { company.setCreateTime(DateUtils.getNowDate()); company.setUpdateTime(DateUtils.getNowDate()); - return companyMapper.insertCompany(company); + int flag = companyMapper.insertCompany(company); + + if(flag > 0) { + // 创建运营商成功,添加运营商账号 + SysUser user = new SysUser(); + user.setSalt(""); + String password = UserConstants.DEFAULT_PASSWORD; + user.setLoginName(company.getPhone()); + user.setUserName(company.getCompanyName()); + user.setUserType(UserConstants.USER_TYPE_02); + user.setPhonenumber(company.getPhone()); + user.setPassword(passwordService.encryptPassword(user.getLoginName(), password, user.getSalt())); + //所属区域转换省市县乡村组字段 + Zoning zoning = areaHnService.getAreaSuperior(company.getCitys()); + user.setCityCode(zoning.getCityCode()); + user.setCityName(zoning.getCityName()); + user.setDistrictCode(zoning.getDistrictCode()); + user.setDistrictName(zoning.getDistrictName()); + user.setTownCode(zoning.getTownCode()); + user.setTownName(zoning.getTownName()); + user.setCreateBy(ShiroUtils.getSysUser().getLoginName()); + user.setCreateTime(DateUtils.getNowDate()); + user.setUpdateTime(DateUtils.getNowDate()); + user.setStatus("0"); + user.setCreateById(ShiroUtils.getSysUser().getUserId()); + user.setGroupId(company.getId()); + // 新增运营商用户绑定运营商角色 + Long[] roleIds = {100L}; + user.setRoleIds(roleIds); + userService.insertUser(user); + } + return flag; } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java index 30de426..a12d6ff 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java @@ -1,10 +1,13 @@ package com.ruoyi.orders.controller; +import java.util.Date; import java.util.List; import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.operation.domain.Company; import com.ruoyi.operation.service.ICompanyService; +import com.ruoyi.orders.util.OrderStatusEnum; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -140,4 +143,20 @@ public class ZcOrderMainController extends BaseController { return toAjax(zcOrderMainService.deleteZcOrderMainByOrderIds(ids)); } + + @RequiresPermissions("orders:order:close") + @Log(title = "结束订单", businessType = BusinessType.DELETE) + @PostMapping( "/manualEndOrder") + @ResponseBody + public AjaxResult manualEndOrder(Long orderId) + { + ZcOrderMain zcOrderMain =new ZcOrderMain(); + zcOrderMain.setOrderId(orderId); + zcOrderMain.setOrderStatus(OrderStatusEnum.MANUAL_END.getCode()); + zcOrderMain.setUpdateBy(getLoginName()); + zcOrderMain.setUpdateTime(DateUtils.getNowDate()); + + return toAjax(zcOrderMainService.updateManualEndOrder(zcOrderMain)); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/service/IZcOrderMainService.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/service/IZcOrderMainService.java index 3a8eb8f..4c0df88 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/orders/service/IZcOrderMainService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/service/IZcOrderMainService.java @@ -58,4 +58,7 @@ public interface IZcOrderMainService * @return 结果 */ public int deleteZcOrderMainByOrderId(Long orderId); + + public int updateManualEndOrder(ZcOrderMain zcOrderMain); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/service/impl/ZcOrderMainServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/service/impl/ZcOrderMainServiceImpl.java index 695b775..a4997a3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/orders/service/impl/ZcOrderMainServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/service/impl/ZcOrderMainServiceImpl.java @@ -109,6 +109,12 @@ public class ZcOrderMainServiceImpl implements IZcOrderMainService return zcOrderMainMapper.deleteZcOrderMainByOrderId(orderId); } + @Override + public int updateManualEndOrder(ZcOrderMain zcOrderMain) { + //订单手动结束逻辑待完善 + return zcOrderMainMapper.updateZcOrderMain(zcOrderMain); + } + /** * 新增租车子订单信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderStatusEnum.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderStatusEnum.java new file mode 100644 index 0000000..bde7f61 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderStatusEnum.java @@ -0,0 +1,27 @@ +package com.ruoyi.orders.util; + +public enum OrderStatusEnum { + WAIT_PAY("WAIT_PAY", "待支付"), + WAIT_PICK("WAIT_PICK", "待取车"), + RENT_ING("RENT_ING", "租赁中"), + WAIT_RETURN("WAIT_RETURN", "待还车"), + RENT_OVERDUE("RENT_OVERDUE", "逾期"), + AUTO_END("AUTO_END", "自动结束"), + MANUAL_END("MANUAL_END", "手动结束"); + + private final String code; + private final String info; + + OrderStatusEnum(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java index e7bd788..78104e7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -15,6 +15,7 @@ import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.exception.RRException; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.common.utils.oss.OssService; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.CommonAttachment; import com.ruoyi.system.domain.SysAreaHn; @@ -58,6 +59,10 @@ public class CommonController @Autowired private ISysAreaHnService sysAreaHnService; + // 在类中添加 OSS 服务注入 + @Autowired + private OssService ossService; + private static final String FILE_DELIMETER = ","; @GetMapping("/area") @@ -278,17 +283,33 @@ public class CommonController { try { + /** oss --------------- */ +// // 检查文件是否为空 +// if (file.isEmpty()) { +// return AjaxResult.error("上传文件不能为空"); +// } +// +// // 检查文件类型(可选) +// String contentType = file.getContentType(); +// if (contentType == null || !contentType.startsWith("image/")) { +// return AjaxResult.error("只允许上传图片文件"); +// } +// +// // 上传到 OSS +// String url = ossService.uploadImage(file); +// // 返回文件访问 URL +// String[] str = url.split("/"); +// String fileName = str[str.length - 1]; + + /** 原文件上传 --------------- */ // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, fileType, file); - String uuid = UUID.randomUUID().toString(); - -// String url = serverConfig.getUrl() + "/common/newDownload?uuid=" + uuid; - String url = serverConfig.getUrl() + fileName; - + /** -------------------------- */ + String uuid = UUID.randomUUID().toString(); CommonAttachment insert = new CommonAttachment(); insert.setUuid(uuid); insert.setDataId(dataId); @@ -308,6 +329,7 @@ public class CommonController ajax.put("url", url); ajax.put("uuid", uuid); return ajax; + } catch (Exception e) { @@ -391,4 +413,35 @@ public class CommonController } + /** + * OSS 图片上传请求 + */ + @PostMapping("/ossUpload") + @ResponseBody + public AjaxResult ossUpload(@RequestParam("file") MultipartFile file) { + try { + // 检查文件是否为空 + if (file.isEmpty()) { + return AjaxResult.error("上传文件不能为空"); + } + + // 检查文件类型(可选) + String contentType = file.getContentType(); + if (contentType == null || !contentType.startsWith("image/")) { + return AjaxResult.error("只允许上传图片文件"); + } + + // 上传到 OSS + String url = ossService.uploadImage(file); + + AjaxResult ajax = AjaxResult.success(); + ajax.put("url", url); + ajax.put("fileName", file.getOriginalFilename()); + ajax.put("fileSize", file.getSize()); + return ajax; + } catch (Exception e) { + return AjaxResult.error("上传失败: " + e.getMessage()); + } + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 397874d..32e2d90 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -75,6 +75,10 @@ public class SysUserController extends BaseController public TableDataInfo list(SysUser user) { startPage(); + // 运营者账号,只能查询所属商户数据 + if(UserConstants.USER_TYPE_02.equals(getSysUser().getUserType())){ + user.setGroupId(getSysUser().getGroupId()); + } List list = userService.selectUserList(user); return getDataTable(list); } diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 5311b68..0dcee59 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -82,3 +82,4 @@ renren: # token有效时长,7天,单位秒 expire: 604800 header: token + diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index cd23363..e592bdb 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -148,3 +148,12 @@ csrf: swagger: # 是否开启swagger enabled: true + +# 阿里云 OSS 配置 +aliyun: + oss: + endpoint: oss-cn-shanghai.aliyuncs.com + accessKeyId: LTAI5tFZygsWsFqAqUbBmCrB + accessKeySecret: n417ym6PZyq5Gc4NHHps3EwzNiClDJ + bucketName: sczx-car-rental # 需要你提供具体的 bucket 名称 + domain: car-rental.sczxnet.com diff --git a/ruoyi-admin/src/main/resources/mapper/baseUser/ZcBaseUserMapper.xml b/ruoyi-admin/src/main/resources/mapper/baseUser/ZcBaseUserMapper.xml index 40c4264..2301e24 100644 --- a/ruoyi-admin/src/main/resources/mapper/baseUser/ZcBaseUserMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/baseUser/ZcBaseUserMapper.xml @@ -42,19 +42,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select id, user_name, avatar_url, password, phone_number, role_id, is_store, nick_name, wechat_openid, alipay_userid, del_flag, create_time, update_time from zc_base_user - + + select a.id, a.user_name, a.avatar_url, a.password, a.phone_number, a.role_id, a.is_store, a.nick_name, a.wechat_openid, a.alipay_userid, a.del_flag, a.create_time, a.update_time, + b.id as sub_id, b.user_id as sub_user_id, b.operator_id as sub_operator_id, b.store_id as sub_store_id, b.create_time as sub_create_time + from zc_base_user a + left join zc_base_user_store b on b.user_id = a.id - del_flag = '0' - and user_name like concat('%', #{userName}, '%') - and avatar_url = #{avatarUrl} - and password = #{password} - and phone_number = #{phoneNumber} - and role_id = #{roleId} - and is_store = #{isStore} - and nick_name like concat('%', #{nickName}, '%') - and wechat_openid = #{wechatOpenid} - and alipay_userid = #{alipayUserid} + a.del_flag = '0' + and a.user_name like concat('%', #{userName}, '%') + and a.avatar_url = #{avatarUrl} + and a.password = #{password} + and a.phone_number = #{phoneNumber} + and a.role_id = #{roleId} + and a.is_store = #{isStore} + and a.nick_name like concat('%', #{nickName}, '%') + and a.wechat_openid = #{wechatOpenid} + and a.alipay_userid = #{alipayUserid} + and b.store_id = #{storeId} + and b.operator_id = #{operatorId} @@ -63,7 +69,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" b.id as sub_id, b.user_id as sub_user_id, b.operator_id as sub_operator_id, b.store_id as sub_store_id, b.create_time as sub_create_time from zc_base_user a left join zc_base_user_store b on b.user_id = a.id - where a.del_flag = '0' and b.store_id = #{storeId} + where a.del_flag = '0' + and b.store_id = #{storeId} + and b.operator_id = #{operatorId} +
@@ -129,6 +129,8 @@
+
+
@@ -256,24 +258,23 @@ $.table.init(options); }); - function addRow() { - var count = $("#" + table.options.id).bootstrapTable('getData').length; - var row = { - index: $.table.serialNumber(count), - suborderNo: "", - suborderType: "", - amount: "", - paymentMethod: "", - vinBatteryNo: "", - createdAt: "", - paymentId: "", - paidAt: "", - remark: "", - delFlag: "", - createTime: "", - updateTime: "", - } - sub.addRow(row); + function manualEndOrder(){ + var orderId = $("#orderId").val(); + $.modal.confirm("确认手动结束该订单", function() { + $.operate.post(prefix + "/manualEndOrder", { "orderId": orderId}, function(result) { + if (result.code == web_status.SUCCESS) { + $.modal.msgSuccess("操作成功"); + // 关闭当前弹窗 + $.modal.close(); + var parent = activeWindow(); + parent.$.table.refresh(); + + } else { + $.modal.msgError(result.msg); + } + }); + + }) } diff --git a/ruoyi-admin/src/main/resources/templates/orders/order/order.html b/ruoyi-admin/src/main/resources/templates/orders/order/order.html index c9b37c5..0fa8c1b 100644 --- a/ruoyi-admin/src/main/resources/templates/orders/order/order.html +++ b/ruoyi-admin/src/main/resources/templates/orders/order/order.html @@ -93,6 +93,7 @@ \ No newline at end of file diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 4ce05de..993fee0 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -126,6 +126,12 @@ commons-fileupload + + com.aliyun.oss + aliyun-sdk-oss + 3.10.2 + + org.apache.poi diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java new file mode 100644 index 0000000..d4062d7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java @@ -0,0 +1,56 @@ + +package com.ruoyi.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "aliyun.oss") +public class OssConfig { + private String endpoint; + private String accessKeyId; + private String accessKeySecret; + private String bucketName; + private String domain; + + // Getters and Setters + public String getEndpoint() { + return endpoint; + } + + public void setEndpoint(String endpoint) { + this.endpoint = endpoint; + } + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getAccessKeySecret() { + return accessKeySecret; + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret = accessKeySecret; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/oss/OssService.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/oss/OssService.java new file mode 100644 index 0000000..85c9471 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/oss/OssService.java @@ -0,0 +1,76 @@ + +package com.ruoyi.common.utils.oss; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.PutObjectRequest; +import com.ruoyi.common.config.OssConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; + +@Component +public class OssService { + + @Autowired + private OssConfig ossConfig; + + /** + * 上传文件到 OSS + * @param file 文件 + * @param folder 文件夹路径,例如 "images/" + * @return 文件访问 URL + */ + public String uploadFile(MultipartFile file, String folder) throws IOException { + // 创建 OSSClient 实例 + OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + + try { + // 获取原始文件名 + String originalFilename = file.getOriginalFilename(); + // 生成唯一文件名 + String fileName = UUID.randomUUID().toString().replaceAll("-", "") + + (originalFilename != null ? originalFilename.substring(originalFilename.lastIndexOf(".")) : ""); + + // 完整路径 + String objectName = folder + fileName; + + // 获取文件输入流 + InputStream inputStream = file.getInputStream(); + + // 创建 PutObjectRequest 对象 + PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfig.getBucketName(), objectName, inputStream); + + // 上传文件 + ossClient.putObject(putObjectRequest); + + // 返回文件访问 URL + return "https://" + ossConfig.getDomain() + "/" + objectName; + } catch (com.aliyun.oss.OSSException e) { + if ("AccessDenied".equals(e.getErrorCode())) { + throw new IOException("OSS权限不足,请联系管理员配置权限。错误代码: " + e.getErrorCode(), e); + } + throw new IOException("OSS上传失败: " + e.getMessage(), e); + } catch (Exception e) { + throw new IOException("OSS上传失败: " + e.getMessage(), e); + } finally { + // 关闭 OSSClient + if (ossClient != null) { + ossClient.shutdown(); + } + } + } + + /** + * 上传图片文件到 OSS + * @param file 图片文件 + * @return 图片访问 URL + */ + public String uploadImage(MultipartFile file) throws IOException { + return uploadFile(file, "images/"); + } +} \ No newline at end of file