| @@ -47,13 +47,15 @@ | |||||
| <version>5.2.4</version> | <version>5.2.4</version> | ||||
| </dependency> | </dependency> | ||||
| <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j --> | |||||
| <!-- ocr --> | |||||
| <dependency> | <dependency> | ||||
| <groupId>net.sourceforge.tess4j</groupId> | |||||
| <artifactId>tess4j</artifactId> | |||||
| <version>4.5.2</version> | |||||
| <groupId>com.iformall</groupId> | |||||
| <artifactId>mallinkOcr</artifactId> | |||||
| <version>1.0</version> | |||||
| </dependency> | </dependency> | ||||
| </dependencies> | </dependencies> | ||||
| <build> | <build> | ||||
| @@ -105,4 +105,12 @@ public class WxActivityController extends BaseController { | |||||
| return wxActivityService.sendToCampaign(id); | return wxActivityService.sendToCampaign(id); | ||||
| } | } | ||||
| @ApiOperation("从宣传页下线") | |||||
| @PostMapping("offLineCampaign") | |||||
| @SystemControllerLog(description = "活动-更新状态") | |||||
| public ResultData offLineCampaign(@RequestBody WxActivity wxActivity) { | |||||
| logger.debug("[" + getIpAddr() + "] WxActivityController::updateStatus"); | |||||
| return wxActivityService.offLineCampaign(wxActivity); | |||||
| } | |||||
| } | } | ||||
| @@ -1,5 +1,5 @@ | |||||
| INSERT INTO `mallink`.`wx_score_rules`(`id`, `tenant_id`, `type`, `scale`) | INSERT INTO `mallink`.`wx_score_rules`(`id`, `tenant_id`, `type`, `scale`) | ||||
| select CEILING(RAND()*90000000000+10000000000),`tenant_id`,4,`scale` from wx_score_rules where type = 2 and scale > 10; | select CEILING(RAND()*90000000000+10000000000),`tenant_id`,4,`scale` from wx_score_rules where type = 2 and scale > 10; | ||||
| --集团版手动处理,(集团版不存在这类数据,子集团数据与原集团规则相等) | |||||
| --集团版手动处理,(集团版不存在这类数据,子集团生日倍率数据与原集团规则相等) | |||||
| --目前集团版(1008-1020-----1028)(1026-1027-----1025) | --目前集团版(1008-1020-----1028)(1026-1027-----1025) | ||||
| @@ -0,0 +1,8 @@ | |||||
| update wx_score_rules set rules = concat(SUBSTRING(rules,1,char_length(rules)-1), | |||||
| ",{\"id\": 17, \"desc\": \"每日签到\", \"step\": 1, \"limit\": 1, \"score\": 0}", | |||||
| ",{\"id\": 18, \"desc\": \"连续签到7天\", \"step\": 1, \"limit\": 1, \"score\": 0}", | |||||
| ",{\"id\": 19, \"desc\": \"连续签到14天\", \"step\": 1, \"limit\": 1, \"score\": 0}", | |||||
| ",{\"id\": 20, \"desc\": \"连续签到28天\", \"step\": 1, \"limit\": 1, \"score\": 0}", | |||||
| RIGHT(rules,1)) where type = 2 | |||||
| --type=2 积分规则,每日登陆去掉-- 缓存--缓存--缓存 | |||||
| @@ -0,0 +1,24 @@ | |||||
| CREATE TABLE `wx_merchant_ocr_model` ( | |||||
| `id` bigint(20) NOT NULL, | |||||
| `merchant_id` bigint(20) NOT NULL COMMENT '商户编号', | |||||
| `ocr_model_id` bigint(20) NOT NULL COMMENT 'ocr模板编号', | |||||
| `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |||||
| `tenant_id` varchar(5) DEFAULT NULL COMMENT '租户id', | |||||
| `parent_tenant_id` varchar(5) DEFAULT NULL, | |||||
| `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, | |||||
| PRIMARY KEY (`id`), | |||||
| UNIQUE KEY `UNIQUE` (`merchant_id`) | |||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | |||||
| CREATE TABLE `wx_ocr_model` ( | |||||
| `id` bigint(20) NOT NULL, | |||||
| `lang_code` varchar(20) NOT NULL DEFAULT 'iformallLang' COMMENT '语言定义', | |||||
| `font_name` varchar(20) NOT NULL COMMENT '字库名称', | |||||
| `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||||
| `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||||
| `remark` text COMMENT '说明', | |||||
| `status` tinyint(1) DEFAULT '0' COMMENT '0-有效 1-无效', | |||||
| PRIMARY KEY (`id`), | |||||
| UNIQUE KEY `UNIQUE` (`font_name`) | |||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | |||||
| @@ -16,6 +16,17 @@ | |||||
| <groupId>com.iformall</groupId> | <groupId>com.iformall</groupId> | ||||
| <artifactId>mallinkService</artifactId> | <artifactId>mallinkService</artifactId> | ||||
| <version>1.0</version> | <version>1.0</version> | ||||
| </dependency> <!-- ocr --> | |||||
| <dependency> | |||||
| <groupId>com.iformall</groupId> | |||||
| <artifactId>mallinkOcr</artifactId> | |||||
| <version>1.0</version> | |||||
| </dependency> | |||||
| <!-- ocr --> | |||||
| <dependency> | |||||
| <groupId>com.iformall</groupId> | |||||
| <artifactId>mallinkOcr</artifactId> | |||||
| <version>1.0</version> | |||||
| </dependency> | </dependency> | ||||
| </dependencies> | </dependencies> | ||||
| <build> | <build> | ||||
| @@ -32,6 +32,9 @@ public class CApplication { | |||||
| @Value("${fm.upload_dir}") | @Value("${fm.upload_dir}") | ||||
| private String uploadDir; | private String uploadDir; | ||||
| @Value("${fm.ocr_data}") | |||||
| private String ocrData; | |||||
| @Bean | @Bean | ||||
| public boolean isFmException() { | public boolean isFmException() { | ||||
| @@ -1,20 +1,27 @@ | |||||
| package com.iformall.controller; | package com.iformall.controller; | ||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.WxActivity; | import com.iformall.domain.po.WxActivity; | ||||
| import com.iformall.domain.po.base.BaseEntity; | |||||
| import com.iformall.enums.EnumActivityStatus; | |||||
| import com.iformall.service.WxActivityService; | import com.iformall.service.WxActivityService; | ||||
| import com.iformall.utils.DateUtils; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | |||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.ModelAttribute; | |||||
| import org.springframework.web.bind.annotation.RequestMapping; | import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
| import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.Date; | |||||
| import java.util.HashMap; | import java.util.HashMap; | ||||
| import java.util.Map; | import java.util.Map; | ||||
| @@ -30,6 +37,38 @@ public class WxActivityController extends BaseController { | |||||
| @Autowired | @Autowired | ||||
| private WxActivityService wxActivityService; | private WxActivityService wxActivityService; | ||||
| @ApiOperation("分页列表接口") | |||||
| @GetMapping("list") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||||
| public ResultData list(@ModelAttribute WxActivity wxActivity, Integer pageNum, Integer pageSize) { | |||||
| logger.debug("[" + getIpAddr() + "] WxActivityController::list"); | |||||
| if (null == wxActivity) wxActivity = new WxActivity(); | |||||
| wxActivity.setStatus(EnumActivityStatus.INJECT_ONLINE.getCode()); | |||||
| wxActivity.updateTenantInfo(getTenantInfo()); | |||||
| wxActivity.setSortColumns(BaseEntity.SortField.ActivityStartTime_DESC,BaseEntity.SortField.Id_DESC); | |||||
| final PageInfo<WxActivity> page = wxActivityService.listAsPage(wxActivity, pageNum, pageSize); | |||||
| return new ResultData(page); | |||||
| } | |||||
| @ApiOperation("") | |||||
| @GetMapping("listStatus") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||||
| public ResultData listStatus(@ModelAttribute WxActivity wxActivity) { | |||||
| logger.debug("[" + getIpAddr() + "] WxActivityController::list"); | |||||
| if (null == wxActivity) wxActivity = new WxActivity(); | |||||
| wxActivity.setStatus(EnumActivityStatus.INJECT_ONLINE.getCode()); | |||||
| wxActivity.updateTenantInfo(getTenantInfo()); | |||||
| wxActivity.setSortColumns(BaseEntity.SortField.ActivityStartTime_DESC,BaseEntity.SortField.Id_DESC); | |||||
| if(wxActivity.getStartDate() == null || wxActivity.getEndDate() == null){ | |||||
| wxActivity.setStartDate(DateUtils.getFirstDayForCurrMonth()); | |||||
| wxActivity.setEndDate(DateUtils.getLastDayForMonth(new Date())); | |||||
| } | |||||
| return wxActivityService.getListStatus(wxActivity); | |||||
| } | |||||
| @ApiOperation("查询活动状态") | @ApiOperation("查询活动状态") | ||||
| @GetMapping("/queryStatus") | @GetMapping("/queryStatus") | ||||
| @@ -0,0 +1,189 @@ | |||||
| package com.iformall.controller; | |||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxCUserBasicSign; | |||||
| import com.iformall.domain.po.WxCreditHistory; | |||||
| import com.iformall.enums.EnumScoreType; | |||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.service.WxCUserBasicSignService; | |||||
| import com.iformall.utils.DateUtils; | |||||
| import io.swagger.annotations.Api; | |||||
| import io.swagger.annotations.ApiImplicitParam; | |||||
| import io.swagger.annotations.ApiImplicitParams; | |||||
| import io.swagger.annotations.ApiOperation; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Date; | |||||
| import java.util.Map; | |||||
| @RestController | |||||
| @RequestMapping("/api/userSign") | |||||
| @Api(description = "签到接口") | |||||
| public class WxCUserBasicSignController extends BaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| private WxCUserBasicSignService wxCUserBasicSignService; | |||||
| @ApiOperation("用户签到列表") | |||||
| @GetMapping("list") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name="pageNum",value="页数",dataType="int", paramType = "query",required=true), | |||||
| @ApiImplicitParam(name="pageSize",value="每页条数",dataType="int", paramType = "query",required=true)}) | |||||
| public ResultData list(@ModelAttribute WxCUserBasicSign wxCUserBasicSign, Integer pageNum, Integer pageSize) { | |||||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::list"); | |||||
| if (null == wxCUserBasicSign){ | |||||
| wxCUserBasicSign = new WxCUserBasicSign(); | |||||
| } | |||||
| Long memberId; | |||||
| try { | |||||
| memberId = getMemberId(); | |||||
| } catch (MallinkException me) { | |||||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||||
| } | |||||
| // wxCUserBasicSign.updateTenantInfo(getTenantInfo()); | |||||
| wxCUserBasicSign.setTenantId(getTenantInfo().getFinalTenantId()); | |||||
| wxCUserBasicSign.setUserId(memberId); | |||||
| final PageInfo<WxCUserBasicSign> page = wxCUserBasicSignService.listAsPage(wxCUserBasicSign, pageNum, pageSize); | |||||
| return new ResultData(page); | |||||
| } | |||||
| @ApiOperation("") | |||||
| @GetMapping("listStatus") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||||
| public ResultData listStatus(@ModelAttribute WxCUserBasicSign wxCUserBasicSign) { | |||||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::listStatus"); | |||||
| if (null == wxCUserBasicSign){ | |||||
| wxCUserBasicSign = new WxCUserBasicSign(); | |||||
| } | |||||
| Long memberId; | |||||
| try { | |||||
| memberId = getMemberId(); | |||||
| } catch (MallinkException me) { | |||||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||||
| } | |||||
| // wxCUserBasicSign.updateTenantInfo(getTenantInfo()); | |||||
| wxCUserBasicSign.setTenantId(getTenantInfo().getFinalTenantId()); | |||||
| wxCUserBasicSign.setUserId(memberId); | |||||
| if(wxCUserBasicSign.getStartDate() == null || wxCUserBasicSign.getEndDate() == null){ | |||||
| wxCUserBasicSign.setStartDate(DateUtils.getFirstDayForCurrMonth()); | |||||
| wxCUserBasicSign.setEndDate(DateUtils.getLastDayForMonth(new Date())); | |||||
| } | |||||
| return wxCUserBasicSignService.getListStatus(wxCUserBasicSign); | |||||
| } | |||||
| @ApiOperation("签到") | |||||
| @PostMapping("signIn") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "", value = "", dataType = "", paramType = "", required = true)}) | |||||
| public ResultData signIn(@RequestBody WxCUserBasicSign wxCUserBasicSign) { | |||||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::signIn"); | |||||
| if (null == wxCUserBasicSign){ | |||||
| wxCUserBasicSign = new WxCUserBasicSign(); | |||||
| } | |||||
| Long memberId; | |||||
| try { | |||||
| memberId = getMemberId(); | |||||
| } catch (MallinkException me) { | |||||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||||
| } | |||||
| // wxCUserBasicSign.updateTenantInfo(getTenantInfo()); | |||||
| wxCUserBasicSign.setTenantId(getTenantInfo().getFinalTenantId()); | |||||
| wxCUserBasicSign.setUserId(memberId); | |||||
| WxCUserBasicSign todaySign = wxCUserBasicSignService.getTodaySignIn(wxCUserBasicSign); | |||||
| if(todaySign == null){ | |||||
| try { | |||||
| todaySign = wxCUserBasicSignService.signIn(wxCUserBasicSign); | |||||
| }catch(Exception e){ | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||||
| } | |||||
| if(todaySign == null){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR,"type"); | |||||
| } | |||||
| return new ResultData(todaySign); | |||||
| }else{ | |||||
| return new ResultData(ErrorCode.MEM_IS_SIGNIN,todaySign); | |||||
| } | |||||
| } | |||||
| @ApiOperation("签到状态") | |||||
| @GetMapping("signInStatus") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "", value = "", dataType = "", paramType = "", required = true)}) | |||||
| public ResultData signInStatus() { | |||||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::signIn"); | |||||
| WxCUserBasicSign wxCUserBasicSign = new WxCUserBasicSign(); | |||||
| Long memberId; | |||||
| try { | |||||
| memberId = getMemberId(); | |||||
| } catch (MallinkException me) { | |||||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||||
| } | |||||
| // wxCUserBasicSign.updateTenantInfo(getTenantInfo()); | |||||
| wxCUserBasicSign.setTenantId(getTenantInfo().getFinalTenantId()); | |||||
| wxCUserBasicSign.setUserId(memberId); | |||||
| Map<String, Integer> map = wxCUserBasicSignService.getLastSignIn(wxCUserBasicSign); | |||||
| return new ResultData(map); | |||||
| } | |||||
| @ApiOperation("签到领取") | |||||
| @PostMapping("signInCredit") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "", value = "", dataType = "", paramType = "", required = true)}) | |||||
| public ResultData signInCredit(@RequestBody WxCreditHistory wxCreditHistory) { | |||||
| logger.debug("[" + getIpAddr() + "] WxCUserBasicSignController::signIn"); | |||||
| if (null == wxCreditHistory){ | |||||
| wxCreditHistory = new WxCreditHistory(); | |||||
| } | |||||
| Long memberId; | |||||
| try { | |||||
| memberId = getMemberId(); | |||||
| } catch (MallinkException me) { | |||||
| return new ResultData(ErrorCode.getByCode(me.getErrorCode())); | |||||
| } | |||||
| WxCUserBasicSign wxCUserBasicSign = new WxCUserBasicSign(); | |||||
| wxCUserBasicSign.setTenantId(getFinalTenantId()); | |||||
| wxCUserBasicSign.setUserId(memberId); | |||||
| Map<String, Integer> map = wxCUserBasicSignService.getLastSignIn(wxCUserBasicSign); | |||||
| int continueMonthSign = map.get("continueMonthSign");//本月连续签到天数 | |||||
| int continueSign = map.get("continueSign");//连续签到天数 | |||||
| int signInSevenDay = map.get("signInSevenDay");//7日连续奖励 | |||||
| int signInFTDay = map.get("signInFTDay");//14日连续奖励 | |||||
| int signInTEDay = map.get("signInTEDay");//28日连续奖励 | |||||
| if(wxCreditHistory.getCreditType().equals(EnumScoreType.SIGN_IN_SEVENDAY.getCode())){ | |||||
| if(continueSign >= 7 && signInSevenDay == 0){ | |||||
| wxCUserBasicSignService.signInCreditHistory(wxCUserBasicSign,EnumScoreType.SIGN_IN_SEVENDAY); | |||||
| return new ResultData(); | |||||
| } | |||||
| return new ResultData(ErrorCode.MEM_MONTH_IS_USED); | |||||
| }else if(wxCreditHistory.getCreditType().equals(EnumScoreType.SIGN_IN_FTDAY.getCode())){ | |||||
| if(continueSign >= 14 && signInFTDay == 0){ | |||||
| wxCUserBasicSignService.signInCreditHistory(wxCUserBasicSign,EnumScoreType.SIGN_IN_FTDAY); | |||||
| return new ResultData(); | |||||
| } | |||||
| return new ResultData(ErrorCode.MEM_MONTH_IS_USED); | |||||
| }else if(wxCreditHistory.getCreditType().equals(EnumScoreType.SIGN_IN_TEDAY.getCode())){ | |||||
| if(continueSign >= 28 && signInTEDay == 0){ | |||||
| wxCUserBasicSignService.signInCreditHistory(wxCUserBasicSign,EnumScoreType.SIGN_IN_TEDAY); | |||||
| return new ResultData(); | |||||
| } | |||||
| return new ResultData(ErrorCode.MEM_MONTH_IS_USED); | |||||
| }else{ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR,"creditType"); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,63 @@ | |||||
| package com.iformall.controller; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxMerchantOcrModel; | |||||
| import com.iformall.domain.po.WxOcrModel; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.ocr.FormallTess4j; | |||||
| import com.iformall.service.WxOcrService; | |||||
| import io.swagger.annotations.Api; | |||||
| import io.swagger.annotations.ApiImplicitParam; | |||||
| import io.swagger.annotations.ApiImplicitParams; | |||||
| import io.swagger.annotations.ApiOperation; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.GetMapping; | |||||
| import org.springframework.web.bind.annotation.RequestMapping; | |||||
| import org.springframework.web.bind.annotation.RestController; | |||||
| /** | |||||
| * @author gongbiao | |||||
| */ | |||||
| @RestController | |||||
| @RequestMapping("/api/wxOcr") | |||||
| @Api(description = "ocr") | |||||
| public class WxOcrController extends BaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| private WxOcrService ocrService; | |||||
| @Autowired | |||||
| private String ocrData; | |||||
| @ApiOperation("分析图片信息") | |||||
| @GetMapping("/analyImage") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "merchantId", value = "商户编号", dataType = "Long", paramType = "query", required = true), | |||||
| @ApiImplicitParam(name = "imageUrl", value = "小票图片url", dataType = "String", paramType = "query", required = true), | |||||
| }) | |||||
| public ResultData analyImage(Long merchantId,String imageUrl) { | |||||
| TenantEntity tenantEntity = getTenantInfo(); | |||||
| WxMerchantOcrModel MerchantModel = ocrService.getMerchantOcrModel(merchantId, tenantEntity.getTenantId(), tenantEntity.getParentTenantId()); | |||||
| if (null == MerchantModel) { | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "当前商户没有配置OCR模板"); | |||||
| } | |||||
| WxOcrModel ocrModel = ocrService.getOcrModelById(MerchantModel.getOcrModelId()); | |||||
| if (null == ocrModel) { | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "当前商户配置的OCR模板未查询到"); | |||||
| } | |||||
| String result; | |||||
| try { | |||||
| result = FormallTess4j.ocrNetImgFile(ocrData,imageUrl,ocrModel.getFontName()); | |||||
| return new ResultData(result); | |||||
| } catch (Exception e) { | |||||
| logger.error("ocr识别失败。",e); | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "ocr识别失败。"+e.getMessage()); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1014,7 +1014,7 @@ public class WxUserGrantController extends BaseController { | |||||
| wxCUserBasicInfoService.updateQrCode(wxCUserBasicInfo); | wxCUserBasicInfoService.updateQrCode(wxCUserBasicInfo); | ||||
| } | } | ||||
| } | } | ||||
| RedisCacheUtils.cache(objectCommonRedisTemplate, key, qrCode, Constant.S_D_EXPIRE); | |||||
| RedisCacheUtils.cache(objectCommonRedisTemplate, key, qrCode, 0); | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error("getUserinfoQrCode error.",e); | logger.error("getUserinfoQrCode error.",e); | ||||
| @@ -160,6 +160,7 @@ fm: | |||||
| deploy: 1 | deploy: 1 | ||||
| open: true | open: true | ||||
| upload_dir: /home/test/server/uploads/ | upload_dir: /home/test/server/uploads/ | ||||
| ocr_data: /home/test/server/ocr_data/ | |||||
| logging: | logging: | ||||
| level: | level: | ||||
| @@ -115,6 +115,7 @@ fm: | |||||
| deploy: 3 | deploy: 3 | ||||
| open: true | open: true | ||||
| upload_dir: /root/uploads/ | upload_dir: /root/uploads/ | ||||
| ocr_data: /root/ocr_data/ | |||||
| logging: | logging: | ||||
| level: | level: | ||||
| @@ -93,6 +93,7 @@ fm: | |||||
| deploy: 2 | deploy: 2 | ||||
| open: true | open: true | ||||
| upload_dir: /home/ec2-user/server/uploads/ | upload_dir: /home/ec2-user/server/uploads/ | ||||
| ocr_data: /home/ec2-user/server/ocr_data/ | |||||
| logging: | logging: | ||||
| level: | level: | ||||
| @@ -15,20 +15,27 @@ | |||||
| <dependency> | <dependency> | ||||
| <groupId>net.java.dev.jna</groupId> | <groupId>net.java.dev.jna</groupId> | ||||
| <artifactId>jna</artifactId> | <artifactId>jna</artifactId> | ||||
| <version>4.1.0</version> | |||||
| <version>5.3.1</version> | |||||
| </dependency> | </dependency> | ||||
| <dependency> | <dependency> | ||||
| <groupId>net.sourceforge.tess4j</groupId> | <groupId>net.sourceforge.tess4j</groupId> | ||||
| <artifactId>tess4j</artifactId> | <artifactId>tess4j</artifactId> | ||||
| <version>3.4.0</version> | |||||
| <version>4.4.0</version> | |||||
| <exclusions> | <exclusions> | ||||
| <exclusion> | <exclusion> | ||||
| <groupId>com.sun.jna</groupId> | |||||
| <artifactId>jna</artifactId> | |||||
| </exclusion> | |||||
| <artifactId>commons-io</artifactId> | |||||
| <groupId>commons-io</groupId> | |||||
| </exclusion> | |||||
| <exclusion> | |||||
| <artifactId>commons-logging</artifactId> | |||||
| <groupId>commons-logging</groupId> | |||||
| </exclusion> | |||||
| <exclusion> | |||||
| <artifactId>jna</artifactId> | |||||
| <groupId>net.java.dev.jna</groupId> | |||||
| </exclusion> | |||||
| </exclusions> | </exclusions> | ||||
| </dependency> | </dependency> | ||||
| </dependencies> | </dependencies> | ||||
| </project> | </project> | ||||
| @@ -124,16 +124,16 @@ public class FormallTess4j { | |||||
| } | } | ||||
| } | } | ||||
| public static String ocrLocalImgFile(String filePath,String dataPath) throws Exception { | |||||
| File imageFile = new File(filePath); | |||||
| String result = testDoOCR_File(imageFile,dataPath); | |||||
| private static String ocrLocalImgFile(String languagePath,String filePath,String fontName) throws Exception { | |||||
| File imageFile = new File(filePath,fontName); | |||||
| String result = testDoOCR_File(languagePath,imageFile,fontName); | |||||
| deletetempFile(imageFile); | deletetempFile(imageFile); | ||||
| return result; | return result; | ||||
| } | } | ||||
| public static String ocrNetImgFile(String fileUrl,String dataPath) throws Exception { | |||||
| public static String ocrNetImgFile(String languagePath,String fileUrl,String fontName) throws Exception { | |||||
| File imageFile = urlImgToFile(fileUrl); | File imageFile = urlImgToFile(fileUrl); | ||||
| String result = testDoOCR_File(imageFile,dataPath); | |||||
| String result = testDoOCR_File(languagePath,imageFile,fontName); | |||||
| deletetempFile(imageFile); | deletetempFile(imageFile); | ||||
| return result; | return result; | ||||
| } | } | ||||
| @@ -143,11 +143,11 @@ public class FormallTess4j { | |||||
| * 根据图片文件进行识别 | * 根据图片文件进行识别 | ||||
| * @throws Exception while processing image. | * @throws Exception while processing image. | ||||
| */ | */ | ||||
| private static String testDoOCR_File(File imageFile,String dataPath) throws Exception { | |||||
| public static String testDoOCR_File(String languagePath,File imageFile,String fontName) throws Exception { | |||||
| logger.info("doOCR on a jpg image"); | logger.info("doOCR on a jpg image"); | ||||
| //set language | //set language | ||||
| instance.setDatapath(dataPath); | |||||
| instance.setLanguage("chi_sim"); | |||||
| instance.setDatapath(languagePath); | |||||
| instance.setLanguage(fontName); | |||||
| String result = instance.doOCR(imageFile); | String result = instance.doOCR(imageFile); | ||||
| return result; | return result; | ||||
| } | } | ||||
| @@ -155,14 +155,13 @@ public class FormallTess4j { | |||||
| public static void main(String[] args) { | public static void main(String[] args) { | ||||
| try { | try { | ||||
| System.out.println(ocrNetImgFile("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.my0832.com%2Fattachments%2Fbbs%2F20140424%2F201442413083356803_740_1186.jpg&refer=http%3A%2F%2Fimg.my0832.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1613903848&t=985fc4c6c7b7ee82cb98f97ab5bf1459",testResourcesLanguagePath)); | |||||
| System.out.println(ocrNetImgFile(testResourcesLanguagePath,"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.my0832.com%2Fattachments%2Fbbs%2F20140424%2F201442413083356803_740_1186.jpg&refer=http%3A%2F%2Fimg.my0832.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1613903848&t=985fc4c6c7b7ee82cb98f97ab5bf1459","test1")); | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| // TODO Auto-generated catch block | // TODO Auto-generated catch block | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| } | } | ||||
| } | } | ||||
| // | // | ||||
| // /** | // /** | ||||
| // * Test of doOCR method, of class Tesseract. | // * Test of doOCR method, of class Tesseract. | ||||
| @@ -0,0 +1,134 @@ | |||||
| package com.iformall.ocr; | |||||
| import java.io.BufferedWriter; | |||||
| import java.io.File; | |||||
| import java.io.FileWriter; | |||||
| import java.io.IOException; | |||||
| import java.io.InputStreamReader; | |||||
| import java.io.LineNumberReader; | |||||
| /** | |||||
| * 训练 | |||||
| * @author iformall | |||||
| */ | |||||
| public class FormallTess4jTrain { | |||||
| private static final String newFileFolder = "C:\\Users\\iformall\\Desktop\\newfile"; | |||||
| private static final String huanhangstr = " \n"; | |||||
| private static String getprefix(String lang,String fontName) { | |||||
| String realFileName = lang+"."+fontName+".exp0"; | |||||
| return realFileName; | |||||
| } | |||||
| private static String createBoxFile(String tifFileName,String lang,String fontName) { | |||||
| String prefix = getprefix(lang,fontName); | |||||
| String realFileName = prefix+".tif"; | |||||
| if (tifFileName.equals(realFileName)) { | |||||
| String cmdstr = "tesseract "+tifFileName+" "+prefix+" -l chi_sim batch.nochop makebox"; | |||||
| return cmdstr; | |||||
| //String result = executeLocalCmd(cmdstr, null); | |||||
| //System.out.println("Done createBoxFile"+result); | |||||
| }else { | |||||
| return "文件必须是.tif"; | |||||
| } | |||||
| } | |||||
| private static String createTranFile(String lang,String fontName) { | |||||
| String prefix = getprefix(lang,fontName); | |||||
| String realFileName = prefix+".tif"; | |||||
| String trainCmdstr = "tesseract "+realFileName+" "+prefix+" nobatch box.train"; | |||||
| return trainCmdstr; | |||||
| } | |||||
| private static String getBoxFont(String lang,String fontName) { | |||||
| String prefix = getprefix(lang,fontName); | |||||
| String extractorCmdstr = "unicharset_extractor "+prefix+".box"; | |||||
| return extractorCmdstr; | |||||
| } | |||||
| /** | |||||
| * 第六步,执行完成后生成以下几个文件加前缀 | |||||
| * unicharset、inttemp、pffmtable、shapetable、normproto 添加这几个文件的前缀为fontName | |||||
| * @param lang | |||||
| * @param fontName | |||||
| * @return | |||||
| */ | |||||
| private static String renameTrainFiles(String fontName) { | |||||
| StringBuffer sb = new StringBuffer(); | |||||
| String renCmdstr = "REN unicharset "+fontName+".unicharset"; | |||||
| sb.append(renCmdstr).append(huanhangstr); | |||||
| renCmdstr = "REN inttemp "+fontName+".inttemp"; | |||||
| sb.append(renCmdstr).append(huanhangstr); | |||||
| renCmdstr = "REN pffmtable "+fontName+".pffmtable"; | |||||
| sb.append(renCmdstr).append(huanhangstr); | |||||
| renCmdstr = "REN shapetable "+fontName+".shapetable"; | |||||
| sb.append(renCmdstr).append(huanhangstr); | |||||
| renCmdstr = "REN normproto "+fontName+".normproto"; | |||||
| sb.append(renCmdstr).append(huanhangstr); | |||||
| return sb.toString(); | |||||
| } | |||||
| /** | |||||
| * 第七步:合并5个文件 | |||||
| * @param lang | |||||
| * @param fontName | |||||
| * @return | |||||
| */ | |||||
| private static String mergeTrainFiles(String fontName) { | |||||
| String mergeCmdstr = "combine_tessdata "+fontName+"."; | |||||
| return mergeCmdstr; | |||||
| } | |||||
| public static String getTrainSteps(String lang,String fontName) { | |||||
| StringBuffer sb = new StringBuffer("请进入到样本图片文件夹用doc命令执行.").append(huanhangstr); | |||||
| sb.append("第一步,用jTessBoxEditor --> Tools --> Merge 多选图片,保存为tif格式 .命名格式为[lang].[fontName].exp0.tif. 命名:").append(lang).append(".").append(fontName).append(".exp0.tif ").append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第二步,用tif生成box ").append(huanhangstr); | |||||
| sb.append(createBoxFile(lang+"."+fontName+".exp0.tif", lang, fontName)).append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第三步,用jTessBoxEditor 打开.box文件进行矫正 ").append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第四步:用box文件生成。tr文件 ").append(huanhangstr); | |||||
| sb.append(createTranFile(lang,fontName)).append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第五步:提取box字符 ").append(huanhangstr); | |||||
| sb.append(getBoxFont(lang,fontName)).append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("@@@!!!!从此处开始,可以处理多个字库处理。如原来的字库现在做升级,需要把老的字库的。tif,.box,.tr文件重新命名也放到同目录文件夹, ").append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第六步:新建font_properties(没有.txt后缀), 把所有box对应的字体特征加进去。").append(huanhangstr); | |||||
| sb.append("fontname为字体名称,保持和 图片集文件 .tif 和.box文件的前缀名一致 .<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。 ").append(huanhangstr); | |||||
| sb.append("如以下内容: ").append(huanhangstr); | |||||
| sb.append("fontName1 0 0 0 0 0 ").append(huanhangstr); | |||||
| sb.append("fontName2 0 1 0 0 0 ").append(huanhangstr); | |||||
| sb.append("fontName3 1 1 0 0 0 ").append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第六步:批量执行系列命令。多个文件在后面累加。 ").append(huanhangstr); | |||||
| String prefix = getprefix(lang,fontName); | |||||
| String shapeCmdStr = "shapeclustering -F font_properties -U unicharset "+prefix+".tr [other .tr files...] "; | |||||
| sb.append(shapeCmdStr).append(huanhangstr); | |||||
| String mftraingCmdstr = "mftraining -F font_properties -U unicharset -O unicharset "+prefix+".tr [other .tr files...] "; | |||||
| sb.append(mftraingCmdstr).append(huanhangstr); | |||||
| String cntrainCmdstr = "cntraining "+prefix+".tr [other .tr files...] "; | |||||
| sb.append(cntrainCmdstr).append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第七步,执行完成后生成以下几个文件加前缀: unicharset、inttemp、pffmtable、shapetable、normproto 添加这几个文件的前缀为[fontName] ").append(huanhangstr); | |||||
| sb.append(renameTrainFiles(fontName)); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第七步:合并5个文件").append(huanhangstr); | |||||
| sb.append(mergeTrainFiles(fontName)).append(huanhangstr); | |||||
| sb.append("............ ").append(huanhangstr); | |||||
| sb.append("第八步:将").append(fontName).append(".traineddata 文件拷贝到后端服务器ocr_data(项目配置fm.ocr_data)目录下。 .tif、。box、。tr文件也需要保留,后面如果这个字库有更新,需要用到这些文件。").append(huanhangstr); | |||||
| return sb.toString(); | |||||
| } | |||||
| } | |||||
| @@ -1,3 +1,14 @@ | |||||
| https://www.cnblogs.com/wj-1314/p/9454656.html | https://www.cnblogs.com/wj-1314/p/9454656.html | ||||
| https://www.cnblogs.com/pejsidney/p/9487881.html | |||||
| https://www.cnblogs.com/pejsidney/p/9487881.html | |||||
| https://digi.bib.uni-mannheim.de/tesseract/ | |||||
| https://blog.csdn.net/qq_40147863/article/details/82290015 | |||||
| https://blog.csdn.net/boonya/article/details/81325997 | |||||
| 合并字库 https://www.cnblogs.com/c2soft/articles/10415236.html | |||||
| 完整教程 https://www.cnblogs.com/wpcnblog/p/12850590.html | |||||
| @@ -35,14 +35,6 @@ | |||||
| <artifactId>mybatis-multi-tenancy</artifactId> | <artifactId>mybatis-multi-tenancy</artifactId> | ||||
| <version>1.0</version> | <version>1.0</version> | ||||
| </dependency> | </dependency> | ||||
| <!-- ocr --> | |||||
| <dependency> | |||||
| <groupId>com.iformall</groupId> | |||||
| <artifactId>mallinkOcr</artifactId> | |||||
| <version>1.0</version> | |||||
| </dependency> | |||||
| </dependencies> | </dependencies> | ||||
| </project> | </project> | ||||
| @@ -396,6 +396,8 @@ public enum ErrorCode{ | |||||
| CREDIT_NOT_ENOUGH(13101, "积分不够扣减值"), | CREDIT_NOT_ENOUGH(13101, "积分不够扣减值"), | ||||
| USER_NOT_MEMBER(13102, "该用户不是小程序会员"), | USER_NOT_MEMBER(13102, "该用户不是小程序会员"), | ||||
| OUT_OF_CREDIT(13103, "超出最大积分"), | OUT_OF_CREDIT(13103, "超出最大积分"), | ||||
| MEM_IS_SIGNIN(13104, "该用户已签到"), | |||||
| MEM_MONTH_IS_USED(13105, "该用户本月已领取或未到领取条件"), | |||||
| /** | /** | ||||
| @@ -538,6 +540,7 @@ public enum ErrorCode{ | |||||
| ACTIVITY_TIME_ERROR(30005, "活动报名结束时间不能大于活动结束时间"), | ACTIVITY_TIME_ERROR(30005, "活动报名结束时间不能大于活动结束时间"), | ||||
| ACTIVITY_WAIT_CONFIRMED(30006, "您报名的活动还在审核中"), | ACTIVITY_WAIT_CONFIRMED(30006, "您报名的活动还在审核中"), | ||||
| ACTIVITY_EXPIRED(30007, "您报名的活动已过期"), | ACTIVITY_EXPIRED(30007, "您报名的活动已过期"), | ||||
| ACTIVITY_SEND_ERROR_NOONLINE(30008, "活动投放到宣传页失败,活动未上线!"), | |||||
| /** | /** | ||||
| * 文件上传 | * 文件上传 | ||||
| @@ -76,6 +76,13 @@ public class BaseMyBatisConfiguration { | |||||
| basicInfoSharding.setRule(EnumShardingRule.HASH.getCode()); | basicInfoSharding.setRule(EnumShardingRule.HASH.getCode()); | ||||
| shardingList.add(basicInfoSharding); | shardingList.add(basicInfoSharding); | ||||
| ShardingSphere basicSignSharding = new ShardingSphere(); | |||||
| basicSignSharding.setColumn("tenant_id"); | |||||
| basicSignSharding.setTableName("wx_c_user_basic_sign"); | |||||
| basicSignSharding.setCount(100); | |||||
| basicSignSharding.setRule(EnumShardingRule.HASH.getCode()); | |||||
| shardingList.add(basicSignSharding); | |||||
| ShardingSphere wxbasicChildSharding = new ShardingSphere(); | ShardingSphere wxbasicChildSharding = new ShardingSphere(); | ||||
| wxbasicChildSharding.setColumn("tenant_id"); | wxbasicChildSharding.setColumn("tenant_id"); | ||||
| wxbasicChildSharding.setTableName("wx_c_user_basic_child"); | wxbasicChildSharding.setTableName("wx_c_user_basic_child"); | ||||
| @@ -72,11 +72,11 @@ public class WxActivity extends TenantEntity { | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| @io.swagger.annotations.ApiModelProperty(value = "开始时间", name = "starttime") | @io.swagger.annotations.ApiModelProperty(value = "开始时间", name = "starttime") | ||||
| private Date starttime; | |||||
| private Date startDate; | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| @io.swagger.annotations.ApiModelProperty(value = "结束时间", name = "endtime") | @io.swagger.annotations.ApiModelProperty(value = "结束时间", name = "endtime") | ||||
| private Date endtime; | |||||
| private Date endDate; | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| @@ -0,0 +1,67 @@ | |||||
| package com.iformall.domain.po; | |||||
| import com.baomidou.mybatisplus.annotation.TableField; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import lombok.ToString; | |||||
| import java.util.Date; | |||||
| @TableName(value = "wx_c_user_basic_sign") | |||||
| @Data | |||||
| @ToString(callSuper = true) | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| public class WxCUserBasicSign extends TenantEntity { | |||||
| @TableField(exist = false) | |||||
| public static final Integer SIGNIN_TYPE = 1; | |||||
| protected Long id; | |||||
| @io.swagger.annotations.ApiModelProperty(value="userId",name="userId") | |||||
| private Long userId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="1:签到",name="type") | |||||
| private Integer type; | |||||
| @io.swagger.annotations.ApiModelProperty(value="签到时间",name="signinDate") | |||||
| private Date signinDate; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||||
| private Date createDate; | |||||
| @io.swagger.annotations.ApiModelProperty(value="修改时间",name="updateDate") | |||||
| private Date updateDate; | |||||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当月连续签到天数",name="continueMonthSign") | |||||
| private Integer continueMonthSign; | |||||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当月累计签到天数",name="countMonthSign") | |||||
| private Integer countMonthSign; | |||||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当年连续签到天数",name="continueYearSign") | |||||
| private Integer continueYearSign; | |||||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间当年累计签到天数",name="countYearSign") | |||||
| private Integer countYearSign; | |||||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间连续签到天数",name="continueSign") | |||||
| private Integer continueSign; | |||||
| @io.swagger.annotations.ApiModelProperty(value="截止当前签到时间累计签到天数",name="countSign") | |||||
| private Integer countSign; | |||||
| @io.swagger.annotations.ApiModelProperty(value="备注",name="mark") | |||||
| private String mark; | |||||
| @TableField(exist = false) | |||||
| private Date startDate; | |||||
| @TableField(exist = false) | |||||
| private Date endDate; | |||||
| @TableField(exist = false) | |||||
| private Integer begin; | |||||
| @TableField(exist = false) | |||||
| private Integer limit; | |||||
| } | |||||
| @@ -0,0 +1,25 @@ | |||||
| package com.iformall.domain.po; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import java.util.Date; | |||||
| @TableName(value = "wx_merchant_ocr_model") | |||||
| @Data | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| public class WxMerchantOcrModel extends TenantEntity { | |||||
| private static final long serialVersionUID = 1L; | |||||
| protected Long id; | |||||
| @io.swagger.annotations.ApiModelProperty(value="商户编号",name="merchantId") | |||||
| private Long merchantId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="ocr模板编号",name="ocrModelId") | |||||
| private Long ocrModelId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") | |||||
| private Date createTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="updateTime") | |||||
| private Date updateTime; | |||||
| } | |||||
| @@ -0,0 +1,28 @@ | |||||
| package com.iformall.domain.po; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import com.iformall.domain.po.base.BaseEntity; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import java.util.Date; | |||||
| @TableName(value = "wx_ocr_model") | |||||
| @Data | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| public class WxOcrModel extends BaseEntity { | |||||
| private static final long serialVersionUID = 1L; | |||||
| protected Long id; | |||||
| @io.swagger.annotations.ApiModelProperty(value="语言定义,默认iformallLang",name="langCode") | |||||
| private String langCode; | |||||
| @io.swagger.annotations.ApiModelProperty(value="字库名称",name="fontName") | |||||
| private String fontName; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") | |||||
| private Date createTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") | |||||
| private Date updateTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="备注",name="remark") | |||||
| private String remark; | |||||
| @io.swagger.annotations.ApiModelProperty(value="0-有效 1-无效",name="status") | |||||
| private Integer status; | |||||
| } | |||||
| @@ -48,7 +48,6 @@ public class WxScoreRules extends BaseTenantEntity { | |||||
| " {\"businessId\":6,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}" + | " {\"businessId\":6,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}" + | ||||
| "]}," + | "]}," + | ||||
| "{\"id\":3,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"绑定车牌1个\"}," + | "{\"id\":3,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"绑定车牌1个\"}," + | ||||
| "{\"id\":5,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"授权个人信息\"}," + | |||||
| "{\"id\":6,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"授权手机号\"}," + | "{\"id\":6,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"授权手机号\"}," + | ||||
| "{\"id\":7,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"编辑个人信息\"}" + | "{\"id\":7,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"编辑个人信息\"}" + | ||||
| "]"; | "]"; | ||||
| @@ -56,7 +55,7 @@ public class WxScoreRules extends BaseTenantEntity { | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private static final String creditDefaultRules = | private static final String creditDefaultRules = | ||||
| "[" + | "[" + | ||||
| "{\"id\":1,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"每日登陆\"}," + | |||||
| // "{\"id\":1,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"每日登陆\"}," + | |||||
| "{\"id\":2,\"childs\":[" + | "{\"id\":2,\"childs\":[" + | ||||
| " {\"businessId\":1,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + | " {\"businessId\":1,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + | ||||
| " {\"businessId\":2,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + | " {\"businessId\":2,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + | ||||
| @@ -71,10 +70,12 @@ public class WxScoreRules extends BaseTenantEntity { | |||||
| " {\"businessId\":6,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}" + | " {\"businessId\":6,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}" + | ||||
| "]}," + | "]}," + | ||||
| "{\"id\":3,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"绑定车牌1个\"}," + | "{\"id\":3,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"绑定车牌1个\"}," + | ||||
| "{\"id\":5,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"授权个人信息\"}," + | |||||
| "{\"id\":6,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"授权手机号\"}," + | "{\"id\":6,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"授权手机号\"}," + | ||||
| "{\"id\":7,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"编辑个人信息\"}," + | "{\"id\":7,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"编辑个人信息\"}," + | ||||
| "{\"id\":8,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"编辑个人信息\"}" + | |||||
| "{\"id\": 17, \"desc\": \"每日签到\", \"step\": 1, \"limit\": 1, \"score\": 0},"+ | |||||
| "{\"id\": 18, \"desc\": \"连续签到7天\", \"step\": 1, \"limit\": 1, \"score\": 0},"+ | |||||
| "{\"id\": 19, \"desc\": \"连续签到14天\", \"step\": 1, \"limit\": 1, \"score\": 0},"+ | |||||
| "{\"id\": 20, \"desc\": \"连续签到28天\", \"step\": 1, \"limit\": 1, \"score\": 0},"+ | |||||
| "]"; | "]"; | ||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| @@ -205,6 +205,10 @@ public class BaseEntity implements Serializable { | |||||
| ReportDate_ASC("`report_date` ASC"), | ReportDate_ASC("`report_date` ASC"), | ||||
| ReportDate_DESC("`report_date` DESC"), | ReportDate_DESC("`report_date` DESC"), | ||||
| ActivityStartTime_ASC("`activity_start_time` ASC"), | |||||
| ActivityStartTime_DESC("`activity_start_time` DESC"), | |||||
| ; | ; | ||||
| private String value; | private String value; | ||||
| @@ -8,7 +8,8 @@ public enum EnumActivityStatus { | |||||
| STATUS_THROW_IN(0, "已保存"), | STATUS_THROW_IN(0, "已保存"), | ||||
| STATUS_TAKE_OFFF(1, "已下线"), | STATUS_TAKE_OFFF(1, "已下线"), | ||||
| INJECT_CAMPAIGN(2, "已投放"),; | |||||
| INJECT_CAMPAIGN(2, "已投放"), | |||||
| INJECT_ONLINE(3, "已上线"),; | |||||
| public static EnumActivityStatus getEnum(Integer code) { | public static EnumActivityStatus getEnum(Integer code) { | ||||
| for (EnumActivityStatus value : values()) { | for (EnumActivityStatus value : values()) { | ||||
| @@ -20,7 +20,12 @@ public enum EnumScoreType { | |||||
| ACTIVITY_JOIN(13, "活动报名"), | ACTIVITY_JOIN(13, "活动报名"), | ||||
| CLEAN_CREDIT(14, "积分清零计划"), | CLEAN_CREDIT(14, "积分清零计划"), | ||||
| GAME_LES_CREDIT(15, "游戏消耗积分"), | GAME_LES_CREDIT(15, "游戏消耗积分"), | ||||
| GAME_ADD_CREDIT(16, "游戏奖励积分"),; | |||||
| GAME_ADD_CREDIT(16, "游戏奖励积分"), | |||||
| SIGN_IN_DAY(17, "每日签到"), | |||||
| SIGN_IN_SEVENDAY(18, "连续签到7天"), | |||||
| SIGN_IN_FTDAY(19, "连续签到14天"), | |||||
| SIGN_IN_TEDAY(20, "连续签到28天"),; | |||||
| public static EnumScoreType getEnum(Integer code) { | public static EnumScoreType getEnum(Integer code) { | ||||
| for (EnumScoreType value : values()) { | for (EnumScoreType value : values()) { | ||||
| @@ -0,0 +1,13 @@ | |||||
| package com.iformall.mapper; | |||||
| import com.iformall.common.CommonMapper; | |||||
| import com.iformall.domain.po.WxCUserBasicSign; | |||||
| import java.util.List; | |||||
| public interface WxCUserBasicSignMapper extends CommonMapper<WxCUserBasicSign, Long> { | |||||
| List<WxCUserBasicSign> findList(WxCUserBasicSign record); | |||||
| WxCUserBasicSign getLastSignIn(WxCUserBasicSign record); | |||||
| } | |||||
| @@ -41,4 +41,6 @@ public interface WxCreditHistoryMapper extends CommonMapper<WxCreditHistory, Lon | |||||
| Integer getLesCreditSummary(WxCreditHistory wxCreditHistory); | Integer getLesCreditSummary(WxCreditHistory wxCreditHistory); | ||||
| List<MerchantCreditRankingVo> merchantCreditRanking(WxCreditHistory record); | List<MerchantCreditRankingVo> merchantCreditRanking(WxCreditHistory record); | ||||
| int monthCount(WxCreditHistory record); | |||||
| } | } | ||||
| @@ -0,0 +1,14 @@ | |||||
| package com.iformall.mapper; | |||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
| import com.iformall.domain.po.WxMerchantOcrModel; | |||||
| import java.util.List; | |||||
| import org.apache.ibatis.annotations.Mapper; | |||||
| @Mapper | |||||
| public interface WxMerchantOcrModelMapper extends BaseMapper<WxMerchantOcrModel> { | |||||
| List<WxMerchantOcrModel> findList(WxMerchantOcrModel merchantOcrModel); | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| package com.iformall.mapper; | |||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
| import com.iformall.domain.po.WxOcrModel; | |||||
| import java.util.List; | |||||
| import org.apache.ibatis.annotations.Mapper; | |||||
| @Mapper | |||||
| public interface WxOcrModelMapper extends BaseMapper<WxOcrModel> { | |||||
| List<WxOcrModel> findList(WxOcrModel ocrModel); | |||||
| } | |||||
| @@ -46,4 +46,7 @@ public interface WxActivityService { | |||||
| Integer queryStatus(Long id, Long userId); | Integer queryStatus(Long id, Long userId); | ||||
| ResultData offLineCampaign(WxActivity wxActivity); | |||||
| ResultData getListStatus(WxActivity wxActivity); | |||||
| } | } | ||||
| @@ -0,0 +1,31 @@ | |||||
| package com.iformall.service; | |||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxCUserBasicSign; | |||||
| import com.iformall.enums.EnumScoreType; | |||||
| import java.util.Map; | |||||
| public interface WxCUserBasicSignService { | |||||
| /** | |||||
| * 根据实体查询分页列表 | |||||
| * | |||||
| * @param record | |||||
| * @param pageIndex | |||||
| * @param pageSize | |||||
| * @return | |||||
| */ | |||||
| PageInfo<WxCUserBasicSign> listAsPage(WxCUserBasicSign record, Integer pageIndex, Integer pageSize); | |||||
| WxCUserBasicSign signIn(WxCUserBasicSign record); | |||||
| WxCUserBasicSign getTodaySignIn(WxCUserBasicSign record); | |||||
| Map<String,Integer> getLastSignIn(WxCUserBasicSign record); | |||||
| void signInCreditHistory(WxCUserBasicSign record, EnumScoreType enumScoreType); | |||||
| ResultData getListStatus(WxCUserBasicSign wxCUserBasicSign); | |||||
| } | |||||
| @@ -85,4 +85,5 @@ public interface WxCreditHistoryService { | |||||
| Integer getLesCreditSummary(WxCreditHistory wxCreditHistory); | Integer getLesCreditSummary(WxCreditHistory wxCreditHistory); | ||||
| PageInfo<MerchantCreditRankingVo> listAsPageMcrv(WxCreditHistory record, Integer pageIndex, Integer pageSize); | PageInfo<MerchantCreditRankingVo> listAsPageMcrv(WxCreditHistory record, Integer pageIndex, Integer pageSize); | ||||
| } | } | ||||
| @@ -0,0 +1,30 @@ | |||||
| package com.iformall.service; | |||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxActivity; | |||||
| import com.iformall.domain.po.WxMerchantOcrModel; | |||||
| import com.iformall.domain.po.WxOcrModel; | |||||
| import com.iformall.enums.EnumPayWay; | |||||
| import java.util.List; | |||||
| import javax.servlet.http.HttpServletResponse; | |||||
| /** | |||||
| * @author gongbiao | |||||
| */ | |||||
| public interface WxOcrService { | |||||
| PageInfo<WxOcrModel> listOcrModelAsPage(WxOcrModel record, Integer pageIndex, Integer pageSize); | |||||
| WxOcrModel getOcrModelById(Long id); | |||||
| ResultData saveOrUpdateOcrModel(WxOcrModel record); | |||||
| WxMerchantOcrModel getMerchantOcrModel(Long merchantId,String tenantId,String parentTenantId); | |||||
| ResultData saveOrUpdateMerchantOcrModel(WxMerchantOcrModel record); | |||||
| ResultData deleteMerchantOcrModel(Long id); | |||||
| } | |||||
| @@ -17,6 +17,7 @@ import com.iformall.mapper.WxActivityMapper; | |||||
| import com.iformall.mapper.WxCampaignMapper; | import com.iformall.mapper.WxCampaignMapper; | ||||
| import com.iformall.service.WxActivityService; | import com.iformall.service.WxActivityService; | ||||
| import com.iformall.service.WxCampaignService; | import com.iformall.service.WxCampaignService; | ||||
| import com.iformall.utils.DateUtils; | |||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| @@ -30,7 +31,7 @@ import java.io.ByteArrayInputStream; | |||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import java.io.UnsupportedEncodingException; | import java.io.UnsupportedEncodingException; | ||||
| import java.net.URLDecoder; | import java.net.URLDecoder; | ||||
| import java.util.Date; | |||||
| import java.util.*; | |||||
| /** | /** | ||||
| * @author gongbiao | * @author gongbiao | ||||
| @@ -121,14 +122,20 @@ public class WxActivityServiceImpl implements WxActivityService { | |||||
| if (activity == null) { | if (activity == null) { | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | ||||
| } | } | ||||
| if (wxActivity.getStatus().equals(EnumActivityStatus.INJECT_ONLINE.getCode()) | |||||
| && activity.getEndTime().before(new Date())) { | |||||
| return new ResultData(ErrorCode.ACTIVITY_JOIN_TIME_END); | |||||
| } | |||||
| wxActivity.setUpdateTime(new Date()); | wxActivity.setUpdateTime(new Date()); | ||||
| wxActivityMapper.updateById(wxActivity); | wxActivityMapper.updateById(wxActivity); | ||||
| if (wxActivity.getStatus().equals(EnumActivityStatus.STATUS_TAKE_OFFF.getCode())) { | if (wxActivity.getStatus().equals(EnumActivityStatus.STATUS_TAKE_OFFF.getCode())) { | ||||
| WxCampaign campaign = new WxCampaign(); | WxCampaign campaign = new WxCampaign(); | ||||
| campaign.setProduceId(wxActivity.getId()); | campaign.setProduceId(wxActivity.getId()); | ||||
| WxCampaign wxCampaign = wxCampaignMapper.selectOne(new QueryWrapper(campaign)); | WxCampaign wxCampaign = wxCampaignMapper.selectOne(new QueryWrapper(campaign)); | ||||
| wxCampaign.setStatus(EnumCampaignStatus.STATUS_TAKE_OFFF.getCode()); | |||||
| wxCampaignMapper.updateById(wxCampaign); | |||||
| if(wxCampaign != null){ | |||||
| wxCampaign.setStatus(EnumCampaignStatus.STATUS_TAKE_OFFF.getCode()); | |||||
| wxCampaignMapper.updateById(wxCampaign); | |||||
| } | |||||
| } | } | ||||
| return new ResultData(Result.SUCCESS, "操作成功"); | return new ResultData(Result.SUCCESS, "操作成功"); | ||||
| } | } | ||||
| @@ -172,6 +179,9 @@ public class WxActivityServiceImpl implements WxActivityService { | |||||
| if (wxActivity.getEndTime().before(new Date())) { | if (wxActivity.getEndTime().before(new Date())) { | ||||
| return new ResultData(ErrorCode.ACTIVITY_JOIN_TIME_END); | return new ResultData(ErrorCode.ACTIVITY_JOIN_TIME_END); | ||||
| } | } | ||||
| if(!wxActivity.getStatus().equals(EnumActivityStatus.INJECT_ONLINE.getCode())){ | |||||
| return new ResultData(ErrorCode.ACTIVITY_SEND_ERROR_NOONLINE); | |||||
| } | |||||
| wxActivity.setStatus(EnumActivityStatus.INJECT_CAMPAIGN.getCode()); | wxActivity.setStatus(EnumActivityStatus.INJECT_CAMPAIGN.getCode()); | ||||
| wxActivity.setUpdateTime(new Date()); | wxActivity.setUpdateTime(new Date()); | ||||
| wxActivityMapper.updateById(wxActivity); | wxActivityMapper.updateById(wxActivity); | ||||
| @@ -233,5 +243,56 @@ public class WxActivityServiceImpl implements WxActivityService { | |||||
| return EnumActivityEnrollStatus.NORMAL.getCode(); | return EnumActivityEnrollStatus.NORMAL.getCode(); | ||||
| } | } | ||||
| @Override | |||||
| public ResultData offLineCampaign(WxActivity wxActivity) { | |||||
| WxActivity activity = wxActivityMapper.selectById(wxActivity.getId()); | |||||
| if (activity == null) { | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | |||||
| } | |||||
| activity.setStatus(EnumActivityStatus.INJECT_ONLINE.getCode()); | |||||
| activity.setUpdateTime(new Date()); | |||||
| wxActivityMapper.updateById(activity); | |||||
| if (wxActivity.getStatus().equals(EnumActivityStatus.STATUS_TAKE_OFFF.getCode())) { | |||||
| WxCampaign campaign = new WxCampaign(); | |||||
| campaign.setProduceId(wxActivity.getId()); | |||||
| WxCampaign wxCampaign = wxCampaignMapper.selectOne(new QueryWrapper(campaign)); | |||||
| wxCampaign.setStatus(EnumCampaignStatus.STATUS_TAKE_OFFF.getCode()); | |||||
| wxCampaignMapper.updateById(wxCampaign); | |||||
| } | |||||
| return new ResultData(Result.SUCCESS, "操作成功"); | |||||
| } | |||||
| @Override | |||||
| public ResultData getListStatus(WxActivity wxActivity) { | |||||
| List list = new ArrayList(); | |||||
| List<WxActivity> activityList = wxActivityMapper.findList(wxActivity); | |||||
| if(activityList != null){ | |||||
| for (WxActivity activity:activityList) { | |||||
| Date start = activity.getActivityStartTime(); | |||||
| Date end = activity.getActivityEndTime(); | |||||
| Calendar dd = Calendar.getInstance(); | |||||
| dd.setTime(start); | |||||
| while (start.getTime() < end.getTime()) { | |||||
| Map map = new HashMap<>(); | |||||
| map.put("yyyy", DateUtils.getYear(start)); | |||||
| map.put("mm", DateUtils.getMonth(start)); | |||||
| map.put("dd", DateUtils.getMonthOfDate(start)); | |||||
| list.add(map); | |||||
| // 天数加上1 | |||||
| dd.add(Calendar.DAY_OF_MONTH, 1); | |||||
| start = dd.getTime(); | |||||
| } | |||||
| } | |||||
| } | |||||
| if(list.size() > 0){ | |||||
| HashSet h = new HashSet(list); | |||||
| list.clear(); | |||||
| list.addAll(h); | |||||
| } | |||||
| return new ResultData(list); | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,243 @@ | |||||
| package com.iformall.service.impl; | |||||
| import com.github.pagehelper.PageHelper; | |||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.IdWorker; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxCUserBasicSign; | |||||
| import com.iformall.domain.po.WxCreditHistory; | |||||
| import com.iformall.enums.EnumScoreType; | |||||
| import com.iformall.enums.EnumUserType; | |||||
| import com.iformall.mapper.WxCUserBasicSignMapper; | |||||
| import com.iformall.mapper.WxCreditHistoryMapper; | |||||
| import com.iformall.service.WxCUserBasicSignService; | |||||
| import com.iformall.service.WxCreditHistoryService; | |||||
| import com.iformall.utils.DateUtils; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | |||||
| import org.springframework.transaction.annotation.Transactional; | |||||
| import java.text.DateFormat; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.*; | |||||
| import static java.util.Calendar.DAY_OF_MONTH; | |||||
| @Service | |||||
| @Slf4j | |||||
| public class WxCUserBasicSignServiceImpl implements WxCUserBasicSignService { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| WxCUserBasicSignMapper wxCUserBasicSignMapper; | |||||
| @Autowired | |||||
| WxCreditHistoryService wxCreditHistoryService; | |||||
| @Autowired | |||||
| WxCreditHistoryMapper wxCreditHistoryMapper; | |||||
| @Override | |||||
| public PageInfo<WxCUserBasicSign> listAsPage(WxCUserBasicSign record, Integer pageIndex, Integer pageSize) { | |||||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserBasicSignMapper.findList(record)); | |||||
| } | |||||
| @Transactional(rollbackFor = {Exception.class}) | |||||
| @Override | |||||
| public WxCUserBasicSign signIn(WxCUserBasicSign record) { | |||||
| if(record.getType() == null){ | |||||
| record.setType(WxCUserBasicSign.SIGNIN_TYPE); | |||||
| } | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| record.setId(idWorker.nextId()); | |||||
| Date today = new Date(); | |||||
| record.setCreateDate(today); | |||||
| record.setUpdateDate(today); | |||||
| if(record.getType().equals(WxCUserBasicSign.SIGNIN_TYPE)){ | |||||
| record.setSigninDate(DateUtils.getDateZero(today)); | |||||
| WxCUserBasicSign lastSignIn = wxCUserBasicSignMapper.getLastSignIn(record); | |||||
| if(lastSignIn == null){ | |||||
| record.setContinueMonthSign(1); | |||||
| record.setCountMonthSign(1); | |||||
| record.setContinueYearSign(1); | |||||
| record.setCountYearSign(1); | |||||
| record.setContinueSign(1); | |||||
| record.setCountSign(1); | |||||
| wxCUserBasicSignMapper.insert(record); | |||||
| }else{ | |||||
| long daysL = DateUtils.startToEnd(lastSignIn.getSigninDate(), today); | |||||
| int daysI = new Long(daysL).intValue(); | |||||
| if(daysI == 0){ | |||||
| return lastSignIn; | |||||
| } | |||||
| record.setCountSign(lastSignIn.getCountSign() + 1); | |||||
| if(daysI == 1){ | |||||
| record.setContinueSign(lastSignIn.getContinueSign() + 1); | |||||
| }else{ | |||||
| record.setContinueSign(1); | |||||
| } | |||||
| if(DateUtils.getYear(today) == DateUtils.getYear(lastSignIn.getSigninDate())){ | |||||
| record.setCountYearSign(lastSignIn.getCountYearSign() + 1); | |||||
| if(daysI == 1){ | |||||
| record.setContinueYearSign(lastSignIn.getContinueYearSign() + 1); | |||||
| }else{ | |||||
| record.setContinueYearSign(1); | |||||
| } | |||||
| if(DateUtils.getMonth(today) == DateUtils.getMonth(lastSignIn.getSigninDate())){ | |||||
| record.setCountMonthSign(lastSignIn.getCountMonthSign() + 1); | |||||
| if(daysI == 1){ | |||||
| record.setContinueMonthSign(lastSignIn.getContinueMonthSign() + 1); | |||||
| }else{ | |||||
| record.setContinueMonthSign(1); | |||||
| } | |||||
| }else{ | |||||
| record.setCountMonthSign(1); | |||||
| record.setContinueMonthSign(1); | |||||
| } | |||||
| }else{ | |||||
| record.setContinueMonthSign(1); | |||||
| record.setCountMonthSign(1); | |||||
| record.setContinueYearSign(1); | |||||
| record.setCountYearSign(1); | |||||
| } | |||||
| wxCUserBasicSignMapper.insert(record); | |||||
| } | |||||
| signInCreditHistory(record,EnumScoreType.SIGN_IN_DAY); | |||||
| continueSignInAddCredit(record); | |||||
| return record; | |||||
| }else{ | |||||
| //补签 | |||||
| return null; | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public WxCUserBasicSign getTodaySignIn(WxCUserBasicSign record) { | |||||
| Calendar calendar = Calendar.getInstance(); | |||||
| calendar.setTime(new Date()); | |||||
| calendar.set(Calendar.HOUR_OF_DAY, 0); | |||||
| calendar.set(Calendar.MINUTE, 0); | |||||
| calendar.set(Calendar.SECOND, 0); | |||||
| Date today = calendar.getTime();//今天零点 | |||||
| calendar.set(DAY_OF_MONTH,calendar.get(DAY_OF_MONTH) +1); | |||||
| Date tomorrow =calendar.getTime();//明天零点 | |||||
| record.setStartDate(today); | |||||
| record.setEndDate(tomorrow); | |||||
| List<WxCUserBasicSign> list = wxCUserBasicSignMapper.findList(record); | |||||
| if(list != null && list.size() == 1){ | |||||
| return list.get(0); | |||||
| }else if(list.size() > 1){ | |||||
| DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); | |||||
| String todayString = format.format(today); | |||||
| logger.error("用户签到数据异常{}"+record.getUserId()+"时间{}"+todayString); | |||||
| return list.get(0); | |||||
| } | |||||
| return null; | |||||
| } | |||||
| @Override | |||||
| public Map<String,Integer> getLastSignIn(WxCUserBasicSign record) { | |||||
| Map<String,Integer> map = new HashMap<>(); | |||||
| WxCUserBasicSign lastSignIn = wxCUserBasicSignMapper.getLastSignIn(record); | |||||
| if(lastSignIn != null){ | |||||
| long daysL = DateUtils.startToEnd(lastSignIn.getSigninDate(), new Date()); | |||||
| int daysI = new Long(daysL).intValue(); | |||||
| if(daysI <= 1){ | |||||
| map.put("continueSign",lastSignIn.getContinueSign()%28); | |||||
| }else{ | |||||
| map.put("continueSign",0); | |||||
| } | |||||
| } | |||||
| // if(lastSignIn != null && DateUtils.isSameMonth(lastSignIn.getSigninDate(),new Date())){ | |||||
| // //本月连续签到天数 | |||||
| // map.put("continueMonthSign",lastSignIn.getContinueMonthSign()); | |||||
| // }else{ | |||||
| // map.put("continueMonthSign",0); | |||||
| // } | |||||
| WxCreditHistory wxCreditHistory = new WxCreditHistory(); | |||||
| wxCreditHistory.setTenantId(record.getFinalTenantId()); | |||||
| wxCreditHistory.setCUserId(record.getUserId()); | |||||
| wxCreditHistory.setCreditType(EnumScoreType.SIGN_IN_DAY.getCode()); | |||||
| //每日签到 | |||||
| if(wxCreditHistoryMapper.loginCount(wxCreditHistory) > 0){ | |||||
| map.put("signInDay",1); | |||||
| }else{ | |||||
| map.put("signInDay",0); | |||||
| } | |||||
| //7日连续 | |||||
| wxCreditHistory.setCreditType(EnumScoreType.SIGN_IN_SEVENDAY.getCode()); | |||||
| if(wxCreditHistoryMapper.monthCount(wxCreditHistory) > 0 ){ | |||||
| map.put("signInSevenDay",1); | |||||
| }else{ | |||||
| map.put("signInSevenDay",0); | |||||
| } | |||||
| //14日连续 | |||||
| wxCreditHistory.setCreditType(EnumScoreType.SIGN_IN_FTDAY.getCode()); | |||||
| if(wxCreditHistoryMapper.monthCount(wxCreditHistory) > 0 ){ | |||||
| map.put("signInFTDay",1); | |||||
| }else{ | |||||
| map.put("signInFTDay",0); | |||||
| } | |||||
| //28日连续 | |||||
| wxCreditHistory.setCreditType(EnumScoreType.SIGN_IN_TEDAY.getCode()); | |||||
| if(wxCreditHistoryMapper.monthCount(wxCreditHistory) > 0 ){ | |||||
| map.put("signInTEDay",1); | |||||
| }else{ | |||||
| map.put("signInTEDay",0); | |||||
| } | |||||
| return map; | |||||
| } | |||||
| @Override | |||||
| public void signInCreditHistory(WxCUserBasicSign record, EnumScoreType enumScoreType){ | |||||
| WxCreditHistory wxCreditHistory = new WxCreditHistory(); | |||||
| wxCreditHistory.setCUserId(record.getUserId()); | |||||
| wxCreditHistory.setTenantId(record.getFinalTenantId()); | |||||
| wxCreditHistory.setCreateDate(new Date()); | |||||
| wxCreditHistory.setCreditType(enumScoreType.getCode()); | |||||
| wxCreditHistory.setChangePurpose(enumScoreType.getMessage()); | |||||
| wxCreditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); | |||||
| wxCreditHistory.setOperatorId(record.getUserId()); | |||||
| wxCreditHistoryService.saveOrUpdate(wxCreditHistory,null); | |||||
| } | |||||
| @Override | |||||
| public ResultData getListStatus(WxCUserBasicSign record) { | |||||
| List list = new ArrayList(); | |||||
| List<WxCUserBasicSign> recordList = wxCUserBasicSignMapper.findList(record); | |||||
| if(recordList != null){ | |||||
| for (WxCUserBasicSign sign:recordList) { | |||||
| Map map = new HashMap<>(); | |||||
| map.put("yyyy", DateUtils.getYear(sign.getSigninDate())); | |||||
| map.put("mm", DateUtils.getMonth(sign.getSigninDate())); | |||||
| map.put("dd", DateUtils.getMonthOfDate(sign.getSigninDate())); | |||||
| list.add(map); | |||||
| } | |||||
| } | |||||
| return new ResultData(list); | |||||
| } | |||||
| private void continueSignInAddCredit(WxCUserBasicSign record){ | |||||
| int i = record.getContinueSign() % 28; | |||||
| if(record.getContinueSign() > 0 && i == 0){ | |||||
| signInCreditHistory(record,EnumScoreType.SIGN_IN_TEDAY); | |||||
| }else if(i == 7){ | |||||
| signInCreditHistory(record,EnumScoreType.SIGN_IN_SEVENDAY); | |||||
| }else if(i == 14){ | |||||
| signInCreditHistory(record,EnumScoreType.SIGN_IN_FTDAY); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -273,14 +273,14 @@ public class WxCUserServiceImpl implements WxCUserService { | |||||
| logger.error("c_user 成长值 " + e.getMessage()); | logger.error("c_user 成长值 " + e.getMessage()); | ||||
| } | } | ||||
| // 积分 | // 积分 | ||||
| try { | |||||
| credit = addCredit(user, EnumScoreType.LOGIN); | |||||
| logger.info("user_id:" + user.getId() + " 登录新增积分:" + credit); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("c_user 积分 " + e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("c_user 积分 " + e.getMessage()); | |||||
| } | |||||
| // try { | |||||
| // credit = addCredit(user, EnumScoreType.LOGIN); | |||||
| // logger.info("user_id:" + user.getId() + " 登录新增积分:" + credit); | |||||
| // } catch (MallinkException e) { | |||||
| // logger.error("c_user 积分 " + e.getMessage()); | |||||
| // } catch (Exception e) { | |||||
| // logger.error("c_user 积分 " + e.getMessage()); | |||||
| // } | |||||
| // 用户登陆后 更新最后一次活跃时间 | // 用户登陆后 更新最后一次活跃时间 | ||||
| if (user.getUserId() != null) { | if (user.getUserId() != null) { | ||||
| @@ -391,7 +391,8 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||||
| private int creditIncrement(WxCreditHistory record) { | private int creditIncrement(WxCreditHistory record) { | ||||
| //查找C端用户的成长值 | //查找C端用户的成长值 | ||||
| if (record.getCreditType() == EnumScoreType.LOGIN.getCode()) { | if (record.getCreditType() == EnumScoreType.LOGIN.getCode()) { | ||||
| return loginAddCredit(record); | |||||
| // return loginAddCredit(record);//登陆加积分取消 | |||||
| return 0; | |||||
| } | } | ||||
| if (record.getCreditType() == EnumScoreType.BIND_CAR.getCode()) { | if (record.getCreditType() == EnumScoreType.BIND_CAR.getCode()) { | ||||
| return bindCarAddCredit(record); | return bindCarAddCredit(record); | ||||
| @@ -430,6 +431,19 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||||
| return record.getCreditNum(); | return record.getCreditNum(); | ||||
| } | } | ||||
| if (record.getCreditType() == EnumScoreType.SIGN_IN_DAY.getCode()) { | |||||
| return signinCredit(record); | |||||
| } | |||||
| if (record.getCreditType() == EnumScoreType.SIGN_IN_SEVENDAY.getCode()) { | |||||
| return signinMonthCredit(record,EnumScoreType.SIGN_IN_SEVENDAY); | |||||
| } | |||||
| if (record.getCreditType() == EnumScoreType.SIGN_IN_FTDAY.getCode()) { | |||||
| return signinMonthCredit(record,EnumScoreType.SIGN_IN_FTDAY); | |||||
| } | |||||
| if (record.getCreditType() == EnumScoreType.SIGN_IN_TEDAY.getCode()) { | |||||
| return signinMonthCredit(record,EnumScoreType.SIGN_IN_TEDAY); | |||||
| } | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -449,6 +463,28 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||||
| return wxScoreRules.getRule(EnumScoreType.LOGIN, WxScoreRules.SCORE); | return wxScoreRules.getRule(EnumScoreType.LOGIN, WxScoreRules.SCORE); | ||||
| } | } | ||||
| private int signinCredit(WxCreditHistory record) { | |||||
| //如果当天已经登录过则跳过 | |||||
| if (wxCreditHistoryMapper.loginCount(record) > 0) { | |||||
| return 0; | |||||
| } | |||||
| // 1. 获取当前租户下积分的增加规则 | |||||
| WxScoreRules wxScoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); | |||||
| // 2. 增长的积分 | |||||
| return wxScoreRules.getRule(EnumScoreType.SIGN_IN_DAY, WxScoreRules.SCORE); | |||||
| } | |||||
| private int signinMonthCredit(WxCreditHistory record,EnumScoreType enumScoreType) { | |||||
| //签到周期按月来 | |||||
| // if (wxCreditHistoryMapper.monthCount(record) > 0) { | |||||
| // return 0; | |||||
| // } | |||||
| // 1. 获取当前租户下积分的增加规则 | |||||
| WxScoreRules wxScoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); | |||||
| // 2. 增长的积分 | |||||
| return wxScoreRules.getRule(enumScoreType, WxScoreRules.SCORE); | |||||
| } | |||||
| private int bindCarAddCredit(WxCreditHistory record) { | private int bindCarAddCredit(WxCreditHistory record) { | ||||
| if (wxCreditHistoryMapper.countList(record) > 0) { | if (wxCreditHistoryMapper.countList(record) > 0) { | ||||
| return 0; | return 0; | ||||
| @@ -0,0 +1,89 @@ | |||||
| package com.iformall.service.impl; | |||||
| import com.github.pagehelper.PageHelper; | |||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.IdWorker; | |||||
| import com.iformall.common.Result; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxMerchantOcrModel; | |||||
| import com.iformall.domain.po.WxOcrModel; | |||||
| import com.iformall.mapper.WxMerchantOcrModelMapper; | |||||
| import com.iformall.mapper.WxOcrModelMapper; | |||||
| import com.iformall.service.WxOcrService; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| @Service | |||||
| public class WxOcrServiceImpl implements WxOcrService { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| WxMerchantOcrModelMapper merchantOcrModelMapper; | |||||
| @Autowired | |||||
| WxOcrModelMapper ocrModelMapper; | |||||
| @Override | |||||
| public PageInfo<WxOcrModel> listOcrModelAsPage(WxOcrModel record, Integer pageIndex, Integer pageSize) { | |||||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> ocrModelMapper.findList(record)); | |||||
| } | |||||
| @Override | |||||
| public WxOcrModel getOcrModelById(Long id) { | |||||
| return ocrModelMapper.selectById(id); | |||||
| } | |||||
| @Override | |||||
| public ResultData saveOrUpdateOcrModel(WxOcrModel record) { | |||||
| Date date = new Date(); | |||||
| if (record.getId() == null) { | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| record.setId(idWorker.nextId()); | |||||
| record.setCreateTime(date); | |||||
| ocrModelMapper.insert(record); | |||||
| } else { | |||||
| record.setUpdateTime(date); | |||||
| ocrModelMapper.updateById(record); | |||||
| } | |||||
| return new ResultData(Result.SUCCESS, "操作成功"); | |||||
| } | |||||
| @Override | |||||
| public WxMerchantOcrModel getMerchantOcrModel(Long merchantId,String tenantId,String parentTenantId) { | |||||
| WxMerchantOcrModel query = new WxMerchantOcrModel(); | |||||
| query.setMerchantId(merchantId); | |||||
| query.setTenantId(tenantId); | |||||
| query.setParentTenantId(parentTenantId); | |||||
| List<WxMerchantOcrModel> models = merchantOcrModelMapper.findList(query); | |||||
| if (null == models || models.size() <= 0) { | |||||
| return null; | |||||
| } | |||||
| return models.get(0); | |||||
| } | |||||
| @Override | |||||
| public ResultData saveOrUpdateMerchantOcrModel(WxMerchantOcrModel record) { | |||||
| Date date = new Date(); | |||||
| if (record.getId() == null) { | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| record.setId(idWorker.nextId()); | |||||
| record.setCreateTime(date); | |||||
| merchantOcrModelMapper.insert(record); | |||||
| } else { | |||||
| record.setUpdateTime(date); | |||||
| merchantOcrModelMapper.updateById(record); | |||||
| } | |||||
| return new ResultData(Result.SUCCESS, "操作成功"); | |||||
| } | |||||
| @Override | |||||
| public ResultData deleteMerchantOcrModel(Long id) { | |||||
| merchantOcrModelMapper.deleteById(id); | |||||
| return new ResultData(Result.SUCCESS, "操作成功"); | |||||
| } | |||||
| } | |||||
| @@ -52,50 +52,18 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { | |||||
| public void wxScoreRulesInit(String tenantId) { | public void wxScoreRulesInit(String tenantId) { | ||||
| WxScoreRules wxScoreRules = new WxScoreRules(); | WxScoreRules wxScoreRules = new WxScoreRules(); | ||||
| wxScoreRules.setTenantId(tenantId); | wxScoreRules.setTenantId(tenantId); | ||||
| wxScoreRules.setRules("[{\"id\": 1, \"desc\": \"每日登陆\", \"step\": 1, \"limit\": 0, \"score\": 0}," + | |||||
| " {\"id\": 2, \"score\": null, \"childs\": " + | |||||
| "[{\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"餐饮\", \"businessId\": 1}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"娱乐\", \"businessId\": 2}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服饰\", \"businessId\": 3}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"亲子\", \"businessId\": 4}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"超市\", \"businessId\": 5}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"美妆\", \"businessId\": 7}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"珠宝\", \"businessId\": 8}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服务\", \"businessId\": 9}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"家居\", \"businessId\": 10}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"数码家电\", \"businessId\": 11}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"其他\", \"businessId\": 6}]}," + | |||||
| " {\"id\": 3, \"desc\": \"绑定车牌1个\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||||
| " {\"id\": 6, \"desc\": \"授权手机号\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||||
| " {\"id\": 7, \"desc\": \"编辑个人信息\", \"step\": 1, \"limit\": 1, \"score\": 0}]"); | |||||
| wxScoreRules.setRules(WxScoreRules.getCreditDefaultRules()); | |||||
| wxScoreRules.setCreateDate(new Date()); | wxScoreRules.setCreateDate(new Date()); | ||||
| wxScoreRules.setUpdateDate(new Date()); | wxScoreRules.setUpdateDate(new Date()); | ||||
| wxScoreRules.setType(2); | |||||
| wxScoreRules.setClearYear(1); | |||||
| wxScoreRules.setScale(10); | |||||
| wxScoreRules.setType(EnumScoreRules.CREDIT.getCode()); | |||||
| wxScoreRules.setCreditLocked(1); | wxScoreRules.setCreditLocked(1); | ||||
| wxScoreRulesMapper.insert(wxScoreRules); | wxScoreRulesMapper.insert(wxScoreRules); | ||||
| wxScoreRules = new WxScoreRules(); | wxScoreRules = new WxScoreRules(); | ||||
| wxScoreRules.setTenantId(tenantId); | wxScoreRules.setTenantId(tenantId); | ||||
| wxScoreRules.setRules("[{\"id\": 1, \"desc\": \"每日登陆\", \"step\": 1, \"limit\": 0, \"score\": 0}," + | |||||
| " {\"id\": 2, \"score\": 0, \"childs\": " + | |||||
| "[{\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"餐饮\", \"businessId\": 1}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"娱乐\", \"businessId\": 2}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服饰\", \"businessId\": 3}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"亲子\", \"businessId\": 4}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"超市\", \"businessId\": 5}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"美妆\", \"businessId\": 7}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"珠宝\", \"businessId\": 8}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"服务\", \"businessId\": 9}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"家居\", \"businessId\": 10}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"数码家电\", \"businessId\": 11}," + | |||||
| " {\"desc\": \"线上交易1元\", \"step\": 1, \"limit\": 0, \"score\": 0, \"title\": \"其他\", \"businessId\": 6}]}," + | |||||
| " {\"id\": 3, \"desc\": \"绑定车牌1个\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||||
| " {\"id\": 6, \"desc\": \"授权手机号\", \"step\": 1, \"limit\": 1, \"score\": 0}," + | |||||
| " {\"id\": 7, \"desc\": \"编辑个人信息\", \"step\": 1, \"limit\": 1, \"score\": 0}]"); | |||||
| wxScoreRules.setRules(WxScoreRules.getScoreDefaultRules()); | |||||
| wxScoreRules.setCreateDate(new Date()); | wxScoreRules.setCreateDate(new Date()); | ||||
| wxScoreRules.setUpdateDate(new Date()); | wxScoreRules.setUpdateDate(new Date()); | ||||
| wxScoreRules.setType(1); | |||||
| wxScoreRules.setType(EnumScoreRules.SCORE.getCode()); | |||||
| wxScoreRules.setCreditLocked(0); | wxScoreRules.setCreditLocked(0); | ||||
| wxScoreRulesMapper.insert(wxScoreRules); | wxScoreRulesMapper.insert(wxScoreRules); | ||||
| } | } | ||||
| @@ -145,9 +113,18 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { | |||||
| //当成长值或积分规则新增时,将新增的数据一并返回给接口调用端 | //当成长值或积分规则新增时,将新增的数据一并返回给接口调用端 | ||||
| private String getScoreRulesNew(String scoreRules,EnumScoreRules enumScoreRules){ | private String getScoreRulesNew(String scoreRules,EnumScoreRules enumScoreRules){ | ||||
| //getJSONObject(1) 为EnumScoreType.CONSUMPTION(2, "消费")的下标值 | //getJSONObject(1) 为EnumScoreType.CONSUMPTION(2, "消费")的下标值 | ||||
| JSONArray jsonArrayOld = JSONArray.parseArray(scoreRules).getJSONObject(1).getJSONArray("childs"); | |||||
| String defaultRules = enumScoreRules.equals(EnumScoreRules.SCORE) ? WxScoreRules.getScoreDefaultRules() : WxScoreRules.getCreditDefaultRules(); | |||||
| JSONArray jsonArrayDefault = JSONArray.parseArray(defaultRules).getJSONObject(1).getJSONArray("childs"); | |||||
| JSONArray jsonArrayOld = new JSONArray(); | |||||
| JSONArray jsonArrayDefault = new JSONArray(); | |||||
| if(enumScoreRules.equals(EnumScoreRules.SCORE)){ | |||||
| jsonArrayOld = JSONArray.parseArray(scoreRules).getJSONObject(1).getJSONArray("childs"); | |||||
| String defaultRules = WxScoreRules.getScoreDefaultRules(); | |||||
| jsonArrayDefault = JSONArray.parseArray(defaultRules).getJSONObject(1).getJSONArray("childs"); | |||||
| }else if(enumScoreRules.equals(EnumScoreRules.CREDIT)){ | |||||
| jsonArrayOld = JSONArray.parseArray(scoreRules).getJSONObject(0).getJSONArray("childs"); | |||||
| String defaultRules = WxScoreRules.getCreditDefaultRules(); | |||||
| jsonArrayDefault = JSONArray.parseArray(defaultRules).getJSONObject(0).getJSONArray("childs"); | |||||
| } | |||||
| if (jsonArrayOld.size() < jsonArrayDefault.size()) { | if (jsonArrayOld.size() < jsonArrayDefault.size()) { | ||||
| JSONArray childsJsonArray = new JSONArray(); | JSONArray childsJsonArray = new JSONArray(); | ||||
| JSONObject otherJSONObject = new JSONObject(); | JSONObject otherJSONObject = new JSONObject(); | ||||
| @@ -104,8 +104,10 @@ public class CreditUtil { | |||||
| if(Objects.nonNull(wxCUserBasicInfo.getScoreDate())){ | if(Objects.nonNull(wxCUserBasicInfo.getScoreDate())){ | ||||
| int scoreYear = DateUtils.getYear(wxCUserBasicInfo.getScoreDate()); | int scoreYear = DateUtils.getYear(wxCUserBasicInfo.getScoreDate()); | ||||
| int year = DateUtils.getYear(new Date()); | int year = DateUtils.getYear(new Date()); | ||||
| if(scoreYear == year && DateUtils.isBirthdays(wxCUserBasicInfo.getScoreDate())){ | |||||
| birthdayScale = getBirthdayScoreScale(tenantId, wxScoreRulesService); | |||||
| if(scoreYear == year){ | |||||
| if(DateUtils.isBirthdays(wxCUserBasicInfo.getScoreDate())){ | |||||
| birthdayScale = getBirthdayScoreScale(tenantId, wxScoreRulesService); | |||||
| } | |||||
| }else{ | }else{ | ||||
| if (Objects.nonNull(wxCUserBasicInfo.getBirthdate()) && DateUtils.isBirthdays(wxCUserBasicInfo.getBirthdate())) { | if (Objects.nonNull(wxCUserBasicInfo.getBirthdate()) && DateUtils.isBirthdays(wxCUserBasicInfo.getBirthdate())) { | ||||
| birthdayScale = getBirthdayScoreScale(tenantId,wxScoreRulesService); | birthdayScale = getBirthdayScoreScale(tenantId,wxScoreRulesService); | ||||
| @@ -1362,4 +1362,19 @@ public class DateUtils { | |||||
| return false; | return false; | ||||
| } | } | ||||
| /** | |||||
| * 获取当前日期零点<br> | |||||
| * | |||||
| * @param date | |||||
| * @return 获取当前日期零点 | |||||
| */ | |||||
| public static Date getDateZero(Date date) { | |||||
| Calendar cal = Calendar.getInstance(); | |||||
| cal.setTime(date); | |||||
| cal.set(Calendar.HOUR_OF_DAY, 0); | |||||
| cal.set(Calendar.MINUTE, 0); | |||||
| cal.set(Calendar.SECOND, 0); | |||||
| return cal.getTime(); | |||||
| } | |||||
| } | } | ||||
| @@ -66,9 +66,13 @@ | |||||
| and `type` = #{type} | and `type` = #{type} | ||||
| </if> | </if> | ||||
| <if test=" null != status "> | |||||
| <if test=" null != status and status != 3"> | |||||
| and `status` = #{status} | and `status` = #{status} | ||||
| </if> | </if> | ||||
| <if test=" null != status and status == 3"> | |||||
| and `status` >= 2 and `status` <= 3 | |||||
| </if> | |||||
| <if test=" null != createTime "> | <if test=" null != createTime "> | ||||
| and `create_time` = #{createTime} | and `create_time` = #{createTime} | ||||
| @@ -85,8 +89,12 @@ | |||||
| and `is_expired` = #{isExpired} | and `is_expired` = #{isExpired} | ||||
| </if> | </if> | ||||
| <if test=" null != starttime and null!=endtime "> | |||||
| and `create_time` between #{starttime} and #{endtime} | |||||
| <!-- <if test=" null != startDate and null != endDate ">--> | |||||
| <!-- and `create_time` between #{starttime} and #{endtime}--> | |||||
| <!-- </if>--> | |||||
| <if test=" null != startDate and null != endDate "> | |||||
| and `activity_start_time` >= #{startDate} and `activity_end_time` < #{endDate} | |||||
| </if> | </if> | ||||
| <if test=" null != sendMsg "> | <if test=" null != sendMsg "> | ||||
| @@ -0,0 +1,91 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxCUserBasicSignMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCUserBasicSign"> | |||||
| <id column="id" jdbcType="BIGINT" property="id" /> | |||||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId" /> | |||||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/> | |||||
| <result column="user_id" jdbcType="BIGINT" property="userId" /> | |||||
| <result column="type" jdbcType="INTEGER" property="type" /> | |||||
| <result column="signin_date" jdbcType="TIMESTAMP" property="signinDate"/> | |||||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||||
| <result column="continue_month_sign" jdbcType="INTEGER" property="continueMonthSign" /> | |||||
| <result column="count_month_sign" jdbcType="INTEGER" property="countMonthSign" /> | |||||
| <result column="continue_year_sign" jdbcType="INTEGER" property="continueYearSign" /> | |||||
| <result column="count_year_sign" jdbcType="INTEGER" property="countYearSign" /> | |||||
| <result column="continue_sign" jdbcType="INTEGER" property="continueSign" /> | |||||
| <result column="count_sign" jdbcType="INTEGER" property="countSign" /> | |||||
| <result column="mark" jdbcType="VARCHAR" property="mark" /> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| `id`,`tenant_id`,`parent_tenant_id`,`user_id`,`type`,`signin_date`,`create_date`,`update_date`, | |||||
| `continue_month_sign`,`count_month_sign`,`continue_year_sign`,`count_year_sign`, | |||||
| `continue_sign`,`count_sign`,`mark` | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != userId "> | |||||
| and `user_id` = #{userId} | |||||
| </if> | |||||
| <if test=" null != type "> | |||||
| and `type` = #{type} | |||||
| </if> | |||||
| <if test=" null != startDate "> | |||||
| and `signin_date` >= #{startDate} | |||||
| </if> | |||||
| <if test=" null != endDate"> | |||||
| and `signin_date` < #{endDate} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| order by `signin_date` desc | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxCUserBasicSign" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> | |||||
| from wx_c_user_basic_sign | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="getLastSignIn" parameterType="com.iformall.domain.po.WxCUserBasicSign" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" />,max(`signin_date`) from wx_c_user_basic_sign | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != userId "> | |||||
| and `user_id` = #{userId} | |||||
| </if> | |||||
| group by user_id | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -184,6 +184,18 @@ | |||||
| and DATEDIFF(`create_date`,now())=0 | and DATEDIFF(`create_date`,now())=0 | ||||
| </select> | </select> | ||||
| <select id="monthCount" parameterType="com.iformall.domain.po.WxCreditHistory" resultType="java.lang.Integer"> | |||||
| select COUNT(0) from wx_credit_history | |||||
| where 1=1 | |||||
| <if test=" null != cUserId "> | |||||
| and `c_user_id` = #{cUserId} | |||||
| </if> | |||||
| <if test=" null != creditType "> | |||||
| and `credit_type` = #{creditType} | |||||
| </if> | |||||
| and DATE_FORMAT(`create_date`,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m'); | |||||
| </select> | |||||
| <select id="countTodayList" parameterType="com.iformall.domain.po.WxCreditHistory" resultType="java.lang.Integer"> | <select id="countTodayList" parameterType="com.iformall.domain.po.WxCreditHistory" resultType="java.lang.Integer"> | ||||
| select count(0) | select count(0) | ||||
| from wx_credit_history | from wx_credit_history | ||||
| @@ -0,0 +1,57 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxMerchantOcrModelMapper"> | |||||
| <resultMap type="com.iformall.domain.po.WxMerchantOcrModel" id="BaseResultMap"> | |||||
| <result property="id" column="id"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/> | |||||
| <result property="ocrModelId" column="ocr_model_id" jdbcType="BIGINT"/> | |||||
| <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| id,tenant_id,parent_tenant_id,merchant_id,ocr_model_id,create_time,update_time | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| <if test=" null != ocrModelId "> | |||||
| and `ocr_model_id` = #{ocrModelId} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxMerchantOcrModel" resultMap="BaseResultMap"> | |||||
| select | |||||
| <include refid="allColumns"/> | |||||
| from wx_merchant_ocr_model | |||||
| <include refid="dynamicWhereConditions"/> | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,54 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOcrModelMapper"> | |||||
| <resultMap type="com.iformall.domain.po.WxOcrModel" id="BaseResultMap"> | |||||
| <result property="id" column="id"/> | |||||
| <result property="langCode" column="lang_code" jdbcType="VARCHAR"/> | |||||
| <result property="fontName" column="font_name" jdbcType="VARCHAR"/> | |||||
| <result property="remark" column="remark" jdbcType="VARCHAR"/> | |||||
| <result property="status" column="status" jdbcType="INTEGER"/> | |||||
| <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> | |||||
| <result property="update_time" column="updateTime" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| id,lang_code,font_name,remark,status,create_time,updateTime | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != langCode and '' != langCode"> | |||||
| and `lang_code` = #{langCode} | |||||
| </if> | |||||
| <if test=" null != fontName and '' != fontName"> | |||||
| and `font_name` = #{fontName} | |||||
| </if> | |||||
| <if test=" null != status "> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns">order by ${sortColumns}</if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOcrModel" resultMap="BaseResultMap"> | |||||
| select | |||||
| <include refid="allColumns"/> | |||||
| from wx_ocr_model | |||||
| <include refid="dynamicWhereConditions"/> | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -39,6 +39,13 @@ | |||||
| <groupId>com.github.axet</groupId> | <groupId>com.github.axet</groupId> | ||||
| <artifactId>kaptcha</artifactId> | <artifactId>kaptcha</artifactId> | ||||
| <version>0.0.9</version> | <version>0.0.9</version> | ||||
| </dependency> | |||||
| <!-- ocr --> | |||||
| <dependency> | |||||
| <groupId>com.iformall</groupId> | |||||
| <artifactId>mallinkOcr</artifactId> | |||||
| <version>1.0</version> | |||||
| </dependency> | </dependency> | ||||
| </dependencies> | </dependencies> | ||||
| @@ -34,6 +34,9 @@ public class SysApplication { | |||||
| @Value("${fm.upload_dir}") | @Value("${fm.upload_dir}") | ||||
| private String uploadDir; | private String uploadDir; | ||||
| @Value("${fm.ocr_data}") | |||||
| private String ocrData; | |||||
| @Bean | @Bean | ||||
| public boolean isFmException() { | public boolean isFmException() { | ||||
| return fmException; | return fmException; | ||||
| @@ -0,0 +1,220 @@ | |||||
| package com.iformall.controller.ocr; | |||||
| import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.annotation.SystemControllerLog; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.common.Result; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.controller.base.BaseController; | |||||
| import com.iformall.domain.po.MallUserInfo; | |||||
| import com.iformall.domain.po.WxMall; | |||||
| import com.iformall.domain.po.WxMerchant; | |||||
| import com.iformall.domain.po.WxMerchantOcrModel; | |||||
| import com.iformall.domain.po.WxOcrModel; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.domain.po.base.BaseEntity.SortField; | |||||
| import com.iformall.enums.EnumFromType; | |||||
| import com.iformall.enums.EnumRentStartType; | |||||
| import com.iformall.ocr.FormallTess4j; | |||||
| import com.iformall.ocr.FormallTess4jTrain; | |||||
| import com.iformall.service.WxMallService; | |||||
| import com.iformall.service.WxMerchantService; | |||||
| import com.iformall.service.WxOcrService; | |||||
| import io.swagger.annotations.ApiImplicitParam; | |||||
| import io.swagger.annotations.ApiImplicitParams; | |||||
| import io.swagger.annotations.ApiOperation; | |||||
| import java.io.File; | |||||
| import java.io.FileOutputStream; | |||||
| import java.io.IOException; | |||||
| import java.io.InputStream; | |||||
| import java.io.OutputStream; | |||||
| import java.util.Date; | |||||
| import java.util.Map; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.*; | |||||
| import org.springframework.web.multipart.MultipartFile; | |||||
| @RestController | |||||
| @RequestMapping("ocr") | |||||
| public class WxOcrController extends BaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| private WxOcrService ocrService; | |||||
| @Autowired | |||||
| private WxMerchantService merchantService; | |||||
| @Autowired | |||||
| private String ocrData; | |||||
| /** | |||||
| * 模板列表 | |||||
| * @param wxRentContract | |||||
| * @param pageNum | |||||
| * @param pageSize | |||||
| * @return | |||||
| */ | |||||
| @GetMapping("/modelList") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||||
| @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||||
| public ResultData modelList(@ModelAttribute WxOcrModel ocrModel, Integer pageNum, Integer pageSize) { | |||||
| if (null == ocrModel) { | |||||
| ocrModel = new WxOcrModel(); | |||||
| } | |||||
| ocrModel.setSortColumns(SortField.Createtime_DESC); | |||||
| PageInfo<WxOcrModel> page = ocrService.listOcrModelAsPage(ocrModel, pageNum, pageSize); | |||||
| return new ResultData(page); | |||||
| } | |||||
| /** | |||||
| * 更新模板 | |||||
| * @param wxRentContract | |||||
| * @return | |||||
| */ | |||||
| @PostMapping("updateModel") | |||||
| public ResultData updateModel(@RequestBody WxOcrModel ocrModel) { | |||||
| return ocrService.saveOrUpdateOcrModel(ocrModel); | |||||
| } | |||||
| /** | |||||
| * 根据商户查询模板 | |||||
| * @param wxRentContract | |||||
| * @return | |||||
| */ | |||||
| @GetMapping("merchantModel") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "merchantId", value = "商户编号", dataType = "Long", paramType = "query", required = true) | |||||
| }) | |||||
| public ResultData merchantModel(Long merchantId) { | |||||
| WxMerchant merchant = merchantService.getById(merchantId); | |||||
| if (null == merchant) { | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"商户数据不存在"); | |||||
| } | |||||
| return new ResultData(ocrService.getMerchantOcrModel(merchantId, merchant.getTenantId(), merchant.getParentTenantId())); | |||||
| } | |||||
| /** | |||||
| * 更新商户模板 | |||||
| * @param wxRentContract | |||||
| * @return | |||||
| */ | |||||
| @PostMapping("updateMerchantModel") | |||||
| public ResultData updateMerchantModel(@RequestBody WxMerchantOcrModel merchantModel) { | |||||
| return ocrService.saveOrUpdateMerchantOcrModel(merchantModel); | |||||
| } | |||||
| /** | |||||
| * 删除商户模板 | |||||
| * @param wxRentContract | |||||
| * @return | |||||
| */ | |||||
| @PostMapping("deleteMerchantModel") | |||||
| public ResultData deleteMerchantModel(@RequestBody WxMerchantOcrModel merchantModel) { | |||||
| return ocrService.deleteMerchantOcrModel(merchantModel.getId()); | |||||
| } | |||||
| /** | |||||
| * 获取训练步骤 | |||||
| * @return | |||||
| */ | |||||
| @GetMapping("getTrainSteps") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "modelId", value = "模板编号", dataType = "Long", paramType = "query", required = true) | |||||
| }) | |||||
| public ResultData getTrainSteps(Long modelId) { | |||||
| WxOcrModel model = ocrService.getOcrModelById(modelId); | |||||
| if (null == model) { | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"ocr模板不存在"); | |||||
| } | |||||
| return new ResultData(FormallTess4jTrain.getTrainSteps(model.getLangCode(), model.getFontName())); | |||||
| } | |||||
| /** | |||||
| *测试训练结果 | |||||
| * @return | |||||
| */ | |||||
| @PostMapping(value = "/testTrain", consumes = "multipart/*", headers = "content-type=multipart/form-data") | |||||
| public ResultData testTrain(@RequestParam("file") MultipartFile multiReq,@RequestParam("modelId") Long modelId) { | |||||
| try { | |||||
| WxOcrModel model = ocrService.getOcrModelById(modelId); | |||||
| if (null == model) { | |||||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"ocr模板不存在"); | |||||
| } | |||||
| File file = multipartFileToFile(multiReq); | |||||
| String result = FormallTess4j.testDoOCR_File(ocrData, file, model.getFontName()); | |||||
| return new ResultData(result); | |||||
| } catch (Exception e) { | |||||
| logger.error("testTrain error.",e); | |||||
| return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR.getCode(),"解析失败。"+e.getMessage()); | |||||
| } | |||||
| } | |||||
| private File multipartFileToFile(MultipartFile file) { | |||||
| File toFile = null; | |||||
| if (file.equals("") || file.getSize() <= 0) { | |||||
| file = null; | |||||
| } else { | |||||
| InputStream ins = null; | |||||
| try { | |||||
| ins = file.getInputStream(); | |||||
| toFile = new File(file.getOriginalFilename()); | |||||
| inputStreamToFile(ins, toFile); | |||||
| ins.close(); | |||||
| } catch (IOException e) { | |||||
| logger.error("multipartFileToFile error.",e); | |||||
| }finally { | |||||
| if (null != ins) { | |||||
| try { | |||||
| ins.close(); | |||||
| } catch (IOException e) { | |||||
| logger.error("multipartFileToFile error.",e); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| return toFile; | |||||
| } | |||||
| private void inputStreamToFile(InputStream ins, File file) { | |||||
| OutputStream os = null; | |||||
| try { | |||||
| os = new FileOutputStream(file); | |||||
| int bytesRead = 0; | |||||
| byte[] buffer = new byte[8192]; | |||||
| while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { | |||||
| os.write(buffer, 0, bytesRead); | |||||
| } | |||||
| os.close(); | |||||
| ins.close(); | |||||
| } catch (Exception e) { | |||||
| logger.error("inputStreamToFile error.",e); | |||||
| }finally { | |||||
| if (null != os) { | |||||
| try { | |||||
| os.close(); | |||||
| } catch (IOException e) { | |||||
| logger.error("inputStreamToFile error.",e); | |||||
| } | |||||
| } | |||||
| if (null != ins) { | |||||
| try { | |||||
| ins.close(); | |||||
| } catch (IOException e) { | |||||
| logger.error("inputStreamToFile error.",e); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -165,6 +165,7 @@ fm: | |||||
| deploy: 1 | deploy: 1 | ||||
| open: true | open: true | ||||
| upload_dir: /home/test/server/uploads/ | upload_dir: /home/test/server/uploads/ | ||||
| ocr_data: /home/test/server/ocr_data/ | |||||
| ueditor: | ueditor: | ||||
| config: config.json | config: config.json | ||||
| @@ -122,12 +122,14 @@ fm: | |||||
| deploy: 3 | deploy: 3 | ||||
| open: true | open: true | ||||
| upload_dir: /root/uploads/ | upload_dir: /root/uploads/ | ||||
| ocr_data: /root/ocr_data/ | |||||
| ueditor: | ueditor: | ||||
| config: config.json | config: config.json | ||||
| unified: true | unified: true | ||||
| upload-path: ./upload/ | upload-path: ./upload/ | ||||
| url-prefix: "" | url-prefix: "" | ||||
| logging: | logging: | ||||
| level: | level: | ||||
| @@ -100,6 +100,7 @@ fm: | |||||
| deploy: 2 | deploy: 2 | ||||
| open: true | open: true | ||||
| upload_dir: /home/ec2-user/server/uploads/ | upload_dir: /home/ec2-user/server/uploads/ | ||||
| ocr_data: /home/ec2-user/server/ocr_data/ | |||||
| ueditor: | ueditor: | ||||
| config: config.json | config: config.json | ||||