From e4fa123d45d3201c32a13bd444fa0905b4c5823c Mon Sep 17 00:00:00 2001 From: Aug <17674666882@163.com> Date: Fri, 31 Oct 2025 10:42:21 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=94=AF=E4=BB=98=E5=90=8E=E6=9C=AA?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=8A=A5=E5=91=8A=EF=BC=8C=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=9C=80=E8=A6=81=E9=87=8D=E5=A4=8D=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D=202=E3=80=81?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=9B=BE=E7=89=87=E8=BD=ACbase64=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/assessmentCode/AssessmentCodeList.vue | 2 +- .../entity/AssessmentExamLog.java | 7 ++ .../controller/AssessmentFeedbackController.java | 2 +- .../entity/AssessmentFeedback.java | 7 +- .../mapper/AssessmentFeedbackMapper.java | 2 +- .../service/IAssessmentFeedbackService.java | 2 +- .../impl/AssessmentFeedbackServiceImpl.java | 2 +- .../vue/AssessmentFeedbackList.vue | 26 +++++ .../vue/modules/AssessmentFeedbackForm.vue | 5 + .../vue3/AssessmentFeedback.data.ts | 28 +++++ .../api/assessmentController/ConfigController.java | 15 +++ .../jeecg/modules/api/service/ConfigService.java | 7 ++ .../api/service/impl/ConfigServiceImpl.java | 127 ++++++++++++++++++++- .../modules/api/service/impl/ExamServiceImpl.java | 32 ++++++ 14 files changed, 254 insertions(+), 10 deletions(-) diff --git a/admin-hanhai-vue/src/views/assessmentCode/AssessmentCodeList.vue b/admin-hanhai-vue/src/views/assessmentCode/AssessmentCodeList.vue index b35f35d..389e1e7 100644 --- a/admin-hanhai-vue/src/views/assessmentCode/AssessmentCodeList.vue +++ b/admin-hanhai-vue/src/views/assessmentCode/AssessmentCodeList.vue @@ -20,7 +20,7 @@ 导入 --> - + 删除 diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentExamLog/entity/AssessmentExamLog.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentExamLog/entity/AssessmentExamLog.java index 483780a..36af235 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentExamLog/entity/AssessmentExamLog.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentExamLog/entity/AssessmentExamLog.java @@ -4,7 +4,10 @@ import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; +import java.util.List; + import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -72,4 +75,8 @@ public class AssessmentExamLog implements Serializable { @Dict(dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id") @ApiModelProperty(value = "关联用户") private java.lang.String userId; + + //附加材料列表 + @TableField(exist = false) + Boolean isPay = false; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/controller/AssessmentFeedbackController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/controller/AssessmentFeedbackController.java index affe43b..6a76332 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/controller/AssessmentFeedbackController.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/controller/AssessmentFeedbackController.java @@ -39,7 +39,7 @@ import org.jeecg.common.aspect.annotation.AutoLog; /** * @Description: 意见反馈表 * @Author: jeecg-boot - * @Date: 2025-09-19 + * @Date: 2025-10-27 * @Version: V1.0 */ @Api(tags="意见反馈表") diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/entity/AssessmentFeedback.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/entity/AssessmentFeedback.java index a2a4774..dd0ae20 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/entity/AssessmentFeedback.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/entity/AssessmentFeedback.java @@ -20,7 +20,7 @@ import lombok.experimental.Accessors; /** * @Description: 意见反馈表 * @Author: jeecg-boot - * @Date: 2025-09-19 + * @Date: 2025-10-27 * @Version: V1.0 */ @Data @@ -59,6 +59,11 @@ public class AssessmentFeedback implements Serializable { @Excel(name = "联系电话", width = 15) @ApiModelProperty(value = "联系电话") private java.lang.String phone; + /**状态*/ + @Excel(name = "状态", width = 15, dicCode = "status_feedback") + @Dict(dicCode = "status_feedback") + @ApiModelProperty(value = "状态") + private java.lang.String status; /**关联用户*/ @Excel(name = "关联用户", width = 15, dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id") @Dict(dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id") diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/mapper/AssessmentFeedbackMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/mapper/AssessmentFeedbackMapper.java index 7378c35..183f044 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/mapper/AssessmentFeedbackMapper.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/mapper/AssessmentFeedbackMapper.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @Description: 意见反馈表 * @Author: jeecg-boot - * @Date: 2025-09-19 + * @Date: 2025-10-27 * @Version: V1.0 */ public interface AssessmentFeedbackMapper extends BaseMapper { diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/IAssessmentFeedbackService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/IAssessmentFeedbackService.java index 0581b3c..5ec4775 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/IAssessmentFeedbackService.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/IAssessmentFeedbackService.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; /** * @Description: 意见反馈表 * @Author: jeecg-boot - * @Date: 2025-09-19 + * @Date: 2025-10-27 * @Version: V1.0 */ public interface IAssessmentFeedbackService extends IService { diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/impl/AssessmentFeedbackServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/impl/AssessmentFeedbackServiceImpl.java index 1db91fb..0cec785 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/impl/AssessmentFeedbackServiceImpl.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/service/impl/AssessmentFeedbackServiceImpl.java @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @Description: 意见反馈表 * @Author: jeecg-boot - * @Date: 2025-09-19 + * @Date: 2025-10-27 * @Version: V1.0 */ @Service diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/AssessmentFeedbackList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/AssessmentFeedbackList.vue index 5d9b1d7..ddf1030 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/AssessmentFeedbackList.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/AssessmentFeedbackList.vue @@ -4,6 +4,26 @@
+ + + + + + + + + + + + + 查询 + 重置 + + {{ toggleSearchStatus ? '收起' : '展开' }} + + + +
@@ -138,6 +158,11 @@ align:"center", dataIndex: 'phone' }, + { + title:'状态', + align:"center", + dataIndex: 'status_dictText' + }, { title:'关联用户', align:"center", @@ -180,6 +205,7 @@ fieldList.push({type:'Text',value:'content',text:'反馈内容',dictCode:''}) fieldList.push({type:'Text',value:'image',text:'图片',dictCode:''}) fieldList.push({type:'string',value:'phone',text:'联系电话',dictCode:''}) + fieldList.push({type:'string',value:'status',text:'状态',dictCode:'status_feedback'}) fieldList.push({type:'sel_search',value:'userId',text:'关联用户',dictTable:"han_hai_member", dictText:'nick_name', dictCode:'id'}) this.superFieldList = fieldList } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/modules/AssessmentFeedbackForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/modules/AssessmentFeedbackForm.vue index e2421ce..b1dd644 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/modules/AssessmentFeedbackForm.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue/modules/AssessmentFeedbackForm.vue @@ -18,6 +18,11 @@ + + + + + diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue3/AssessmentFeedback.data.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue3/AssessmentFeedback.data.ts index de14de0..bfee94b 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue3/AssessmentFeedback.data.ts +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/assessmentFeedback/vue3/AssessmentFeedback.data.ts @@ -20,6 +20,11 @@ export const columns: BasicColumn[] = [ align:"center", dataIndex: 'phone' }, + { + title: '状态', + align:"center", + dataIndex: 'status_dictText' + }, { title: '关联用户', align:"center", @@ -28,6 +33,21 @@ export const columns: BasicColumn[] = [ ]; //查询数据 export const searchFormSchema: FormSchema[] = [ + { + label: "联系电话", + field: "phone", + component: 'Input', + colProps: {span: 6}, + }, + { + label: "关联用户", + field: "userId", + component: 'JSearchSelect', + componentProps:{ + dict:"han_hai_member,nick_name,id" + }, + colProps: {span: 6}, + }, ]; //表单数据 export const formSchema: FormSchema[] = [ @@ -54,6 +74,14 @@ export const formSchema: FormSchema[] = [ ]; }, }, + { + label: '状态', + field: 'status', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"status_feedback" + }, + }, { label: '关联用户', field: 'userId', diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/assessmentController/ConfigController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/assessmentController/ConfigController.java index 7d26404..fb0583c 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/assessmentController/ConfigController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/assessmentController/ConfigController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.awt.image.BufferedImage; import java.math.BigDecimal; @Api(tags="系统配置-相关接口") @@ -62,4 +63,18 @@ public class ConfigController { return configService.queryCount(); } + //图片转base64 + @ApiOperation(value="其他-图片转base64", notes="其他-图片转base64") + @RequestMapping(value = "/imageToBase64", method = {RequestMethod.GET}) + public Result imageToBase64(String imagePath){ + return configService.imageToBase64(imagePath); + } + +// //base转图片 +// @ApiOperation(value="其他-base64转图片", notes="其他-base64转图片") +// @RequestMapping(value = "/base64ToImage", method = {RequestMethod.GET}) +// public Result base64ToImage(String base64, String savePath){ +// return configService.base64ToImage(base64, savePath); +// } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/ConfigService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/ConfigService.java index d83c231..26f45a3 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/ConfigService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/ConfigService.java @@ -8,6 +8,7 @@ import org.jeecg.modules.assessmentBanner.entity.AssessmentBanner; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import java.awt.image.BufferedImage; import java.math.BigDecimal; public interface ConfigService { @@ -27,4 +28,10 @@ public interface ConfigService { //数量统计接口 public Result queryCount(); + //图片转base64 + public Result imageToBase64(String image); + + //base64转图片 + public Result base64ToImage(String base64, String savePath); + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ConfigServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ConfigServiceImpl.java index a9a5aba..d7f1ac1 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ConfigServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ConfigServiceImpl.java @@ -21,15 +21,18 @@ import org.jeecg.modules.assessmentReportUser.service.IAssessmentReportUserServi import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService; import org.springframework.stereotype.Service; +import sun.misc.BASE64Encoder; import javax.annotation.Resource; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; import java.math.BigDecimal; import java.math.RoundingMode; +import java.net.URL; +import java.net.URLConnection; import java.security.SecureRandom; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Service @Slf4j @@ -307,6 +310,122 @@ public class ConfigServiceImpl implements ConfigService { } } + /******************************************************************************************************************/ + //图片转base64 + @Override + public Result imageToBase64(String imgPath) { + try { + byte[] imageData = readImageData(imgPath); + if (imageData != null && imageData.length > 0) { + String base64 = Base64.getEncoder().encodeToString(imageData); + System.out.println("转换成功: " + imageData.length + " 字节 -> " + base64.length() + " 字符"); + return Result.OK("base64", base64); + } + return Result.error("图片转base64失败"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("图片转base64失败", e.getMessage()); + } + } + + /** + * Base64转图片文件 + */ + public Result base64ToImage(String base64Str, String savePath) { + if (base64Str == null || base64Str.isEmpty()) { + return Result.error("Base64字符串为空"); + } + + try (FileOutputStream fos = new FileOutputStream(savePath)) { + // 清理Base64字符串 + String cleanBase64 = cleanBase64String(base64Str); + + // 解码并保存 + byte[] imageBytes = Base64.getDecoder().decode(cleanBase64); + fos.write(imageBytes); + + log.info("图片保存成功: " + savePath + " (" + imageBytes.length + " 字节)"); + return Result.OK("Base64转图片成功", savePath); + + } catch (Exception e) { + e.printStackTrace(); + return Result.OK("Base64转图片失败", e.getMessage()); + } + } + + + /** + * 读取图片数据 + */ + private static byte[] readImageData(String imgPath) throws IOException { + InputStream inputStream = null; + ByteArrayOutputStream outputStream = null; + + try { + // 创建输入流 + if (imgPath.startsWith("http")) { + URL url = new URL(imgPath); + URLConnection connection = url.openConnection(); + connection.setConnectTimeout(10000); + connection.setReadTimeout(30000); + connection.setRequestProperty("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + inputStream = connection.getInputStream(); + } else { + inputStream = new FileInputStream(imgPath); + } + + // 读取数据 + outputStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[8192]; + int bytesRead; + int totalBytes = 0; + + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + totalBytes += bytesRead; + } + + System.out.println("图片数据读取完成: " + totalBytes + " 字节"); + return outputStream.toByteArray(); + + } finally { + // 关闭流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + + /** + * 清理Base64字符串 + */ + private static String cleanBase64String(String base64Str) { + String[] prefixes = { + "data:image/png;base64,", "data:image/jpeg;base64,", + "data:image/jpg;base64,", "data:image/gif;base64,", + "data:image/bmp;base64," + }; + + for (String prefix : prefixes) { + if (base64Str.startsWith(prefix)) { + return base64Str.substring(prefix.length()); + } + } + return base64Str; + } } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ExamServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ExamServiceImpl.java index fdac994..d318d1d 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ExamServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ExamServiceImpl.java @@ -294,6 +294,17 @@ public class ExamServiceImpl implements ExamService { //获取答题列表列表信息 pageList = query.page(page); + //已支付但未获取报告的答题列表补充支付标志 + List payLogList = assessmentPayLogService.lambdaQuery().eq(AssessmentPayLog::getUserId, hanHaiMember.getId()).list(); + for (AssessmentExamLog record : pageList.getRecords()) { + for (AssessmentPayLog assessmentPayLog : payLogList) { + if(record.getBatchNo().equals(assessmentPayLog.getBatchNo())){ + record.setIsPay(true); + continue; + } + } + } + log.info("答题列表查询结束"); return Result.OK("答题列表", pageList); }catch (Exception e){ @@ -423,6 +434,27 @@ public class ExamServiceImpl implements ExamService { assessmentPayLog.setId(payNo); assessmentPayLog.setUserId(hanHaiMember.getId()); + //判断支付金额是否小于等于0 + if(assessmentPayLog.getPayAmount().compareTo(BigDecimal.ZERO) < 1){ + assessmentPayLog.setPayAmount(BigDecimal.ZERO); + assessmentPayLog.setStatus("1"); + assessmentPayLog.setPayTime(CommonUtils.getCurrentTime());//支付时间 + //创建订单 + assessmentPayLogService.save(assessmentPayLog); + + //修改兑换码信息 + if(StringUtils.isNotEmpty(assessmentPayLog.getCode())){ + AssessmentCode code = assessmentCodeService.lambdaQuery().eq(AssessmentCode::getCode, assessmentPayLog.getCode()).one(); + code.setBatchNo(assessmentPayLog.getBatchNo()); + code.setIsUse("1"); + code.setUseTime(CommonUtils.getCurrentTime()); + code.setUserId(assessmentPayLog.getUserId()); + assessmentCodeService.updateById(code); + } + + return Result.OK("免费获取报告", null); + } + //创建订单 assessmentPayLogService.save(assessmentPayLog);