Эх сурвалжийг харах

修改微信登录;申请控制不能重复申请;修改打卡图片上传

qinyan 3 сар өмнө
parent
commit
54934ebeac

+ 19 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/care/CareApplicationsController.java

@@ -80,6 +80,15 @@ public class CareApplicationsController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody CareApplications careApplications)
     {
+        //判断当前申请日期是否有护理记录或正在进行的护理记录
+        CareApplications careApplications1=new CareApplications();
+        careApplications1.setPersonId(careApplications.getPersonId());
+        careApplications1.setApplyDate(careApplications.getApplyDate());
+        careApplications1.setNotDealStatus("complete");
+        List<CareApplications> lst=careApplicationsService.selectCareApplicationsList(careApplications1);
+        if(lst.size()>0){
+            return AjaxResult.error("当前特困人员在该申请日期已有未完成的护理申请");
+        }
         careApplications.setCreateBy(getUserId().toString());
         return toAjax(careApplicationsService.insertCareApplications(careApplications));
     }
@@ -92,6 +101,16 @@ public class CareApplicationsController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody CareApplications careApplications)
     {
+        //判断当前申请日期是否有护理记录或正在进行的护理记录
+        CareApplications careApplications1=new CareApplications();
+        careApplications1.setPersonId(careApplications.getPersonId());
+        careApplications1.setApplyDate(careApplications.getApplyDate());
+        careApplications1.setNotDealStatus("complete");
+        List<CareApplications> lst=careApplicationsService.selectCareApplicationsList(careApplications1);
+        if(lst.size()>0){
+            return AjaxResult.error("当前特困人员在该申请日期已有未完成的护理申请");
+        }
+
         careApplications.setUpdateBy(getUserId().toString());
         return toAjax(careApplicationsService.updateCareApplications(careApplications));
     }

+ 64 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/care/CareNurseClocksController.java

@@ -1,17 +1,20 @@
 package com.ruoyi.web.controller.care;
 
+import java.io.File;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.care.domain.CareApplications;
+import com.ruoyi.care.service.ICareApplicationsService;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.MimeTypeUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -20,6 +23,7 @@ import com.ruoyi.care.domain.CareNurseClocks;
 import com.ruoyi.care.service.ICareNurseClocksService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 护理任务打卡Controller
@@ -33,6 +37,9 @@ public class CareNurseClocksController extends BaseController
 {
     @Autowired
     private ICareNurseClocksService careNurseClocksService;
+    @Autowired
+    private ICareApplicationsService careApplicationsService;
+
 
     /**
      * 查询护理任务打卡列表
@@ -101,4 +108,53 @@ public class CareNurseClocksController extends BaseController
     {
         return toAjax(careNurseClocksService.deleteCareNurseClocksByClockIds(clockIds));
     }
+
+    /**
+     * 上传打卡图片
+     * applyId 护理ip
+     * nurse_date 护理日期
+     */
+    @Log(title = "上传打卡图片", businessType = BusinessType.UPDATE)
+    @PostMapping("/upload")
+    public AjaxResult upload(@RequestParam("file") MultipartFile file,String applyId,String nurseDate) throws Exception
+    {
+        //获取护理详细
+        CareApplications careApplications=careApplicationsService.selectCareApplicationsByApplyId(Long.parseLong(applyId));
+        String basePath=RuoYiConfig.getUploadPath()+"/"+careApplications.getApplyId()+"-"+careApplications.getPersonName()+"-"+careApplications.getApplyDate();
+        if(StringUtils.isNotEmpty(nurseDate)){
+            basePath=basePath+"/"+nurseDate;
+        }
+        if (!file.isEmpty())
+        {
+            String clockImg = FileUploadUtils.upload(basePath, file, MimeTypeUtils.IMAGE_EXTENSION);
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("imgUrl", clockImg);
+            // 更新缓存用户头像
+            return ajax;
+        }
+        return error("上传图片异常,请联系管理员");
+    }
+
+    /**
+     * 上传打卡图片
+     * applyId 护理ip
+     * nurse_date 护理日期
+     */
+    @Log(title = "删除打卡图片", businessType = BusinessType.UPDATE)
+    @GetMapping("/removeImg")
+    public AjaxResult removeImg(String address) throws Exception
+    {
+        //获取护理详细
+        String basePath=RuoYiConfig.getProfile()+"/"+address.replaceAll(Constants.RESOURCE_PREFIX,"");
+        File file = new File(basePath);
+        // 尝试删除文件
+        if (file.delete()) {
+            return success("删除成功");
+        } else {
+            return error("上传图片异常,请联系管理员");
+        }
+
+    }
+
+
 }

