diff --git a/com-admin-client/src/main/java/com/jinrui/admin/client/controller/AdminSalesController.java b/com-admin-client/src/main/java/com/jinrui/admin/client/controller/AdminSalesController.java index 85907a2..a086afb 100644 --- a/com-admin-client/src/main/java/com/jinrui/admin/client/controller/AdminSalesController.java +++ b/com-admin-client/src/main/java/com/jinrui/admin/client/controller/AdminSalesController.java @@ -4,10 +4,14 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.jinrui.assembly.utils.result.ResultObject; +import com.jinrui.assembly.utils.result.ResultUtil; +import com.jinrui.assembly.utils.text.StringUtils; import com.jinrui.core.model.dto.admin.SalesCreateDTO; import com.jinrui.core.model.dto.admin.SalesDTO; +import com.jinrui.core.model.entity.MarriageCode; import com.jinrui.core.model.excel.MarriageSalesModel; import com.jinrui.core.model.excel.MarriageTotalModel; +import com.jinrui.core.service.IMarriageCodeService; import com.jinrui.core.service.IMarriageSalesService; import com.jinrui.core.util.excel.ImplProgressReportSheetWriteHandler; import lombok.extern.slf4j.Slf4j; @@ -19,7 +23,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Base64; import java.util.List; @RequestMapping("admin/sales") @@ -29,6 +39,9 @@ public class AdminSalesController { @Autowired private IMarriageSalesService marriageSalesService; + @Autowired + private IMarriageCodeService marriageCodeService; + /** * 分页获取业主列表 */ @@ -126,4 +139,68 @@ public class AdminSalesController { log.error("导出站点异常", e); } } + + @PostMapping("/saveSignImages") + public ResultObject saveSignImages() { + File dir = new File("signImage"); + if (!dir.exists()) { + dir.mkdirs(); + } + int saved = 0; + int total = 0; + int pageIndex = 1; + int pageSize = 20; + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.orderByAsc(MarriageCode::getId); + SimpleDateFormat format = new SimpleDateFormat("yyyyMM"); + while (true) { + Page page = new Page<>(pageIndex, pageSize); + Page data = marriageCodeService.page(page, wrapper); + List records = data.getRecords(); + if (records == null || records.isEmpty()) { + break; + } + for (MarriageCode mc : records) { + total++; + log.info("处理签名图片 id={} getSignImage is null :{},time:{}", mc.getId(),StringUtils.isBlank(mc.getSignImage()),mc.getReceiveTime()); + String s = mc.getSignImage(); + if (StringUtils.isBlank(s)) { + continue; + } + if (mc.getReceiveTime()==null) { + continue; + } + String date = format.format(mc.getReceiveTime()); + File datedir = new File(dir,date); + if (!datedir.exists()) { + datedir.mkdirs(); + } + String b64 = s; + int idx = s.indexOf(","); + if (s.startsWith("data:image") && idx > -1) { + b64 = s.substring(idx + 1); + } + + try { + byte[] bytes = Base64.getDecoder().decode(b64); + File out = new File(datedir, "sign_" + mc.getId() + ".png"); + try (FileOutputStream fos = new FileOutputStream(out)) { + fos.write(bytes); + } + mc.setSignImage(""); + marriageCodeService.saveOrUpdate(mc); + saved++; + } catch (Exception e) { + e.printStackTrace(); + log.error("写入签名图片失败 id={}", mc.getId()); + } + } + pageIndex++; + } + java.util.Map result = new java.util.HashMap<>(); + result.put("dir", dir.getAbsolutePath()); + result.put("saved", saved); + result.put("total", total); + return ResultUtil.success(result); + } } diff --git a/com-core-model/src/main/java/com/jinrui/core/service/impl/MarriageActivityServiceImpl.java b/com-core-model/src/main/java/com/jinrui/core/service/impl/MarriageActivityServiceImpl.java index 723eb8b..41fee59 100644 --- a/com-core-model/src/main/java/com/jinrui/core/service/impl/MarriageActivityServiceImpl.java +++ b/com-core-model/src/main/java/com/jinrui/core/service/impl/MarriageActivityServiceImpl.java @@ -27,7 +27,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; +import java.io.File; +import java.nio.file.Files; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -200,6 +203,7 @@ public class MarriageActivityServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MarriageCode::getSalesNo, dto.getSalesNo()); - queryWrapper.apply("DATE_FORMAT(receive_time,'%Y-%m') = {0}",dataTime); + queryWrapper.apply("DATE_FORMAT(receive_time,'%Y-%m') = {0}", dataTime); queryWrapper.orderByDesc(MarriageCode::getReceiveTime); Page page = new Page<>(dto.getPage(), dto.getSize()); Page pageData = iMarriageCodeService.page(page, queryWrapper); @@ -62,11 +61,11 @@ public class MarriageController { LambdaQueryWrapper queryWrapperSum = new LambdaQueryWrapper<>(); queryWrapperSum.select(MarriageCode::getReceiveMoney); queryWrapperSum.eq(MarriageCode::getSalesNo, dto.getSalesNo()); - queryWrapperSum.apply("DATE_FORMAT(receive_time,'%Y-%m') = {0}",dataTime); + queryWrapperSum.apply("DATE_FORMAT(receive_time,'%Y-%m') = {0}", dataTime); queryWrapperSum.orderByDesc(MarriageCode::getCreateTime); Integer amount = iMarriageCodeService.listObjs(queryWrapperSum, s -> Integer.valueOf(s.toString())).stream().reduce(Integer::sum).orElse(0); List vos = new ArrayList<>(); - if(Objects.nonNull(pageData.getRecords()) && CollectionUtils.isNotEmpty(pageData.getRecords())){ + if (Objects.nonNull(pageData.getRecords()) && CollectionUtils.isNotEmpty(pageData.getRecords())) { vos = pageData.getRecords().stream().map(m -> { MarriageCodeListVO vo = new MarriageCodeListVO(); BeanUtils.copyProperties(m, vo); @@ -75,8 +74,8 @@ public class MarriageController { } MarriageCodeVO marriageCodeVO = new MarriageCodeVO(); marriageCodeVO.setCodeList(vos); - marriageCodeVO.setReceiveCount(count+""); - marriageCodeVO.setReceiveAmount(amount+""); + marriageCodeVO.setReceiveCount(count + ""); + marriageCodeVO.setReceiveAmount(amount + ""); return ResultUtil.success(marriageCodeVO); } @@ -93,10 +92,10 @@ public class MarriageController { return ResultUtil.success(count); } - public boolean isNingXiaCode(String code) { - String ningXiaCodeArr[] = {"640000","640100","640101","640104","640105","640106","640121","640122","640181","640200","640201" - ,"640202","640205","640221","640300","640301","640302","640323","640324","640381","640400","640401","640402","640422" - ,"640423","640424","640425","640500","640501","640502","640521","640522"}; + public boolean isNingXiaCode(String code) { + String ningXiaCodeArr[] = {"640000", "640100", "640101", "640104", "640105", "640106", "640121", "640122", "640181", "640200", "640201" + , "640202", "640205", "640221", "640300", "640301", "640302", "640323", "640324", "640381", "640400", "640401", "640402", "640422" + , "640423", "640424", "640425", "640500", "640501", "640502", "640521", "640522"}; boolean isNingXiaCode = false; List ningXiaCodeList = Arrays.asList(ningXiaCodeArr); if (ningXiaCodeList.contains(code)) { @@ -112,37 +111,39 @@ public class MarriageController { System.out.println(substring); System.out.println(substring1); } + public Boolean checkMarriageNo(String marriageNo) { boolean canReceive = false; String code = marriageNo.substring(0, 6); String year = marriageNo.substring(6, 10); - if("2025".equals(year) && marriageNo.startsWith("640")){ + if ("2025".equals(year) && marriageNo.startsWith("640")) { canReceive = true; } return canReceive; } + @PostMapping("/receiveCheck") public ResultObject receiveCheck(@RequestBody MarriageCodeDTO dto) { - if(StringUtils.isBlank(dto.getMarriageNo())){ + if (StringUtils.isBlank(dto.getMarriageNo())) { return ResultUtil.failedMessage("结婚证字号不能为空!"); - }else{ + } else { int length = dto.getMarriageNo().length(); - if(length<11){ + if (length < 11) { return ResultUtil.failedMessage("结婚证字号长度不对!"); - }else{ - if(!checkMarriageNo(dto.getMarriageNo())){ + } else { + if (!checkMarriageNo(dto.getMarriageNo())) { return ResultUtil.failedMessage("结婚证字号不符合活动条件!"); } } } - if(StringUtils.isBlank(dto.getReceiveName())){ + if (StringUtils.isBlank(dto.getReceiveName())) { return ResultUtil.failedMessage("领取人姓名不能为空!"); } - if(StringUtils.isBlank(dto.getReceiveMobile())){ + if (StringUtils.isBlank(dto.getReceiveMobile())) { return ResultUtil.failedMessage("领取人手机号不能为空!"); } - if(StringUtils.isBlank(dto.getCode())){ + if (StringUtils.isBlank(dto.getCode())) { return ResultUtil.failedMessage("核验码不能为空!"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -155,7 +156,7 @@ public class MarriageController { queryWrapper.last("limit 1"); MarriageCode marriageCode = iMarriageCodeService.getOne(queryWrapper); - if(Objects.nonNull(marriageCode)){ + if (Objects.nonNull(marriageCode)) { if (dto.getReceiveMobile().equals(marriageCode.getReceiveMobile())) { return ResultUtil.failedMessage("该领取人已领取过新婚送福活动刮刮乐!"); } @@ -167,9 +168,9 @@ public class MarriageController { } } - String key = RedisCacheKey.VERICODE_MOBILE +"1-"+ dto.getReceiveMobile(); - String verifyCode = (String)redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key); - if(!StringUtils.equals(dto.getSmsCode(), verifyCode)){ + String key = RedisCacheKey.VERICODE_MOBILE + "1-" + dto.getReceiveMobile(); + String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key); + if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) { return ResultUtil.failedMessage("验证码错误,请重新输入!"); } Date now = DateTimeUtil.now(); @@ -189,29 +190,29 @@ public class MarriageController { @PostMapping("/receiveCode") public ResultObject receiveCode(@RequestBody MarriageCodeDTO dto) { - if(StringUtils.isBlank(dto.getMarriageNo())){ + if (StringUtils.isBlank(dto.getMarriageNo())) { return ResultUtil.failedMessage("结婚证字号不能为空!"); - }else{ + } else { int length = dto.getMarriageNo().length(); - if(length<11){ + if (length < 11) { return ResultUtil.failedMessage("结婚证字号长度不对!"); - }else{ - if(!checkMarriageNo(dto.getMarriageNo())){ + } else { + if (!checkMarriageNo(dto.getMarriageNo())) { return ResultUtil.failedMessage("结婚证字号不符合活动条件!"); } } } - if(StringUtils.isBlank(dto.getReceiveName())){ + if (StringUtils.isBlank(dto.getReceiveName())) { return ResultUtil.failedMessage("领取人姓名不能为空!"); } - if(StringUtils.isBlank(dto.getReceiveMobile())){ + if (StringUtils.isBlank(dto.getReceiveMobile())) { return ResultUtil.failedMessage("领取人手机号不能为空!"); } - if(StringUtils.isBlank(dto.getCode())){ + if (StringUtils.isBlank(dto.getCode())) { return ResultUtil.failedMessage("核验码不能为空!"); } - if(StringUtils.isBlank(dto.getSignImage())){ + if (StringUtils.isBlank(dto.getSignImage())) { return ResultUtil.failedMessage("领取人签字不能为空!"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -223,7 +224,7 @@ public class MarriageController { queryWrapper.last("limit 1"); MarriageCode marriageCode = iMarriageCodeService.getOne(queryWrapper); - if(Objects.nonNull(marriageCode)){ + if (Objects.nonNull(marriageCode)) { if (dto.getReceiveMobile().equals(marriageCode.getReceiveMobile())) { return ResultUtil.failedMessage("该领取人已领取过新婚送福活动刮刮乐!"); } @@ -237,29 +238,71 @@ public class MarriageController { queryWrapper1.orderByDesc(MarriageCode::getCreateTime); queryWrapper1.last("limit 1"); MarriageCode code1 = iMarriageCodeService.getOne(queryWrapper1); - if(Objects.isNull(code1)){ + if (Objects.isNull(code1)) { return ResultUtil.failedMessage("此代金卷不正确,请重试!"); - }else{ - if(StringUtils.isNotBlank(code1.getMarriageNo()) && StringUtils.isNotBlank(code1.getSalesNo())){ + } else { + if (StringUtils.isNotBlank(code1.getMarriageNo()) && StringUtils.isNotBlank(code1.getSalesNo())) { return ResultUtil.failedMessage("此代金卷已使用过!"); } } - String key = RedisCacheKey.VERICODE_MOBILE +"1-"+ dto.getReceiveMobile(); - String verifyCode = (String)redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key); - if(!StringUtils.equals(dto.getSmsCode(), verifyCode)){ + String key = RedisCacheKey.VERICODE_MOBILE + "1-" + dto.getReceiveMobile(); + String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key); + if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) { return ResultUtil.failedMessage("验证码错误,请重新输入!"); } Date now = DateTimeUtil.now(); code1.setMarriageNo(dto.getMarriageNo()); code1.setReceiveName(dto.getReceiveName()); code1.setReceiveMobile(dto.getReceiveMobile()); - code1.setSignImage(dto.getSignImage()); + + +// code1.setSignImage(dto.getSignImage()); code1.setSalesNo(dto.getSalesNo()); code1.setReceiveMoney(6000); code1.setReceiveTime(now); code1.setStatus(1); iMarriageCodeService.updateById(code1); + savaSign(code1, dto.getSignImage()); return ResultUtil.success(); } + + private void savaSign(MarriageCode mc, String s) { + File dir = new File("signImage"); + if (!dir.exists()) { + dir.mkdirs(); + } + log.info("处理签名图片 id={} getSignImage is null :{},time:{}", mc.getId(), StringUtils.isBlank(s), mc.getReceiveTime()); + if (com.jinrui.assembly.utils.text.StringUtils.isBlank(s)) { + return; + } + if (mc.getReceiveTime() == null) { + return; + } + SimpleDateFormat format = new SimpleDateFormat("yyyyMM"); + String date = format.format(mc.getReceiveTime()); + File datedir = new File(dir, date); + if (!datedir.exists()) { + datedir.mkdirs(); + } + String b64 = s; + int idx = s.indexOf(","); + if (s.startsWith("data:image") && idx > -1) { + b64 = s.substring(idx + 1); + } + + try { + byte[] bytes = Base64.getDecoder().decode(b64); + File out = new File(datedir, "sign_" + mc.getId() + ".png"); + try (FileOutputStream fos = new FileOutputStream(out)) { + fos.write(bytes); + } + mc.setSignImage(null); + } catch (Exception e) { + e.printStackTrace(); + log.error("写入签名图片失败 id={}", mc.getId()); + } + } + } +