+ 39 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/WeChatController.java

@@ -3,8 +3,10 @@ package com.ruoyi.web.controller.system;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.WeChat;
 import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -13,6 +15,7 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 @RestController
 @RequestMapping("/api/wechat")
@@ -21,13 +24,15 @@ public class WeChatController {
     private ISysUserService userService;
     @Autowired
     private SysLoginService loginService;
+    @Autowired
+    private SysPermissionService permissionService;
     /**
      * 处理微信小程序登录请求
      *
      * @param code 微信小程序登录时获取的 code
      * @return 包含 openid 和  JSON 响应
      */
-    @PostMapping("/login")
+    @GetMapping("/login")
     public AjaxResult login(@RequestParam("code") String code) {
         Map<String, String> result=null;
         try {
@@ -42,21 +47,26 @@ public class WeChatController {
         SysUser sysUser=new SysUser();
         sysUser.setOpenId(openId);
         List<SysUser> lst= userService.selectUserList(sysUser);
+        Map<String,String> map=new HashMap<>();
         if(lst!=null&&lst.size()>0){
             //登录并返回token
             SysUser user=lst.get(0);
-            String token = loginService.wxlogin(user.getUserName(),user.getPassword());
-            return AjaxResult.success(token);
+            String token = loginService.wxlogin(user.getUserName(),"123456");
+            map.put("openId",openId);
+            map.put("token",token);
+            return new AjaxResult(200,"登录成功",map);
         }else{
-            return new AjaxResult(500,"当前用户未绑定手机号,请绑定",openId);
+            map.put("openId",openId);
+            map.put("token",null);
+            return new AjaxResult(200,"当前用户未绑定手机号,请绑定",map);
         }
 
     }
 
     //绑定手机号并登录
-    @PostMapping("/bindPhone")
+    @GetMapping("/bindPhone")
     public AjaxResult bindPhone(@RequestParam("openId") String openId,@RequestParam("phone") String phone) {
-        AjaxResult ajax = AjaxResult.success();
+        Map<String,String> map=new HashMap<>();
         //通过手机号查询是否有用户
         SysUser sysUser=new SysUser();
         sysUser.setPhonenumber(phone);
@@ -65,13 +75,32 @@ public class WeChatController {
             //绑定手机号并登录返回token
             SysUser user=lst.get(0);
             user.setOpenId(openId);
-            userService.updateUser(user);
+            userService.updateUserOpenId(user);
+
+            String token = loginService.wxlogin(user.getUserName(),"123456");
 
-            String token = loginService.wxlogin(user.getUserName(),user.getPassword());
-            ajax.put(Constants.TOKEN, token);
+            map.put("openId",openId);
+            map.put("token",token);
         }else{
             return new AjaxResult(500,"当前手机号系统不存在,请确定手机号是否正确或联系管理员",openId);
         }
-        return ajax;
+        return new AjaxResult(200,"登陆成功",map);
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        Map<String,Object> map=new HashMap<>();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        // 角色集合
+        Set<String> roles = permissionService.getRolePermission(user);
+        map.put("user", user);
+        map.put("roles", roles);
+        return new AjaxResult(200,"获取成功",map);
     }
 }

+ 2 - 2
ruoyi-common/src/main/java/com/ruoyi/common/utils/WeChat.java

@@ -13,8 +13,8 @@ import java.util.Map;
 
 public class WeChat {
 
-    private static final String APP_ID = "你的小程序AppID";
-    private static final String APP_SECRET = "你的小程序AppSecret";
+    private static final String APP_ID = "wxa5c97dfa28e626a9";
+    private static final String APP_SECRET = "aec1f83119a370f49d1b430dcd90f3a5";
     private static final String CODE_TO_SESSION_URL = "https://api.weixin.qq.com/sns/jscode2session";
 
     /**

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -111,7 +111,7 @@ public class SecurityConfig
             .authorizeHttpRequests((requests) -> {
                 permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
+                requests.antMatchers("/login", "/register", "/captchaImage","/api/wechat/login","/api/wechat/bindPhone","/care/clocks/upload").permitAll()
                     // 静态资源,可匿名访问
                     .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                     .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -110,7 +110,7 @@ public class SysLoginService
     public String wxlogin(String username, String password)
     {
         // 登录前置校验
-        loginPreCheck(username, password);
+       // loginPreCheck(username, password);
         // 用户验证
         Authentication authentication = null;
         try

+ 9 - 0
ruoyi-system/src/main/java/com/ruoyi/care/domain/CareApplications.java

@@ -57,6 +57,15 @@ public class CareApplications extends BaseEntity
     /** 处理状态(正在进行 0、已完成 1) */
     @Excel(name = "处理状态(未开始、正在进行、已完成 )")
     private String dealStatus;
+    private String NotDealStatus;
+
+    public String getNotDealStatus() {
+        return NotDealStatus;
+    }
+
+    public void setNotDealStatus(String notDealStatus) {
+        NotDealStatus = notDealStatus;
+    }
 
     /** 支付状态(未结算 0、已结算 1) */
     @Excel(name = "支付状态(未结算 0、已结算 1)")

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -128,6 +128,7 @@ public interface ISysUserService
      */
     public int updateUser(SysUser user);
 
+    public int updateUserOpenId(SysUser user);
     /**
      * 用户授权角色
      * 

+ 9 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -72,7 +72,6 @@ public class SysUserServiceImpl implements ISysUserService
      * @return 用户信息集合信息
      */
     @Override
-    @DataScope(deptAlias = "d", userAlias = "u")
     public List<SysUser> selectUserList(SysUser user)
     {
         return userMapper.selectUserList(user);
@@ -366,6 +365,15 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.updateUser(user);
     }
 
+    /**
+     * 修改openId
+     */
+    @Override
+    public int updateUserOpenId(SysUser user)
+    {
+        return userMapper.updateUser(user);
+    }
+
     /**
      * 重置用户密码
      * 

+ 1 - 0
ruoyi-system/src/main/resources/mapper/care/CareApplicationsMapper.xml

@@ -80,6 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="applyDate != null  and applyDate != ''"> and a.apply_date = #{applyDate}</if>
             <if test="status != null  and status != ''"> and a.status = #{status}</if>
             <if test="dealStatus != null  and dealStatus != ''"> and a.deal_status = #{dealStatus}</if>
+            <if test="NotDealStatus != null  and NotDealStatus != ''"> and ( a.deal_status =  #{NotDealStatus} or a.deal_status is null )</if>
             <if test="payStatus != null  and payStatus != ''"> and a.pay_status = #{payStatus}</if>
             <if test="auditReason != null  and auditReason != ''"> and a.audit_reason = #{auditReason}</if>
             <if test="params.dataScope != null and params.dataScope !=''"> ${params.dataScope}</if>

+ 1 - 0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -196,6 +196,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="loginDate != null">login_date = #{loginDate},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			<if test="remark != null">remark = #{remark},</if>
+			<if test="openId != null">open_id = #{openId},</if>
  			update_time = sysdate()
  		</set>
  		where user_id = #{userId}

+ 8 - 0
ruoyi-vue/src/api/care/clocks.js

@@ -42,3 +42,11 @@ export function delClocks(clockId) {
     method: 'delete'
   })
 }
+
+// 删除护理任务打卡
+export function removeImg(address) {
+  return request({
+    url: '/care/clocks/removeImg?address='+address,
+    method: 'get'
+  })
+}

+ 74 - 27
ruoyi-vue/src/views/care/clocks/index.vue

@@ -33,7 +33,7 @@
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="护理时间" align="center" prop="nursingTime" width="180">
       </el-table-column>
-      <el-table-column label="图片路径" align="center" prop="imgPaths" />
+
       <el-table-column label="图片数量" align="center" prop="imgNum" />
       <el-table-column label="备注" align="center" prop="remark" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -65,19 +65,14 @@
         </el-form-item>
         <el-form-item label="图片路径" prop="imgPaths">
           <el-upload
-              v-model:file-list="fileList"
-              class="upload-demo"
-              :action=uploadImgUrl
-              :on-preview="handlePreview"
+              v-model:file-list="fileLists"
+              :action="uploadImgUrl"
+              :headers="uploadHeaders"
+              list-type="picture-card"
               :on-remove="handleRemove"
-              list-type="picture"
+              :on-success="handleSuccess"
           >
-            <el-button type="primary">Click to upload</el-button>
-            <template #tip>
-              <div class="el-upload__tip">
-                jpg/png files with a size less than 500kb
-              </div>
-            </template>
+            <el-icon><Plus /></el-icon>
           </el-upload>
         </el-form-item>
 
@@ -100,8 +95,10 @@
 }
 </style>
 <script setup name="Clocks">
-import { listClocks, getClocks, delClocks, addClocks, updateClocks } from "@/api/care/clocks";
+import { listClocks, getClocks, delClocks, addClocks, updateClocks,removeImg } from "@/api/care/clocks";
 import { ref } from 'vue'
+import { Plus } from '@element-plus/icons-vue'
+import { getToken } from '@/utils/auth'
 const { proxy } = getCurrentInstance();
 
 const clocksList = ref([]);
@@ -113,9 +110,11 @@ const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
 const title = ref("");
-const uploadImgUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传的图片服务器地址
-const fileList =ref([]);
 
+const fileLists =ref([]);
+
+const dialogImageUrl = ref('')
+const dialogVisible = ref(false)
 // 定义 props
 const props = defineProps({
   applyId: {
@@ -149,6 +148,10 @@ const data = reactive({
 
 const { queryParams, form, rules } = toRefs(data);
 
+const uploadImgUrl = ref(import.meta.env.VITE_APP_BASE_API + "/care/clocks/upload?applyId="+props.applyId+"&nursingDate="+form.value.nursingTime); // 上传的图片服务器地址
+const uploadHeaders={Authorization: 'Bearer ' + getToken()};
+const fileSize=1;
+
 /** 查询护理任务打卡列表 */
 function getList() {
   loading.value = true;
@@ -181,6 +184,7 @@ function reset() {
     remark: null,
     applyId:props.applyId
   };
+  fileLists.value=[]
   proxy.resetForm("clocksRef");
 }
 
@@ -216,6 +220,16 @@ function handleUpdate(row) {
   const _clockId = row.clockId || ids.value
   getClocks(_clockId).then(response => {
     form.value = response.data;
+    const imgs=response.data.imgPaths.split(",").filter(item => item.trim() !== "");
+    imgs.forEach(function (item){
+      console.info(item)
+      const obj={};
+      obj.name=''
+      obj.url=import.meta.env.VITE_APP_BASE_API + item
+      console.info(obj)
+      fileLists.value.push(obj);
+    })
+
     open.value = true;
     title.value = "修改护理任务打卡";
   });
@@ -223,13 +237,19 @@ function handleUpdate(row) {
 
 /** 提交按钮 */
 function submitForm() {
-  form.value.imgNum=1;
-  form.value.imgPaths="11111"
-  // fileList.forEach(item => {
-  //   console.info(item);
-  //   form.value.imgNum++;
-  //   form.value.imgPaths+=item.url;
-  // });
+  form.value.imgNum=0;
+  form.value.imgPaths=""
+  console.info(import.meta.env.VITE_APP_BASE_API+"---"+JSON.stringify(fileLists.value))
+  fileLists.value.forEach(item => {
+    console.info(item);
+    form.value.imgNum++;
+    if(item.response){
+      form.value.imgPaths+=item.response.imgUrl+",";
+    }else{
+      form.value.imgPaths+=item.url.replaceAll(import.meta.env.VITE_APP_BASE_API,"")+",";
+    }
+
+  });
 
   proxy.$refs["clocksRef"].validate(valid => {
     if (valid) {
@@ -268,13 +288,40 @@ function handleExport() {
   }, `clocks_${new Date().getTime()}.xlsx`)
 }
 
-
-
-function handlePreview(file) {
-  console.log('预览文件:', file);
-}
 function handleRemove(file, fileList) {
   console.log('移除文件:', file, '剩余文件:', fileList);
+  //removeImg(file.response.imgUrl);
+}
+
+function handleBeforeUpload(file) {
+  if(form.value.nursingTime==null){
+    proxy.$modal.msgError('请选择护理时间!');
+    return false;
+  }
+  const type = ["image/jpeg", "image/jpg", "image/png", "image/svg"];
+  const isJPG = type.includes(file.type);
+  // 检验文件格式
+  if (!isJPG) {
+    proxy.$modal.msgError('图片格式错误!');
+    return false;
+  }
+  // 校检文件大小
+  if (fileSize) {
+    const isLt = file.size / 1024 / 1024 < fileSize;
+    if (!isLt) {
+      proxy.$modal.msgError(`上传文件大小不能超过 ${fileSize} MB!`);
+      return false;
+    }
+  }
+  return true;
+}
+
+function handleSuccess(response, file, fileList)
+{
+  if(response.code==200){
+    fileLists.value=fileList;
+  }
+
 }
 getList();
 </script>