diff --git a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java index f72f27524..668c20847 100644 --- a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java +++ b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java @@ -22,13 +22,21 @@ import tk.mybatis.spring.annotation.MapperScan; @EnableRocketMQ public class UserApplication { - @Value("${fm.exception}") - private boolean fmException; + @Value("${fm.exception}") + private boolean fmException; - @Bean - public boolean isFmException() { - return fmException; - } + @Value("${fm.open}") + private boolean fmOpen; + + @Bean + public boolean isFmException() { + return fmException; + } + + @Bean + public boolean isFmOpen() { + return fmOpen; + } public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); diff --git a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java index 8a0d20707..91f789232 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java @@ -101,9 +101,13 @@ public class ShiroConfig { filterChainDefinitionMap.put("/bHidLogin/**", "anon"); filterChainDefinitionMap.put("/sendLoginPhoneCode/**", "anon"); filterChainDefinitionMap.put("/doLoginByPhone/**", "anon"); - filterChainDefinitionMap.put("/wechat/login", "anon"); // 微信第三方登录callback - filterChainDefinitionMap.put("/wechat/callback", "anon"); // 微信第三方登录callback - filterChainDefinitionMap.put("/wechat/weChatUserLogin", "anon"); // 微信第三方登录绑定 + filterChainDefinitionMap.put("/wechat/login", "anon"); // 微信第三方登录callback + filterChainDefinitionMap.put("/wechat/callback", "anon"); // 微信网页登录回调 + filterChainDefinitionMap.put("/wechat/weChatUserLogin", "anon"); // 微信第三方登录 + // 验证码 + filterChainDefinitionMap.put("/captcha.jpg", "anon"); + // 官网 + filterChainDefinitionMap.put("/wxMallApply/add", "anon"); // callback filterChainDefinitionMap.put("/wxPay/notify/**", "anon"); // 支付回调 filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon"); @@ -111,7 +115,6 @@ public class ShiroConfig { filterChainDefinitionMap.put("/user/sendvalidationcode", "anon"); filterChainDefinitionMap.put("/user/updatepwd", "anon"); filterChainDefinitionMap.put("/carCallback/**", "anon"); - filterChainDefinitionMap.put("/wxMallApply/add", "anon"); filterChainDefinitionMap.put("/wxMallApply/sendvalidationcode", "anon"); // static files @@ -119,8 +122,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/js/**", "anon"); filterChainDefinitionMap.put("/img/**", "anon"); filterChainDefinitionMap.put("/font-awesome/**", "anon"); - // 验证码 - filterChainDefinitionMap.put("/captcha.jpg", "anon"); + //:这是一个坑呢,一不小心代码就不好使了; // //自定义加载权限资源关系 diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/AsyncTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/AsyncTask.java index 68a40be25..ce8502152 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/AsyncTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/AsyncTask.java @@ -10,12 +10,7 @@ import com.iformall.domain.po.WxTags; import com.iformall.domain.vo.CUserBaseInfoT; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxTagsService; -import com.iformall.shiro.UserSession; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.session.Session; import org.apache.shiro.session.UnknownSessionException; -import org.apache.shiro.subject.Subject; -import org.apache.shiro.util.ThreadContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -66,7 +61,7 @@ public class AsyncTask { public void importExcelData(File file, MallUserInfo user, String importKey, String tenantId) { ImportParams params = new ImportParams(); // 需要验证 - params.setImportFields(new String[]{"姓名", "性别", "手机号", "微信昵称", "学历", "生日", "地址", "上次活跃时间", "注册时间", "标签", "成长值"}); + params.setImportFields(new String[]{"姓名", "性别", "手机号", "微信昵称", "学历", "生日","积分", "地址", "上次活跃时间", "注册时间", "标签", "成长值"}); IExcelDataHandler handler = new AsyncTask.UserExcelHandler(); handler.setNeedHandlerFields(new String[] { "手机号" }); params.setNeedVerify(true); @@ -111,7 +106,7 @@ public class AsyncTask { try { successList.parallelStream().forEach(uBase -> { try { - wxCUserBasicInfoService.importOneMem(tenantId, importKey, tagList, uBase); + wxCUserBasicInfoService.importOneMem(tenantId, importKey, tagList, uBase,user); } catch (UnknownSessionException ue) { logger.error("session :"+ue.getMessage()); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java index e287e5eba..f980b7d73 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java @@ -148,6 +148,7 @@ public class MallUserInfoController extends BaseController { @SystemControllerLog(description = "用户管理-修改用户") public ResultData updateUser(@RequestBody MallUserInfo userInfo) { logger.debug("[" + getIpAddr() + "] MallUserInfoController::updateUser"); + boolean bChangedPhone = false; MallUserInfo currentUser = getUser(); // 只有超管和自己能更新信息 if (!(currentUser.getId().equals(userInfo.getId()) || @@ -164,6 +165,7 @@ public class MallUserInfoController extends BaseController { if(checkUniquePhone(userInfo.getPhone()) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } + bChangedPhone = true; } userInfo.setTenantId(getTenantId()); @@ -183,20 +185,20 @@ public class MallUserInfoController extends BaseController { if (currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode()) && currentUser.getId().equals(userInfo.getId())) { // 超管 - boolean bModify = false; MallUserInfo adminUser = new MallUserInfo(); adminUser.setFlowPermission(userInfo.getFlowPermission()); + adminUser.setEmail(userInfo.getEmail()); adminUser.setId(userInfo.getId()); if (StringUtils.isNotBlank(userInfo.getPassword()) && userInfo.getPassword().length() > 0) { adminUser.setPassword(userInfo.getPassword()); - bModify = true; } - if (StringUtils.isNotBlank(userInfo.getUsername())) { - adminUser.setUsername(userInfo.getUsername()); + if (StringUtils.isNotBlank(userInfo.getNickName())) { + adminUser.setNickName(userInfo.getNickName()); } - if (bModify) { - userInfoService.saveOrUpdate(adminUser); + if (StringUtils.isNotBlank(userInfo.getPhone())) { + adminUser.setPhone(userInfo.getPhone()); } + userInfoService.saveOrUpdate(adminUser); } else { userInfoService.saveOrUpdate(userInfo); if (userInfo.getRoleId() != null) { @@ -207,6 +209,10 @@ public class MallUserInfoController extends BaseController { userRoleService.saveOrUpdate(r); } } + if(bChangedPhone) { + // 手机号修改,清除bopen_id, 清除web_open_id + userInfoService.cleanAllOpenId(userInfo); + } return new ResultData(); } @@ -257,15 +263,11 @@ public class MallUserInfoController extends BaseController { } private int checkUniqueName(String userName) { - MallUserInfo userQ = new MallUserInfo(); - userQ.setUsername(userName); - return userInfoService.cntUserList(userQ); + return userInfoService.cntByUserName(userName); } private int checkUniquePhone(String phone) { - MallUserInfo userQ = new MallUserInfo(); - userQ.setPhone(phone); - return userInfoService.cntUserList(userQ); + return userInfoService.cntByUserPhone(phone); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/UploadController.java b/mallinkAdmin/src/main/java/com/iformall/controller/UploadController.java index 063cc2f1f..bc58b1d06 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/UploadController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/UploadController.java @@ -28,9 +28,7 @@ import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; @RestController @RequestMapping(value = "upload") @@ -44,66 +42,6 @@ public class UploadController extends BaseController { private AmazonS3 s3 = null; - /* - @Value("${fileUpload.path}") - private String filePath; - - @Value("${fileUpload.server}") - private String server; - - @PostMapping(value = "/fileUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") - @ApiOperation("上传文件") - public ResultData fileUpload(@RequestParam("file") MultipartFile multiReq) { - ResultData data = new ResultData(); - FileOutputStream fos = null; - BufferedInputStream fs = null; - try { - File targetFile = new File(filePath); - if (!targetFile.exists()) { - targetFile.mkdirs(); - } - String fileName = UUID.randomUUID().toString(); - int dot = multiReq.getOriginalFilename().lastIndexOf('.'); - fileName = fileName + multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length()); - fos = new FileOutputStream(new File(filePath + File.separator + fileName)); - fs = (BufferedInputStream) multiReq.getInputStream(); - byte[] buffer = new byte[1024]; - int len = 0; - while ((len = fs.read(buffer)) != -1) { - fos.write(buffer, 0, len); - } - fos.close(); - fs.close(); - data.code = ResultData.SUCCESS; - Map map = new HashMap<>(); - map.put("url", server + "/" + fileName); - data.data = map; - } catch (Exception e) { - e.printStackTrace(); - data.code = ResultData.ERROR; - data.message = "上传失败"; - } finally { - if (fos != null) { - try { - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (fs != null) { - try { - fs.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - - } - return data; - } - */ - private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName) { ResultData data = new ResultData(); try { @@ -193,6 +131,61 @@ public class UploadController extends BaseController { return data; } + /** + * 多文件上传 + * + * @param files + * @return + * @throws Exception + */ + @PostMapping(value = "/awsFilesUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiOperation("多文件上传") + public ResultData awsFilesUpload(@RequestParam("files") MultipartFile[] files) { + logger.info("[" + getIpAddr() + "] UploadController::awsFilesUpload"); + + if(files.length > 0){ + ResultData data = new ResultData(); + List> dataList = new ArrayList>(); + for(MultipartFile multipartFile: files) { + Map map = new HashMap<>(); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multipartFile.getContentType()); + metadata.setContentLength(multipartFile.getSize()); + + FileOutputStream fos = null; + BufferedInputStream fs = null; + + map.put("key", multipartFile.getOriginalFilename()); + + String fileName = UUID.randomUUID().toString(); + int dot = multipartFile.getOriginalFilename().lastIndexOf('.'); + if (dot >= 0) { + fileName = getTenantId() + "/" + fileName + multipartFile.getOriginalFilename().substring(dot, multipartFile.getOriginalFilename().length()); + } else { + fileName = getTenantId() + "/" + fileName; + } + + ResultData data1 = awsUpload(multipartFile, metadata, fileName); + if(data1.code == ResultData.SUCCESS) { + Map _data = (Map)data1.data; + map.put("url", (String) _data.get("url")); + dataList.add(map); + } else { + // 部分成功 + data.code = ResultData.SUCCESS; + data.data = dataList; + return data; + } + } + data.code = ResultData.SUCCESS; + data.data = dataList; + return data; + + } + return new ResultData(); + } + /** * C端上传图片文件 * diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java index d935fdbdb..6c6f2132a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java @@ -1,14 +1,22 @@ package com.iformall.controller; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; +import com.iformall.enums.EnumAppType; import com.iformall.service.WxAppinfoService; +import com.iformall.service.wechat.FmOpenService; +import com.iformall.utils.Constant; +import com.iformall.utils.MaUtil; +import com.iformall.utils.QRCodeUtils; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +25,11 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Date; import java.util.Map; @RestController @@ -24,9 +37,15 @@ import java.util.Map; public class WxAppinfoController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private boolean isFmOpen; + @Autowired private WxAppinfoService wxAppinfoService; + @Autowired + private FmOpenService openService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -74,24 +93,11 @@ public class WxAppinfoController extends BaseController { return new ResultData(Result.SUCCESS, "查询成功", wxAppinfoService.getById(id)); } - - @ApiOperation("C端更新AccessToken, 无限制二维码生成需要更新token") - @GetMapping("/accessTokenUpdate") - public ResultData ctokenUpdate() { - logger.debug("[" + getIpAddr() + "] WxAppinfoController::ctokenUpdate"); - try { - wxAppinfoService.ctokenUpdate(getTenantId()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - return new ResultData(); - } - - @ApiOperation(value = "下载二维码", notes = "参数{\"pageUrl\":\"String\", \"sceneParam\":\"二维码参数\", \"type\":0:有限二维码,1:无限二维码,\"withText\":int(0:不带字, 1:加一行字,2:加两行字),\"text1\":\"String\",\"text2\":\"String\"}") + @ApiOperation(value = "下载二维码", notes = "参数{\"name\":\"String\",\"pageUrl\":\"String\", \"sceneParam\":\"二维码参数\", \"type\":0:有限二维码,1:无限二维码,\"withText\":int(0:不带字, 1:加一行字,2:加两行字),\"text1\":\"String\",\"text2\":\"String\"}") @PostMapping("/downQrCode") public ResultData downQrCode(HttpServletRequest request, HttpServletResponse response, @RequestBody Map params) { logger.debug("[" + getIpAddr() + "] WxAppinfoController::downQrCode"); + String name = (String) params.get("name"); String pageUrl = (String) params.get("pageUrl"); String sceneParam = (String) params.get("sceneParam"); int type = 0; @@ -113,9 +119,10 @@ public class WxAppinfoController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "pageUrl不能为空"); } try { - wxAppinfoService.exportQrcode(request, response, + exportQrcode(request, response, getTenantId(), type, pageUrl, sceneParam, - withText, text1, text2); + withText, text1, text2, + name); } catch (Exception e) { logger.error(e.getMessage()); } @@ -123,5 +130,117 @@ public class WxAppinfoController extends BaseController { return new ResultData(); } + private void exportQrcode(HttpServletRequest request, HttpServletResponse response, + String tenantId, int type, String pageUrl, String sceneParam, + int withText, String text1, String text2, + String name) { + // type 0 有限二维码, 1 无限制二维码 + // withText 0 不带字 1. 带下面的字,2 带下面的两行字 + WxAppinfo appinfo = wxAppinfoService.getCAppInfo(tenantId); + boolean autoColor = false; + boolean isHyaline = true; + WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0"); + + WxMaService wxMaService; + if(isFmOpen) { + wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId()); + } else { + wxMaService = MaUtil.getWeappService(appinfo); + } + + String pathStr = ""; + if (StringUtils.isNotBlank(sceneParam)) { + pathStr = pageUrl + "?scene="+sceneParam; + } else { + pathStr = pageUrl; + } + + + String filepath = Constant.fileDirectory; + String fileName = name + ".png"; + String destPath1 = filepath + "1_" + fileName; + String destPath = filepath + fileName; + + File dest = new File(destPath); + File pDest = dest.getParentFile(); + if (!pDest.exists()) { + pDest.mkdirs(); + } + try { + if(type == 0) { + final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH); + if (withText == 1) { + File dest1 = new File(destPath1); + org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); + QRCodeUtils.graphicsGeneration(dest1, dest, text1); + org.apache.commons.io.FileUtils.forceDelete(dest1); + } else if (withText == 2) { + File dest1 = new File(destPath1); + org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); + QRCodeUtils.graphicsGeneration2(dest1, dest, text1, text2); + org.apache.commons.io.FileUtils.forceDelete(dest1); + } else { + org.apache.commons.io.FileUtils.copyFile(codeFile, dest); + } + org.apache.commons.io.FileUtils.forceDelete(codeFile); + } else { + final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline); + if (withText == 1) { + File dest1 = new File(destPath1); + org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); + QRCodeUtils.graphicsGeneration(dest1, dest, text1); + org.apache.commons.io.FileUtils.forceDelete(dest1); + } else if (withText == 2) { + File dest1 = new File(destPath1); + org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); + QRCodeUtils.graphicsGeneration2(dest1, dest, text1, text2); + org.apache.commons.io.FileUtils.forceDelete(dest1); + } else { + org.apache.commons.io.FileUtils.copyFile(codeFile, dest); + } + org.apache.commons.io.FileUtils.forceDelete(codeFile); + } + + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + + try { + downFile(destPath, fileName, response, request); + org.apache.commons.io.FileUtils.forceDelete(dest); + } catch (Exception e) { + logger.error(e.getMessage()); + } + + } + + private void downFile(String filePath, String filename, HttpServletResponse response, HttpServletRequest req) throws IOException { + try { + response.reset(); + response.setContentType("bin"); + String agent = req.getHeader("user-agent"); + if (agent.contains("Firefox")) { + response.setHeader("Content-disposition", + "attachment; filename=" + + new String(filename.getBytes("GB2312"),"ISO-8859-1")); + } else { + response.setHeader("Content-disposition", + "attachment; filename=" + + java.net.URLEncoder.encode(filename,"UTF-8")); + } + // 循环取出流中的数据 + byte[] b = new byte[1024]; + int len; + InputStream inStream = new FileInputStream(filePath); + while ((len = inStream.read(b)) > 0) + response.getOutputStream().write(b, 0, len); + inStream.close(); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillActionController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillActionController.java new file mode 100644 index 000000000..131d3aa82 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillActionController.java @@ -0,0 +1,48 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillAction; +import com.iformall.service.WxBillActionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +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.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author gongbiao + */ +@Api(description = "账单操作记录") +@RestController +@RequestMapping("wxBillAction") +public class WxBillActionController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + @Autowired + private WxBillActionService wxBillActionService; + + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + @SystemControllerLog(description = "账单操作记录-列表") + public ResultData list(@ModelAttribute WxBillAction wxBillAction, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxBillActionController::list"); + if (null == wxBillAction) { + wxBillAction = new WxBillAction(); + } + wxBillAction.setTenantId(getTenantId()); + wxBillAction.setSortColumns(WxBillAction.Field.Id_DESC); + PageInfo result = wxBillActionService.listAsPage(wxBillAction, pageNum, pageSize); + return new ResultData(result); + } + +} \ No newline at end of file diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java index edd1d6894..c8ebadd3f 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java @@ -2,10 +2,12 @@ package com.iformall.controller; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxShop; import com.iformall.domain.vo.WxBillAll; import com.iformall.service.WxBillAllService; 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; @@ -16,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.List; import java.util.Map; /** @@ -70,4 +73,37 @@ public class WxBillAllController extends BaseController { } + /** + * 欠缴商户列表 + * @param wxBillAll + * @param pageNum + * @param pageSize + * @return + */ + @GetMapping("oweMerchantlist") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + @SystemControllerLog(description = "费用收缴数据-欠缴商户列表") + public ResultData oweMerchantlist(@ModelAttribute WxBillAll wxBillAll, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxBillAllController::oweMerchantlist"); + if (null == wxBillAll) { + wxBillAll = new WxBillAll(); + } + wxBillAll.setTenantId(getTenantId()); + Map result = wxBillAllService.getOweBillAsPage(wxBillAll, pageNum, pageSize); + return new ResultData(result); + } + + @ApiOperation("导出欠缴商户列表") + @GetMapping("/exportOweMerchantlist") + @SystemControllerLog(description = "费用收缴数据-欠缴商户列表-导出") + public void exportOweMerchantlist(@ModelAttribute WxBillAll wxBillAll, HttpServletRequest request, HttpServletResponse response) { + logger.debug("[" + getIpAddr() + "] WxBillAllController::exportOweMerchantlist"); + if (null == wxBillAll){ + wxBillAll = new WxBillAll(); + } + wxBillAll.setTenantId(getTenantId()); + wxBillAllService.exportOweMerchant(wxBillAll, request, response); + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDailyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDailyController.java index e407cfce5..0c1679399 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDailyController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDailyController.java @@ -47,7 +47,7 @@ public class WxBillDailyController extends BaseController { logger.debug("[" + getIpAddr() + "] WxBillDailyController::add"); wxBillDaily.setTenantId(getTenantId()); wxBillDaily.setUserId(getUser().getId()); - return wxBillDailyService.saveOrUpdate(wxBillDaily); + return wxBillDailyService.saveOrUpdate(wxBillDaily, getUser()); } @PostMapping("update") @@ -55,7 +55,7 @@ public class WxBillDailyController extends BaseController { public ResultData update(@RequestBody WxBillDaily wxBillDaily) { logger.debug("[" + getIpAddr() + "] WxBillDailyController::update"); wxBillDaily.setUserId(getUser().getId()); - return wxBillDailyService.saveOrUpdate(wxBillDaily); + return wxBillDailyService.saveOrUpdate(wxBillDaily, getUser()); } @GetMapping("/del") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java index 1d0b6d054..cf046629b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java @@ -46,7 +46,7 @@ public class WxBillDepositController extends BaseController { public ResultData add(@RequestBody WxBillDeposit wxBillDeposit) { logger.debug("[" + getIpAddr() + "] WxBillDepositController::add"); wxBillDeposit.setTenantId(getTenantId()); - return wxBillDepositService.saveOrUpdate(wxBillDeposit); + return wxBillDepositService.saveOrUpdate(wxBillDeposit, getUser()); } @@ -54,7 +54,7 @@ public class WxBillDepositController extends BaseController { @SystemControllerLog(description = "租赁押金-更新") public ResultData update(@RequestBody WxBillDeposit wxBillDeposit) { logger.debug("[" + getIpAddr() + "] WxBillDepositController::update"); - return wxBillDepositService.saveOrUpdate(wxBillDeposit); + return wxBillDepositService.saveOrUpdate(wxBillDeposit, getUser()); } @@ -87,7 +87,7 @@ public class WxBillDepositController extends BaseController { @SystemControllerLog(description = "租赁押金-退回押金") public ResultData returnDeposit(@RequestBody WxBillDeposit wxBillDeposit) { logger.debug("[" + getIpAddr() + "] WxBillDepositController::returnDeposit"); - return wxBillDepositService.returnDeposit(wxBillDeposit); + return wxBillDepositService.returnDeposit(wxBillDeposit, getUser()); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherController.java index 26782887c..4530e823c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherController.java @@ -47,7 +47,7 @@ public class WxBillOtherController extends BaseController { logger.debug("[" + getIpAddr() + "] WxBillOtherController::add"); wxBillOther.setTenantId(getTenantId()); wxBillOther.setUserId(getUser().getId()); - return wxBillOtherService.saveOrUpdate(wxBillOther); + return wxBillOtherService.saveOrUpdate(wxBillOther, getUser()); } @PostMapping("update") @@ -55,7 +55,7 @@ public class WxBillOtherController extends BaseController { public ResultData update(@RequestBody WxBillOther wxBillOther) { logger.debug("[" + getIpAddr() + "] WxBillOtherController::update"); wxBillOther.setUserId(getUser().getId()); - return wxBillOtherService.saveOrUpdate(wxBillOther); + return wxBillOtherService.saveOrUpdate(wxBillOther, getUser()); } @GetMapping("/del") @@ -75,6 +75,11 @@ public class WxBillOtherController extends BaseController { return new ResultData(Result.SUCCESS, "查询成功", wxBillOtherService.getById(id)); } + /** + * 结单 + * @param id + * @return + */ @GetMapping("/updatePaid") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) @SystemControllerLog(description = "其它账单-支付更新") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java index 715106053..737fce954 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java @@ -47,7 +47,7 @@ public class WxBillOtherDepositController extends BaseController { logger.debug("[" + getIpAddr() + "] WxBillOtherDepositController::add"); wxBillOtherDeposit.setTenantId(getTenantId()); wxBillOtherDeposit.setUserId(getUser().getId()); - return wxBillOtherDepositService.saveOrUpdate(wxBillOtherDeposit); + return wxBillOtherDepositService.saveOrUpdate(wxBillOtherDeposit, getUser()); } @PostMapping("update") @@ -55,7 +55,7 @@ public class WxBillOtherDepositController extends BaseController { public ResultData update(@RequestBody WxBillOtherDeposit wxBillOtherDeposit) { logger.debug("[" + getIpAddr() + "] WxBillOtherDepositController::update"); wxBillOtherDeposit.setUserId(getUser().getId()); - return wxBillOtherDepositService.saveOrUpdate(wxBillOtherDeposit); + return wxBillOtherDepositService.saveOrUpdate(wxBillOtherDeposit, getUser()); } @GetMapping("/del") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java index ddf89a83d..cb1d1d322 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java @@ -47,7 +47,7 @@ public class WxBillPropertyController extends BaseController { public ResultData add(@RequestBody WxBillProperty wxBillProperty) { logger.debug("[" + getIpAddr() + "] WxBillPropertyController::add"); wxBillProperty.setTenantId(getTenantId()); - wxBillPropertyService.saveOrUpdate(wxBillProperty); + wxBillPropertyService.saveOrUpdate(wxBillProperty, getUser()); return new ResultData(); } @@ -55,7 +55,7 @@ public class WxBillPropertyController extends BaseController { @SystemControllerLog(description = "物业账单-更新") public ResultData update(@RequestBody WxBillProperty wxBillProperty) { logger.debug("[" + getIpAddr() + "] WxBillPropertyController::update"); - wxBillPropertyService.saveOrUpdate(wxBillProperty); + wxBillPropertyService.saveOrUpdate(wxBillProperty, getUser()); return new ResultData(); } @@ -103,4 +103,13 @@ public class WxBillPropertyController extends BaseController { final PageInfo> page = wxBillPropertyService.findByPropertyContractId(propertyContractId, getTenantId(), pageNum, pageSize); return new ResultData(page); } + + + @PostMapping("updateLatePayStatus") + @SystemControllerLog(description = "租赁账单-滞纳金结单") + public ResultData updateLatePayStatus(@RequestBody WxBillProperty wxBillProperty) { + logger.debug("[" + getIpAddr() + "] WxBillPropertyController::updateLatePayStatus"); + return wxBillPropertyService.updateLatePayStatus(wxBillProperty); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java index 1ce0ea57a..77b54641d 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java @@ -4,7 +4,6 @@ import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillOtherDeposit; import com.iformall.domain.po.WxBillPropertyDeposit; import com.iformall.service.WxBillPropertyDepositService; import io.swagger.annotations.ApiImplicitParam; @@ -47,7 +46,7 @@ public class WxBillPropertyDepositController extends BaseController { public ResultData add(@RequestBody WxBillPropertyDeposit wxBillPropertyDeposit) { logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::add"); wxBillPropertyDeposit.setTenantId(getTenantId()); - wxBillPropertyDepositService.saveOrUpdate(wxBillPropertyDeposit); + wxBillPropertyDepositService.saveOrUpdate(wxBillPropertyDeposit, getUser()); return new ResultData(); } @@ -55,7 +54,7 @@ public class WxBillPropertyDepositController extends BaseController { @SystemControllerLog(description = "物业押金账单-更新") public ResultData update(@RequestBody WxBillPropertyDeposit wxBillPropertyDeposit) { logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::update"); - return wxBillPropertyDepositService.saveOrUpdate(wxBillPropertyDeposit); + return wxBillPropertyDepositService.saveOrUpdate(wxBillPropertyDeposit, getUser()); } @GetMapping("/del") @@ -87,7 +86,7 @@ public class WxBillPropertyDepositController extends BaseController { @SystemControllerLog(description = "物业押金账单-退回押金") public ResultData returnDeposit(@RequestBody WxBillPropertyDeposit wxBillPropertyDeposit) { logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::returnDeposit"); - return wxBillPropertyDepositService.returnDeposit(wxBillPropertyDeposit); + return wxBillPropertyDepositService.returnDeposit(wxBillPropertyDeposit, getUser()); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java index 33fafa0cb..ce8b906b2 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java @@ -47,14 +47,14 @@ public class WxBillRentController extends BaseController { public ResultData add(@RequestBody WxBillRent wxBillRent) { logger.debug("[" + getIpAddr() + "] WxBillRentController::add"); wxBillRent.setTenantId(getTenantId()); - return wxBillRentService.saveOrUpdate(wxBillRent); + return wxBillRentService.saveOrUpdate(wxBillRent, getUser()); } @PostMapping("update") @SystemControllerLog(description = "租赁押金账单-更新") public ResultData update(@RequestBody WxBillRent wxBillRent) { logger.debug("[" + getIpAddr() + "] WxBillRentController::update"); - return wxBillRentService.saveOrUpdate(wxBillRent); + return wxBillRentService.saveOrUpdate(wxBillRent, getUser()); } @GetMapping("/del") @@ -110,4 +110,12 @@ public class WxBillRentController extends BaseController { return wxBillRentService.updateRevenue(wxBillRent); } + + @PostMapping("updateLatePayStatus") + @SystemControllerLog(description = "租赁账单-滞纳金结单") + public ResultData updateLatePayStatus(@RequestBody WxBillRent wxBillRent) { + logger.debug("[" + getIpAddr() + "] WxBillRentController::updateLatePayStatus"); + return wxBillRentService.updateLatePayStatus(wxBillRent); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBusinessController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBusinessController.java index bb60f20ad..56509492f 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBusinessController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBusinessController.java @@ -5,7 +5,9 @@ import com.iformall.annotation.SystemControllerLog; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxBusiness; +import com.iformall.domain.po.WxSubBusiness; import com.iformall.service.WxBusinessService; +import com.iformall.service.WxSubBusinessService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -27,6 +29,9 @@ public class WxBusinessController extends BaseController { @Autowired private WxBusinessService wxBusinessService; + @Autowired + private WxSubBusinessService wxSubBusinessService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -40,63 +45,22 @@ public class WxBusinessController extends BaseController { return new ResultData(page); } - @ApiOperation("成长值业态列表接口") - @GetMapping("busListForScore") - @SystemControllerLog(description = "成长值-业态-列表") - public ResultData getList() { - logger.debug("[" + getIpAddr() + "] WxBusinessController::getList"); - WxBusiness wxBusiness = new WxBusiness(); - final List busList = wxBusinessService.getList(wxBusiness); - // 业态 全部 不返回 - List busList2 = busList.stream().filter(b -> !b.getId().equals(0L)).collect(Collectors.toList()); - return new ResultData(busList2); - } - @ApiOperation("业态全列表接口") - @GetMapping("allist") + @GetMapping("listAll") @SystemControllerLog(description = "业态-全列表") - public ResultData getAllList() { + public ResultData listAll() { logger.debug("[" + getIpAddr() + "] WxBusinessController::getList"); - WxBusiness wxBusiness = new WxBusiness(); - final List busList = wxBusinessService.getList(wxBusiness); + final List busList = wxBusinessService.findListAll(); return new ResultData(busList); } - @ApiOperation("新增接口") - @PostMapping("add") - @SystemControllerLog(description = "业态-新增") - public ResultData add(@RequestBody WxBusiness wxBusiness) { - logger.debug("[" + getIpAddr() + "] WxBusinessController::add"); - //Assert.notNull(wxBusiness.getName(), "角色名不能为空"); - //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); - return new ResultData(); - } - - @ApiOperation("根据id更新接口") - @PostMapping("update") - @SystemControllerLog(description = "业态-更新") - public ResultData update(@RequestBody WxBusiness wxBusiness) { - logger.debug("[" + getIpAddr() + "] WxBusinessController::update"); - return new ResultData(); - } - - @ApiOperation("根据id删除接口") - @GetMapping("/del") - @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) - @SystemControllerLog(description = "业态-删除") - public ResultData delete(Long id) { - logger.debug("[" + getIpAddr() + "] WxBusinessController::delete"); - return new ResultData(Result.SUCCESS, "删除成功", null); - } - - @ApiOperation("根据id查询接口") - @GetMapping("/findById") - @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) - @SystemControllerLog(description = "业态-查询") - public ResultData findById(Integer id) { - logger.debug("[" + getIpAddr() + "] WxBusinessController::findById"); - return new ResultData(Result.SUCCESS, "查询成功", wxBusinessService.getById(id)); + @ApiOperation("子业态表接口") + @GetMapping("listSub") + @SystemControllerLog(description = "子业态") + public ResultData listSub(@ModelAttribute WxSubBusiness wxSubBusiness) { + logger.debug("[" + getIpAddr() + "] WxBusinessController::getList"); + final List busList = wxSubBusinessService.findList(wxSubBusiness); + return new ResultData(busList); } - } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java index f6598c944..9d9d8f8ef 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java @@ -8,6 +8,8 @@ import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; import com.iformall.domain.po.*; import com.iformall.enums.EnumAssignTagsTrigger; import com.iformall.exception.MallinkException; @@ -38,6 +40,7 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static com.iformall.domain.po.WxCouponOrder.Field.CreateDate_DESC; +import static com.iformall.ueditor.define.AppInfo.info; @RestController @RequestMapping("wxCUserBasicInfo") @@ -151,7 +154,7 @@ public class WxCUserBasicInfoController extends BaseController { WxCUserBasicInfo baseInfoQ = new WxCUserBasicInfo(); baseInfoQ.setPhone(phone); baseInfoQ.setTenantId(tenantId); - return wxCUserBasicInfoService.cntUserList(baseInfoQ); + return wxCUserBasicInfoService.countUser(baseInfoQ); } @ApiOperation("根据id更新接口") @@ -452,4 +455,42 @@ public class WxCUserBasicInfoController extends BaseController { wxCUserBasicInfoService.exportCarPayData(record, request, response); } + + @ApiOperation("根据手机号查询接口") + @GetMapping("/findByPhone") + @ApiImplicitParam(name = "phone", value = "phone", dataType = "String", paramType = "query", required = true) + @SystemControllerLog(description = "根据手机号查询接口") + public ResultData findByPhone(String phone) { + logger.debug("[" + getIpAddr() + "] WxCUserBasicInfoController::findByPhone"); + List wxCUserBasicInfoList = wxCUserBasicInfoService.findByPhone(getTenantId(),phone); + WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo(); + if (wxCUserBasicInfoList != null && wxCUserBasicInfoList.size() > 0) { + wxCUserBasicInfo = wxCUserBasicInfoList.get(0); + } + return new ResultData(wxCUserBasicInfo); + } + + @ApiOperation("获取会员过滤器") + @GetMapping("/listFilter") + public ResultData listFilter() { + logger.debug("[" + getIpAddr() + "] WxCUserBasicInfoController::listFilter"); + return new ResultData(wxCUserBasicInfoService.listFilters(getTenantId())); + } + + + @ApiOperation("获取会员过滤器") + @PostMapping("/countByFilter") + public ResultData countByFilter(@RequestBody List filterList) { + logger.debug("[" + getIpAddr() + "] WxCUserBasicInfoController::listFilter"); + return new ResultData(wxCUserBasicInfoService.countByFilter(getTenantId(),filterList)); + } + + @ApiOperation("获取会员过滤器") + @PostMapping("/listByFilter") + public ResultData listByFilter(@RequestParam List filterList) { + logger.debug("[" + getIpAddr() + "] WxCUserBasicInfoController::listFilter"); + return new ResultData(wxCUserBasicInfoService.listByFilter(getTenantId(),filterList)); + } + + } \ No newline at end of file diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserDataController.java index defaa50d2..92c316719 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserDataController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserDataController.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; import com.iformall.annotation.SystemControllerLog; +import com.iformall.domain.po.WxCouponOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -224,7 +225,11 @@ public class WxCUserDataController extends BaseController { Date endTime = c.getTime();//明天0点 c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 Date startTime = c.getTime(); - int thisMonthCount = wxCouponOrderService.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setTenantId(tenantId); + wxCouponOrder.setStartTime(startTime); + wxCouponOrder.setEndTime(endTime); + int thisMonthCount = wxCouponOrderService.queryPriceTotal(wxCouponOrder);//月消费金额 c.clear(); c.setTime(endTime); Date eTime = c.getTime(); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCarController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCarController.java index 7c85da453..20b52b94a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCarController.java @@ -1,16 +1,18 @@ package com.iformall.controller; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; -import com.iformall.domain.po.*; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxCouponCar; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxPark; import com.iformall.domain.vo.WxCouponCarVo; import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumCouponStatus; import com.iformall.enums.EnumETCPCode; +import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.utils.ETCPUtil; import com.iformall.utils.TJDCarUtil; @@ -148,7 +150,13 @@ public class WxCarController extends BaseController { // 1期只有一个虚拟商户,可以写在商场配置里 businessId = objParams.getString("businessId"); } - String ret = etcp.getBCouponList(url, merchantNo, merchantKey, version, parkId, businessId); + String ret = ""; + try { + ret = etcp.getBCouponList(url, merchantNo, merchantKey, version, parkId, businessId); + } catch (MallinkException e) { + return new ResultData(e.getErrorCode(), e.getMessage()); + } + if (ret == null) { logger.error("quanTemplate failed, 优免券模板未发现"); return new ResultData(ErrorCode.ETCP_CMD_FAIL.getCode(), "获取优免券模板异常"); @@ -300,6 +308,7 @@ public class WxCarController extends BaseController { String version = objParams.getString("version"); if (park.getParkingId() == null) { // those code is not supported + /* String lat = objParams.getString("lat"); String lon = objParams.getString("lon"); String radius = objParams.getString("radius"); @@ -323,10 +332,18 @@ public class WxCarController extends BaseController { } } } + */ } if (park.getParkingId() != null) { - String ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId()); + String ret = ""; + try { + ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId()); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } + JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { if (retObj.get("data") != null) { diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java index dc9583545..092b39106 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java @@ -36,9 +36,12 @@ public class WxChartDataController extends BaseController { }) @SystemControllerLog(description = "报表-图表") public ResultData queryData(@RequestParam Map params) { - logger.debug("[" + getIpAddr() + "] WxChartDataController::queryData"); + String chart = params.get("chart"); + logger.info("[" + getIpAddr() + "] WxChartDataController::queryData chart: " + chart); params.put("tenantId",super.getTenantId()); - return wxChartDataService.queryData(params); + ResultData data = wxChartDataService.queryData(params); + logger.info("[" + getIpAddr() + "] WxChartDataController::queryData chart: " + chart + " end"); + return data; } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java index 428ba8f92..930c997ad 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java @@ -54,7 +54,7 @@ public class WxCouponChannelController extends BaseController { wxCouponChannel.setStatus(null); } wxCouponChannel.setTenantId(getUser().getTenantId()); - wxCouponChannel.setSortColumns(WxCouponChannel.Field.Id_DESC); + wxCouponChannel.setSortColumns(WxCouponChannel.Field.UpdateDate_DESC); final PageInfo page = wxCouponChannelService.listPageCVo(wxCouponChannel, pageNum, pageSize); return new ResultData(page); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java index 997742ad7..b709419ea 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java @@ -140,6 +140,9 @@ public class WxCouponController extends BaseController { if(coupon.getSumSubsidy() == null){ coupon.setSumSubsidy(0); } + if(coupon.getSumSubsidy() == null){ + coupon.setSumSubsidy(0); + } } return new ResultData(pageInfo); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponInjectController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponInjectController.java index 5aeae3818..531e17ebd 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponInjectController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponInjectController.java @@ -69,12 +69,8 @@ public class WxCouponInjectController extends BaseController { @SystemControllerLog(description = "精准投放-更新") public ResultData update(@RequestBody WxCouponInject couponInject) { logger.debug("[" + getIpAddr() + "] WxCouponInjectController::update"); - String[] arys = couponInject.getTags().split(","); - List tagids = new ArrayList<>(); - for (int i = 0; i < arys.length; i++) { - tagids.add(Long.parseLong(arys[i])); - } - couponInject.setTags(JSON.toJSONString(arys)); + + couponInject.setTags(JSON.toJSONString(couponInject.getFilterList())); wxCouponInjectService.saveOrUpdate(couponInject); return new ResultData(); } @@ -97,11 +93,6 @@ public class WxCouponInjectController extends BaseController { logger.debug("[" + getIpAddr() + "] WxCouponInjectController::findById"); WxCouponInject couponInject = wxCouponInjectService.getById(id); if (couponInject != null) { - List tagids = JSON.parseArray(couponInject.getTags(), Long.class); - if (!tagids.isEmpty()) { - couponInject.setTagsList(wxCUserTagsService.findTagList(getTenantId(), tagids)); - } - couponInject.setMsgModel(wxMsgModelService.getById(couponInject.getModelId())); } return new ResultData(Result.SUCCESS, "查询成功", couponInject); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponOrderController.java index 2ca315158..00bf5dfc4 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -101,14 +101,14 @@ public class WxCouponOrderController extends BaseController { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { - wxCouponOrder.setStartDate( sdf.parse(startDate)); + wxCouponOrder.setStartTime( sdf.parse(startDate)); } catch (Exception e) { - wxCouponOrder.setStartDate(null); + wxCouponOrder.setStartTime(null); } try { - wxCouponOrder.setEndDate( sdf.parse(endDate)); + wxCouponOrder.setEndTime( sdf.parse(endDate)); } catch (Exception e) { - wxCouponOrder.setEndDate(null); + wxCouponOrder.setEndTime(null); } wxCouponOrder.setSortColumns(WxCouponOrder.Field.Id_DESC); wxCouponOrderService.exportData(request, response, wxCouponOrder); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCreditHistoryController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCreditHistoryController.java new file mode 100644 index 000000000..f3d490a10 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCreditHistoryController.java @@ -0,0 +1,76 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCreditHistory; +import com.iformall.domain.vo.WxCreditHistoryVo; +import com.iformall.service.WxCreditHistoryService; +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.*; + +@RestController +@RequestMapping("wxCreditHistory") +public class WxCreditHistoryController extends BaseController +{ + @Autowired + private WxCreditHistoryService wxCreditHistoryService; + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @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 WxCreditHistory wxCreditHistory, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::list"); + if (null == wxCreditHistory) wxCreditHistory = new WxCreditHistory(); + final PageInfo page = wxCreditHistoryService.listAsPageMore(wxCreditHistory, pageNum, pageSize); + return new ResultData(page); + } + + @ApiOperation("根据商户ID和消费金额获取所增加积分 取data里credit的值") + @GetMapping("findByMerchantIdAndSpend") + @ApiImplicitParams({ + @ApiImplicitParam(name="merchantId",value="商户ID",dataType="long", paramType = "query",required=true), + @ApiImplicitParam(name="spend",value="消费金额",dataType="int", paramType = "query",required=true)}) + public ResultData findByMerchantIdAndSpend(@RequestParam Long merchantId, @RequestParam String spendStr) { + logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::findByMerchantIdAndSpend"); + return new ResultData(wxCreditHistoryService.findByMerchantIdAndSpend(merchantId,spendStr,getTenantId())); + } + + @ApiOperation("新增接口") + @PostMapping("add") + public ResultData add(@RequestBody WxCreditHistory wxCreditHistory) { + logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::add"); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setOperatorId(getUser().getId()); + WxCreditHistory credit = wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + return new ResultData(Result.SUCCESS,"操作成功",credit); + } + + @ApiOperation("根据id查询接口") + @GetMapping("/findById") + @ApiImplicitParam(name="id",value="id",dataType="Long", paramType = "query",required=true) + public ResultData findById(Long id) { + logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::findById"); + return new ResultData(Result.SUCCESS,"查询成功",wxCreditHistoryService.getById(id)); + } + + /** + * 根据A端设置的【每自然年末扣除前N年用户积分】规则,扣减用户积分 + * @return + */ + public ResultData clearCreditByYear(){ + logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::clearCreditByYear"); + wxCreditHistoryService.clearCreditByYear(); + return new ResultData(Result.SUCCESS); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java index 0fd1e4c8c..0704cd3d1 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java @@ -2,18 +2,13 @@ package com.iformall.controller; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserTags; import com.iformall.domain.po.WxFlowRecord; -import com.iformall.domain.po.WxMsgRecord; import com.iformall.enums.EnumFlowRecordStatus; -import com.iformall.enums.EnumMsgRecordStatus; import com.iformall.service.WxFlowService; -import com.iformall.service.WxMsgRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.flowable.engine.RuntimeService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -86,6 +81,23 @@ public class WxFlowAbleController extends BaseController { return new ResultData(wxFlowService.listAsPage(record,pageNum,pageSize)); } + /** + * 我的审批列表 + */ + @ApiOperation("我的审批列表") + @GetMapping(value = "/myHandleList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + @SystemControllerLog(description = "工作流-我的审批列表") + public ResultData myHandleList(@ModelAttribute WxFlowRecord record, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] FlowAbleController::myHandelList"); + record.setUserId(super.getUser().getId()); + record.setStatus(EnumFlowRecordStatus.NEW.getCode()); + return new ResultData(wxFlowService.myHandelList(record,pageNum,pageSize)); + } + /** * 审批历史 @@ -131,7 +143,7 @@ public class WxFlowAbleController extends BaseController { @PostMapping(value = "reject") @SystemControllerLog(description = "工作流-驳回") public ResultData reject(@RequestBody Map params) { - return wxFlowService.reject(params,super.getUser().getId(),super.getUser().getName(),super.getTenantId()); + return wxFlowService.reject(params,super.getUser().getId(),super.getUser().getName(),super.getUser().getPhone(),super.getTenantId()); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxMerchantController.java index 43779d4de..2c04b8faa 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxMerchantController.java @@ -7,11 +7,14 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.WxLevelConfig; import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxProfitSharingReceiver; +import com.iformall.domain.vo.WxMerchantSimpleVo; +import com.iformall.domain.vo.WxMerchantVo; import com.iformall.service.WxMerchantService; import com.iformall.service.WxProfitSharingReceiverService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.beanutils.BeanUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -154,4 +157,22 @@ public class WxMerchantController extends BaseController { return wxMerchantService.updateMerchantLevel(wxMerchant); } + @ApiOperation("查询当前租户下商户名称列表") + @GetMapping("/name_list") + @SystemControllerLog(description = "查询当前租户下商户名称列表") + public ResultData nameList() { + logger.debug("[" + getIpAddr() + "] WxMerchantController::name_list"); + return new ResultData(wxMerchantService.findList(getTenantId())); + } + + @ApiOperation("根据id查询接口") + @GetMapping("/findMerchantById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + @SystemControllerLog(description = "商户-查询") + public ResultData findMerchantById(Long id) { + logger.debug("[" + getIpAddr() + "] WxMerchantController::findMerchantById"); + WxMerchantVo wxMerchant = wxMerchantService.findMerchantById(id); + return new ResultData(wxMerchant); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgController.java index 05dd9d310..a11386688 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgController.java @@ -1,27 +1,32 @@ package com.iformall.controller; +import com.alibaba.fastjson.JSON; 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.domain.dto.WxCUserBasicInfoFilterListDto; import com.iformall.domain.po.PushLimit; import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxMsg; +import com.iformall.domain.po.msg.WxMsg; import com.iformall.domain.po.WxMsgConfig; import com.iformall.enums.EnumMsgSend; import com.iformall.enums.EnumMsgStatus; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.service.PushLimitService; +import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxMsgService; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; +import io.netty.util.internal.StringUtil; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -31,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.util.*; +import java.util.stream.Collectors; /** * @author gongbiao @@ -40,17 +46,9 @@ import java.util.*; public class WxMsgController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private WxMsgService wxMsgService; - - @Autowired - WxMsgConfigMapper wxMsgConfigMapper; @Autowired - WxCUserTagsService wxCUserTagsService; - - @Autowired - PushLimitService pushLimitService; + private WxMsgService wxMsgService; @ApiOperation("分页列表接口") @GetMapping("list") @@ -73,99 +71,10 @@ public class WxMsgController extends BaseController { @SystemControllerLog(description = "标签短信-新增") public ResultData add(@RequestBody WxMsg wxMsg) { logger.debug("[" + getIpAddr() + "] WxMsgController::add"); - //不是草稿检验疲劳度 - if (!wxMsg.getStatus().equals(EnumMsgStatus.MSG_STATUS_DRAFT.getCode())) { - if (wxMsg.getIsright().equals(EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode())) { - try { - pushLimitService.checkSendTime(getTenantId()); - } catch (MallinkException e) { - logger.error(e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - } else { - PushLimit pushLimit = pushLimitService.getPushLimit(getTenantId()); - String sendtime = wxMsg.getSendtime(); - Date date = DateUtils.stringToDate(sendtime, "yyyy-MM-dd HH:mm:ss"); - boolean isInDate = DateUtils.isInDate(date, pushLimit.getTimeStart(), pushLimit.getTimeEnd()); - if (!isInDate) { - return new ResultData(ErrorCode.PUSH_LIMIT_NOT_INRANG); - } - } - - if(wxMsg.getId()!=null){ - //如果不是草稿必然之前状态是草稿,删除 - wxMsgService.deleteById(wxMsg.getId()); - wxMsg.setId(null); - } - - } wxMsg.setTenantId(getTenantId()); - //1、手机多条以逗号分隔,直接通过实体得到wxmsg.getphones - //2、通过标签 - String phones = wxMsg.getPhones(); - String label = wxMsg.getLabel(); - if (!phones.equals("") && !label.equals("")) {//两种方式只能选其一 - return new ResultData(ErrorCode.MSG_SEND_WAY_CHOOSE_ERROR); - } - - if (phones.equals("")) {//没有手工输入手机号时解析标签,有,继续流转 - phones = parselabel(wxMsg.getTenantId(), wxMsg); - if (phones.equals("")) {//解析之后手机号依然不存在时返回 - return new ResultData(ErrorCode.MSG_NO_VALID_PHONE); - } - } - - //保证手机号惟一 - String[] phoneSplit = phones.split(","); - Set phoneSet = new HashSet<>(); - for (String phone : phoneSplit) { - phoneSet.add(phone); - } - wxMsg.setExpectSendNumber(phoneSet.size());//预计发送数量 - StringBuffer sb = new StringBuffer(); - for (String phone : phoneSet) { - sb.append(phone).append(","); - } - wxMsg.setPhones(sb.deleteCharAt(sb.length() - 1).toString()); - - //从短信配置中查询密钥 bid 等信息 - WxMsgConfig wxMsgConfig = new WxMsgConfig(); - wxMsgConfig.setTenantId(wxMsg.getTenantId()); - List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); - if (wxMsgConfigs.size() == 0) return new ResultData(ErrorCode.MSG_SERVER_NOT_FIND, "您还未接入短信运营商,请联系平台管理员"); - wxMsgConfig = wxMsgConfigs.get(0); - - if (wxMsgConfig.getRemains() == 0) { - logger.info("短信数量为0"); - return new ResultData(ErrorCode.MSG_SUM_ZERO); - } - - if (wxMsgConfig.getRemains() < wxMsg.getExpectSendNumber()) { - logger.info("短信数量不足"); - return new ResultData(ErrorCode.MSG_SUM_INSUFFICENT); - } - wxMsgService.saveOrUpdate(wxMsg, wxMsgConfig); - return new ResultData(); + return wxMsgService.add(wxMsg); } - private String parselabel(String tenantId, WxMsg wxmsg) { - String label = wxmsg.getLabel(); - String[] arys = label.split(","); - List tagids = new ArrayList<>(); - for (int i = 0; i < arys.length; i++) { - tagids.add(Long.parseLong(arys[i])); - } - List list = wxCUserTagsService.findByTag(tenantId, tagids); - - StringBuilder sb = new StringBuilder(); - if (list.size() > 0) { - for (WxCUserBasicInfo cUserInfo : list) { - sb.append(cUserInfo.getPhone()).append(","); - } - return sb.toString(); - } - return ""; - } @ApiOperation("根据id删除接口") @GetMapping("/del") @@ -184,15 +93,6 @@ public class WxMsgController extends BaseController { public ResultData findById(Long id) { logger.debug("[" + getIpAddr() + "] WxMsgController::findById"); WxMsg wxMsg = wxMsgService.getById(id); - String label = wxMsg.getLabel(); - if (label != null && !label.isEmpty()) { - String[] arys = label.split(","); - List tagids = new ArrayList<>(); - for (int i = 0; i < arys.length; i++) { - tagids.add(Long.parseLong(arys[i])); - } - wxMsg.setTagsList(wxCUserTagsService.findTagList(getTenantId(), tagids)); - } return new ResultData(wxMsg); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgRecordController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgRecordController.java index cc6739071..1f87c8464 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgRecordController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxMsgRecordController.java @@ -2,20 +2,21 @@ package com.iformall.controller; import com.alibaba.fastjson.JSONArray; import com.iformall.common.ResultData; -import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.MailMsg; +import com.iformall.domain.po.msg.SmartAppMsg; +import com.iformall.domain.po.msg.WxMsg; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.*; import com.iformall.mapper.WxMsgMapper; import com.iformall.mq.MqBaseProducer; -import com.iformall.service.MsgSendService; import com.iformall.service.WxMsgRecordService; -import com.iformall.service.impl.SendCallBackSmsServiceImpl; +import com.iformall.service.msg.impl.SendCallBackSmsServiceImpl; import com.iformall.utils.DateUtils; import com.iformall.utils.JsonUtil; import io.swagger.annotations.Api; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -37,26 +38,26 @@ public class WxMsgRecordController extends BaseController { @GetMapping(value = "/test") public ResultData test(Long id) throws Exception{ - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:00:00"); - WxMsg wxMsg = new WxMsg(); - wxMsg.setIsright(0); - wxMsg.setSendtime(systemTime); - wxMsg.setId(id); - List list = wxMsgMapper.findList(wxMsg); - logger.info("将要发送的短信列表:" + JSONArray.toJSONString(list)); - for (WxMsg msg : list) { - //sendmsg(msg); - msg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); - msg.setReceiver(msg.getPhones()); - mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(),null); - } +// String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:00:00"); +// WxMsg wxMsg = new WxMsg(); +// wxMsg.setIsright(0); +// wxMsg.setSendtime(systemTime); +// wxMsg.setId(id); +// List list = wxMsgMapper.findList(wxMsg); +// logger.info("将要发送的短信列表:" + JSONArray.toJSONString(list)); +// for (WxMsg msg : list) { +// //sendmsg(msg); +// msg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); +// msg.setReceiver(msg.getPhones()); +// mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(),null); +// } -// String s = "{\"tenantId\":\"456\",\"uuid\":\"0a410e4e-c0ef-461e-bea8-7bd222e7c7b7\",\"delayTimeLevel\":0,\"id\":270060355273621504,\"modelId\":220401934081720320,\"msg\":\"狂欢双十一:更多礼品等你来领取\",\"sendtime\":\"2019-03-25 16:00:00\",\"createtime\":\"2019-03-25 15:30:16\",\"expectSendNumber\":1,\"phones\":\"18601973448\",\"signature\":\"富茂科技\",\"isright\":0,\"name\":\"狂欢双十一\",\"excelpath\":\"\",\"label\":\"\",\"status\":0,\"way\":1}"; -// WxMsg wxMsg = (WxMsg) JsonUtil.readValue(s,WxMsg.class); -// wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); -// wxMsg.setReceiver("18601973448"); -// wxMsg.setTenantId("456"); -// msgSendService.send(wxMsg); + String s = "{\"msg\": \"新手妈妈不要怕,金宝贝帮您带孩子,音乐美术还有游戏,孩子玩着玩着就长大了\", \"way\": 2, \"name\": \"亲子活动\", \"uuid\": \"0a4ae632-9522-4a8f-bb0d-b22620ac79c3\", \"label\": \"\", \"domain\": 0, \"phones\": \"18601973448\", \"status\": 1, \"isright\": 1, \"modelId\": 204500584231862272, \"msgType\": 2, \"receiver\": \"18601973448\", \"sendtime\": \"2019-04-17 18:29:08\", \"tenantId\": \"456\", \"signature\": \"富茂科技\", \"errorNumber\": 0, \"wxMsgConfig\": {\"id\": 1, \"bid\": \"465565\", \"appid\": \"wx9ff823abeef23b94\", \"total\": 100000, \"secret\": \"7305150347587283553aa8898e7dbf20\", \"account\": \"15626593768\", \"remains\": 62667, \"recharge\": 0, \"tenantId\": \"456\", \"notifyurl\": \"http://202.165.179.86:9000/wxMsgCallback/receivemsg/456\", \"publickey\": \"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvh8j/zagfxQdnSh5OIic\\r\\nMzN+MuRuWQJPjgu4Gza4+gX3j5Ln2xNDBOTjpwyuLBjh/JcBd1cGO3lAaKCwcaix\\r\\nsmhTq56wVXXUMgDiAChu4ud8FSvRc8G8tdZAirKVAIi3NW+/pYgpWBs/0wnF8hz4\\r\\n8no4pyJHl9Jc1LH3VNIMz8vqzKUPc4ack4pFUXlcNj6C+sBlaurmI4/vwLqNxBGs\\r\\n7/zyM7dv6oy3DSU/Y1qBArM1YPjfL2dNun8rmtPgJvlPwXqA7uoHPwQ2Ym3aUn59\\r\\npkS7QI6IE8uuqNkfSte8BXLd2nIqPLFxLYLDmdll7eoyRblHcHqAYSj8stK6StC7\\r\\nDNryNKEjTEwbgf9trUI0uvF1pfgTy2gpclnY69FtD/m0+FvLyorMq+nmBqYMjka5\\r\\nK0txDQJPOa7gsi//uXd/cJW2SAXY9MSO1AfMi8Xq/YKRQzN9FW5iapskXFHca7uX\\r\\ng5NhH7flr6DW+QInFlpoN6WIEAuDF1aj4O49Ikm3WxwhTqnvEkdSCfivpYQkp9Sh\\r\\n4kQ/SQdxuT7VX+Nz6k+uMx2z4cySk33bHi0KoHbA9QFGg/54Qd0+eU4qZnd4mrgh\\r\\nhH7/QQhL7Z9eF1U5UPrsHq2Vq3rEnN+tYQ26AuKeU8vzTxBrC/SxC6C/SMFt3f/Y\\r\\nnuFh1UnNJZleZwyQt+ZdGO0CAwEAAQ==\", \"modelnotifyurl\": \"http://202.165.179.86:9000/wxMsgCallback/receivemodel/456\", \"reminderstatus\": 0, \"verifynotifyurl\": \"http://202.165.179.86:9000/wxMsgCallback/receiveverifymodel/456\"}, \"couponInject\": {\"id\": 278440211602472960, \"name\": \"END\", \"tags\": \"[{\\\"name\\\":\\\"一天以上+普通会员+男\\\",\\\"tagList\\\":[{\\\"id\\\":1011,\\\"typeId\\\":50},{\\\"id\\\":0,\\\"typeId\\\":51},{\\\"id\\\":1}]},{\\\"name\\\":\\\"一月以上+男\\\",\\\"tagList\\\":[{\\\"id\\\":1009,\\\"typeId\\\":50},{\\\"id\\\":1}]}]\", \"status\": 2, \"mUserId\": 204398756307664896, \"modelId\": 204500584231862272, \"muserId\": 204398756307664896, \"couponId\": 275856462247362560, \"sendTime\": \"2019-04-17 18:28:49\", \"sendType\": 0, \"tenantId\": \"456\", \"couponName\": \"礼品券大礼5\", \"filterList\": [{\"name\": \"一天以上+普通会员+男\", \"tagList\": [{\"id\": 1011, \"typeId\": 50}, {\"id\": 0, \"typeId\": 51}, {\"id\": 1}]}, {\"name\": \"一月以上+男\", \"tagList\": [{\"id\": 1009, \"typeId\": 50}, {\"id\": 1}]}], \"sendAmount\": 40}, \"successNumber\": 0, \"delayTimeLevel\": 0, \"expectSendNumber\": 40}"; + WxMsg wxMsg = (WxMsg) JsonUtil.readValue(s,WxMsg.class); + wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); + wxMsg.setReceiver("18601973448"); + wxMsg.setTenantId("456"); + msgSendService.send(wxMsg); return new ResultData(); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderController.java index 623e64916..d4f5ea905 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderController.java @@ -1,22 +1,31 @@ package com.iformall.controller; -import com.iformall.annotation.SystemControllerLog; -import com.iformall.domain.vo.WxOrderQueryVo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - 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.domain.po.WxCUser; +import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxOrder; +import com.iformall.domain.vo.WxOrderQueryVo; +import com.iformall.enums.EnumCouponChannelStatus; +import com.iformall.enums.EnumCouponChannelType; +import com.iformall.enums.EnumUserType; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxCUserService; +import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxOrderService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +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 java.util.Date; import java.util.Map; @RestController @@ -24,9 +33,15 @@ import java.util.Map; public class WxOrderController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxCouponChannelService wxCouponChannelService; + @Autowired private WxOrderService wxOrderService; + @Autowired + private WxCUserService wxCUserService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -112,5 +127,111 @@ public class WxOrderController extends BaseController { return new ResultData(data); } + @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") + @PostMapping("save") + public ResultData saveOrder(@RequestBody Map paramMap) { + + logger.info("OrderSave: " + paramMap.toString()); + //Assert.notNull(wxOrders.getName(), "角色名不能为空"); + //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); + String couponChannelIdStr = paramMap.get("couponChannelId"); + String couponIdStr = paramMap.get("couponId"); + String pressStr = paramMap.get("press"); + String orderGroupIdStr = paramMap.get("orderGroupId"); + String formId = paramMap.get("formId"); + //被操作人的ID + String userIdStr = paramMap.get("userId"); + Long userId = 0L; + if (StringUtils.isNotBlank(userIdStr)) { + userId = Long.valueOf(userIdStr); + } + WxCUser wxCUser = wxCUserService.getById(userId); + if (wxCUser == null) { + throw new MallinkException(ErrorCode.USER_NOT_MEMBER); + } + + if (StringUtils.isBlank(couponChannelIdStr)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空"); + } + Long couponChannelId = 0L, couponId = 0L, orderGroupId = null; + boolean isPress = false; + + if (StringUtils.isNotBlank(couponChannelIdStr)) { + try { + couponChannelId = Long.valueOf(couponChannelIdStr); + } catch (NumberFormatException e) { + logger.error("couponChannelId convert error, " + couponChannelIdStr + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "couponChannelId: " + couponChannelIdStr + ", e:" + e.getMessage()); + } + WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(couponChannelId); + if (wxCouponChannel == null) { + logger.error("couponChannelId convert error, " + couponChannelIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + if (wxCouponChannel.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) { + Date now = new Date(); + if (wxCouponChannel.getBeginTime().getTime() > now.getTime()) { + logger.error("此券活动未开始:" + couponChannelIdStr); + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_NOT_STARTED); + } + if (wxCouponChannel.getEndTime().getTime() < now.getTime()) { + logger.error("此券活动已结束:" + couponChannelIdStr); + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_END); + } + } + + if (wxCouponChannel.getStatus() == EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) { + logger.error("此券已下架:" + couponChannelIdStr); + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); + } + if (StringUtils.isBlank(couponIdStr)) { + couponId = wxCouponChannel.getCouponId(); + } + } + if (couponId <= 0 && !StringUtils.isBlank(couponIdStr)) { + try { + couponId = Long.valueOf(couponIdStr); + } catch (NumberFormatException e) { + logger.error("couponId convert error, " + couponIdStr + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "couponId: " + couponIdStr + ", e:" + e.getMessage()); + } + } + + if (couponId <= 0) { + logger.error("couponChannelId或者couponId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId或者couponId不能为空"); + } + + if(pressStr != null) { + try{ + isPress = Boolean.valueOf(pressStr); + } catch (Exception e) { + logger.error("press转换失败"); + } + } + + if (orderGroupIdStr != null) { + try { + orderGroupId = Long.valueOf(orderGroupIdStr); + } catch (Exception e) { + logger.error("orderGroupId转换失败"); + } + } + + //用于标记当前操作人为A端用户 + wxCUser.setOperatorType(EnumUserType.MALLUSER.getCode()); + wxCUser.setOperatorId(getUser().getId()); + try { + WxOrder order = wxOrderService.saveCouponOrder(wxCUser, couponChannelId, couponId, isPress, orderGroupId, formId); + return new ResultData(order); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); + } + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxPayOrderController.java index 86a9f3ab6..0ddff03d9 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -1,22 +1,26 @@ package com.iformall.controller; -import com.iformall.annotation.SystemControllerLog; -import com.iformall.service.WxAppinfoService; -import com.iformall.service.WxProfitSharingOrderService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - 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.domain.po.WxOrder; import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumPayStatus; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxOrderService; import com.iformall.service.WxPayOrderService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +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 java.util.Map; @RestController @RequestMapping("wxPayOrder") @@ -24,14 +28,10 @@ public class WxPayOrderController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired - private WxPayOrderService wxPayOrderService; - - @Autowired - private WxProfitSharingOrderService xProfitSharingOrderService; + private WxOrderService wxOrderService; @Autowired - private WxAppinfoService wxAppinfoService; - + private WxPayOrderService wxPayOrderService; @ApiOperation("分页列表接口") @GetMapping("list") @@ -84,4 +84,70 @@ public class WxPayOrderController extends BaseController { logger.debug("[" + getIpAddr() + "] WxPayOrderController::findById"); return new ResultData(Result.SUCCESS, "查询成功", wxPayOrderService.getById(id)); } + + @ApiOperation(value = "更新支付订单状态", notes = "{\"payOrderId\":\"string\",\"orderId\":\"string\",\"status\":integer,\"reason\":\"string\"}") + @PostMapping("/updatePayOrder") + public ResultData updatePayOrder(@RequestBody Map paramMap) { + logger.info("/api/pay/updatePayOrder" + paramMap.toString()); + String payOrderIdStr = (String) paramMap.get("payOrderId"); + String orderIdStr = (String) paramMap.get("orderId"); + String reasonStr = (String) paramMap.get("reason"); + Integer status = (Integer) paramMap.get("status"); + if (StringUtils.isBlank(orderIdStr)) { + logger.info("orderId不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); + } + Long payOrderId = 0L, orderId = 0L; + try { + orderId = Long.valueOf(orderIdStr); + } catch (NumberFormatException e) { + logger.error("orderId参数不正确: " + paramMap.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId参数不正确"); + } + if (!StringUtils.isBlank(payOrderIdStr)) { + try { + payOrderId = Long.valueOf(payOrderIdStr); + } catch (NumberFormatException e) { + logger.error("payOrderId参数不正确: " + paramMap.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "payOrderId参数不正确"); + } + } + + WxPayOrder payOrder = new WxPayOrder(); + payOrder.setId(payOrderId); + payOrder.setOrderId(orderId); + payOrder.setPayOrderStatus(status); + payOrder.setFailReason(reasonStr); + + WxOrder order = null; + + try { + if(status.equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) && !payOrderIdStr.equals("0")) { + // 前端提示支付成功, 不作为支付成功标志,只检查支付订单状态 + // 有价券不走update, callback更新 + payOrder = wxPayOrderService.getById(payOrderId); + if(payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())) { + order = wxOrderService.getById(orderId); + return new ResultData(Result.SUCCESS, "支付状态更新成功", order); + } else { + return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付未状态,请等待!!"); + } + } else { + // 1. 免费券,status = 1,成功 + // 2. 有价券,status = 2,取消支付 + if(status.equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())) { + wxPayOrderService.handlePayOrderStatusUpdate(payOrder, 1); + } else if (status.equals(EnumPayStatus.PAY_STATUS_FAIL.getCode())) { + wxPayOrderService.handlePayOrderStatusUpdate(payOrder, 2); + } + } + return new ResultData(Result.SUCCESS, "支付状态更新成功"); + } catch (MallinkException e) { + logger.error("支付状态更新失败2: " + payOrder.toString() + ", e:" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("支付状态更新失败3: " + payOrder.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付状态更新失败3: " + payOrder.toString() + ", e:" + e.getMessage()); + } + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java index 0b3b45b1c..2dd776761 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java @@ -1,14 +1,18 @@ package com.iformall.controller; import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxBillRent; +import com.iformall.domain.po.WxPayAccountBill; import com.iformall.domain.po.WxRentContract; import com.iformall.service.WxBillRentService; +import com.iformall.service.WxPayAccountBillService; import com.iformall.service.WxRentContractService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; import java.util.Map; /** @@ -31,6 +36,9 @@ public class WxRentContractController extends BaseController { @Autowired private WxBillRentService wxBillRentService; + @Autowired + private WxPayAccountBillService payAccountBillService; + @GetMapping("list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @@ -156,4 +164,44 @@ public class WxRentContractController extends BaseController { return wxRentContractService.updateRentContractStatus(id); } + @GetMapping("getPayAccountInfo") + @SystemControllerLog(description = "租赁合同-获取甲方账户") + public ResultData getPayAccountInfo() { + logger.debug("[" + getIpAddr() + "] WxRentContractController::updateRentContractStatus"); + String tenantId = getTenantId(); + WxPayAccountBill payAccountBill = payAccountBillService.getByTenantId(tenantId); + Map map = new HashMap<>(); + if(StringUtils.isNotBlank(payAccountBill.getBankAccountName()) && StringUtils.isNotBlank(payAccountBill.getBankCardId())) { + map.put("bankAccountName", payAccountBill.getBankAccountName()); + map.put("bankCardId", payAccountBill.getBankCardId()); + } + return new ResultData(map); + } + + @PostMapping("savePayAccountInfo") + @SystemControllerLog(description = "租赁合同-保存甲方账户") + public ResultData savePayAccountInfo(@RequestBody WxPayAccountBill payAccountBill) { + logger.debug("[" + getIpAddr() + "] WxRentContractController::updateRentContractStatus"); + if(StringUtils.isBlank(payAccountBill.getBankAccountName())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "甲方银行账户名未填写"); + } + if(StringUtils.isBlank(payAccountBill.getBankCardId())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "甲方银行账户卡号未填写"); + } + String tenantId = getTenantId(); + WxPayAccountBill payAccountBillNew = payAccountBillService.getByTenantId(tenantId); + payAccountBillNew.setBankAccountName(payAccountBill.getBankAccountName()); + payAccountBillNew.setBankCardId(payAccountBill.getBankCardId()); + payAccountBillService.saveOrUpdate(payAccountBillNew); + return new ResultData(); + } + + @GetMapping("/getMerchants") + @SystemControllerLog(description = "租赁合同-获取已签约租赁合同且未有物业的商户") + public ResultData getMerchants(@ModelAttribute WxRentContract wxRentContract) { + logger.debug("[" + getIpAddr() + "] WxRentContractController::getMerchants"); + wxRentContract.setTenantId(getTenantId()); + return new ResultData(Result.SUCCESS, "查询成功", wxRentContractService.getMerchants(wxRentContract)); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxScoreRulesController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxScoreRulesController.java index 58921c54a..3ade4e2b8 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxScoreRulesController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxScoreRulesController.java @@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("wxScoreRules") -@Api(description = "成长值规则相关接口") +@Api(description = "成长值积分规则相关接口") public class WxScoreRulesController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -35,11 +35,20 @@ public class WxScoreRulesController extends BaseController { @ApiOperation("新增接口") @PostMapping("add") - @SystemControllerLog(description = "成长值-配置-新增") + @SystemControllerLog(description = "成长值-积分-配置-新增") public ResultData add(@RequestBody WxScoreRules wxScoreRules) { logger.debug("[" + getIpAddr() + "] WxScoreRulesController::add"); wxScoreRules.setTenantId(getTenantId()); wxScoreRulesService.saveOrUpdate(wxScoreRules); return new ResultData(); } + + @ApiOperation("积分配置") + @GetMapping("/credit_rules") + @SystemControllerLog(description = "积分-配置") + public ResultData creditRulesList() { + logger.debug("[" + getIpAddr() + "] WxScoreRulesController::list"); + WxScoreRules scoreRules = wxScoreRulesService.getCreditRules(getTenantId()); + return new ResultData(scoreRules); + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java index 541f381f4..a47e1d20b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java @@ -4,13 +4,11 @@ import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxShop; import com.iformall.service.WxShopService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -72,8 +70,8 @@ public class WxShopController extends BaseController { @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) public ResultData delete(Long id) { logger.debug("[" + getIpAddr() + "] WxShopController::delete"); - wxShopService.deleteById(id); - return new ResultData(Result.SUCCESS, "删除成功", null); + Integer isAdmin = getUser().getIsAdmin(); + return wxShopService.deleteById(id, isAdmin); } @ApiOperation("根据id查询接口") @@ -146,7 +144,17 @@ public class WxShopController extends BaseController { wxShopService.exportShop(wxShop, request, response); } - - + @ApiOperation("导出未出租店铺") + @GetMapping("/exportNotRentShop") + @SystemControllerLog(description = "商铺出租数据-未出租商铺列表-导出") + public void exportNotRentShop(@ModelAttribute WxShop wxShop, HttpServletRequest request, HttpServletResponse response) { + logger.debug("[" + getIpAddr() + "] WxShopController::exportNotRentShop"); + if (null == wxShop){ + wxShop = new WxShop(); + } + wxShop.setTenantId(getTenantId()); + wxShop.setSortColumns(WxShop.Field.Id_DESC); + wxShopService.exportNotRentShop(wxShop, request, response); + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxTagsController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxTagsController.java index d01dd569b..b0ea4e04a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxTagsController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxTagsController.java @@ -37,11 +37,6 @@ public class WxTagsController extends BaseController { @Autowired private WxTagsService wxTagsService; - @Autowired - private WxTagsGroupService wxTagsGroupService; - - @Autowired - private WxTagsTypeService wxTagsTypeService; @Autowired private WxCUserTagsService wxCUserTagsService; @@ -50,42 +45,7 @@ public class WxTagsController extends BaseController { @ApiOperation("标签弹窗接口") public ResultData getAllList() { logger.debug("[" + getIpAddr() + "] WxTagsController::getAllList"); - List groupVos = new ArrayList<>(); - List groups = wxTagsGroupService.findList(null); - for(WxTagsGroup tg:groups) { - WxTagsGroupVo tgvo =new WxTagsGroupVo(); - tgvo.setId(tg.getId()); - tgvo.setName(tg.getName()); - - WxTagsType type = new WxTagsType(); - type.setGroupId(tg.getId()); - List typeVos =new ArrayList<>(); - List types = wxTagsTypeService.findList(type); - for(WxTagsType tt:types) { - WxTagsTypeVo ttvo = new WxTagsTypeVo(); - ttvo.setId(tt.getId()); - ttvo.setName(tt.getName()); - ttvo.setFlag(tt.getFlag()); - ttvo.setGroupId(tg.getId()); - ttvo.setGroupName(tg.getName()); - - WxTags t = new WxTags(); - t.setTypeId(tt.getId()); - ttvo.setTags(wxTagsService.findList(t)); - typeVos.add(ttvo); - } - tgvo.setTypes(typeVos); - groupVos.add(tgvo); - } - return new ResultData(groupVos); - } - - @ApiOperation("查询微信用户人群") - @GetMapping("findCUserCountByTag") - @SystemControllerLog(description = "会员管理-查询微信用户人群") - public Result findCUserCountByTag(Long[] tagIds) { - logger.debug("[" + getIpAddr() + "] WxTagsController::findCUserCountByTag"); - return new ResultData(wxCUserTagsService.findTagListFromCUser(getTenantId(), Arrays.asList(tagIds))); + return new ResultData(wxTagsService.listAllVo()); } @ApiOperation("查询会员用户人群") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxTopicController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxTopicController.java new file mode 100644 index 000000000..b0d424f53 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxTopicController.java @@ -0,0 +1,62 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumWxTopicStatus; +import com.iformall.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +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; + +@RestController +@RequestMapping("topic") +@Api(description = "专题相关接口") +public class WxTopicController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxTopicService wxTopicService; + + @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(WxTopic wxTopic, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxTopicController::list"); + String tenantId = getTenantId(); + wxTopic.setTenantId(tenantId); + PageInfo page = wxTopicService.listAsPage(wxTopic, pageNum, pageSize); + + //设置正在上架的专题 + Date now = new Date(); + page.getList().stream().forEach(cc->{ + if (cc.getStatus().equals(EnumWxTopicStatus.VAILD.getCode()) && cc.getEndTime()!=null && cc.getBeginTime()!=null && now.getTime() >= cc.getBeginTime().getTime() && now.getTime() <= cc.getEndTime().getTime()) { + cc.setIsOnline(1); + } + }); + return new ResultData(page); + } + + @GetMapping("findById") + public ResultData findById(WxTopic wxTopic) { + logger.debug("[" + getIpAddr() + "] WxTopicController::findById"); + String tenantId = getTenantId(); + wxTopic.setTenantId(tenantId); + WxTopic queryTopic = wxTopicService.findById(wxTopic); + return new ResultData(queryTopic); + } + + @PostMapping("saveOrUpdate") + public ResultData saveOrUpdate(@RequestBody WxTopic wxTopic) { + logger.debug("[" + getIpAddr() + "] WxTopicController::saveOrUpdate"); + wxTopic.setTenantId(super.getTenantId()); + return wxTopicService.saveOrUpdate(wxTopic); + } + + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java index 430605911..0edaa3dba 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java @@ -134,7 +134,7 @@ public class WxUserStructureController extends BaseController { WxLevelConfig other = new WxLevelConfig(); //没有等级的会员 - other.setLevel("无"); + other.setLevel(WxLevelConfigService.DEFAULT_LEVEL); WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); other.setCount(wxCUserBasicInfoService.findCount(dto) - levelList.stream().map(WxLevelConfig::getCount).reduce(Long::sum).orElse(0L)); diff --git a/mallinkAdmin/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java b/mallinkAdmin/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java index 46ee52e55..7be788b6e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java +++ b/mallinkAdmin/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java @@ -3,10 +3,9 @@ package com.iformall.interceptor; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; -public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { +public class BodyReaderHttpServletRequestWrapper extends XssHttpServletRequestWrapper { private final String body; public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { diff --git a/mallinkAdmin/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java b/mallinkAdmin/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java index 644546097..aebf7d874 100644 --- a/mallinkAdmin/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java +++ b/mallinkAdmin/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java @@ -1,12 +1,20 @@ package com.iformall.interceptor; import com.iformall.utils.UrlCheck; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.Arrays; public class HttpServletRequestWrapperFilter implements Filter { + private static final Logger logger = LoggerFactory.getLogger(HttpServletRequestWrapperFilter.class); + // 多个跨域域名设置 + // public static final String[] ALLOW_DOMAIN = {"https://admin.malls.iformall.com"}; + @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -17,6 +25,31 @@ public class HttpServletRequestWrapperFilter implements Filter { throws IOException, ServletException { ServletRequest requestWrapper = null; + /* // 跨域访问 + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + String originHeader = req.getHeader("Origin"); + + if (Arrays.asList(ALLOW_DOMAIN).contains(originHeader)) { + //通过在响应 header 中设置 ‘*’ 来允许来自所有域的跨域请求访问。 + res.setHeader("Access-Control-Allow-Origin", originHeader); + //通过对 Credentials 参数的设置,就可以保持跨域 Ajax 时的 Cookie + //设置了Allow-Credentials,Allow-Origin就不能为*,需要指明具体的url域 + res.setHeader("Access-Control-Allow-Credentials", "true"); + //请求方式 + res.setHeader("Access-Control-Allow-Methods", "*"); + //(预检请求)的返回结果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息) 可以被缓存多久 + res.setHeader("Access-Control-Max-Age", "86400"); + //首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段 + //res.setHeader("Access-Control-Allow-Headers", "*"); + res.setHeader("Access-Control-Allow-Headers", + "Timestamp,Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,Access-Control-Allow-Headers"); + } + */ + + //sql,xss过滤 + XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper((HttpServletRequest)request); + if (request instanceof HttpServletRequest) { String url = ((HttpServletRequest) request).getRequestURI(); if (!UrlCheck.checkUrl(url)) { @@ -24,7 +57,7 @@ public class HttpServletRequestWrapperFilter implements Filter { } } if (null == requestWrapper) { - chain.doFilter(request, response); + chain.doFilter(xssHttpServletRequestWrapper, response); } else { chain.doFilter(requestWrapper, response); } diff --git a/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java index 5ab7caca6..d01a11de5 100644 --- a/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -83,7 +83,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { sb.append(resultBody); - String key = "request-" + HashUtil.md5(sb.toString()); + String key = "request:A:" + HashUtil.md5(sb.toString()); Boolean isAbsent = redisTemplate.execute(new RedisCallback() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { diff --git a/mallinkAdmin/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java b/mallinkAdmin/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java new file mode 100644 index 000000000..0ee75b20a --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java @@ -0,0 +1,122 @@ +package com.iformall.interceptor; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 防止sql注入,xss攻击 + * 前端可以对输入信息做预处理,后端也可以做处理。 + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + private final Logger log = LoggerFactory.getLogger(getClass()); + private static String key = "and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+"; + private static Set notAllowedKeyWords = new HashSet(0); + private static String replacedString="INVALID"; + static { + String keyStr[] = key.split("\\|"); + for (String str : keyStr) { + notAllowedKeyWords.add(str); + } + } + + private String currentUrl; + + public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) { + super(servletRequest); + currentUrl = servletRequest.getRequestURI(); + } + + + /**覆盖getParameter方法,将参数名和参数值都做xss过滤。 + * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取 + * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 + */ + @Override + public String getParameter(String parameter) { + String value = super.getParameter(parameter); + if (value == null) { + return null; + } + return cleanXSS(value); + } + @Override + public String[] getParameterValues(String parameter) { + String[] values = super.getParameterValues(parameter); + if (values == null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = cleanXSS(values[i]); + } + return encodedValues; + } + @Override + public Map getParameterMap(){ + Map values=super.getParameterMap(); + if (values == null) { + return null; + } + Map result=new HashMap<>(); + for(String key:values.keySet()){ + String encodedKey=cleanXSS(key); + int count=values.get(key).length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++){ + encodedValues[i]=cleanXSS(values.get(key)[i]); + } + result.put(encodedKey,encodedValues); + } + return result; + } + /** + * 覆盖getHeader方法,将参数名和参数值都做xss过滤。 + * 如果需要获得原始的值,则通过super.getHeaders(name)来获取 + * getHeaderNames 也可能需要覆盖 + */ + @Override + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) { + return null; + } + return cleanXSS(value); + } + + private String cleanXSS(String valueP) { + // You'll need to remove the spaces from the html entities below + String value = valueP.replaceAll("<", "<").replaceAll(">", ">"); + value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); + value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); + value = value.replaceAll("'", "& #39;"); + value = value.replaceAll("eval\\((.*)\\)", ""); + value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); + value = value.replaceAll("script", ""); + value = cleanSqlKeyWords(value); + return value; + } + + private String cleanSqlKeyWords(String value) { + String paramValue = value; + for (String keyword : notAllowedKeyWords) { + if (paramValue.length() > keyword.length() + 4 + && (paramValue.contains(" "+keyword)||paramValue.contains(keyword+" ")||paramValue.contains(" "+keyword+" "))) { + paramValue = StringUtils.replace(paramValue, keyword, replacedString); + log.error(this.currentUrl + "已被过滤,因为参数中包含不允许sql的关键词(" + keyword + + ")"+";参数:"+value+";过滤后的参数:"+paramValue); + } + } + return paramValue; + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java index 1359fe8ac..78109fa81 100644 --- a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -36,6 +36,9 @@ public class TenantInfoImpl implements TenantInfo { if ("wx_business".equals(tableName)) { return true; } + if ("wx_sub_business".equals(tableName)) { + return true; + } if ("wx_coupon_type".equals(tableName)) { return true; } @@ -76,6 +79,8 @@ public class TenantInfoImpl implements TenantInfo { public boolean doMappedStatementFIlter(MappedStatement ms) { if ("com.iformall.mapper.MallUserInfoMapper.selectByUserName".equals(ms.getId())) return true; + if ("com.iformall.mapper.MallUserInfoMapper.cntByUserName".equals(ms.getId())) + return true; if ("com.iformall.mapper.WxCouponActionLogMapper.getCountByUserAndCoupon".equals(ms.getId())) return true; return false; diff --git a/mallinkAdmin/src/main/java/com/iformall/utils/UrlCheck.java b/mallinkAdmin/src/main/java/com/iformall/utils/UrlCheck.java index b19e6ef37..7897bbcfc 100644 --- a/mallinkAdmin/src/main/java/com/iformall/utils/UrlCheck.java +++ b/mallinkAdmin/src/main/java/com/iformall/utils/UrlCheck.java @@ -7,9 +7,12 @@ public class UrlCheck { public static boolean checkUrl(String url) { return url.contains("awsFileUpload") + || url.contains("awsFilesUpload") || url.contains("cimgUpload") || url.contains("ueditor/exec") || url.contains("/wxCUserBasicInfo/importTemplate") + || url.contains("/wxCUserBasicInfo/countByFilter") + || url.contains("/wxCUserBasicInfo/listByFilter") || url.contains("wxMsgCallback") || url.contains("notify") || url.contains("pvlog"); diff --git a/mallinkAdmin/src/main/resources/application-dev.yml b/mallinkAdmin/src/main/resources/application-dev.yml index 5bfd19ec2..c35cb3431 100644 --- a/mallinkAdmin/src/main/resources/application-dev.yml +++ b/mallinkAdmin/src/main/resources/application-dev.yml @@ -22,7 +22,7 @@ spring: poolPreparedStatements: true maxOpenPreparedStatements: 20 connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" - #jackson: + #jackson: #date-format: yyyy-MM-dd HH:mm:ss # REDIS redis: @@ -85,6 +85,25 @@ wechat: appId: "wxe31beafbfd8295ba" secret: "c689fabf3c4c9f5b6424ff2a36a26727" url: "https://mall.youlane.cn" + open: + componentAppId: "wx897e4673286c915d" + componentSecret: "cdfdfda65c45689beb6766c4c427eed2" + componentToken: "formall2018" + componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 500 + max-wait: -1 + min-idle: 10 jasypt: encryptor: @@ -92,6 +111,8 @@ jasypt: fm: exception: false + deploy: 1 + open: true ueditor: config: config.json diff --git a/mallinkAdmin/src/main/resources/application-prod.yml b/mallinkAdmin/src/main/resources/application-prod.yml index 99f82a91a..85b34da23 100644 --- a/mallinkAdmin/src/main/resources/application-prod.yml +++ b/mallinkAdmin/src/main/resources/application-prod.yml @@ -44,13 +44,13 @@ spring: password: ENC(APQMO9XQRzMKd0eap+oSSOYH9MQe/r5K0YFF9A9mizU=) # 授权密码 properties: mail: - smtp: - auth: true - starttls: - enable: true - socketFactory: - port: 465 - class: javax.net.ssl.SSLSocketFactory + smtp: + auth: true + starttls: + enable: true + socketFactory: + port: 465 + class: javax.net.ssl.SSLSocketFactory # RABBITMQ rabbitmq: host: localhost @@ -73,9 +73,30 @@ wechat: appId: "wx9cc4ca09eb20fe03" secret: "af1d7f7a1268022a73cb4ce0b9cf0985" url: "https://admin.malls.iformall.com" + open: + componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) + componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) + componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) + componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 fm: exception: true + deploy: 3 + open: true ueditor: config: config.json diff --git a/mallinkAdmin/src/main/resources/application-test.yml b/mallinkAdmin/src/main/resources/application-test.yml index 8302e5688..2178ea199 100644 --- a/mallinkAdmin/src/main/resources/application-test.yml +++ b/mallinkAdmin/src/main/resources/application-test.yml @@ -73,9 +73,30 @@ wechat: appId: "wx091907dd0bfd3f6b" secret: "2a2ca10738998b9ef92c1fe8a4d366a6" url: "https://admintest.malls.iformall.com" + open: + componentAppId: ENC(hnH31XdNzArfMfikKgBFpqQuJUl6rVOPFFcAVyb595o=) + componentSecret: ENC(t/GUVX5L+U7LCwSvZ5WmxAnmTMrc/Uy1nljsrokuzzsBL2j6BEVnrS/n7DCdGc/G) + componentToken: ENC(gUF1m0YgCCI2IY54fX6sGLZVlCswA8tG) + componentAesKey: ENC(TYHcrIkICtfrCfGq4HW6s1b/pHf7OD2uyPN11SzJNB0acqJ/4JVX1nuljo/cAtgMG4O05TImLQc=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 fm: exception: true + deploy: 2 + open: true ueditor: config: config.json diff --git a/mallinkAdmin/src/main/resources/db/migration/V201903300958__CHANGE_USER_LEN.sql b/mallinkAdmin/src/main/resources/db/migration/V201903300958__CHANGE_USER_LEN.sql new file mode 100644 index 000000000..e41e6f51d --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201903300958__CHANGE_USER_LEN.sql @@ -0,0 +1,19 @@ +ALTER TABLE `wx_c_user` +ADD COLUMN `open_app_id` VARCHAR(18) NULL AFTER `update_date`, +ADD COLUMN `mp_open_id` VARCHAR(28) NULL AFTER `open_app_id`, +ADD COLUMN `mp_app_id` VARCHAR(18) NULL AFTER `mp_open_id`, +ADD COLUMN `mp_subscribe` TINYINT(2) NULL AFTER `mp_app_id`, +ADD COLUMN `mp_subscribe_time` datetime NULL AFTER `mp_subscribe`, +ADD COLUMN `mp_subscribe_scene` VARCHAR(20) NULL AFTER `mp_subscribe_time`, +ADD COLUMN `subs_open_id` VARCHAR(28) NULL AFTER `mp_subscribe_scene`, +ADD COLUMN `subs_app_id` VARCHAR(18) NULL AFTER `subs_open_id`, +ADD COLUMN `subs_subscribe` TINYINT(2) NULL AFTER `subs_app_id`, +ADD COLUMN `subs_subscribe_time` datetime NULL AFTER `subs_subscribe`, +ADD COLUMN `subs_subscribe_scene` VARCHAR(20) NULL AFTER `subs_subscribe_time`, +CHANGE COLUMN `open_id` `open_id` VARCHAR(28) NOT NULL COMMENT '微信openId' , +CHANGE COLUMN `union_id` `union_id` VARCHAR(29) NULL DEFAULT NULL COMMENT '微信unionId' , +CHANGE COLUMN `phone` `phone` VARCHAR(20) NULL DEFAULT NULL COMMENT '用户绑定的手机号' , +CHANGE COLUMN `register_ip` `register_ip` VARCHAR(20) NULL DEFAULT NULL COMMENT '用户注册IP' , +CHANGE COLUMN `app_id` `app_id` VARCHAR(20) NULL DEFAULT NULL COMMENT '小程序的appId' , +CHANGE COLUMN `latitude` `latitude` DECIMAL(10,5) NULL DEFAULT NULL COMMENT '维度' , +CHANGE COLUMN `longitude` `longitude` DECIMAL(10,5) NULL DEFAULT NULL COMMENT '经度' ; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904011301__ADD_PAYACCOUNTBILLINFO.sql b/mallinkAdmin/src/main/resources/db/migration/V201904011301__ADD_PAYACCOUNTBILLINFO.sql new file mode 100644 index 000000000..c8321c7f0 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904011301__ADD_PAYACCOUNTBILLINFO.sql @@ -0,0 +1,3 @@ +ALTER TABLE `wx_pay_account_bill` +ADD COLUMN `bank_account_name` VARCHAR(50) NULL COMMENT '银行账户名' AFTER `rate`, +ADD COLUMN `bank_card_id` VARCHAR(50) NULL COMMENT '银行卡号' AFTER `bank_account_name`; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904011435__ADD_FLOW.sql b/mallinkAdmin/src/main/resources/db/migration/V201904011435__ADD_FLOW.sql new file mode 100644 index 000000000..edd1c8e3d --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904011435__ADD_FLOW.sql @@ -0,0 +1,22 @@ +ALTER TABLE `wx_bill_rent` +ADD COLUMN `apply_status` SMALLINT(1) DEFAULT 1 COMMENT '审核状态0未审核1审核中2审核完成3驳回4合同作废5撤回' AFTER `is_preview`; + +ALTER TABLE `wx_bill_property` +ADD COLUMN `apply_status` SMALLINT(1) DEFAULT 1 COMMENT '审核状态0未审核1审核中2审核完成3驳回4合同作废5撤回' AFTER `is_preview`; + +ALTER TABLE `wx_bill_daily` +ADD COLUMN `apply_status` SMALLINT(1) DEFAULT 1 COMMENT '审核状态0未审核1审核中2审核完成3驳回4合同作废5撤回'; + +ALTER TABLE `wx_bill_other` +ADD COLUMN `apply_status` SMALLINT(1) DEFAULT 1 COMMENT '审核状态0未审核1审核中2审核完成3驳回4合同作废5撤回'; + +alter table wx_msg_model modify column content text; + +ALTER TABLE `wx_shop` +ADD COLUMN `email` varchar(100) DEFAULT NULL COMMENT '邮箱'; + +ALTER TABLE `mall_user_info` +ADD COLUMN `email` varchar(100) DEFAULT NULL COMMENT '邮箱'; + +ALTER TABLE `wx_merchant` +ADD COLUMN `email` varchar(100) DEFAULT NULL COMMENT '邮箱'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904011538__CHANGE_MALL_COVER.sql b/mallinkAdmin/src/main/resources/db/migration/V201904011538__CHANGE_MALL_COVER.sql new file mode 100644 index 000000000..df1066753 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904011538__CHANGE_MALL_COVER.sql @@ -0,0 +1,3 @@ +ALTER TABLE `wx_mall` +ADD COLUMN `weapp_share_title` VARCHAR (20) NULL COMMENT '分享标题' AFTER `img_qrcode_wemp`, +ADD COLUMN `weapp_share_cover_img` VARCHAR (100) NULL COMMENT '分享封面图片' AFTER `weapp_share_title`; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904012109__ADD_RENT_FILES.sql b/mallinkAdmin/src/main/resources/db/migration/V201904012109__ADD_RENT_FILES.sql new file mode 100644 index 000000000..c3851a5a3 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904012109__ADD_RENT_FILES.sql @@ -0,0 +1,19 @@ +ALTER TABLE `wx_rent_contract` +ADD COLUMN `file_names` JSON NULL COMMENT '合同支持多文件' AFTER `fix_end_date`; + +update wx_rent_contract set file_names=CONCAT('[{\"filename\":\"',`filename`,'\",\"filepath\":\"',`filepath`,'\"}]') +where filename is not null or LENGTH(`filename`) >0; + +update wx_rent_contract set file_names=CONCAT('[]') where filename is null or LENGTH(`filename`)=0 ; + + +ALTER TABLE `wx_property_contract` +ADD COLUMN `file_names` JSON NULL COMMENT '合同支持多文件'; + +update wx_property_contract set file_names=CONCAT('[{\"filename\":\"',`filename`,'\",\"filepath\":\"',`filepath`,'\"}]') +where filename is not null or LENGTH(`filename`) >0; + +update wx_property_contract set file_names=CONCAT('[]') where filename is null or LENGTH(`filename`)=0 ; + + + diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904021540__ADD_RENT_BILL.sql b/mallinkAdmin/src/main/resources/db/migration/V201904021540__ADD_RENT_BILL.sql new file mode 100644 index 000000000..b7a97cffd --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904021540__ADD_RENT_BILL.sql @@ -0,0 +1,17 @@ +ALTER TABLE `wx_rent_contract` +ADD COLUMN `rent_info` JSON NULL COMMENT '商铺信息'; + +ALTER TABLE `wx_property_contract` +ADD COLUMN `rent_info` JSON NULL COMMENT '商铺信息'; + +ALTER TABLE `wx_bill_rent` +ADD COLUMN `shop_info` JSON NULL COMMENT '商铺信息'; + +ALTER TABLE `wx_bill_rent_deposit` +ADD COLUMN `shop_info` JSON NULL COMMENT '商铺信息'; + +ALTER TABLE `wx_bill_property` +ADD COLUMN `shop_info` JSON NULL COMMENT '商铺信息'; + +ALTER TABLE `wx_bill_property_deposit` +ADD COLUMN `shop_info` JSON NULL COMMENT '商铺信息'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904021550__ADD_WX_CREDIT_HISTORY.sql b/mallinkAdmin/src/main/resources/db/migration/V201904021550__ADD_WX_CREDIT_HISTORY.sql new file mode 100644 index 000000000..244d1e6db --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904021550__ADD_WX_CREDIT_HISTORY.sql @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS `wx_credit_history`; +CREATE TABLE `wx_credit_history` ( + `id` bigint(64) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(50) NOT NULL COMMENT '租户ID', + `c_user_id` bigint(64) NOT NULL COMMENT '用户ID', + `credit_amount` int(11) NOT NULL COMMENT '总积分', + `credit_num` int(11) NOT NULL COMMENT '每笔积分明细', + `credit_type` tinyint(2) NOT NULL COMMENT '积分类型(操作说明)', + `create_date` datetime(0) NOT NULL COMMENT '创建日期', + `receipt_url` varchar(256) NULL DEFAULT NULL COMMENT '小票URL', + `operator_type` tinyint(2) NOT NULL COMMENT '操作人类型', + `operator_id` bigint(64) NOT NULL COMMENT '操作人ID', + `merchant_id` bigint(11) NULL DEFAULT NULL COMMENT '商户ID', + `coupon_id` bigint(64) NULL DEFAULT NULL COMMENT '券ID(积分兑换券时生成)', + `business_id` bigint(64) NULL DEFAULT NULL COMMENT '业态ID(计算新增积分时使用)', + `spend` int(11) NULL DEFAULT NULL COMMENT '花费', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB ROW_FORMAT = Dynamic COMMENT='积分记录'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904031030__UPDATE_WX_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201904031030__UPDATE_WX_SHOP.sql new file mode 100644 index 000000000..3ed494ce0 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904031030__UPDATE_WX_SHOP.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_shop` +ADD COLUMN `is_del` smallint(2) DEFAULT 0 COMMENT '是否删除1是0否'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904031540__ADD_BILL_ACTION.sql b/mallinkAdmin/src/main/resources/db/migration/V201904031540__ADD_BILL_ACTION.sql new file mode 100644 index 000000000..978192cbf --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904031540__ADD_BILL_ACTION.sql @@ -0,0 +1,14 @@ +DROP TABLE IF EXISTS `wx_bill_action` ; +CREATE TABLE `wx_bill_action` ( + `id` bigint(64) NOT NULL COMMENT 'ID', + `tenant_id` varchar(50) NOT NULL COMMENT '租户Id', + `user_id` bigint(64) NOT NULL COMMENT '用户ID', + `user_name` varchar(100) NOT NULL COMMENT '用户名', + `phone` varchar(20) NOT NULL COMMENT '手机号', + `action` smallint(2) NOT NULL COMMENT '动作', + `details` varchar(200) NOT NULL COMMENT '明细', + `createtime` datetime NOT NULL COMMENT '创建时间', + `updatetime` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + INDEX `id_index` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` ROW_FORMAT=DYNAMIC COMMENT='账单操作记录' CHECKSUM=0 DELAY_KEY_WRITE=0; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904091440__ADD_FORMID_FOR_ORDER.sql b/mallinkAdmin/src/main/resources/db/migration/V201904091440__ADD_FORMID_FOR_ORDER.sql new file mode 100644 index 000000000..0599a5d3d --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904091440__ADD_FORMID_FOR_ORDER.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_order` +ADD COLUMN `form_id` VARCHAR(64) NULL COMMENT 'formId' AFTER `order_group_id`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904101129__ADD_TABLE_SUB_BUSINESS.sql b/mallinkAdmin/src/main/resources/db/migration/V201904101129__ADD_TABLE_SUB_BUSINESS.sql new file mode 100644 index 000000000..8e20b30a0 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904101129__ADD_TABLE_SUB_BUSINESS.sql @@ -0,0 +1,21 @@ +-- ---------------------------- +-- Table structure for `wx_sub_business` +-- ---------------------------- +DROP TABLE IF EXISTS `wx_sub_business`; +CREATE TABLE `wx_sub_business` ( + `id` int(11) NOT NULL, + `title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `business_id` int(11) NOT NULL, + `business_title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `create_date` datetime DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of `wx_sub_business` +-- ---------------------------- +BEGIN; +INSERT INTO `wx_sub_business` VALUES ('1', '西餐', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('2', '日本料理', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('3', '韩国料理', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('4', '东南亚菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('5', '自助餐', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('6', '火锅', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('7', '特色菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('8', '私房菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('9', '素食', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('10', '烧烤', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('11', '小吃快餐', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('12', '川菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('13', '湘菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('14', '鲁菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('15', '粤菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('16', '湖北菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('17', '云贵菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('18', '东北菜', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('19', '面包店', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('20', '咖啡厅', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('21', '饮品店', '1', '餐饮', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('22', '男装', '3', '服饰', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('23', '女装', '3', '服饰', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('24', '童装', '3', '服饰', '2019-04-09 17:09:07', '2019-04-09 17:09:07'), ('25', '鞋帽', '3', '服饰', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('26', '配饰', '3', '服饰', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('27', '内衣', '3', '服饰', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('28', '亲子摄影', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('29', '亲子游乐', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('30', '幼儿教育', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('31', '孕产护理', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('32', '童车童床', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('33', '玩具', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('34', '喂养用品', '4', '亲子', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('35', '面部护肤', '7', '美妆', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('36', '香水彩妆', '7', '美妆', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('37', '男士护肤', '7', '美妆', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('38', '营养保健', '7', '美妆', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('39', '黄金', '8', '珠宝', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('40', '钻石', '8', '珠宝', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('41', '时尚饰品', '8', '珠宝', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('42', '翡翠玉石', '8', '珠宝', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('43', '钟表', '8', '珠宝', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('44', 'KTV', '2', '娱乐', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('45', '轰趴馆', '2', '娱乐', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('46', 'DIY手工', '2', '娱乐', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('47', '文化艺术', '2', '娱乐', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('48', '游艺娱乐', '2', '娱乐', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('49', '桌游', '2', '娱乐', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('50', '运动健身', '9', '服务', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('51', '婚纱摄影', '9', '服务', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('52', '美容美发', '9', '服务', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('53', '学习培训', '9', '服务', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('54', '家具', '10', '家居', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('55', '家饰', '10', '家居', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('56', '家纺', '10', '家居', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('57', '生活用品', '10', '家居', '2019-04-09 17:09:08', '2019-04-09 17:09:08'), ('58', '厨具', '10', '家居', '2019-04-09 17:09:08', '2019-04-09 17:09:08'); +COMMIT; + diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904101310__UPDATE_COUPON_SEND.sql b/mallinkAdmin/src/main/resources/db/migration/V201904101310__UPDATE_COUPON_SEND.sql new file mode 100644 index 000000000..ee943b34a --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904101310__UPDATE_COUPON_SEND.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_coupon_send` +ADD COLUMN `send_sms` smallint(2) default 0 COMMENT '是否发送短信1是0否'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904101312__ADD_SUB_BUSINESS_COLUMN.sql b/mallinkAdmin/src/main/resources/db/migration/V201904101312__ADD_SUB_BUSINESS_COLUMN.sql new file mode 100644 index 000000000..70ba788ef --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904101312__ADD_SUB_BUSINESS_COLUMN.sql @@ -0,0 +1,6 @@ +ALTER TABLE `wx_coupon` +ADD COLUMN `sub_business` INT(11) NULL DEFAULT NULL AFTER `business`; +ALTER TABLE `wx_coupon_channel` +ADD COLUMN `sub_business` INT(11) NULL DEFAULT NULL AFTER `business`; +ALTER TABLE `wx_merchant` +ADD COLUMN `sub_business_id` INT(11) NULL DEFAULT NULL AFTER `business_id`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904111308__CHANGE_C_USER_INFOS.sql b/mallinkAdmin/src/main/resources/db/migration/V201904111308__CHANGE_C_USER_INFOS.sql new file mode 100644 index 000000000..8e44b1dc0 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904111308__CHANGE_C_USER_INFOS.sql @@ -0,0 +1,4 @@ +ALTER TABLE `wx_c_user` +CHANGE COLUMN `mp_subscribe_scene` `mp_subscribe_scene` VARCHAR(30) NULL, +CHANGE COLUMN `subs_subscribe_scene` `subs_subscribe_scene` VARCHAR(30) NULL, +CHANGE COLUMN `open_id` `open_id` VARCHAR(28) NULL COMMENT '微信openId'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904111545__UPDATE_BILL_TABLE.sql b/mallinkAdmin/src/main/resources/db/migration/V201904111545__UPDATE_BILL_TABLE.sql new file mode 100644 index 000000000..082b3a9f4 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904111545__UPDATE_BILL_TABLE.sql @@ -0,0 +1,14 @@ +ALTER TABLE `wx_bill_rent` +ADD COLUMN `pay_way` smallint (2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; +ALTER TABLE `wx_bill_rent_deposit` +ADD COLUMN `pay_way` smallint(2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; +ALTER TABLE `wx_bill_property` +ADD COLUMN `pay_way` smallint(2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; +ALTER TABLE `wx_bill_property_deposit` +ADD COLUMN `pay_way` smallint (2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; +ALTER TABLE `wx_bill_other` +ADD COLUMN `pay_way` smallint(2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; +ALTER TABLE `wx_bill_other_deposit` +ADD COLUMN `pay_way` smallint(2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; +ALTER TABLE `wx_bill_daily` +ADD COLUMN `pay_way` smallint(2) NULL DEFAULT NULL COMMENT '支付方式1现金2支付宝3微信4银行卡转账-1其他'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904121411__UPDATE_BUSINESS_TAGS.sql b/mallinkAdmin/src/main/resources/db/migration/V201904121411__UPDATE_BUSINESS_TAGS.sql new file mode 100644 index 000000000..918f32ad6 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904121411__UPDATE_BUSINESS_TAGS.sql @@ -0,0 +1,48 @@ +UPDATE `wx_tags` SET `name` = '餐饮' WHERE (`id` = '68'); +UPDATE `wx_tags` SET `name` = '娱乐' WHERE (`id` = '69'); +UPDATE `wx_tags` SET `name` = '服饰' WHERE (`id` = '70'); +UPDATE `wx_tags` SET `name` = '亲子' WHERE (`id` = '71'); +UPDATE `wx_tags` SET `name` = '超市' WHERE (`id` = '72'); +UPDATE `wx_tags` SET `name` = '美妆' WHERE (`id` = '73'); +UPDATE `wx_tags` SET `name` = '珠宝' WHERE (`id` = '74'); +UPDATE `wx_tags` SET `name` = '服务' WHERE (`id` = '75'); +UPDATE `wx_tags` SET `name` = '家居' WHERE (`id` = '76'); + +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('129', '火锅', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('130', '特色菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('131', '私房菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('132', '素食', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('133', '烧烤', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('134', '小吃快餐', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('135', '川菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('136', '湘菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('137', '鲁菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('138', '粤菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('139', '湖北菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('140', '云贵菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('141', '东北菜', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('142', '面包店', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('143', '咖啡厅', '3', '消费偏好', '17', '饮食偏好'); +INSERT INTO `wx_tags` (`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES ('144', '饮品店', '3', '消费偏好', '17', '饮食偏好'); + +UPDATE `wx_tags` SET `name` = '西餐' WHERE (`id` = '92'); +UPDATE `wx_tags` SET `name` = '日本料理' WHERE (`id` = '93'); +UPDATE `wx_tags` SET `name` = '韩国料理' WHERE (`id` = '94'); +UPDATE `wx_tags` SET `name` = '东南亚菜' WHERE (`id` = '95'); +UPDATE `wx_tags` SET `name` = '自助餐' WHERE (`id` = '96'); + +update wx_c_user_tags set tags = replace(tags, '92', '132') where JSON_CONTAINS(tags, '[92]'); +update wx_c_user_tags set tags = replace(tags, '93', '134') where JSON_CONTAINS(tags, '[92]'); +update wx_c_user_tags set tags = replace(tags, '96', '129') where JSON_CONTAINS(tags, '[92]'); +update wx_c_user_tags set tags = replace(tags, '94', '92') where JSON_CONTAINS(tags, '[92]'); +update wx_c_user_tags set tags = replace(tags, '95', '93') where JSON_CONTAINS(tags, '[92]'); + + +UPDATE `wx_question` SET `content` = '{\"flag\":\"multi\",\"title\":\"请问您喜欢哪种口味的食物?\",\"answers\":[{\"id\":\"92\",\"name\":\"西餐\"},{\"id\":\"93\",\"name\":\"日本料理\"},{\"id\":\"94\",\"name\":\"韩国料理\"},{\"id\":\"95\",\"name\":\"东南亚菜\"},{\"id\":\"96\",\"name\":\"自助餐\"},{\"id\":\"129\",\"name\":\"火锅\"},{\"id\":\"130\",\"name\":\"特色菜\"},{\"id\":\"131\",\"name\":\"私房菜\"},{\"id\":\"132\",\"name\":\"素食\"},{\"id\":\"133\",\"name\":\"烧烤\"},{\"id\":\"134\",\"name\":\"小吃快餐\"},{\"id\":\"135\",\"name\":\"川菜\"},{\"id\":\"136\",\"name\":\"湘菜\"},{\"id\":\"137\",\"name\":\"鲁菜\"},{\"id\":\"138\",\"name\":\"粤菜\"},{\"id\":\"139\",\"name\":\"湖北菜\"},{\"id\":\"140\",\"name\":\"云贵菜\"},{\"id\":\"141\",\"name\":\"东北菜\"},{\"id\":\"142\",\"name\":\"面包店\"},{\"id\":\"143\",\"name\":\"咖啡厅\"},{\"id\":\"144\",\"name\":\"饮品店\"}]}' +WHERE content -> '$.title' = '请问您喜欢哪种口味的食物?'; + +update wx_question_log set answer = replace(answer, '92', '132') where JSON_CONTAINS(answer, '[92]'); +update wx_question_log set answer = replace(answer, '93', '134') where JSON_CONTAINS(answer, '[93]'); +update wx_question_log set answer = replace(answer, '96', '129') where JSON_CONTAINS(answer, '[96]'); +update wx_question_log set answer = replace(answer, '94', '92') where JSON_CONTAINS(answer, '[94]'); +update wx_question_log set answer = replace(answer, '95', '93') where JSON_CONTAINS(answer, '[95]'); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904151140__UPDATE_BILL_RENT.sql b/mallinkAdmin/src/main/resources/db/migration/V201904151140__UPDATE_BILL_RENT.sql new file mode 100644 index 000000000..403ced5d2 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904151140__UPDATE_BILL_RENT.sql @@ -0,0 +1,5 @@ +alter table wx_bill_rent +add column `late_pay_status` smallint(2) default 2 COMMENT '滞纳金状态(使用账单的状态)'; + +alter table wx_bill_property +add column `late_pay_status` smallint(2) default 2 COMMENT '滞纳金状态(使用账单的状态)'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904161130__UPDATE_BILL_ACTION.sql b/mallinkAdmin/src/main/resources/db/migration/V201904161130__UPDATE_BILL_ACTION.sql new file mode 100644 index 000000000..3ad96bcec --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904161130__UPDATE_BILL_ACTION.sql @@ -0,0 +1,2 @@ +alter table wx_bill_action +add column `bill_id` bigint(64) default null COMMENT '账单ID'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904171140__UPDATE_MERCHANT.sql b/mallinkAdmin/src/main/resources/db/migration/V201904171140__UPDATE_MERCHANT.sql new file mode 100644 index 000000000..e0d07588e --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904171140__UPDATE_MERCHANT.sql @@ -0,0 +1,5 @@ +alter table wx_merchant +add column `title` varchar(255) default '' COMMENT '副标题', +add column `cover_picture` json default null COMMENT '封面图'; + +update wx_merchant set cover_picture=json_array(img_url); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904171524__INSERT_SMARTHARDWARE_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201904171524__INSERT_SMARTHARDWARE_MENU.sql new file mode 100644 index 000000000..96a28d434 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904171524__INSERT_SMARTHARDWARE_MENU.sql @@ -0,0 +1 @@ +insert into `mall_permission` ( `sort`, `id`, `available`, `resource_type`, `name`) values ( '9', '9', 'Y', '0', '智能硬件'); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904180909__ADD_FLOW.sql b/mallinkAdmin/src/main/resources/db/migration/V201904180909__ADD_FLOW.sql new file mode 100644 index 000000000..daee928c2 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904180909__ADD_FLOW.sql @@ -0,0 +1,3 @@ + + +alter table `wx_msg_record` modify column status_message text; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904181120__ADD_TAGS_COLUMN.sql b/mallinkAdmin/src/main/resources/db/migration/V201904181120__ADD_TAGS_COLUMN.sql new file mode 100644 index 000000000..7df208477 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904181120__ADD_TAGS_COLUMN.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_msg` +ADD COLUMN `tags` JSON NULL DEFAULT NULL AFTER `label`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904181710__UPDATE_MERCHANT.sql b/mallinkAdmin/src/main/resources/db/migration/V201904181710__UPDATE_MERCHANT.sql new file mode 100644 index 000000000..15885cbc5 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904181710__UPDATE_MERCHANT.sql @@ -0,0 +1,2 @@ +alter table wx_merchant +add column `bill_setting` int(10) default 3 COMMENT '待缴提醒'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904191333__ADD_FLOW.sql b/mallinkAdmin/src/main/resources/db/migration/V201904191333__ADD_FLOW.sql new file mode 100644 index 000000000..e594341b3 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904191333__ADD_FLOW.sql @@ -0,0 +1,5 @@ + + + +ALTER TABLE `wx_flow_record` +ADD COLUMN `start_date` DATETIME COMMENT '发起时间'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904191413__ADD_FLOW.sql b/mallinkAdmin/src/main/resources/db/migration/V201904191413__ADD_FLOW.sql new file mode 100644 index 000000000..988d6fa94 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904191413__ADD_FLOW.sql @@ -0,0 +1,6 @@ + + + +update wx_flow_record f set f.start_date = +FROM_UNIXTIME((select text_ from ACT_HI_VARINST where name_='startTime' and PROC_INST_ID_ = f.`process_instance_id`)/1000,'%Y-%m-%d %H:%i:%S') +where f.start_date is null diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904191440__UPDATE_BILL_DAILY.sql b/mallinkAdmin/src/main/resources/db/migration/V201904191440__UPDATE_BILL_DAILY.sql new file mode 100644 index 000000000..cf62ea2bf --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904191440__UPDATE_BILL_DAILY.sql @@ -0,0 +1,2 @@ +alter table wx_bill_daily +add column `price_detail` json default null COMMENT '费用明细'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904201830__UPDATE_BILL_DATA.sql b/mallinkAdmin/src/main/resources/db/migration/V201904201830__UPDATE_BILL_DATA.sql new file mode 100644 index 000000000..6bb37cc8d --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904201830__UPDATE_BILL_DATA.sql @@ -0,0 +1,7 @@ +update wx_bill_rent set pay_way=-1; +update wx_bill_rent_deposit set pay_way=-1; +update wx_bill_property set pay_way=-1; +update wx_bill_property_deposit set pay_way=-1; +update wx_bill_daily set pay_way=-1; +update wx_bill_other set pay_way=-1; +update wx_bill_other_deposit set pay_way=-1; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904221747__ADD_FLOW_MSG_MODEL.sql b/mallinkAdmin/src/main/resources/db/migration/V201904221747__ADD_FLOW_MSG_MODEL.sql new file mode 100644 index 000000000..b524daa43 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904221747__ADD_FLOW_MSG_MODEL.sql @@ -0,0 +1,8 @@ +INSERT INTO `wx_msg_model` (`id`, `tenant_id`, `name`, `signature`, `content`, `createtime`, `status`, `model_id`) +VALUES + (205925981009271111, '789', '审批通过通知', '富茂', '富茂审批邮件
审批通过通知
编号{contract}的合同已经审批通过,请登录{page}跟进后续工作
', '2018-09-29 16:03:11', 1, 1), + (205925981009271112, '789', '待缴账单通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
待缴账单通知
\n
您当前的待缴账单为{price}元,截止日期为{date}请登录您的商户端小程序查看账单并缴费
\n
\n
\n
\n 租金账单\n
\n
账单类型
\n
账单金额(元)
\n
缴费时间
\n
\n {billList}\n
\n
\n
\n
遇到问题?
\n
\n 请联系商管负责人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 2), + (205925981009271113, '789', '审批通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n
\n
审批通知
\n
{userName}同意编号{contract}的合同审批,已呈送{toUserName},请登录{page}查看审批进度
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 3), + (205925981009271114, '789', '欠缴账单通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
欠缴账单通知
\n
您当前的欠缴账单为{price}元,截止日期为{date}请登录您的商户端小程序查看账单并缴费
\n
\n
\n
\n 租金账单\n
\n
账单类型
\n
账单金额(元)
\n
缴费时间
\n
逾期天数
\n
\n {billList}\n
\n
\n
\n
遇到问题?
\n
\n 请联系商管负责人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 4), + (205925981009271115, '789', '待办通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
待办通知
\n
{name}提交了一个合同待您审批,电脑登录{page}查看您的待办
\n
\n
\n
\n
申请时间:
\n
{applyTime}
\n
\n
\n
申请进度:
\n
\n \n {taskList}\n
\n
\n
\n
\n
遇到问题?
\n
\n 请联系申请人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 5), + (205925981009271116, '789', '驳回通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
审批通过通知
\n
编号{contract}的合同合同审批被驳回,请登录{page}查看审批明细
\n
\n
\n
\n 驳回人:\n {name}\n
\n
\n 驳回原因:\n {remark}\n
\n
\n
\n
遇到问题?
\n
\n 请联系驳回人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 6); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904221823__UPDATE_USER_CREDIT.sql b/mallinkAdmin/src/main/resources/db/migration/V201904221823__UPDATE_USER_CREDIT.sql new file mode 100644 index 000000000..4dd056e36 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904221823__UPDATE_USER_CREDIT.sql @@ -0,0 +1,2 @@ +alter table wx_c_user add credit int(11); +alter table wx_c_user_basic_info add credit int(11); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904221912__ADD_COUPON_MERCHANT.sql b/mallinkAdmin/src/main/resources/db/migration/V201904221912__ADD_COUPON_MERCHANT.sql new file mode 100644 index 000000000..5e3ddd387 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904221912__ADD_COUPON_MERCHANT.sql @@ -0,0 +1,3 @@ +alter table wx_merchant add is_admin smallint(2); +alter table wx_coupon add credit_price int(11); +alter table wx_coupon add credit_refund smallint(2); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904221915__UPDATE_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201904221915__UPDATE_CONTRACT.sql new file mode 100644 index 000000000..1479c7c44 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904221915__UPDATE_CONTRACT.sql @@ -0,0 +1,96 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS `contract_update`$$ +CREATE PROCEDURE `contract_update`() +LANGUAGE SQL +NOT DETERMINISTIC +CONTAINS SQL +SQL SECURITY DEFINER +COMMENT '' +begin + #定义一个循环结束的标记 + declare done int default false; + #定义一个循环总条数 + declare total int; + #定义一个循环开始值 + declare i int; + #定义商铺相关字段 + declare _shop_id bigint(64); + declare _shop_number varchar(100); + declare _build_area varchar(100); + declare _operation_area varchar(100); + declare _floor varchar(100); + declare _img_url varchar(1024); + declare _addr varchar(100); + declare _type smallint(2); + declare _status smallint(2); + declare _manager varchar(100); + declare _manager_phone varchar(100); + declare _building varchar(100); + #租赁合同相关信息 + declare _rent_id bigint(64); + declare _rent_area varchar(100); + declare _adjust_ratio json; + declare _price decimal(10,2); + declare _deposit decimal(10,2); + + declare _adjust_ratio_new json; + declare _adjust_ratio_value decimal(10,2); + + + declare rent_cursor cursor for select id,shop_id from wx_rent_contract where rent_shop_type=1; + declare rent_total_cursor cursor for select count(*) total from wx_rent_contract where rent_shop_type=1; + declare continue handler for not found set done = true; + + set i=1; + open rent_cursor; + open rent_total_cursor; + fetch rent_cursor into _rent_id,_shop_id; + fetch rent_total_cursor into total; + repeat + if not done then + #查询商铺信息 + select s.shop_number,s.build_area,s.img_url,s.operation_area,s.status,b.building_name,f.floor_name, + s.manager,s.manager_phone,type,s.addr + into _shop_number,_build_area,_img_url,_operation_area,_status,_building,_floor,_manager,_manager_phone,_type,_addr + from wx_shop s left join wx_mall_building b on s.building=b.id left join wx_mall_floor f on s.floor=f.id + where s.id=_shop_id; + #查询合同信息 + select rent_area,adjust_ratio,truncate(price/100,2),truncate(deposit/100,2) into _rent_area,_adjust_ratio,_price,_deposit + from wx_rent_contract where id=_rent_id; + #解析年调整比例 + set @j=0; + set _adjust_ratio_new = json_array(); + while (select json_length(_adjust_ratio))>0 and @j<>(select json_length(_adjust_ratio)) do + set @ratio_index=concat("$[",@j,"]"); + select truncate(json_extract(_adjust_ratio,@ratio_index)/100,2) into _adjust_ratio_value; + select json_array_insert(_adjust_ratio_new,@ratio_index,_adjust_ratio_value) into _adjust_ratio_new; + set @j=@j+1; + end while; + #更新租赁合同信息 + update wx_rent_contract set rent_info=json_array(JSON_OBJECT('shopId',_shop_id,'id',_shop_id,'shopNumber',_shop_number, + 'price',_price,'deposit',_deposit,'adjustRatio',_adjust_ratio_new,'addr',_addr,'buildArea',_build_area,'imgUrl',_img_url, + 'operationArea',_operation_area,'building',_building,'floor',_floor,'manager',_manager,'managerPhone',_manager_phone, + 'type',_type,'status',_status,'rentArea',_rent_area)) + where id=_rent_id; + #更新物业信息 + update wx_property_contract set rent_info=json_array(JSON_OBJECT('shopId',_shop_id,'id',_shop_id,'shopNumber',_shop_number, + 'price',_price,'deposit',_deposit,'adjustRatio',_adjust_ratio_new,'addr',_addr,'buildArea',_build_area,'imgUrl',_img_url, + 'operationArea',_operation_area,'building',_building,'floor',_floor,'manager',_manager,'managerPhone',_manager_phone, + 'type',_type,'status',_status,'rentArea',_rent_area)) + where rent_contract_id=_rent_id; + fetch rent_cursor into _rent_id,_shop_id; + end if; + IF i<>total then + set done =false; + set i=i+1; + else + set done = true; + end if; + until done + end repeat; + close rent_cursor; + close rent_total_cursor; + +end $$ +DELIMITER ; +### call contract_update(); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904222030__ADD_FLOW.sql b/mallinkAdmin/src/main/resources/db/migration/V201904222030__ADD_FLOW.sql new file mode 100644 index 000000000..5f4780b37 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904222030__ADD_FLOW.sql @@ -0,0 +1,28 @@ +DROP TABLE IF EXISTS `wx_topic` ; + +CREATE TABLE `wx_topic` ( + `id` bigint(64) NOT NULL COMMENT 'id', + `tenant_id` varchar(50) DEFAULT NULL COMMENT '租户id', + `name` varchar(300) NOT NULL DEFAULT '' COMMENT '名称', + `title` varchar(500) DEFAULT '0' COMMENT '标题', + `cover` varchar(300) DEFAULT '0' COMMENT '封面', + `advert` varchar(300) DEFAULT '0' COMMENT '广告图', + `begin_time` datetime DEFAULT NULL COMMENT '开始时间', + `end_time` datetime DEFAULT NULL COMMENT '结束时间', + `content` text COMMENT '内容', + `status` tinyint(1) DEFAULT '1' COMMENT '状态1生效2失效3作废', + `bg_color` varchar(300) DEFAULT NULL COMMENT '背景颜色', + `createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updatetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='专题表'; + + +INSERT INTO `wx_msg_model` (`id`, `tenant_id`, `name`, `signature`, `content`, `createtime`, `status`, `model_id`) +VALUES + ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), '789', '审批通过通知', '富茂', '富茂审批邮件
审批通过通知
编号{contract}的{bustype}已经审批通过,请登录{page}跟进后续工作
', '2018-09-29 16:03:11', 1, 1), + ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), '789', '待缴账单通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
待缴账单通知
\n
您当前的待缴账单为{price}元,截止日期为{date}请登录您的商户端小程序查看账单并缴费
\n
\n
\n
\n 租金账单\n
\n
账单类型
\n
账单金额(元)
\n
缴费时间
\n
\n {billList}\n
\n
\n
\n
遇到问题?
\n
\n 请联系商管负责人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 2), + ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), '789', '审批通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n
\n
审批通知
\n
{userName}同意编号{contract}的{bustype}审批,已呈送{toUserName},请登录{page}查看审批进度
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 3), + ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), '789', '欠缴账单通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
欠缴账单通知
\n
您当前的欠缴账单为{price}元,截止日期为{date}请登录您的商户端小程序查看账单并缴费
\n
\n
\n
\n 租金账单\n
\n
账单类型
\n
账单金额(元)
\n
缴费时间
\n
逾期天数
\n
\n {billList}\n
\n
\n
\n
遇到问题?
\n
\n 请联系商管负责人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 4), + ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), '789', '待办通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
待办通知
\n
{name}提交了一个{bustype}待您审批,电脑登录{page}查看您的待办
\n
\n
\n
\n
申请时间:
\n
{applyTime}
\n
\n
\n
申请进度:
\n
\n \n {taskList}\n
\n
\n
\n
\n
遇到问题?
\n
\n 请联系申请人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 5), + ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), '789', '驳回通知', '富茂', '\n\n\n\n \n \n \n \n \n \n 富茂审批邮件\n \n \n\n\n\n
\n
\n \n
\n \n
\n
审批通过通知
\n
编号{contract}的{bustype}审批被驳回,请登录{page}查看审批明细
\n
\n
\n
\n 驳回人:\n {name}\n
\n
\n 驳回原因:\n {remark}\n
\n
\n
\n
遇到问题?
\n
\n 请联系驳回人:\n {linkName}{linkPhone}\n
\n
\n
\n
\n\n\n', '2018-09-29 16:03:11', 1, 6); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201904222037__ADD_CREDIT_CHANGE_PURPOSE.sql b/mallinkAdmin/src/main/resources/db/migration/V201904222037__ADD_CREDIT_CHANGE_PURPOSE.sql new file mode 100644 index 000000000..e6ccc313f --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201904222037__ADD_CREDIT_CHANGE_PURPOSE.sql @@ -0,0 +1 @@ +alter table wx_credit_history add change_purpose varchar(255) \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/processes/endBillflow.bpmn20.xml b/mallinkAdmin/src/main/resources/processes/endBillflow.bpmn20.xml new file mode 100644 index 000000000..e44520472 --- /dev/null +++ b/mallinkAdmin/src/main/resources/processes/endBillflow.bpmn20.xml @@ -0,0 +1,45 @@ + + + + 账单审批流程 + + + 初审 + + + + + + + 复审 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/BApplication.java b/mallinkBApi/src/main/java/com/iformall/BApplication.java index 0dabd6ccc..8ab96db8a 100644 --- a/mallinkBApi/src/main/java/com/iformall/BApplication.java +++ b/mallinkBApi/src/main/java/com/iformall/BApplication.java @@ -21,11 +21,19 @@ public class BApplication { @Value("${fm.exception}") private boolean fmException; + @Value("${fm.open}") + private boolean fmOpen; + @Bean public boolean isFmException() { return fmException; } + @Bean + public boolean isFmOpen() { + return fmOpen; + } + public static void main(String[] args) { SpringApplication.run(BApplication.class, args); diff --git a/mallinkBApi/src/main/java/com/iformall/config/AwsProperty.java b/mallinkBApi/src/main/java/com/iformall/config/AwsProperty.java new file mode 100644 index 000000000..0329f1d6d --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/config/AwsProperty.java @@ -0,0 +1,52 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Stormeye + */ +@Component +@ConfigurationProperties(prefix = "aws") +public class AwsProperty { + // AWS ACCESS KEY + private String access; + + private String secret; + + private String clientRegion; + + private String bucketName; + + public String getAccess() { + return access; + } + + public void setAccess(String access) { + this.access = access; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getClientRegion() { + return clientRegion; + } + + public void setClientRegion(String clientRegion) { + this.clientRegion = clientRegion; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java index 75e565418..89249f077 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java @@ -12,6 +12,7 @@ import com.iformall.domain.po.WxMerchantBUser; import com.iformall.exception.MallinkException; import com.iformall.service.WxAppinfoService; import com.iformall.service.WxMerchantBUserService; +import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.Constant; import com.iformall.utils.IPUtil; import com.iformall.utils.MaUtil; @@ -26,12 +27,17 @@ import javax.servlet.http.HttpServletRequest; @RestController public class BaseController { + @Autowired + private boolean isFmOpen; @Autowired private WxMerchantBUserService wxMerchantBUserService; @Autowired private WxAppinfoService wxAppinfoService; + @Autowired + private FmOpenService openService; + @InitBinder public void InitBinder(WebDataBinder dataBinder) { dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @@ -79,14 +85,21 @@ public class BaseController { } public WxMaService getWeappService(String appId) { - WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); - WxMaService service = MaUtil.getWeappService(appinfo); - return service; + if(isFmOpen) { + return openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); + } else { + WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } } public WxMaService getWeappServiceByAppInfo(WxAppinfo appinfo) { - WxMaService service = MaUtil.getWeappService(appinfo); - return service; + if(!isFmOpen) { + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } + return null; } public String getIpAddr() { diff --git a/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java b/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java new file mode 100644 index 000000000..0c9c8b3e5 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java @@ -0,0 +1,209 @@ +package com.iformall.controller; + + +import com.amazonaws.AmazonClientException; +import com.amazonaws.AmazonServiceException; +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.amazonaws.services.s3.model.PutObjectRequest; +import com.iformall.common.ResultData; +import com.iformall.config.AwsProperty; +import io.swagger.annotations.Api; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.net.URL; +import java.util.*; + +@RestController +@RequestMapping(value = "/api/upload") +@Api(description = "文件上传接口") +public class UploadController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private AwsProperty awsProperty; + + private AmazonS3 s3 = null; + + private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName) { + ResultData data = new ResultData(); + try { + if (s3 == null) { + s3 = AmazonS3ClientBuilder.standard() + .withRegion(awsProperty.getClientRegion()) + .withCredentials(new AWSCredentialsProvider() { + @Override + public AWSCredentials getCredentials() { + return new BasicAWSCredentials(awsProperty.getAccess(), awsProperty.getSecret()); + } + + @Override + public void refresh() { + + } + }) + .build(); + } + + s3.putObject( + new PutObjectRequest(awsProperty.getBucketName(), fileName, multiReq.getInputStream(), metadata) + .withCannedAcl(CannedAccessControlList.PublicRead)); + URL url = s3.getUrl(awsProperty.getBucketName(), fileName); + logger.info(url.toString()); + + data.code = ResultData.SUCCESS; + Map map = new HashMap<>(); + map.put("url", url.toString()); + data.data = map; + } catch (AmazonServiceException ase) { + data.code = ResultData.ERROR; + logger.warn("Caught an AmazonServiceException, which " + + "means your request made it " + + "to Amazon S3, but was rejected with an error response" + + " for some reason."); + logger.warn(ase.getMessage()); + data.code = ResultData.ERROR; + data.message = "上传失败"; + } catch (AmazonClientException ace) { + data.code = ResultData.ERROR; + logger.warn("Caught an AmazonClientException, which " + + "means the client encountered " + + "an internal error while trying to " + + "communicate with S3, " + + "such as not being able to access the network."); + logger.warn("Error Message: " + ace.getMessage()); + data.code = ResultData.ERROR; + data.message = "上传失败"; + } catch (IOException ioe) { + data.code = ResultData.ERROR; + logger.warn("Caught an IOException: " + ioe.getMessage()); + data.code = ResultData.ERROR; + data.message = "上传失败"; + } + return data; + } + + /** + * 上传文件 + * + * @param + * @return + * @throws Exception + */ + @PostMapping(value = "/awsFileUpload") + @ApiOperation("上传文件") + public ResultData awsfileUpload(@RequestParam("file") MultipartFile multiReq) { + logger.info("[" + getIpAddr() + "] UploadController::awsfileUpload"); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multiReq.getContentType()); + metadata.setContentLength(multiReq.getSize()); + + FileOutputStream fos = null; + BufferedInputStream fs = null; + + String fileName = UUID.randomUUID().toString(); + int dot = multiReq.getOriginalFilename().lastIndexOf('.'); + if (dot >= 0) { + fileName = getTenantId() + "/" + fileName + multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length()); + } else { + fileName = getTenantId() + "/" + fileName; + } + + ResultData data = awsUpload(multiReq, metadata, fileName); + return data; + } + + /** + * 多文件上传 + * + * @param files + * @return + * @throws Exception + */ + @PostMapping(value = "/awsFilesUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiOperation("多文件上传") + public ResultData awsFilesUpload(@RequestParam("files") MultipartFile[] files) { + logger.info("[" + getIpAddr() + "] UploadController::awsFilesUpload"); + + if (files.length > 0) { + ResultData data = new ResultData(); + List> dataList = new ArrayList>(); + for (MultipartFile multipartFile : files) { + Map map = new HashMap<>(); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multipartFile.getContentType()); + metadata.setContentLength(multipartFile.getSize()); + + FileOutputStream fos = null; + BufferedInputStream fs = null; + + map.put("key", multipartFile.getOriginalFilename()); + + String fileName = UUID.randomUUID().toString(); + int dot = multipartFile.getOriginalFilename().lastIndexOf('.'); + if (dot >= 0) { + fileName = getTenantId() + "/" + fileName + multipartFile.getOriginalFilename().substring(dot, multipartFile.getOriginalFilename().length()); + } else { + fileName = getTenantId() + "/" + fileName; + } + + ResultData data1 = awsUpload(multipartFile, metadata, fileName); + if (data1.code == ResultData.SUCCESS) { + Map _data = (Map) data1.data; + map.put("url", (String) _data.get("url")); + dataList.add(map); + } else { + // 部分成功 + data.code = ResultData.SUCCESS; + data.data = dataList; + return data; + } + } + data.code = ResultData.SUCCESS; + data.data = dataList; + return data; + + } + return new ResultData(); + } + + /** + * C端上传图片文件 + * + * @param multiReq + * @return + * @throws Exception + */ + @PostMapping(value = "/cimgUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiOperation("C端上传图片文件") + public ResultData cimgUpload(@RequestParam("file") MultipartFile multiReq) { + logger.info("[" + getIpAddr() + "] UploadController::cimgUpload"); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multiReq.getContentType()); + metadata.setContentLength(multiReq.getSize()); + + String fileName = multiReq.getOriginalFilename(); + fileName = "cimg/" + fileName; + ResultData data = awsUpload(multiReq, metadata, fileName); + return data; + } + +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCUserController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCUserController.java index 72783f9d9..4a6c271f9 100755 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCUserController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCUserController.java @@ -7,12 +7,10 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxCUserFromBDto; -import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCUserFromB; -import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.domain.po.*; import com.iformall.enums.EnumAssignTagsTrigger; import com.iformall.enums.EnumScoreType; +import com.iformall.enums.EnumUserType; import com.iformall.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -55,6 +53,9 @@ public class WxCUserController extends BaseController { @Autowired private WxCUserService wxCUserService; + @Autowired + private WxCreditHistoryService wxCreditHistoryService; + /** * 会员更新信息 @@ -115,6 +116,8 @@ public class WxCUserController extends BaseController { wxCUserBasicInfo.setUpdateDate(new Date()); wxCUserBasicInfoService.update(wxCUserBasicInfo); wxScoreRulesService.addScore(EnumScoreType.COMPLETE_INFO, wxCUserBasicInfo); + //增加积分 + addCredit(wxCUserBasicInfo,EnumScoreType.COMPLETE_INFO); wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT, wxCUserBasicInfo); //新增来自B端的会员关联数据 wxCUserFromB = new WxCUserFromB(); @@ -174,6 +177,8 @@ public class WxCUserController extends BaseController { wxCUserBasicInfo.setPhone(wxCUser.getPhone()); wxCUserBasicInfoService.update(wxCUserBasicInfo); wxScoreRulesService.addScore(EnumScoreType.COMPLETE_INFO, wxCUserBasicInfo); + //增加积分 + addCredit(wxCUserBasicInfo,EnumScoreType.COMPLETE_INFO); wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT, wxCUserBasicInfo); //更新B端来源会员 wxCUserFromB.setInfo(JSONObject.toJSONString(wxCUserBasicInfo)); @@ -182,6 +187,17 @@ public class WxCUserController extends BaseController { return new ResultData(); } + private void addCredit(WxCUserBasicInfo wxCUserBasicInfo, EnumScoreType enumScoreType) { + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setCUserId(wxCUserBasicInfo.getId()); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setCreateDate(new Date()); + wxCreditHistory.setCreditType(enumScoreType.getCode()); + wxCreditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); + wxCreditHistory.setOperatorId(wxCUserBasicInfo.getId()); + wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + } + /** * 会员信息 diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java new file mode 100644 index 000000000..2f11975a4 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java @@ -0,0 +1,95 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxCreditHistory; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.domain.vo.WxCreditHistoryVo; +import com.iformall.enums.EnumUserType; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCreditHistoryService; +import com.iformall.service.WxMerchantService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/credit") +@Api(description = "积分相关接口") +@Slf4j +public class WxCreditHistoryController extends BaseController { + + @Autowired + private WxCreditHistoryService wxCreditHistoryService; + + @Autowired + private WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + private WxMerchantService wxMerchantService; + + @ApiOperation("根据商户ID和消费金额获取所增加积分 取data里credit的值, 服务台会查询一般商户的信息,普通商户只会调用自己的id") + @GetMapping("/findByMerchantIdAndSpend") + @ApiImplicitParams({ + @ApiImplicitParam(name="merchantId",value="商户ID",dataType="long", paramType = "query",required=true), + @ApiImplicitParam(name="spend",value="消费金额",dataType="int", paramType = "query",required=true)}) + public ResultData findByMerchantIdAndSpend(@RequestParam Long merchantId, @RequestParam String spendStr) { + log.debug("[" + getIpAddr() + "] WxCreditHistoryController::findByMerchantIdAndSpend"); + return new ResultData(wxCreditHistoryService.findByMerchantIdAndSpend(merchantId,spendStr,getTenantId())); + } + + @ApiOperation("根据手机号查询接口") + @GetMapping("/findByPhone") + @ApiImplicitParam(name = "phone", value = "phone", dataType = "String", paramType = "query", required = true) + public ResultData findByPhone(String phone) { + log.debug("[" + getIpAddr() + "] WxCUserBasicInfoController::findByPhone"); + List wxCUserBasicInfoList = wxCUserBasicInfoService.findByPhone(getTenantId(),phone); + WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo(); + if (wxCUserBasicInfoList != null && wxCUserBasicInfoList.size() > 0) { + wxCUserBasicInfo = wxCUserBasicInfoList.get(0); + } + return new ResultData(wxCUserBasicInfo); + } + + @ApiOperation("新增接口") + @PostMapping("/add") + public ResultData add(@RequestBody WxCreditHistory wxCreditHistory) { + log.debug("[" + getIpAddr() + "] WxCreditHistoryController::add"); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setOperatorId(getUser().getId()); + wxCreditHistory.setMerchantId(getUser().getMerchantId()); + //B端操作用户 + wxCreditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + WxCreditHistory credit = wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + return new ResultData(Result.SUCCESS,"操作成功",credit); + } + + @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 WxCreditHistory wxCreditHistory, Integer pageNum, Integer pageSize) { + log.debug("[" + getIpAddr() + "] WxCreditHistoryController::list"); + if (null == wxCreditHistory) wxCreditHistory = new WxCreditHistory(); + WxMerchantBUser bUser = getUser(); + WxMerchant merchant = wxMerchantService.getById(wxCreditHistory.getMerchantId()); + if (merchant != null && merchant.getIsAdmin() == 1) { + wxCreditHistory.setOperatorId(bUser.getId()); + wxCreditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + wxCreditHistory.setMerchantId(null); + } + final PageInfo page = wxCreditHistoryService.listAsPageMore(wxCreditHistory, pageNum, pageSize); + return new ResultData(page); + } + +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java index 967a11f78..956993e89 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java @@ -41,6 +41,9 @@ import java.util.Map; public class WxInfoController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private boolean isFmOpen; + @Autowired WxAppinfoService wxAppinfoService; @@ -115,28 +118,14 @@ public class WxInfoController extends BaseController { private Map getOpenIdInfo(String appId, String code) { WxAppinfo wxAppinfo = getAppInfo(appId); - WxMaService wxMaService = getWeappServiceByAppInfo(wxAppinfo); - - if(StringUtils.isBlank(wxAppinfo.getAccessToken())) { - // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 - try { - String accessToken = wxMaService.getAccessToken(true); - wxAppinfo.setAccessToken(accessToken); - wxAppinfo.setLastTokenTime(new Date()); - wxAppinfo.setExpiresIn(7200); - wxAppinfoService.saveOrUpdate(wxAppinfo); - } catch (WxErrorException e) { - logger.error(e.getMessage()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - wxMaService = getWeappServiceByAppInfo(wxAppinfo); + WxMaService wxMaService = null; + if(isFmOpen) { + wxMaService = getWeappService(appId); } else { - // 检查token是否已过期, 小时就重新获取 - Date curDate = new Date(); - if(curDate.getTime() > wxAppinfo.getLastTokenTime().getTime() + Constant.C_EXPIRE) { + wxMaService = getWeappServiceByAppInfo(wxAppinfo); + if(StringUtils.isBlank(wxAppinfo.getAccessToken())) { + // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 try { String accessToken = wxMaService.getAccessToken(true); wxAppinfo.setAccessToken(accessToken); @@ -148,7 +137,26 @@ public class WxInfoController extends BaseController { } catch (Exception e) { logger.error(e.getMessage()); } + wxMaService = getWeappServiceByAppInfo(wxAppinfo); + + } else { + // 检查token是否已过期, 小时就重新获取 + Date curDate = new Date(); + if(curDate.getTime() > wxAppinfo.getLastTokenTime().getTime() + Constant.H_EXPIRE) { + try { + String accessToken = wxMaService.getAccessToken(true); + wxAppinfo.setAccessToken(accessToken); + wxAppinfo.setLastTokenTime(new Date()); + wxAppinfo.setExpiresIn(7200); + wxAppinfoService.saveOrUpdate(wxAppinfo); + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + wxMaService = getWeappServiceByAppInfo(wxAppinfo); + } } } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantBUserController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantBUserController.java index 390016591..7481119af 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantBUserController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantBUserController.java @@ -4,7 +4,9 @@ package com.iformall.controller; import com.iformall.annotation.AuthIgnore; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; -import com.iformall.domain.po.*; +import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxMerchantBUser; import com.iformall.enums.EnumMerchantBUserStatus; import com.iformall.enums.EnumMerchantStatus; import com.iformall.service.*; @@ -24,7 +26,6 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.HashMap; -import java.util.List; import java.util.Map; @RestController @@ -81,6 +82,7 @@ public class WxMerchantBUserController extends BaseController { resultMap.put("service_phone", mall.getServicePhone()); resultMap.put("tenant_id",merchant.getTenantId()); resultMap.put("merchant_id",merchant.getId()); + resultMap.put("is_admin",merchant.getIsAdmin()); String mid = null; try { mid = String.valueOf(merchant.getId()); @@ -167,8 +169,7 @@ public class WxMerchantBUserController extends BaseController { } // check password if (user1.getUserPwd().equalsIgnoreCase(password)) { - user1.createToken(currentDate); - token = user1.getToken(); + token = user1.createToken(currentDate); resultMap.put("token", token); resultMap.put("bUserId",user1.getId()); request.setAttribute(Constant.LOGIN_USER_KEY, user1.getId()); diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java new file mode 100644 index 000000000..b9d03238a --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -0,0 +1,29 @@ +package com.iformall.controller; + +import com.iformall.common.ResultData; +import com.iformall.service.WxMerchantService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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; + +@RestController +@RequestMapping("/api/merchant") +@Api(description = "商户相关接口") +@Slf4j +public class WxMerchantController extends BaseController { + + @Autowired + private WxMerchantService wxMerchantService; + + @ApiOperation("查询当前租户下商户名称列表") + @GetMapping("/name_list") + public ResultData nameList() { + log.debug("[" + getIpAddr() + "] WxMerchantController::name_list"); + return new ResultData(wxMerchantService.findList(getTenantId())); + } + +} diff --git a/mallinkBApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java b/mallinkBApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java index 46ee52e55..7be788b6e 100644 --- a/mallinkBApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java +++ b/mallinkBApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java @@ -3,10 +3,9 @@ package com.iformall.interceptor; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; -public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { +public class BodyReaderHttpServletRequestWrapper extends XssHttpServletRequestWrapper { private final String body; public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { diff --git a/mallinkBApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java b/mallinkBApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java index 40f12f03b..bc1aa1c95 100644 --- a/mallinkBApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java +++ b/mallinkBApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java @@ -1,10 +1,18 @@ package com.iformall.interceptor; +import com.iformall.utils.UrlCheck; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; public class HttpServletRequestWrapperFilter implements Filter { + private static final Logger logger = LoggerFactory.getLogger(HttpServletRequestWrapperFilter.class); + // 多个跨域域名设置 + // public static final String[] ALLOW_DOMAIN = {"https://admin.malls.iformall.com"}; + @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -15,11 +23,41 @@ public class HttpServletRequestWrapperFilter implements Filter { throws IOException, ServletException { ServletRequest requestWrapper = null; + + /* // 跨域访问 + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + String originHeader = req.getHeader("Origin"); + + if (Arrays.asList(ALLOW_DOMAIN).contains(originHeader)) { + //通过在响应 header 中设置 ‘*’ 来允许来自所有域的跨域请求访问。 + res.setHeader("Access-Control-Allow-Origin", originHeader); + //通过对 Credentials 参数的设置,就可以保持跨域 Ajax 时的 Cookie + //设置了Allow-Credentials,Allow-Origin就不能为*,需要指明具体的url域 + res.setHeader("Access-Control-Allow-Credentials", "true"); + //请求方式 + res.setHeader("Access-Control-Allow-Methods", "*"); + //(预检请求)的返回结果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息) 可以被缓存多久 + res.setHeader("Access-Control-Max-Age", "86400"); + //首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段 + //res.setHeader("Access-Control-Allow-Headers", "*"); + res.setHeader("Access-Control-Allow-Headers", + "Timestamp,Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,Access-Control-Allow-Headers"); + } + */ + + //sql,xss过滤 + XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper((HttpServletRequest)request); + if (request instanceof HttpServletRequest) { - requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); + String url = ((HttpServletRequest) request).getRequestURI(); + if (!UrlCheck.checkUrl(url)) { + requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); + } } + if (null == requestWrapper) { - chain.doFilter(request, response); + chain.doFilter(xssHttpServletRequestWrapper, response); } else { chain.doFilter(requestWrapper, response); } diff --git a/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java index 237bbbda7..ee8dc4ea7 100644 --- a/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -75,7 +75,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { sb.append(resultBody); - String key = "request-" + HashUtil.md5(sb.toString()); + String key = "request:B:" + HashUtil.md5(sb.toString()); Boolean isAbsent = redisTemplate.execute(new RedisCallback() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { diff --git a/mallinkBApi/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java b/mallinkBApi/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java new file mode 100644 index 000000000..0ee75b20a --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java @@ -0,0 +1,122 @@ +package com.iformall.interceptor; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 防止sql注入,xss攻击 + * 前端可以对输入信息做预处理,后端也可以做处理。 + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + private final Logger log = LoggerFactory.getLogger(getClass()); + private static String key = "and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+"; + private static Set notAllowedKeyWords = new HashSet(0); + private static String replacedString="INVALID"; + static { + String keyStr[] = key.split("\\|"); + for (String str : keyStr) { + notAllowedKeyWords.add(str); + } + } + + private String currentUrl; + + public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) { + super(servletRequest); + currentUrl = servletRequest.getRequestURI(); + } + + + /**覆盖getParameter方法,将参数名和参数值都做xss过滤。 + * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取 + * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 + */ + @Override + public String getParameter(String parameter) { + String value = super.getParameter(parameter); + if (value == null) { + return null; + } + return cleanXSS(value); + } + @Override + public String[] getParameterValues(String parameter) { + String[] values = super.getParameterValues(parameter); + if (values == null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = cleanXSS(values[i]); + } + return encodedValues; + } + @Override + public Map getParameterMap(){ + Map values=super.getParameterMap(); + if (values == null) { + return null; + } + Map result=new HashMap<>(); + for(String key:values.keySet()){ + String encodedKey=cleanXSS(key); + int count=values.get(key).length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++){ + encodedValues[i]=cleanXSS(values.get(key)[i]); + } + result.put(encodedKey,encodedValues); + } + return result; + } + /** + * 覆盖getHeader方法,将参数名和参数值都做xss过滤。 + * 如果需要获得原始的值,则通过super.getHeaders(name)来获取 + * getHeaderNames 也可能需要覆盖 + */ + @Override + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) { + return null; + } + return cleanXSS(value); + } + + private String cleanXSS(String valueP) { + // You'll need to remove the spaces from the html entities below + String value = valueP.replaceAll("<", "<").replaceAll(">", ">"); + value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); + value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); + value = value.replaceAll("'", "& #39;"); + value = value.replaceAll("eval\\((.*)\\)", ""); + value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); + value = value.replaceAll("script", ""); + value = cleanSqlKeyWords(value); + return value; + } + + private String cleanSqlKeyWords(String value) { + String paramValue = value; + for (String keyword : notAllowedKeyWords) { + if (paramValue.length() > keyword.length() + 4 + && (paramValue.contains(" "+keyword)||paramValue.contains(keyword+" ")||paramValue.contains(" "+keyword+" "))) { + paramValue = StringUtils.replace(paramValue, keyword, replacedString); + log.error(this.currentUrl + "已被过滤,因为参数中包含不允许sql的关键词(" + keyword + + ")"+";参数:"+value+";过滤后的参数:"+paramValue); + } + } + return paramValue; + } + +} diff --git a/mallinkBApi/src/main/java/com/iformall/utils/UrlCheck.java b/mallinkBApi/src/main/java/com/iformall/utils/UrlCheck.java new file mode 100644 index 000000000..d2bece626 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/utils/UrlCheck.java @@ -0,0 +1,13 @@ +package com.iformall.utils; + +/** + * @author gongbiao + */ +public class UrlCheck { + + public static boolean checkUrl(String url) { + return url.contains("awsFileUpload") + || url.contains("awsFilesUpload"); + } + +} diff --git a/mallinkBApi/src/main/resources/application-dev.yml b/mallinkBApi/src/main/resources/application-dev.yml index d43000b27..bd151ee2e 100644 --- a/mallinkBApi/src/main/resources/application-dev.yml +++ b/mallinkBApi/src/main/resources/application-dev.yml @@ -23,7 +23,6 @@ spring: maxOpenPreparedStatements: 20 #jackson: #date-format: yyyy-MM-dd HH:mm:ss - # REDIS redis: host: 202.165.179.86 @@ -63,8 +62,31 @@ jasypt: encryptor: password: oRqdnDbK5pj3eMmB +wechat: + open: + componentAppId: "wx897e4673286c915d" + componentSecret: "cdfdfda65c45689beb6766c4c427eed2" + componentToken: "formall2018" + componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 500 + max-wait: -1 + min-idle: 10 + fm: exception: false + deploy: 1 + open: true logging: level: diff --git a/mallinkBApi/src/main/resources/application-prod.yml b/mallinkBApi/src/main/resources/application-prod.yml index 69cbb6e34..232cbb284 100644 --- a/mallinkBApi/src/main/resources/application-prod.yml +++ b/mallinkBApi/src/main/resources/application-prod.yml @@ -65,8 +65,31 @@ aws: access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) +wechat: + open: + componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) + componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) + componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) + componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + fm: exception: true + deploy: 3 + open: true logging: level: diff --git a/mallinkBApi/src/main/resources/application-test.yml b/mallinkBApi/src/main/resources/application-test.yml index 4141683a9..51ba81bc2 100644 --- a/mallinkBApi/src/main/resources/application-test.yml +++ b/mallinkBApi/src/main/resources/application-test.yml @@ -65,8 +65,31 @@ aws: access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) +wechat: + open: + componentAppId: ENC(hnH31XdNzArfMfikKgBFpqQuJUl6rVOPFFcAVyb595o=) + componentSecret: ENC(t/GUVX5L+U7LCwSvZ5WmxAnmTMrc/Uy1nljsrokuzzsBL2j6BEVnrS/n7DCdGc/G) + componentToken: ENC(gUF1m0YgCCI2IY54fX6sGLZVlCswA8tG) + componentAesKey: ENC(TYHcrIkICtfrCfGq4HW6s1b/pHf7OD2uyPN11SzJNB0acqJ/4JVX1nuljo/cAtgMG4O05TImLQc=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + fm: exception: true + deploy: 2 + open: true logging: level: diff --git a/mallinkCApi/src/main/java/com/iformall/CApplication.java b/mallinkCApi/src/main/java/com/iformall/CApplication.java index d2717e841..c3d60da7e 100644 --- a/mallinkCApi/src/main/java/com/iformall/CApplication.java +++ b/mallinkCApi/src/main/java/com/iformall/CApplication.java @@ -21,11 +21,19 @@ public class CApplication { @Value("${fm.exception}") private boolean fmException; + @Value("${fm.open}") + private boolean fmOpen; + @Bean public boolean isFmException() { return fmException; } + @Bean + public boolean isFmOpen() { + return fmOpen; + } + public static void main(String[] args) { SpringApplication.run(CApplication.class, args); diff --git a/mallinkCApi/src/main/java/com/iformall/config/AwsProperty.java b/mallinkCApi/src/main/java/com/iformall/config/AwsProperty.java new file mode 100644 index 000000000..0329f1d6d --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/config/AwsProperty.java @@ -0,0 +1,52 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Stormeye + */ +@Component +@ConfigurationProperties(prefix = "aws") +public class AwsProperty { + // AWS ACCESS KEY + private String access; + + private String secret; + + private String clientRegion; + + private String bucketName; + + public String getAccess() { + return access; + } + + public void setAccess(String access) { + this.access = access; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getClientRegion() { + return clientRegion; + } + + public void setClientRegion(String clientRegion) { + this.clientRegion = clientRegion; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } +} diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index c2a168b7f..89915c6b5 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -9,6 +9,7 @@ import com.iformall.exception.MallinkException; import com.iformall.service.WxAppinfoService; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserService; +import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.Constant; import com.iformall.utils.IPUtil; import com.iformall.utils.MaUtil; @@ -29,12 +30,18 @@ import java.util.List; @RestController public class BaseController { + @Autowired + private boolean isFmOpen; + @Autowired private WxCUserService wxCUserService; @Autowired private WxAppinfoService wxAppinfoService; + @Autowired + private FmOpenService openService; + @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; @@ -88,17 +95,25 @@ public class BaseController { } public WxMaService getWeappService(String appId) { - WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); - if (appinfo == null) { - return null; + if(isFmOpen) { + return openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); + } else { + WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); + if (appinfo == null) { + return null; + } + WxMaService service = MaUtil.getWeappService(appinfo); + return service; } - WxMaService service = MaUtil.getWeappService(appinfo); - return service; + } public WxMaService getWeappServiceByAppInfo(WxAppinfo appinfo) { - WxMaService service = MaUtil.getWeappService(appinfo); - return service; + if(!isFmOpen) { + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } + return null; } @@ -125,6 +140,10 @@ public class BaseController { if (basicInfo.getPoins() == null) { basicInfo.setPoins(user.getScore()); } + // 积分 + if (basicInfo.getCredit() == null) { + basicInfo.setCredit(user.getCredit()); + } wxCUserBasicInfoService.updateObj(basicInfo, user.getId()); } else { Date cur = new Date(); @@ -137,6 +156,7 @@ public class BaseController { basicInfo.setPoins(user.getScore()); basicInfo.setCreateDate(cur); basicInfo.setUpdateDate(cur); + basicInfo.setCredit(user.getCredit()); wxCUserBasicInfoService.save(basicInfo); } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/UploadController.java b/mallinkCApi/src/main/java/com/iformall/controller/UploadController.java new file mode 100644 index 000000000..075586365 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/controller/UploadController.java @@ -0,0 +1,211 @@ +package com.iformall.controller; + + +import com.amazonaws.AmazonClientException; +import com.amazonaws.AmazonServiceException; +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.amazonaws.services.s3.model.PutObjectRequest; +import com.iformall.common.ResultData; +import com.iformall.config.AwsProperty; +import io.swagger.annotations.Api; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.util.*; + +@RestController +@RequestMapping(value = "/api/upload") +@Api(description = "文件上传接口") +public class UploadController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private AwsProperty awsProperty; + + private AmazonS3 s3 = null; + + private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName) { + ResultData data = new ResultData(); + try { + if (s3 == null) { + s3 = AmazonS3ClientBuilder.standard() + .withRegion(awsProperty.getClientRegion()) + .withCredentials(new AWSCredentialsProvider() { + @Override + public AWSCredentials getCredentials() { + return new BasicAWSCredentials(awsProperty.getAccess(), awsProperty.getSecret()); + } + + @Override + public void refresh() { + + } + }) + .build(); + } + + s3.putObject( + new PutObjectRequest(awsProperty.getBucketName(), fileName, multiReq.getInputStream(), metadata) + .withCannedAcl(CannedAccessControlList.PublicRead)); + URL url = s3.getUrl(awsProperty.getBucketName(), fileName); + logger.info(url.toString()); + + data.code = ResultData.SUCCESS; + Map map = new HashMap<>(); + map.put("url", url.toString()); + data.data = map; + } catch (AmazonServiceException ase) { + data.code = ResultData.ERROR; + logger.warn("Caught an AmazonServiceException, which " + + "means your request made it " + + "to Amazon S3, but was rejected with an error response" + + " for some reason."); + logger.warn(ase.getMessage()); + data.code = ResultData.ERROR; + data.message = "上传失败"; + } catch (AmazonClientException ace) { + data.code = ResultData.ERROR; + logger.warn("Caught an AmazonClientException, which " + + "means the client encountered " + + "an internal error while trying to " + + "communicate with S3, " + + "such as not being able to access the network."); + logger.warn("Error Message: " + ace.getMessage()); + data.code = ResultData.ERROR; + data.message = "上传失败"; + } catch (IOException ioe) { + data.code = ResultData.ERROR; + logger.warn("Caught an IOException: " + ioe.getMessage()); + data.code = ResultData.ERROR; + data.message = "上传失败"; + } + return data; + } + + /** + * 上传文件 + * + * @param multiReq + * @return + * @throws Exception + */ + @PostMapping(value = "/awsFileUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiOperation("上传文件") + public ResultData awsfileUpload(@RequestParam("file") MultipartFile multiReq) { + logger.info("[" + getIpAddr() + "] UploadController::awsfileUpload"); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multiReq.getContentType()); + metadata.setContentLength(multiReq.getSize()); + + FileOutputStream fos = null; + BufferedInputStream fs = null; + + String fileName = UUID.randomUUID().toString(); + int dot = multiReq.getOriginalFilename().lastIndexOf('.'); + if (dot >= 0) { + fileName = getTenantId() + "/" + fileName + multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length()); + } else { + fileName = getTenantId() + "/" + fileName; + } + + ResultData data = awsUpload(multiReq, metadata, fileName); + return data; + } + + /** + * 多文件上传 + * + * @param files + * @return + * @throws Exception + */ + @PostMapping(value = "/awsFilesUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiOperation("多文件上传") + public ResultData awsFilesUpload(@RequestParam("files") MultipartFile[] files) { + logger.info("[" + getIpAddr() + "] UploadController::awsFilesUpload"); + + if (files.length > 0) { + ResultData data = new ResultData(); + List> dataList = new ArrayList>(); + for (MultipartFile multipartFile : files) { + Map map = new HashMap<>(); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multipartFile.getContentType()); + metadata.setContentLength(multipartFile.getSize()); + + FileOutputStream fos = null; + BufferedInputStream fs = null; + + map.put("key", multipartFile.getOriginalFilename()); + + String fileName = UUID.randomUUID().toString(); + int dot = multipartFile.getOriginalFilename().lastIndexOf('.'); + if (dot >= 0) { + fileName = getTenantId() + "/" + fileName + multipartFile.getOriginalFilename().substring(dot, multipartFile.getOriginalFilename().length()); + } else { + fileName = getTenantId() + "/" + fileName; + } + + ResultData data1 = awsUpload(multipartFile, metadata, fileName); + if (data1.code == ResultData.SUCCESS) { + Map _data = (Map) data1.data; + map.put("url", (String) _data.get("url")); + dataList.add(map); + } else { + // 部分成功 + data.code = ResultData.SUCCESS; + data.data = dataList; + return data; + } + } + data.code = ResultData.SUCCESS; + data.data = dataList; + return data; + + } + return new ResultData(); + } + + /** + * C端上传图片文件 + * + * @param multiReq + * @return + * @throws Exception + */ + @PostMapping(value = "/cimgUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiOperation("C端上传图片文件") + public ResultData cimgUpload(@RequestParam("file") MultipartFile multiReq) { + logger.info("[" + getIpAddr() + "] UploadController::cimgUpload"); + + ObjectMetadata metadata = new ObjectMetadata(); + metadata.setContentType(multiReq.getContentType()); + metadata.setContentLength(multiReq.getSize()); + + String fileName = multiReq.getOriginalFilename(); + fileName = "cimg/" + fileName; + ResultData data = awsUpload(multiReq, metadata, fileName); + return data; + } + +} diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxBusinessController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxBusinessController.java index 5845683ed..f7b7ad3cf 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxBusinessController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxBusinessController.java @@ -40,21 +40,12 @@ public class WxBusinessController extends BaseController { return new ResultData(page); } - @ApiOperation("成长值业态列表接口") - @GetMapping("busListForScore") - public ResultData getList(@ModelAttribute WxBusiness wxBusiness) { - if (null == wxBusiness) wxBusiness = new WxBusiness(); - final List busList = wxBusinessService.getList(wxBusiness); - // 业态 全部 不返回 - List busList2 = busList.stream().filter(b -> !b.getId().equals(0L)).collect(Collectors.toList()); - return new ResultData(busList2); - } @ApiOperation("业态全列表接口") - @GetMapping("allist") - public ResultData getAllList(@ModelAttribute WxBusiness wxBusiness) { - if (null == wxBusiness) wxBusiness = new WxBusiness(); - final List busList = wxBusinessService.getList(wxBusiness); + @GetMapping("listAll") + public ResultData listAll(@ModelAttribute WxBusiness wxBusiness) { + final List busList = wxBusinessService.findListAll(); return new ResultData(busList); } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a3dd93a82..35b631854 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -10,6 +10,7 @@ import com.iformall.domain.po.*; import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.domain.vo.WxMerchantVo; import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.utils.ETCPUtil; import com.iformall.utils.TJDCarUtil; @@ -59,6 +60,9 @@ public class WxCarController extends BaseController { @Autowired WxCarCmdLogService wxCarCmdLogService; + @Autowired + WxCreditHistoryService wxCreditHistoryService; + private WxPark getCurrentPark(String tenantId) { WxPark parkQ = new WxPark(); parkQ.setTenantId(tenantId); @@ -109,16 +113,26 @@ public class WxCarController extends BaseController { String merchantKey = objParams.getString("merchantKey"); String version = objParams.getString("version"); - String ret = etcp.userSignin(url, appId, merchantNo, merchantKey, version, phone); + String ret = ""; + try { + ret = etcp.userSignin(url, appId, merchantNo, merchantKey, version, phone); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { // 获取绑定的车牌 JSONObject dataObj = retObj.getJSONObject("data"); dataObj.put("vendor", EnumCarVendor.CAR_ETCP.getCode()); String etcpToken = dataObj.getString("token"); - JSONObject dataObj1 = syncCarNumbers(user.getId(), user.getTenantId(), park.getVendorType(), - url, merchantNo, merchantKey, version, - etcpToken); + try { + JSONObject dataObj1 = syncCarNumbers(user.getId(), user.getTenantId(), park.getVendorType(), + url, merchantNo, merchantKey, version, + etcpToken); + } catch (MallinkException e) { + logger.error("ETCP cmd error: " + e.getMessage()); + } // c端必须保存此token return new ResultData(dataObj); } else { @@ -152,8 +166,13 @@ public class WxCarController extends BaseController { String etcpToken) { String ret; JSONObject retObj; - ret = etcp.carNum(url, merchantNo, merchantKey, version, etcpToken); /*{"code": 0,"msg": "ok","data": {"number": 3,"carList": ["晋 BMZ105","云 C12345"]}} */ + try { + ret = etcp.carNum(url, merchantNo, merchantKey, version, etcpToken); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } retObj = JSON.parseObject(ret); JSONObject dataObj1 = retObj.getJSONObject("data"); dataObj1.put("vendor", iVendorType); @@ -251,7 +270,13 @@ public class WxCarController extends BaseController { String merchantKey = objParams.getString("merchantKey"); String version = objParams.getString("version"); - String ret = etcp.bindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber, null); + String ret = ""; + try { + ret = etcp.bindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber, null); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == 0) { // 插入车牌 @@ -266,6 +291,8 @@ public class WxCarController extends BaseController { wxCUserCarService.saveOrUpdate(userCar); wxScoreRulesService.addScore(EnumScoreType.BIND_CAR,userCar); + //增加积分 + addCredit(); JSONObject dataObj = retObj.getJSONObject("data"); wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR,getUserId()); return new ResultData(dataObj); @@ -321,6 +348,8 @@ public class WxCarController extends BaseController { try { wxCUserCarService.save(userCar); wxScoreRulesService.addScore(EnumScoreType.BIND_CAR,userCar); + //增加积分 + addCredit(); } catch (Exception e) { logger.error(e.getMessage()); return new ResultData(ErrorCode.DB_FAIL.getCode(), "TJD保存车牌失败, e:" + e.getMessage()); @@ -335,6 +364,18 @@ public class WxCarController extends BaseController { return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "绑车牌失败"); } + //-----增加积分start----- + private void addCredit(){ + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setCUserId(getUserId()); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setCreateDate(new Date()); + wxCreditHistory.setCreditType(EnumScoreType.BIND_CAR.getCode()); + wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + wxCreditHistory.setOperatorId(getUserId()); + wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + } + /** * 解绑车牌 * @param paramMap @@ -375,7 +416,14 @@ public class WxCarController extends BaseController { String merchantKey = objParams.getString("merchantKey"); String version = objParams.getString("version"); - String ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber); + String ret = ""; + try { + ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } + JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == 0) { try { @@ -497,7 +545,14 @@ public class WxCarController extends BaseController { String merchantKey = objParams.getString("merchantKey"); String version = objParams.getString("version"); - String ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber); + String ret = ""; + try { + ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } + JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == 0) { JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0); @@ -667,8 +722,14 @@ public class WxCarController extends BaseController { businessId = objParams.getString("businessId"); } - String ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version, - etcpToken, park.getParkId(), businessId, carNumber, String.valueOf(userCar.getCouponFreeId())); + String ret = ""; + try { + ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version, + etcpToken, park.getParkId(), businessId, carNumber, String.valueOf(userCar.getCouponFreeId())); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { @@ -732,6 +793,7 @@ public class WxCarController extends BaseController { String version = objParams.getString("version"); if (park.getParkingId() == null) { // those code is not supported + /* String lat = objParams.getString("lat"); String lon = objParams.getString("lon"); String radius = objParams.getString("radius"); @@ -755,10 +817,17 @@ public class WxCarController extends BaseController { } } } + */ } if (park.getParkingId() != null) { - String ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId()); + String ret = ""; + try { + ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId()); + } catch (MallinkException e) { + logger.error("ETCP failed: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java index 97e7bb0e2..314fc2d02 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java @@ -39,7 +39,7 @@ public class WxCouponChannelController extends BaseController { if (null == wxCouponChannel) wxCouponChannel = new WxCouponChannel(); wxCouponChannel.setTenantId(getTenantId()); wxCouponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); - wxCouponChannel.setSortColumns(WxCouponChannel.Field.CreateDate_DESC); + wxCouponChannel.setSortColumns(WxCouponChannel.Field.UpdateDate_DESC); PageInfo page = wxCouponChannelService.listPageCVo(wxCouponChannel, pageNum, pageSize); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java index 96861c671..a194049f6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java @@ -3,7 +3,6 @@ package com.iformall.controller; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.vo.MarkingSceneDataReportVo; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.enums.EnumCouponChannelActivityStatus; import com.iformall.enums.EnumCouponChannelType; @@ -13,19 +12,13 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.commons.collections.map.HashedMap; 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.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.stream.Collectors; +import java.util.Date; @RestController @RequestMapping("/api/wxCoupon") @@ -74,4 +67,17 @@ public class WxCouponController extends BaseController { return new ResultData(wxCouponCVo); } + + @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 WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxCouponController::list"); + if (wxCoupon == null) wxCoupon = new WxCoupon(); + wxCoupon.setTenantId(getTenantId()); + return wxCouponService.list(wxCoupon, pageNum, pageSize); //全列表 + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java new file mode 100644 index 000000000..51f38d0a7 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java @@ -0,0 +1,48 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCreditHistory; +import com.iformall.domain.vo.WxCreditHistoryVo; +import com.iformall.service.WxCreditHistoryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/credit") +@Api(description = "积分相关接口") +@Slf4j +public class WxCreditHistoryController extends BaseController{ + + @Autowired + private WxCreditHistoryService wxCreditHistoryService; + + @ApiOperation("新增接口") + @PostMapping("/add") + public ResultData add(@RequestBody WxCreditHistory wxCreditHistory) { + log.debug("[" + getIpAddr() + "] WxCreditHistoryController::add"); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setOperatorId(getUser().getId()); + WxCreditHistory credit = wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + return new ResultData(Result.SUCCESS,"操作成功",credit); + } + + @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 WxCreditHistory wxCreditHistory, Integer pageNum, Integer pageSize) { + log.debug("[" + getIpAddr() + "] WxCreditHistoryController::list"); + if (null == wxCreditHistory) wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setCUserId(getUserId()); + final PageInfo page = wxCreditHistoryService.listAsPageMore(wxCreditHistory, pageNum, pageSize); + return new ResultData(page); + } +} diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java index 15e9b487f..61a18d623 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java @@ -50,6 +50,21 @@ public class WxGameController extends BaseController { return new ResultData(record); } + @ApiOperation("获取游戏信息") + @GetMapping("getOneGame") + public ResultData getOneGame(@ModelAttribute WxGame wxGame) { + if (wxGame == null) wxGame = new WxGame(); + wxGame.setTenantId(getTenantId()); + wxGame.setStatus(EnumGameStatus.STATUS_THROW_IN.getCode()); + // 因为有算法要求,分成两步获取 + WxGame record = wxGameService.getOne(wxGame); + if (record == null) { + return new ResultData(ErrorCode.GAME_NOT_FOUND); + } + + return new ResultData(record); + } + @ApiOperation("添加游戏参与记录") @PostMapping("addActionLog") diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index ff8e1bef5..d488409b5 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -13,7 +13,6 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxOrderService; -import com.iformall.utils.DateUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -39,13 +38,14 @@ public class WxOrderController extends BaseController { @Autowired private WxOrderService wxOrderService; - @ApiOperation(value = "免费领取", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\"}") + @ApiOperation(value = "免费领取", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"formId\":\"String\"}") @PostMapping("freeCoupon") public ResultData freeCoupon(@RequestBody Map paramMap) { //Assert.notNull(wxOrders.getName(), "角色名不能为空"); //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); String couponChannelIdStr = paramMap.get("couponChannelId"); String couponIdStr = paramMap.get("couponId"); + String formId = paramMap.get("formId"); if (StringUtils.isBlank(couponChannelIdStr)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空"); } @@ -72,7 +72,7 @@ public class WxOrderController extends BaseController { WxOrder order = null; try { - order = wxOrderService.saveFreeCouponOrder(getUserId(), couponChannelId, couponId); + order = wxOrderService.saveFreeCouponOrder(getUserId(), couponChannelId, couponId, formId); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); @@ -83,7 +83,7 @@ public class WxOrderController extends BaseController { } } - @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\"}") + @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") @PostMapping("save") public ResultData saveOrder(@RequestBody Map paramMap) { logger.info("OrderSave: " + paramMap.toString()); @@ -93,6 +93,7 @@ public class WxOrderController extends BaseController { String couponIdStr = paramMap.get("couponId"); String pressStr = paramMap.get("press"); String orderGroupIdStr = paramMap.get("orderGroupId"); + String formId = paramMap.get("formId"); if (StringUtils.isBlank(couponChannelIdStr)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空"); @@ -165,7 +166,7 @@ public class WxOrderController extends BaseController { WxCUser user = getUser(); try { - WxOrder order = wxOrderService.saveCouponOrder(user, couponChannelId, couponId, isPress, orderGroupId); + WxOrder order = wxOrderService.saveCouponOrder(user, couponChannelId, couponId, isPress, orderGroupId, formId); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxTopicController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxTopicController.java new file mode 100644 index 000000000..4bd3ad547 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxTopicController.java @@ -0,0 +1,38 @@ +package com.iformall.controller; + +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxTopic; +import com.iformall.service.WxTopicService; +import io.swagger.annotations.Api; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +@RestController +@RequestMapping("/api/topic") +@Api(description = "专题相关接口") +public class WxTopicController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxTopicService wxTopicService; + + @GetMapping("show") + public ResultData show() { + logger.debug("[" + getIpAddr() + "] WxTopicController::show"); + WxTopic wxTopic = new WxTopic(); + String tenantId = getTenantId(); + wxTopic.setTenantId(tenantId); + return new ResultData(wxTopicService.show(wxTopic)); + } + + @GetMapping("findById") + public ResultData findById(WxTopic wxTopic) { + logger.debug("[" + getIpAddr() + "] WxTopicController::findById"); + String tenantId = getTenantId(); + wxTopic.setTenantId(tenantId); + WxTopic queryTopic = wxTopicService.findById(wxTopic); + return new ResultData(queryTopic); + } +} diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 3ddc4f9da..8f8a08cb9 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -14,10 +14,10 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxCUserVo; import com.iformall.domain.vo.WxLevelMerchantCVo; -import com.iformall.enums.EnumAssignTagsTrigger; -import com.iformall.enums.EnumLevelConfigDiscountStatus; -import com.iformall.enums.EnumScoreType; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.service.*; +import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.Constant; import com.iformall.utils.IPUtil; import io.swagger.annotations.Api; @@ -47,6 +47,12 @@ import java.util.Map; public class WxUserGrantController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private boolean isFmOpen; + + @Autowired + private WxCUserTokenService userTokenService; + @Autowired private WxCUserService wxCUserService; @@ -68,25 +74,37 @@ public class WxUserGrantController extends BaseController { @Autowired WxAppinfoService wxAppinfoService; + @Autowired + WxAuthorizerInfoService wxAuthorizerInfoService; + + @Autowired + private FmOpenService openService; + @Autowired WxMerchantService wxMerchantService; + @Autowired + WxCouponOrderService wxCouponOrderService; + + @Autowired + WxCreditHistoryService wxCreditHistoryService; /** * 用户登录 + * * @param map * @return */ @AuthIgnore @PostMapping("/login") - @ApiOperation(value="用户登录", notes="{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\",\"latitude\":\"string\",\"longitude\":\"string\",\"systemInfo\":\"string\"}") + @ApiOperation(value = "用户登录", notes = "{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\",\"latitude\":\"string\",\"longitude\":\"string\",\"systemInfo\":\"string\"}") public ResultData userLogin(@RequestBody Map map) { logger.debug(map.toString()); Map resultMap = new HashMap(); String appId = map.get("appId"); - String code = map.get("code"); + String code = map.get("code"); String sceneAddress = map.get("sceneAddress"); String scene = map.get("scene"); String longitude = map.get("longitude"); @@ -100,130 +118,199 @@ public class WxUserGrantController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "code不能为空"); } - // 通过appinfo得到tenant_id - WxAppinfo wxAppinfo = getAppInfo(appId); - if(wxAppinfo == null) { + // 通过authorizerInfo得到tenant_id + WxAuthorizerInfo wxAuthorizerInfo = null; + WxAppinfo wxAppinfo = null; + WxMaService wxMaService = null; + + wxAuthorizerInfo = wxAuthorizerInfoService.getByAppId(appId); + if (wxAuthorizerInfo == null) { return new ResultData(ErrorCode.APP_ID_NOT_FOUND); } - WxMaService wxMaService = getWeappServiceByAppInfo(wxAppinfo); - if(StringUtils.isBlank(wxAppinfo.getAccessToken())) { - // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 - updateAppAccessToken(wxAppinfo, wxMaService); + if (isFmOpen) { + wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); + } else { + wxAppinfo = getAppInfo(appId); + if (wxAppinfo == null) { + return new ResultData(ErrorCode.APP_ID_NOT_FOUND); + } wxMaService = getWeappServiceByAppInfo(wxAppinfo); - } else { - // 检查token是否已过期, 1小时就重新获取 - Date curDate = new Date(); - if(curDate.getTime() > wxAppinfo.getLastTokenTime().getTime() + Constant.C_EXPIRE) { + if (StringUtils.isBlank(wxAppinfo.getAccessToken())) { + // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 updateAppAccessToken(wxAppinfo, wxMaService); wxMaService = getWeappServiceByAppInfo(wxAppinfo); + + } else { + // 检查token是否已过期, 1小时就重新获取 + Date curDate = new Date(); + if (curDate.getTime() > wxAppinfo.getLastTokenTime().getTime() + Constant.H_EXPIRE) { + updateAppAccessToken(wxAppinfo, wxMaService); + wxMaService = getWeappServiceByAppInfo(wxAppinfo); + } } } String token = null; String session_key = null; String openId = null; + String unionId = null; + boolean bHaveUnionId = false; try { WxMaJscode2SessionResult session = wxMaService.jsCode2SessionInfo(code); //获取会话密钥(session_key) session_key = session.getSessionKey(); openId = session.getOpenid(); - logger.info("session_key: " + session_key + ", openId: " + openId); + unionId = session.getUnionid(); + if (StringUtils.isNotBlank(unionId)) { + bHaveUnionId = true; + } + + logger.info("session_key: " + session_key + ", openId: " + openId + ", unionId: " + unionId); resultMap.put("openId", openId); } catch (WxErrorException e) { logger.error(e.getMessage(), e); return new ResultData(ErrorCode.SESSION_KEY_DECODE_ERR, resultMap); } - HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ipaddress = IPUtil.getIpAddr(request); WxCUser user = new WxCUser(); - user.setTenantId(wxAppinfo.getTenantId()); + user.setTenantId(wxAuthorizerInfo.getTenantId()); user.setAppId(appId); user.setOpenId(openId); + if (bHaveUnionId) { + user.setUnionId(unionId); + } + int score = 0; + int credit = 0; + + WxCUser user1 = null; + if (bHaveUnionId) { + // 优先根据unionId查询 + WxCUser userQ = new WxCUser(); + userQ.setTenantId(wxAuthorizerInfo.getTenantId()); + userQ.setUnionId(unionId); + user1 = wxCUserService.getByObject(userQ); + } + if (user1 == null) { + user1 = wxCUserService.getByOpenId(user); + } + if (user1 != null) { + token = user1.createToken(new Date()); + + resultMap.put("token", token); + request.setAttribute(Constant.LOGIN_USER_KEY, user1.getId()); + request.setAttribute(Constant.TENANT_ID, user1.getTenantId()); + + user1.setRegisterIp(ipaddress); + user1.setSessionKey(session_key); + user1.setOpenId(openId); + if (bHaveUnionId) { + user1.setUnionId(unionId); + } + if (StringUtils.isNotBlank(wxAuthorizerInfo.getOpenAppid())) { + user1.setOpenAppId(wxAuthorizerInfo.getOpenAppid()); + } + if (user1.getSceneAddress() == null || user1.getSceneAddress().equals("undefined")) + user1.setSceneAddress(sceneAddress); + if (user1.getScene() == null || user1.getScene().equals("undefined")) + user1.setScene(scene); + if (!StringUtils.isBlank(longitude)) + user1.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); + if (!StringUtils.isBlank(latitude)) + user1.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); + + JSONObject extraInfo = new JSONObject(); + extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo)); + user1.setExtraInfo(extraInfo.toJSONString()); + + user1.setLoginCount(user1.getLoginCount() + 1); + userTokenService.saveOrUpdate(user1); + + // 成长值 + try { + score = wxScoreRulesService.addScore(EnumScoreType.LOGIN, user1); + } catch (MallinkException e) { + logger.error("c_user 成长值 " + e.getMessage()); + } catch (Exception e) { + logger.error("c_user 成长值 " + e.getMessage()); + } + // 积分 + try { + logger.info("user:" + user.getId()); + WxCreditHistory wxCreditHistory = addCredit(user1, EnumScoreType.LOGIN); + logger.info("wxCreditHistory_id" + wxCreditHistory.getId()); + credit = wxCreditHistory.getCreditNum() == null ? 0 : wxCreditHistory.getCreditNum(); + logger.info("user_id:" + user1.getId() + " 登录新增积分:" + credit); + } catch (MallinkException e) { + logger.error("c_user 积分 " + e.getMessage()); + } catch (Exception e) { + logger.error("c_user 积分 " + e.getMessage()); + } + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN, user1); + } else { + user.setTenantId(wxAuthorizerInfo.getTenantId()); + token = user.createToken(new Date()); + + user.setRegisterIp(ipaddress); + if (user.getSceneAddress() == null || user.getSceneAddress().equals("undefined")) + user.setSceneAddress(sceneAddress); + if (user.getScene() == null || user.getScene().equals("undefined")) + user.setScene(scene); + user.setSessionKey(session_key); + if (!StringUtils.isBlank(longitude)) + user.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); + if (!StringUtils.isBlank(latitude)) + user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); + + JSONObject extraInfo = new JSONObject(); + extraInfo.put("systemInfo", JSONObject.parseObject(systemInfo)); + user.setExtraInfo(extraInfo.toJSONString()); + user.setLoginCount(0); + + userTokenService.saveOrUpdate(user); + + resultMap.put("token", token); + request.setAttribute(Constant.LOGIN_USER_KEY, user.getId()); + request.setAttribute(Constant.TENANT_ID, user.getTenantId()); + // 成长值 + try { + score = wxScoreRulesService.addScore(EnumScoreType.LOGIN, user); + } catch (MallinkException e) { + logger.error("c_user 成长值 " + e.getMessage()); + } catch (Exception e) { + logger.error("c_user 成长值 " + e.getMessage()); + } - try { - WxCUser user1 = wxCUserService.getByOpenId(user); - if (user1 != null) { - token = user1.createToken(new Date()); - - resultMap.put("token", token); - request.setAttribute(Constant.LOGIN_USER_KEY, user1.getId()); - request.setAttribute(Constant.TENANT_ID, user1.getTenantId()); - - user1.setRegisterIp(ipaddress); - user1.setSessionKey(session_key); - if (user1.getSceneAddress() == null || user1.getSceneAddress().equals("undefined")) - user1.setSceneAddress(sceneAddress); - if (user1.getScene() == null || user1.getScene().equals("undefined")) - user1.setScene(scene); - if (!StringUtils.isBlank(longitude)) - user1.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); - if (!StringUtils.isBlank(latitude)) - user1.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); - - JSONObject extraInfo = new JSONObject(); - extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo)); - user1.setExtraInfo(extraInfo.toJSONString()); - - user1.setLoginCount(user1.getLoginCount()+1); - wxCUserService.saveOrUpdate(user1); - // 成长值 - try { - wxCUserService.scoreCalculate(user1, false); - } catch (Exception e) { - logger.error(e.getMessage()); - } - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN,user1); - } else { - user.setTenantId(wxAppinfo.getTenantId()); - token = user.createToken(new Date()); - - user.setRegisterIp(ipaddress); - if (user.getSceneAddress() == null || user.getSceneAddress().equals("undefined")) - user.setSceneAddress(sceneAddress); - if (user.getScene() == null || user.getScene().equals("undefined")) - user.setScene(scene); - user.setSessionKey(session_key); - if (!StringUtils.isBlank(longitude)) - user.setLongitude(BigDecimal.valueOf(Double.valueOf(longitude))); - if (!StringUtils.isBlank(latitude)) - user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); - - JSONObject extraInfo = new JSONObject(); - extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo)); - user.setExtraInfo(extraInfo.toJSONString()); - user.setLoginCount(0); - - wxCUserService.saveOrUpdate(user); - - resultMap.put("token", token); - request.setAttribute(Constant.LOGIN_USER_KEY, user.getId()); - request.setAttribute(Constant.TENANT_ID, user.getTenantId()); - // 成长值 - try { - wxCUserService.scoreCalculate(user, true); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN,user); + // 积分 + try { + logger.info("user:" + user.getId()); + WxCreditHistory wxCreditHistory = addCredit(user, EnumScoreType.LOGIN); + logger.info("wxCreditHistory_id" + wxCreditHistory.getId()); + credit = wxCreditHistory.getCreditNum() == null ? 0 : wxCreditHistory.getCreditNum(); + 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()); } - } catch (Exception e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.DB_FAIL.getCode(), "wx_c_user数据库保存出错", resultMap); - } + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN, user); + } + resultMap.put("score", score); + resultMap.put("credit", credit); return new ResultData(resultMap); } /** * WxAppInfo更新accessToken + * * @param wxAppinfo * @param wxMaService */ @@ -243,11 +330,12 @@ public class WxUserGrantController extends BaseController { /** * 获取用户的昵称等信息 + * * @param map * @return */ @PostMapping("/getUserInfo") - @ApiOperation(value="授权后获取用户的昵称,unionId等信息", notes="{\"encryptedData\":\"string\",\"iv\":\"string\"}") + @ApiOperation(value = "授权后获取用户的昵称,unionId等信息", notes = "{\"encryptedData\":\"string\",\"iv\":\"string\"}") public ResultData getUserInfo(@RequestBody Map map) { logger.debug(map.toString()); Map resultMap = new HashMap(); @@ -284,7 +372,9 @@ public class WxUserGrantController extends BaseController { wxCUserService.saveOrUpdate(user); // 成长值 - wxScoreRulesService.addScore(EnumScoreType.WECHAT_PERSION,user); + wxScoreRulesService.addScore(EnumScoreType.WECHAT_PERSION, user); + //增加积分 + addCredit(user, EnumScoreType.WECHAT_PERSION); resultMap.put("openId", user.getOpenId()); resultMap.put("unionId", user.getUnionId()); @@ -304,11 +394,12 @@ public class WxUserGrantController extends BaseController { /** * 授权后获取用户的手机号等信息 + * * @param map * @return */ @PostMapping("/getUserPhone") - @ApiOperation(value = "授权后获取用户的手机号", notes="{\"encryptedData\":\"string\",\"iv\":\"string\"}") + @ApiOperation(value = "授权后获取用户的手机号", notes = "{\"encryptedData\":\"string\",\"iv\":\"string\"}") public ResultData getUserPhone(@RequestBody Map map) { logger.debug(map.toString()); Map resultMap = new HashMap(); @@ -330,7 +421,7 @@ public class WxUserGrantController extends BaseController { String session_key = user.getSessionKey(); try { // 解密 - WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(session_key, encryptedData, iv); + WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(session_key, encryptedData, iv); if (null != phoneNoInfo) { logger.debug(phoneNoInfo.toString()); user.setPhone(phoneNoInfo.getPhoneNumber()); @@ -339,10 +430,12 @@ public class WxUserGrantController extends BaseController { wxCUserService.saveOrUpdate(user); // 成长值 - wxScoreRulesService.addScore(EnumScoreType.WECHAT_PHONE,user); + wxScoreRulesService.addScore(EnumScoreType.WECHAT_PHONE, user); + //增加积分 + addCredit(user, EnumScoreType.WECHAT_PHONE); - resultMap.put("msg","授权手机成功!"); - resultMap.put("phone",phoneNoInfo.getPhoneNumber()); + resultMap.put("msg", "授权手机成功!"); + resultMap.put("phone", phoneNoInfo.getPhoneNumber()); } else { return new ResultData(ErrorCode.PHONE_DECODE_ERR, resultMap); } @@ -354,7 +447,7 @@ public class WxUserGrantController extends BaseController { if (!user.getPhone().contains("*")) { // 用户手机非加密 // 更新到basicinfo saveToBasicInfo(user); - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_PHONE,user); + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_PHONE, user); } return new ResultData(resultMap); @@ -362,10 +455,11 @@ public class WxUserGrantController extends BaseController { /** * 检查用户状态 + * * @return */ @RequestMapping("/checkUserStatus") - @ApiOperation(value = "判断是否是老用户", notes="") + @ApiOperation(value = "判断是否是老用户", notes = "") public ResultData checkUserStatus() { Map resultMap = new HashMap(); WxCUser user = getUser(); @@ -380,10 +474,11 @@ public class WxUserGrantController extends BaseController { /** * 检查用户状态 + * * @return */ @RequestMapping("/checkPhoneStatus") - @ApiOperation(value = "判断是否是老用户", notes="") + @ApiOperation(value = "判断是否是老用户", notes = "") public ResultData checkPhoneStatus() { Map resultMap = new HashMap(); WxCUser user = getUser(); @@ -408,25 +503,45 @@ public class WxUserGrantController extends BaseController { WxCUser user = getUser(); WxCUserVo userVo = new WxCUserVo(); org.springframework.beans.BeanUtils.copyProperties(user, userVo); - if (userVo.getScore() == null || userVo.getScore() == 0) { - userVo.setLevelName(WxLevelConfigService.DEFAULT_LEVEL); - } else { - userVo.setLevelName(WxLevelConfigService.DEFAULT_LEVEL); - List levelList = wxLevelConfigService.getByTenantId(user.getTenantId()); - for(WxLevelConfig levelConfig: levelList) { - if (userVo.getScore() >= levelConfig.getPoints()) { - userVo.setLevelId(levelConfig.getId()); - userVo.setLevelName(levelConfig.getLevel()); - } - } - WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getId()); - if (wxCUserBasicInfo != null) { - userVo.setName(wxCUserBasicInfo.getName()); - userVo.setBirthdate(wxCUserBasicInfo.getBirthdate()); - userVo.setSex(wxCUserBasicInfo.getSex()); - userVo.setAddress(wxCUserBasicInfo.getAddress()); + if (userVo.getScore() == null) + userVo.setScore(0); + Integer levelScore = 0; + Integer levelTarget= 0; + userVo.setLevelName(WxLevelConfigService.DEFAULT_LEVEL); + List levelList = wxLevelConfigService.getByTenantId(user.getTenantId()); + if (levelList.size() > 0) + levelTarget = levelList.get(0).getPoints(); + for (int i = 0; i= levelConfig.getPoints()) { + userVo.setLevelId(levelConfig.getId()); + userVo.setLevelName(levelConfig.getLevel()); + levelScore = levelConfig.getPoints(); + if (i+1 < levelList.size()) + levelTarget = levelList.get(i+1).getPoints(); } } + + if (levelTarget == 0) { + userVo.setUpgradePercent(0); + userVo.setUpgradeScore(0); + } else if(levelScore == levelTarget) { + userVo.setUpgradePercent(100); + userVo.setUpgradeScore(0); + } else { + userVo.setUpgradePercent((userVo.getScore()-levelScore)*100/(levelTarget-levelScore)); + userVo.setUpgradeScore(levelTarget-userVo.getScore()); + } + + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getId()); + if (wxCUserBasicInfo != null) { + userVo.setName(wxCUserBasicInfo.getName()); + userVo.setBirthdate(wxCUserBasicInfo.getBirthdate()); + userVo.setSex(wxCUserBasicInfo.getSex()); + userVo.setAddress(wxCUserBasicInfo.getAddress()); + } + + return new ResultData(userVo); } @@ -445,11 +560,11 @@ public class WxUserGrantController extends BaseController { phone = user.getVerifyCodePhone(); returnMap.put("phone", phone); returnMap.put("count", count); - return new ResultData(Result.SUCCESS,"count获取成功", returnMap); + return new ResultData(Result.SUCCESS, "count获取成功", returnMap); } else { Map returnMap = new HashMap(); returnMap.put("count", count); - return new ResultData(Result.SUCCESS,"count获取成功", returnMap); + return new ResultData(Result.SUCCESS, "count获取成功", returnMap); } } @@ -460,11 +575,12 @@ public class WxUserGrantController extends BaseController { userCar.setTenantId(getTenantId()); userCar.setCUserId(getUserId()); List list = wxCUserCarService.getList(userCar); - return new ResultData(Result.SUCCESS,"获取查询成功", list); + return new ResultData(Result.SUCCESS, "获取查询成功", list); } /** * 微信消息服务验证 + * * @param response * @param request * @throws IOException @@ -480,25 +596,26 @@ public class WxUserGrantController extends BaseController { String nonce = request.getParameter("nonce"); String echostr = request.getParameter("echostr"); - logger.warn("收到的微信服务验证信息:"+signature+"\n"+timestamp+"\n"+nonce+"\n"+echostr); + logger.warn("收到的微信服务验证信息:" + signature + "\n" + timestamp + "\n" + nonce + "\n" + echostr); PrintWriter out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 // 当前无法确定此消息的appId及token, 所以直接返回echostr //if (CheckUtil.checkSignature(wp.getToken(), signature, timestamp, nonce)) { - out.print(echostr); - logger.warn("微信服务验证成功===================="+echostr); - System.out.println("微信服务验证成功!"); + out.print(echostr); + logger.warn("微信服务验证成功====================" + echostr); + System.out.println("微信服务验证成功!"); //} out.close(); } /** * 授权后获取用户的手机号等信息 + * * @param map * @return */ @PostMapping("/getWeRunData") - @ApiOperation(value = "获取用户过去三十天微信运动步数", notes="{\"encryptedData\":\"string\",\"iv\":\"string\"}") + @ApiOperation(value = "获取用户过去三十天微信运动步数", notes = "{\"encryptedData\":\"string\",\"iv\":\"string\"}") public ResultData getWeRunData(@RequestBody Map map) { logger.debug(map.toString()); String encryptedData = map.get("encryptedData"); @@ -517,7 +634,7 @@ public class WxUserGrantController extends BaseController { String session_key = user.getSessionKey(); try { // 解密 - String weRunDataStr = WxMaCryptUtils.decrypt(session_key, encryptedData, iv); + String weRunDataStr = WxMaCryptUtils.decrypt(session_key, encryptedData, iv); if (null != weRunDataStr) { Object obj = JSON.parse(weRunDataStr); return new ResultData(obj); @@ -532,10 +649,11 @@ public class WxUserGrantController extends BaseController { /** * 用户更新信息 + * * @return */ @PostMapping("/updateUserInfo") - @ApiOperation(value = "用户更新信息", notes="") + @ApiOperation(value = "用户更新信息", notes = "") public ResultData updateUserInfo(@RequestBody WxCUserBasicInfo wxCUserBasicInfo) { if (wxCUserBasicInfo == null) return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); @@ -549,12 +667,21 @@ public class WxUserGrantController extends BaseController { WxCUserBasicInfo record = new WxCUserBasicInfo(); record.setName(wxCUserBasicInfo.getName()); record.setBirthdate(wxCUserBasicInfo.getBirthdate()); - record.setSex(wxCUserBasicInfo.getSex() ); + record.setSex(wxCUserBasicInfo.getSex()); record.setAddress(wxCUserBasicInfo.getAddress()); record.setId(getUserId()); record.setUpdateDate(new Date()); wxCUserBasicInfoService.update(record); wxScoreRulesService.addScore(EnumScoreType.COMPLETE_INFO, record); + //增加积分 + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setCUserId(record.getId()); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setCreateDate(new Date()); + wxCreditHistory.setCreditType(EnumScoreType.COMPLETE_INFO.getCode()); + wxCreditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); + wxCreditHistory.setOperatorId(record.getId()); + wxCreditHistoryService.saveOrUpdate(wxCreditHistory); wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT, record); } return new ResultData(); @@ -562,10 +689,11 @@ public class WxUserGrantController extends BaseController { /** * 获取用户折扣率 + * * @return */ @RequestMapping("/getDiscountInfo") - @ApiOperation(value = "获取用户折扣率", notes="") + @ApiOperation(value = "获取用户折扣率", notes = "") public ResultData getDiscountInfo() { WxCUser user = getUser(); @@ -574,9 +702,9 @@ public class WxUserGrantController extends BaseController { String level = WxLevelConfigService.DEFAULT_LEVEL; Long levelId = 0L; - for(WxLevelConfig levelConfig: levelList) { + for (WxLevelConfig levelConfig : levelList) { if (user.getScore() >= levelConfig.getPoints()) { - if(levelConfig.getDiscountEnable().equals(EnumLevelConfigDiscountStatus.ENABLE.getCode())) + if (levelConfig.getDiscountEnable().equals(EnumLevelConfigDiscountStatus.ENABLE.getCode())) levelId = levelConfig.getId(); level = levelConfig.getLevel(); } @@ -585,10 +713,23 @@ public class WxUserGrantController extends BaseController { levelMerchant.setLevelId(levelId); List levelMerchantList = wxLevelConfigService.findListCVo(levelMerchant); - Map result = new HashMap(); - result.put("level",level); - result.put("levelMerchantList",levelMerchantList); + Map result = new HashMap(); + result.put("id", user.getId()); + result.put("level", level); + result.put("levelMerchantList", levelMerchantList); return new ResultData(result); } + private WxCreditHistory addCredit(WxCUser wxCUser, EnumScoreType enumScoreType) { + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setCUserId(wxCUser.getId()); + wxCreditHistory.setTenantId(getTenantId()); + wxCreditHistory.setCreateDate(new Date()); + wxCreditHistory.setCreditType(enumScoreType.getCode()); + wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + wxCreditHistory.setOperatorId(wxCUser.getId()); + WxCreditHistory record = wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + return record; + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkCApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index d47121506..c8c12f652 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -5,7 +5,7 @@ import com.iformall.annotation.AuthIgnore; import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxCUser; import com.iformall.exception.MallinkException; -import com.iformall.service.WxCUserService; +import com.iformall.service.WxCUserTokenService; import com.iformall.utils.Constant; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -25,7 +25,7 @@ import javax.servlet.http.HttpServletResponse; @Component public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Autowired - private WxCUserService wxCUserService; + private WxCUserTokenService userTokenService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { @@ -54,7 +54,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { } // 查询token信息 - WxCUser wxCUser = wxCUserService.getByToken(token); + WxCUser wxCUser = userTokenService.getByToken(token); if(wxCUser == null || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()){ throw new MallinkException(ErrorCode.NET_TOKEN_INVALID.getCode(), "URL:" + request.getRequestURL() + " token失效,请重新登录"); } diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java b/mallinkCApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java index 46ee52e55..7be788b6e 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java @@ -3,10 +3,9 @@ package com.iformall.interceptor; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; -public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { +public class BodyReaderHttpServletRequestWrapper extends XssHttpServletRequestWrapper { private final String body; public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java b/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java index e876c12a1..5b5d5b971 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java @@ -1,5 +1,6 @@ package com.iformall.interceptor; +import com.iformall.utils.UrlCheck; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,6 +10,8 @@ import java.io.IOException; public class HttpServletRequestWrapperFilter implements Filter { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + // 多个跨域域名设置 + // public static final String[] ALLOW_DOMAIN = {"https://admin.malls.iformall.com"}; @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -20,11 +23,40 @@ public class HttpServletRequestWrapperFilter implements Filter { logger.debug("doFilter start"); long start = System.currentTimeMillis(); ServletRequest requestWrapper = null; + + /* // 跨域访问 + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + String originHeader = req.getHeader("Origin"); + + if (Arrays.asList(ALLOW_DOMAIN).contains(originHeader)) { + //通过在响应 header 中设置 ‘*’ 来允许来自所有域的跨域请求访问。 + res.setHeader("Access-Control-Allow-Origin", originHeader); + //通过对 Credentials 参数的设置,就可以保持跨域 Ajax 时的 Cookie + //设置了Allow-Credentials,Allow-Origin就不能为*,需要指明具体的url域 + res.setHeader("Access-Control-Allow-Credentials", "true"); + //请求方式 + res.setHeader("Access-Control-Allow-Methods", "*"); + //(预检请求)的返回结果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息) 可以被缓存多久 + res.setHeader("Access-Control-Max-Age", "86400"); + //首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段 + //res.setHeader("Access-Control-Allow-Headers", "*"); + res.setHeader("Access-Control-Allow-Headers", + "Timestamp,Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,Access-Control-Allow-Headers"); + } + */ + + //sql,xss过滤 + XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper((HttpServletRequest)request); + if (request instanceof HttpServletRequest) { - requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); + String url = ((HttpServletRequest) request).getRequestURI(); + if (!UrlCheck.checkUrl(url)) { + requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); + } } if (null == requestWrapper) { - chain.doFilter(request, response); + chain.doFilter(xssHttpServletRequestWrapper, response); } else { chain.doFilter(requestWrapper, response); } diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java index c811c6b12..0c0180ece 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -77,7 +77,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { sb.append(resultBody); - String key = "request-" + HashUtil.md5(sb.toString()); + String key = "request:C:" + HashUtil.md5(sb.toString()); Boolean isAbsent = redisTemplate.execute(new RedisCallback() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java b/mallinkCApi/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java new file mode 100644 index 000000000..0ee75b20a --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/XssHttpServletRequestWrapper.java @@ -0,0 +1,122 @@ +package com.iformall.interceptor; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 防止sql注入,xss攻击 + * 前端可以对输入信息做预处理,后端也可以做处理。 + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + private final Logger log = LoggerFactory.getLogger(getClass()); + private static String key = "and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+"; + private static Set notAllowedKeyWords = new HashSet(0); + private static String replacedString="INVALID"; + static { + String keyStr[] = key.split("\\|"); + for (String str : keyStr) { + notAllowedKeyWords.add(str); + } + } + + private String currentUrl; + + public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) { + super(servletRequest); + currentUrl = servletRequest.getRequestURI(); + } + + + /**覆盖getParameter方法,将参数名和参数值都做xss过滤。 + * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取 + * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 + */ + @Override + public String getParameter(String parameter) { + String value = super.getParameter(parameter); + if (value == null) { + return null; + } + return cleanXSS(value); + } + @Override + public String[] getParameterValues(String parameter) { + String[] values = super.getParameterValues(parameter); + if (values == null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = cleanXSS(values[i]); + } + return encodedValues; + } + @Override + public Map getParameterMap(){ + Map values=super.getParameterMap(); + if (values == null) { + return null; + } + Map result=new HashMap<>(); + for(String key:values.keySet()){ + String encodedKey=cleanXSS(key); + int count=values.get(key).length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++){ + encodedValues[i]=cleanXSS(values.get(key)[i]); + } + result.put(encodedKey,encodedValues); + } + return result; + } + /** + * 覆盖getHeader方法,将参数名和参数值都做xss过滤。 + * 如果需要获得原始的值,则通过super.getHeaders(name)来获取 + * getHeaderNames 也可能需要覆盖 + */ + @Override + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) { + return null; + } + return cleanXSS(value); + } + + private String cleanXSS(String valueP) { + // You'll need to remove the spaces from the html entities below + String value = valueP.replaceAll("<", "<").replaceAll(">", ">"); + value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); + value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); + value = value.replaceAll("'", "& #39;"); + value = value.replaceAll("eval\\((.*)\\)", ""); + value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); + value = value.replaceAll("script", ""); + value = cleanSqlKeyWords(value); + return value; + } + + private String cleanSqlKeyWords(String value) { + String paramValue = value; + for (String keyword : notAllowedKeyWords) { + if (paramValue.length() > keyword.length() + 4 + && (paramValue.contains(" "+keyword)||paramValue.contains(keyword+" ")||paramValue.contains(" "+keyword+" "))) { + paramValue = StringUtils.replace(paramValue, keyword, replacedString); + log.error(this.currentUrl + "已被过滤,因为参数中包含不允许sql的关键词(" + keyword + + ")"+";参数:"+value+";过滤后的参数:"+paramValue); + } + } + return paramValue; + } + +} diff --git a/mallinkCApi/src/main/java/com/iformall/resolver/LoginUserHandlerMethodArgumentResolver.java b/mallinkCApi/src/main/java/com/iformall/resolver/LoginUserHandlerMethodArgumentResolver.java index 2e6a73a4a..a1cf6ddd8 100644 --- a/mallinkCApi/src/main/java/com/iformall/resolver/LoginUserHandlerMethodArgumentResolver.java +++ b/mallinkCApi/src/main/java/com/iformall/resolver/LoginUserHandlerMethodArgumentResolver.java @@ -2,7 +2,7 @@ package com.iformall.resolver; import com.iformall.annotation.LoginUser; import com.iformall.domain.po.WxCUser; -import com.iformall.service.WxCUserService; +import com.iformall.service.WxCUserTokenService; import com.iformall.utils.Constant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; @@ -22,7 +22,7 @@ import org.springframework.web.method.support.ModelAndViewContainer; @Component public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Autowired - private WxCUserService wxCUserService; + private WxCUserTokenService userTokenService; @Override public boolean supportsParameter(MethodParameter parameter) { @@ -39,7 +39,7 @@ public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgu } //获取用户信息 - WxCUser user = wxCUserService.getByToken((String)object); + WxCUser user = userTokenService.getByToken((String)object); return user; } diff --git a/mallinkCApi/src/main/java/com/iformall/utils/UrlCheck.java b/mallinkCApi/src/main/java/com/iformall/utils/UrlCheck.java new file mode 100644 index 000000000..d2bece626 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/utils/UrlCheck.java @@ -0,0 +1,13 @@ +package com.iformall.utils; + +/** + * @author gongbiao + */ +public class UrlCheck { + + public static boolean checkUrl(String url) { + return url.contains("awsFileUpload") + || url.contains("awsFilesUpload"); + } + +} diff --git a/mallinkCApi/src/main/resources/application-dev.yml b/mallinkCApi/src/main/resources/application-dev.yml index a412f6cab..e38fa70ce 100644 --- a/mallinkCApi/src/main/resources/application-dev.yml +++ b/mallinkCApi/src/main/resources/application-dev.yml @@ -58,6 +58,26 @@ aws: access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) +wechat: + open: + componentAppId: "wx897e4673286c915d" + componentSecret: "cdfdfda65c45689beb6766c4c427eed2" + componentToken: "formall2018" + componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 500 + max-wait: -1 + min-idle: 10 jasypt: encryptor: @@ -65,6 +85,8 @@ jasypt: fm: exception: false + deploy: 1 + open: true logging: level: diff --git a/mallinkCApi/src/main/resources/application-prod.yml b/mallinkCApi/src/main/resources/application-prod.yml index ccb70a731..8fed514f7 100644 --- a/mallinkCApi/src/main/resources/application-prod.yml +++ b/mallinkCApi/src/main/resources/application-prod.yml @@ -65,10 +65,31 @@ aws: access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) - +wechat: + open: + componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) + componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) + componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) + componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 fm: exception: true + deploy: 3 + open: true logging: level: diff --git a/mallinkCApi/src/main/resources/application-test.yml b/mallinkCApi/src/main/resources/application-test.yml index 9a8511358..c1a7c0ef6 100644 --- a/mallinkCApi/src/main/resources/application-test.yml +++ b/mallinkCApi/src/main/resources/application-test.yml @@ -65,8 +65,31 @@ aws: access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) +wechat: + open: + componentAppId: ENC(hnH31XdNzArfMfikKgBFpqQuJUl6rVOPFFcAVyb595o=) + componentSecret: ENC(t/GUVX5L+U7LCwSvZ5WmxAnmTMrc/Uy1nljsrokuzzsBL2j6BEVnrS/n7DCdGc/G) + componentToken: ENC(gUF1m0YgCCI2IY54fX6sGLZVlCswA8tG) + componentAesKey: ENC(TYHcrIkICtfrCfGq4HW6s1b/pHf7OD2uyPN11SzJNB0acqJ/4JVX1nuljo/cAtgMG4O05TImLQc=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + fm: exception: true + deploy: 2 + open: true logging: level: diff --git a/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java b/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java index a341691ce..c4eb13fb2 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java @@ -20,13 +20,21 @@ import tk.mybatis.spring.annotation.MapperScan; @EnableEncryptableProperties public class ConsumerApplication { - @Value("${fm.exception}") - private boolean fmException; + @Value("${fm.exception}") + private boolean fmException; - @Bean - public boolean isFmException() { - return fmException; - } + @Value("${fm.open}") + private boolean fmOpen; + + @Bean + public boolean isFmException() { + return fmException; + } + + @Bean + public boolean isFmOpen() { + return fmOpen; + } public static void main(String[] args) { diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index ef87c0001..b364f852a 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -1,12 +1,9 @@ package com.iformall.mq; -import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.*; import com.iformall.enums.*; import com.iformall.mapper.WxMsgRecordMapper; -import com.iformall.service.impl.SendCallBackSmsServiceImpl; -import com.iformall.service.impl.SendEmailServiceImpl; -import com.iformall.service.impl.SendSmartAppMsgServiceImpl; -import com.iformall.service.impl.SendSmsServiceImpl; +import com.iformall.service.msg.impl.*; import com.iformall.utils.JsonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,8 +26,10 @@ public class MqBaseConsumer { private SendEmailServiceImpl sendEmailService; @Autowired private SendSmartAppMsgServiceImpl sendSmartAppMsgService; -// @Autowired -// private MqBaseProducer mqBaseProducer; + @Autowired + private SendMpMsgServiceImpl sendMpMsgService; + @Autowired + private SendWeappUniformMsgServiceImpl sendWeappUniformMsgService; public void doMessage(String message) { log.info("received message: {}", message); @@ -42,24 +41,34 @@ public class MqBaseConsumer { if(EnumMsgRecordType.SMS.getCode().equals(baseMsg.getMsgType())){ //短信 sendSmsService.send((WxMsgRecord)JsonUtil.readValue(message,WxMsgRecord.class)); - }else if(EnumMsgRecordType.SMS_CALLBACK.getCode().equals(baseMsg.getMsgType())){ + } else if(EnumMsgRecordType.SMS_CALLBACK.getCode().equals(baseMsg.getMsgType())){ //业务短信 sendCallBackSmsService.send((WxMsg)JsonUtil.readValue(message,WxMsg.class)); - }else if(EnumMsgRecordType.EMAIL.getCode().equals(baseMsg.getMsgType())){ + } else if(EnumMsgRecordType.EMAIL.getCode().equals(baseMsg.getMsgType())){ //邮件 sendEmailService.send((MailMsg)JsonUtil.readValue(message,MailMsg.class)); - }else if(EnumMsgRecordType.SMART_APP.getCode().equals(baseMsg.getMsgType())){ - //微信小程序 + } else if(EnumMsgRecordType.SMART_APP.getCode().equals(baseMsg.getMsgType())){ + //微信小程序-模板消息 sendSmartAppMsgService.send((SmartAppMsg)JsonUtil.readValue(message,SmartAppMsg.class)); + } else if(EnumMsgRecordType.PUBLIC.getCode().equals(baseMsg.getMsgType())) { + //公众号-模板消息 + sendMpMsgService.send((MpAppMsg)JsonUtil.readValue(message,MpAppMsg.class)); + } else if(EnumMsgRecordType.SMART_APP_UNIFORM.getCode().equals(baseMsg.getMsgType())) { + //微信小程序-统一消息 + sendWeappUniformMsgService.send((AppUniformMsg)JsonUtil.readValue(message,AppUniformMsg.class)); } - baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); wxMsgRecordMapper.update(baseMsg); - }catch (Exception e){ - log.error("consum received error: {}", e); - baseMsg.setStatusMessage(e.getMessage()); - baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_FAIL.getCode()); - wxMsgRecordMapper.update(baseMsg); + }catch (Throwable e){ + try { + log.error("consum received error: ", e); + baseMsg.setStatusMessage(e.getMessage()); + baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_FAIL.getCode()); + wxMsgRecordMapper.update(baseMsg); + }catch (Throwable e1){ + log.error("更新db状态error: ", e1); + } + // if(null != baseMsg){ // if(baseMsg.getDelayTimeLevel() < 3){ // baseMsg.setDelayTimeLevel(3); //10s后重试 diff --git a/mallinkMQConsumer/src/main/resources/application-dev.yml b/mallinkMQConsumer/src/main/resources/application-dev.yml index 554af1227..bb2b7ded5 100644 --- a/mallinkMQConsumer/src/main/resources/application-dev.yml +++ b/mallinkMQConsumer/src/main/resources/application-dev.yml @@ -77,6 +77,26 @@ aws: access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) +wechat: + open: + componentAppId: "wx897e4673286c915d" + componentSecret: "cdfdfda65c45689beb6766c4c427eed2" + componentToken: "formall2018" + componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 500 + max-wait: -1 + min-idle: 10 jasypt: encryptor: @@ -84,6 +104,8 @@ jasypt: fm: exception: false + deploy: 1 + open: true logging: level: diff --git a/mallinkMQConsumer/src/main/resources/application-prod.yml b/mallinkMQConsumer/src/main/resources/application-prod.yml index 2f0b29d9b..5010adb19 100644 --- a/mallinkMQConsumer/src/main/resources/application-prod.yml +++ b/mallinkMQConsumer/src/main/resources/application-prod.yml @@ -66,10 +66,31 @@ aws: access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) - +wechat: + open: + componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) + componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) + componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) + componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 fm: exception: true + deploy: 3 + open: true logging: level: diff --git a/mallinkMQConsumer/src/main/resources/application-test.yml b/mallinkMQConsumer/src/main/resources/application-test.yml index f3c9256e4..e1c673b7a 100644 --- a/mallinkMQConsumer/src/main/resources/application-test.yml +++ b/mallinkMQConsumer/src/main/resources/application-test.yml @@ -66,8 +66,31 @@ aws: access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) +wechat: + open: + componentAppId: ENC(hnH31XdNzArfMfikKgBFpqQuJUl6rVOPFFcAVyb595o=) + componentSecret: ENC(t/GUVX5L+U7LCwSvZ5WmxAnmTMrc/Uy1nljsrokuzzsBL2j6BEVnrS/n7DCdGc/G) + componentToken: ENC(gUF1m0YgCCI2IY54fX6sGLZVlCswA8tG) + componentAesKey: ENC(TYHcrIkICtfrCfGq4HW6s1b/pHf7OD2uyPN11SzJNB0acqJ/4JVX1nuljo/cAtgMG4O05TImLQc=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + fm: exception: true + deploy: 2 + open: true logging: level: diff --git a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java index b9396d4e2..9ad8515f7 100644 --- a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java +++ b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java @@ -20,13 +20,21 @@ import tk.mybatis.spring.annotation.MapperScan; @EnableEncryptableProperties public class ScheduleApplication { - @Value("${fm.exception}") - private boolean fmException; + @Value("${fm.exception}") + private boolean fmException; - @Bean - public boolean isFmException() { - return fmException; - } + @Value("${fm.open}") + private boolean fmOpen; + + @Bean + public boolean isFmException() { + return fmException; + } + + @Bean + public boolean isFmOpen() { + return fmOpen; + } public static void main(String[] args) { diff --git a/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java b/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java index 0631ecf61..7a401beca 100644 --- a/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java +++ b/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java @@ -1,18 +1,15 @@ package com.iformall.controller; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxMsgRecord; -import com.iformall.mq.MQConfig; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.mq.MqBaseProducer; import com.iformall.mq.impl.RabbitMqMessageProducer; -import com.iformall.mq.impl.RocketMqMessageProducer; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Profile; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java index 77359957e..066565405 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java @@ -1,10 +1,11 @@ package com.iformall.schedule; import com.alibaba.fastjson.JSONObject; -import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.*; import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; +import com.iformall.service.WxBillAllService; import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,6 +43,8 @@ public class BillNotificationSchedule { @Autowired private MqBaseProducer mqBaseProducer; + @Autowired + WxBillAllService wxBillAllService; /** * 每天9点执行 @@ -50,7 +53,9 @@ public class BillNotificationSchedule { public void sendMsgFromBill() { logger.info("账单通知任务启动"); sendWaitPayBill(); + wxBillAllService.sendWaitPayBillEmail(); sendOweBill(); + wxBillAllService.sendOweBillForEmail(); logger.info("账单通知任务结束"); } @@ -122,7 +127,9 @@ public class BillNotificationSchedule { wxMsgRecord.setDynamicContentMap(map); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } - } + + + } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java index d3bc4dbc6..097f58552 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java @@ -3,6 +3,7 @@ package com.iformall.schedule; import com.iformall.common.IdWorker; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxChartDataEntity; +import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxMall; import com.iformall.domain.po.WxMerchantTradeDaily; import com.iformall.enums.EnumCarCmd; @@ -141,7 +142,11 @@ public class ChartDataSchedule { int count = wxChartDataMapper.selectCount(wxChartDataEntity); if (count == 0) { logger.info("销售总交易额>>>>>>>>>>>>>>>>>>>>>>>>>>"); - Integer price = wxCouponOrderMapper.queryPriceTotal(tenantId, startdate, enddate); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setTenantId(tenantId); + wxCouponOrder.setStartTime(startdate); + wxCouponOrder.setEndTime(enddate); + Integer price = wxCouponOrderMapper.queryPriceTotal(wxCouponOrder); addChartData(tenantId, price.toString(), EnumChartType.SALE_COUPON_PRICE.getCode(), startdate, createtime); } } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java index 03d245f8b..358747bbe 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java @@ -1,7 +1,7 @@ package com.iformall.schedule; import com.alibaba.fastjson.JSONArray; -import com.iformall.domain.po.WxMsg; +import com.iformall.domain.po.msg.WxMsg; import com.iformall.enums.*; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgMapper; diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java index 1692671e1..c54cf27c8 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java @@ -19,6 +19,9 @@ public class WeChatAccessTokenSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private boolean isFmOpen; + @Autowired WxAppinfoMapper wxAppinfoMapper; @@ -27,12 +30,14 @@ public class WeChatAccessTokenSchedule { public void getAccessTokens() { logger.info("微信访问AccessToken获取定时任务启动"); + if(!isFmOpen) { - WxAppinfo appinfoQ = new WxAppinfo(); - List appList = wxAppinfoMapper.findList(appinfoQ); + WxAppinfo appinfoQ = new WxAppinfo(); + List appList = wxAppinfoMapper.findList(appinfoQ); - for (WxAppinfo appinfo : appList) { - resetAccessToken(appinfo); + for (WxAppinfo appinfo : appList) { + resetAccessToken(appinfo); + } } logger.info("微信访问AccessToken获取定时任务结束"); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java index b7f6aa745..94c1db2f6 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java @@ -25,7 +25,7 @@ public class WiwideTokenSchedule { @Autowired private WxWiwideInfoMapper wxWiwideInfoMapper; - @Scheduled(cron = "0 0/30 * * * ?") + @Scheduled(cron = "0 0 * * * ?") public void requestToken() { List list = wxWiwideInfoMapper.findList(null); for (int i = 0, size = list.size(); i < size; i++) { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java index 7c4f1a442..a8bd3762a 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java @@ -5,6 +5,7 @@ import java.util.*; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitTrend; +import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.MaUtil; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; @@ -24,12 +25,18 @@ import com.iformall.service.WxUserVisitService; @Component public class WxAppVisitSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private boolean isFmOpen; - @Autowired - private WxUserVisitService wxUserVisitService; + @Autowired + private WxUserVisitService wxUserVisitService; - @Autowired - private WxAppinfoService WxAppinfoService; + @Autowired + private WxAppinfoService WxAppinfoService; + + @Autowired + private FmOpenService openService; @Scheduled(cron = "0 0 9 * * ? ") //早晨9点做一次,获取前一日,微信时间为GMT @@ -96,7 +103,12 @@ public class WxAppVisitSchedule { } private void getData(Date lastDate,WxAppinfo appInfo) throws Exception { - WxMaService wxMaService = MaUtil.getWeappService(appInfo); + WxMaService wxMaService = null; + if(isFmOpen) { + wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appInfo.getAppId()); + } else { + wxMaService = MaUtil.getWeappService(appInfo); + } try { List vtList = wxMaService.getAnalysisService().getDailyVisitTrend(lastDate, lastDate); logger.info(vtList.toString()); diff --git a/mallinkSchedule/src/main/resources/application-dev.yml b/mallinkSchedule/src/main/resources/application-dev.yml index fd0290da1..5601bf51d 100644 --- a/mallinkSchedule/src/main/resources/application-dev.yml +++ b/mallinkSchedule/src/main/resources/application-dev.yml @@ -60,6 +60,26 @@ aws: access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) +wechat: + open: + componentAppId: "wx897e4673286c915d" + componentSecret: "cdfdfda65c45689beb6766c4c427eed2" + componentToken: "formall2018" + componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 500 + max-wait: -1 + min-idle: 10 jasypt: encryptor: @@ -67,6 +87,8 @@ jasypt: fm: exception: false + deploy: 1 + open: true logging: level: diff --git a/mallinkSchedule/src/main/resources/application-prod.yml b/mallinkSchedule/src/main/resources/application-prod.yml index 65fa94c2b..4bec7fa2c 100644 --- a/mallinkSchedule/src/main/resources/application-prod.yml +++ b/mallinkSchedule/src/main/resources/application-prod.yml @@ -66,10 +66,31 @@ aws: access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) - +wechat: + open: + componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) + componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) + componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) + componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 fm: exception: true + deploy: 3 + open: true logging: level: diff --git a/mallinkSchedule/src/main/resources/application-test.yml b/mallinkSchedule/src/main/resources/application-test.yml index 4965fb3df..4b3f13e67 100644 --- a/mallinkSchedule/src/main/resources/application-test.yml +++ b/mallinkSchedule/src/main/resources/application-test.yml @@ -66,8 +66,31 @@ aws: access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) +wechat: + open: + componentAppId: ENC(hnH31XdNzArfMfikKgBFpqQuJUl6rVOPFFcAVyb595o=) + componentSecret: ENC(t/GUVX5L+U7LCwSvZ5WmxAnmTMrc/Uy1nljsrokuzzsBL2j6BEVnrS/n7DCdGc/G) + componentToken: ENC(gUF1m0YgCCI2IY54fX6sGLZVlCswA8tG) + componentAesKey: ENC(TYHcrIkICtfrCfGq4HW6s1b/pHf7OD2uyPN11SzJNB0acqJ/4JVX1nuljo/cAtgMG4O05TImLQc=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + fm: exception: true + deploy: 2 + open: true logging: level: diff --git a/mallinkService/pom.xml b/mallinkService/pom.xml index 5d4801bf5..0ebc4d9a5 100644 --- a/mallinkService/pom.xml +++ b/mallinkService/pom.xml @@ -20,6 +20,11 @@ compile --> + + net.sf.dozer + dozer + 5.5.1 + \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index bf1b743bc..0fb751d3e 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -26,6 +26,7 @@ public enum ErrorCode{ SYS_NUMBER_FORMAT_ERROR(1011, "数字转化异常"), SYS_EXTEND_JSON_ERROR(1012, "JSON格式异常"), SYS_REPEAT_SUBMIT_EXCEPTION(1013, "请勿重复操作"), + REPORT_TYPE_UNKNOWN(1014, "不支持的报表类型"), /** * 数据库 @@ -185,8 +186,10 @@ public enum ErrorCode{ NICK_NAME_NOT_FOUND(11004, "nickName,unionId未授权"), PHONE_NOT_FOUND(11005, "Phone未授权"), PHONE_IS_ENCRYPTED(11006, "Phone已加密"), - TEMPLATE_SEND_FAILED(11007, "模板消息发送失败"), + TEMPLATE_SEND_FAILED(11007, "小程序模板消息发送失败"), WE_RUN_DATA_DECODE_ERR(11008, "运动信息解密失败"), + MP_TEMPLATE_SEND_FAILED(11009, "公众号模板消息发送失败"), + UNIFORM_SEND_FAILED(11010, "小程序统一消息发送失败"), /** @@ -247,6 +250,7 @@ public enum ErrorCode{ * 模板消息 */ TEMPLATE_NOT_FOUND(12090, "模板不存在"), + TEMPLATE_FORMID_NOT_FOUND(12091, "formId不存在"), /** * @@ -273,6 +277,11 @@ public enum ErrorCode{ */ MEM_IMPORT_ERR(13000, "模板导入失败,请检查数据,尝试重新导入"), MEM_SCORE_NOT_ENOUGH(13001, "成长值不够扣减值"), + CREDIT_ZERO(13100,"本次操作积分为零"), + CREDIT_NOT_ENOUGH(13101, "积分不够扣减值"), + USER_NOT_MEMBER(13102, "该用户不是小程序会员"), + OUT_OF_CREDIT(13103, "超出最大积分"), + /** * 标签 @@ -328,10 +337,18 @@ public enum ErrorCode{ * */ SHOP_IS_NOT_FOUND(22000,"商铺不存在"), SHOP_IS_RENT(22001,"商铺已出租"), + SHOP_NOT_SELECTED(22002, "未选择商铺"), + SHOP_BAN_DELETED(22003, "已出租的商铺无法删除"), + SHOP_DELETED_BY_ADMIN(22004, "仅超级管理员能删除该商铺"), + + /** + * 迈外迪 + */ WIWIDE_INFO_NOT_FOUND(23001,"迈外迪信息未找到"), WIWIDE_INFO_NOT_READY(23002,"迈外迪信息未就绪"), + /** * 审批流 */ @@ -370,6 +387,7 @@ public enum ErrorCode{ */ MSG_MODEL_NOT_FOUND(27000, "找不到短信模板"), MSG_CONFIG_NOT_FOUND(27001, "找不到短信配置"), + MSG_CONFIG_ACCOUNT(27002, "短信条数剩余不足"), /** * 拼团 @@ -379,6 +397,14 @@ public enum ErrorCode{ ORDER_GROUP_COOPERATING_ATTEND(28003, "您已参与拼团"), ORDER_GROUP_COOPERATING_UNPAID(28004, "您有未支付的拼团订单"), + + /** + * 导入导出 + */ + EXCEL_EXPORT_ERROR(29001, "Excel数据导出出错"), + EXCEL_IMPORT_ERROR(29002, "Excel数据导入出错"), + + TOPIC_EXIST_NAME(29100, "已存在投放的专题"), ; private int code; diff --git a/mallinkService/src/main/java/com/iformall/common/FmHttpClientBuilder.java b/mallinkService/src/main/java/com/iformall/common/FmHttpClientBuilder.java new file mode 100644 index 000000000..1ed1a3fc4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/common/FmHttpClientBuilder.java @@ -0,0 +1,338 @@ +package com.iformall.common; + +import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpHost; +import org.apache.http.NoHttpResponseException; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.config.SocketConfig; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.conn.DnsResolver; +import org.apache.http.conn.HttpClientConnectionManager; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.protocol.HttpContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * httpclient 连接管理器 自带DNS解析. + *

大部分代码拷贝自:DefaultApacheHttpClientBuilder

+ * + * @author Andy.Huo + */ +public class FmHttpClientBuilder implements ApacheHttpClientBuilder { + protected final Logger log = LoggerFactory.getLogger(FmHttpClientBuilder.class); + private final AtomicBoolean prepared = new AtomicBoolean(false); + private int connectionRequestTimeout = 3000; + private int connectionTimeout = 5000; + private int soTimeout = 5000; + private int idleConnTimeout = 60000; + private int checkWaitTime = 60000; + private int maxConnPerHost = 10; + private int maxTotalConn = 50; + private String userAgent; + + private DnsResolver dnsResover; + + private HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() { + @Override + public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { + if (executionCount > 3) { + log.warn("Maximum tries reached for client http pool "); + return false; + } + if (exception instanceof NoHttpResponseException) { // NoHttpResponseException 重试 + log.warn("NoHttpResponseException on " + executionCount + " call"); + return true; + } + if (exception instanceof ConnectTimeoutException) { // 连接超时重试 + log.warn("ConnectTimeoutException on " + executionCount + " call"); + return true; + } + //if (exception instanceof SocketTimeoutException) { //响应超时不重试,避免造成业务数据不一致 + // log.warn("SocketTimeoutException on " + executionCount + " call"); + //} + return false; + } + }; + private SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory(); + private PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory(); + private String httpProxyHost; + private int httpProxyPort; + private String httpProxyUsername; + private String httpProxyPassword; + + /** + * 闲置连接监控线程. + */ + private IdleConnectionMonitorThread idleConnectionMonitorThread; + private HttpClientBuilder httpClientBuilder; + + private FmHttpClientBuilder() { + } + + public static FmHttpClientBuilder get() { + return new FmHttpClientBuilder(); + } + + @Override + public ApacheHttpClientBuilder httpProxyHost(String httpProxyHost) { + this.httpProxyHost = httpProxyHost; + return this; + } + + @Override + public ApacheHttpClientBuilder httpProxyPort(int httpProxyPort) { + this.httpProxyPort = httpProxyPort; + return this; + } + + @Override + public ApacheHttpClientBuilder httpProxyUsername(String httpProxyUsername) { + this.httpProxyUsername = httpProxyUsername; + return this; + } + + @Override + public ApacheHttpClientBuilder httpProxyPassword(String httpProxyPassword) { + this.httpProxyPassword = httpProxyPassword; + return this; + } + + @Override + public ApacheHttpClientBuilder sslConnectionSocketFactory(SSLConnectionSocketFactory sslConnectionSocketFactory) { + this.sslConnectionSocketFactory = sslConnectionSocketFactory; + return this; + } + + /** + * 获取链接的超时时间设置,默认3000ms + *

+ * 设置为零时不超时,一直等待. 设置为负数是使用系统默认设置(非上述的3000ms的默认值,而是httpclient的默认设置). + *

+ * + * @param connectionRequestTimeout 获取链接的超时时间设置(单位毫秒),默认3000ms + */ + public void setConnectionRequestTimeout(int connectionRequestTimeout) { + this.connectionRequestTimeout = connectionRequestTimeout; + } + + /** + * 建立链接的超时时间,默认为5000ms.由于是在链接池获取链接,此设置应该并不起什么作用 + *

+ * 设置为零时不超时,一直等待. 设置为负数是使用系统默认设置(非上述的5000ms的默认值,而是httpclient的默认设置). + *

+ * + * @param connectionTimeout 建立链接的超时时间设置(单位毫秒),默认5000ms + */ + public void setConnectionTimeout(int connectionTimeout) { + this.connectionTimeout = connectionTimeout; + } + + /** + * 默认NIO的socket超时设置,默认5000ms. + * + * @param soTimeout 默认NIO的socket超时设置,默认5000ms. + * @see java.net.SocketOptions#SO_TIMEOUT + */ + public void setSoTimeout(int soTimeout) { + this.soTimeout = soTimeout; + } + + /** + * 空闲链接的超时时间,默认60000ms. + *

+ * 超时的链接将在下一次空闲链接检查是被销毁 + *

+ * + * @param idleConnTimeout 空闲链接的超时时间,默认60000ms. + */ + public void setIdleConnTimeout(int idleConnTimeout) { + this.idleConnTimeout = idleConnTimeout; + } + + /** + * 检查空间链接的间隔周期,默认60000ms. + * + * @param checkWaitTime 检查空间链接的间隔周期,默认60000ms. + */ + public void setCheckWaitTime(int checkWaitTime) { + this.checkWaitTime = checkWaitTime; + } + + /** + * 每路的最大链接数,默认10. + * + * @param maxConnPerHost 每路的最大链接数,默认10 + */ + public void setMaxConnPerHost(int maxConnPerHost) { + this.maxConnPerHost = maxConnPerHost; + } + + /** + * 最大总连接数,默认50. + * + * @param maxTotalConn 最大总连接数,默认50 + */ + public void setMaxTotalConn(int maxTotalConn) { + this.maxTotalConn = maxTotalConn; + } + + /** + * 自定义httpclient的User Agent. + * + * @param userAgent User Agent + */ + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } + + public IdleConnectionMonitorThread getIdleConnectionMonitorThread() { + return this.idleConnectionMonitorThread; + } + + private synchronized void prepare() { + if (prepared.get()) { + return; + } + + Registry registry = + RegistryBuilder.create() + .register("http", this.plainConnectionSocketFactory) + .register("https", this.sslConnectionSocketFactory) + .build(); + + @SuppressWarnings("resource") + PoolingHttpClientConnectionManager connectionManager; + if (dnsResover != null) { + if (log.isDebugEnabled()) { + log.debug("specified dns resolver."); + } + connectionManager = new PoolingHttpClientConnectionManager(registry, dnsResover); + } else { + if (log.isDebugEnabled()) { + log.debug("Not specified dns resolver."); + } + connectionManager = new PoolingHttpClientConnectionManager(registry); + } + + connectionManager.setMaxTotal(this.maxTotalConn); + connectionManager.setDefaultMaxPerRoute(this.maxConnPerHost); + connectionManager + .setDefaultSocketConfig(SocketConfig.copy(SocketConfig.DEFAULT).setSoTimeout(this.soTimeout).build()); + + this.idleConnectionMonitorThread = new IdleConnectionMonitorThread( + connectionManager, this.idleConnTimeout, this.checkWaitTime); + this.idleConnectionMonitorThread.setDaemon(true); + this.idleConnectionMonitorThread.start(); + + this.httpClientBuilder = HttpClients.custom().setConnectionManager(connectionManager) + .setConnectionManagerShared(true) + .setDefaultRequestConfig( + RequestConfig.custom() + .setSocketTimeout(this.soTimeout) + .setConnectTimeout(this.connectionTimeout) + .setConnectionRequestTimeout(this.connectionRequestTimeout) + .build()) + .setRetryHandler(this.httpRequestRetryHandler); + + if (StringUtils.isNotBlank(this.httpProxyHost) && StringUtils.isNotBlank(this.httpProxyUsername)) { + // 使用代理服务器 需要用户认证的代理服务器 + CredentialsProvider provider = new BasicCredentialsProvider(); + provider.setCredentials(new AuthScope(this.httpProxyHost, this.httpProxyPort), + new UsernamePasswordCredentials(this.httpProxyUsername, this.httpProxyPassword)); + this.httpClientBuilder.setDefaultCredentialsProvider(provider); + this.httpClientBuilder.setProxy(new HttpHost(this.httpProxyHost, this.httpProxyPort)); + } + + if (StringUtils.isNotBlank(this.userAgent)) { + this.httpClientBuilder.setUserAgent(this.userAgent); + } + prepared.set(true); + } + + @Override + public CloseableHttpClient build() { + if (!prepared.get()) { + prepare(); + } + return this.httpClientBuilder.build(); + } + + public DnsResolver getDnsResover() { + return dnsResover; + } + + public void setDnsResover(DnsResolver dnsResover) { + this.dnsResover = dnsResover; + } + + public static class IdleConnectionMonitorThread extends Thread { + private final HttpClientConnectionManager connMgr; + private final int idleConnTimeout; + private final int checkWaitTime; + private volatile boolean shutdown; + + /** + * 构造方法. + */ + public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr, int idleConnTimeout, int checkWaitTime) { + super("IdleConnectionMonitorThread"); + this.connMgr = connMgr; + this.idleConnTimeout = idleConnTimeout; + this.checkWaitTime = checkWaitTime; + } + + @Override + public void run() { + try { + while (!this.shutdown) { + synchronized (this) { + wait(this.checkWaitTime); + this.connMgr.closeExpiredConnections(); + this.connMgr.closeIdleConnections(this.idleConnTimeout, TimeUnit.MILLISECONDS); + } + } + } catch (InterruptedException ignore) { + Thread.currentThread().interrupt(); + } + } + + /** + * 触发. + */ + public void trigger() { + synchronized (this) { + notifyAll(); + } + } + + /** + * 关闭. + */ + public void shutdown() { + this.shutdown = true; + synchronized (this) { + notifyAll(); + } + } + } + +} diff --git a/mallinkService/src/main/java/com/iformall/config/WechatOpenProperties.java b/mallinkService/src/main/java/com/iformall/config/WechatOpenProperties.java new file mode 100644 index 000000000..e19dfc4eb --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/config/WechatOpenProperties.java @@ -0,0 +1,69 @@ +package com.iformall.config; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Stormeye + */ +@ConfigurationProperties(prefix = "wechat.open") +public class WechatOpenProperties { + /** + * 设置微信三方平台的appid + */ + private String componentAppId; + + /** + * 设置微信三方平台的app secret + */ + private String componentSecret; + + /** + * 设置微信三方平台的token + */ + private String componentToken; + + /** + * 设置微信三方平台的EncodingAESKey + */ + private String componentAesKey; + + public String getComponentAppId() { + return componentAppId; + } + + public void setComponentAppId(String componentAppId) { + this.componentAppId = componentAppId; + } + + public String getComponentSecret() { + return componentSecret; + } + + public void setComponentSecret(String componentSecret) { + this.componentSecret = componentSecret; + } + + public String getComponentToken() { + return componentToken; + } + + public void setComponentToken(String componentToken) { + this.componentToken = componentToken; + } + + public String getComponentAesKey() { + return componentAesKey; + } + + public void setComponentAesKey(String componentAesKey) { + this.componentAesKey = componentAesKey; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, + ToStringStyle.MULTI_LINE_STYLE); + } +} diff --git a/mallinkService/src/main/java/com/iformall/config/WechatRedisProperies.java b/mallinkService/src/main/java/com/iformall/config/WechatRedisProperies.java new file mode 100644 index 000000000..1a84a3482 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/config/WechatRedisProperies.java @@ -0,0 +1,124 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.Protocol; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLParameters; +import javax.net.ssl.SSLSocketFactory; + +/** + * Stormeye + */ +@ConfigurationProperties(prefix = "wechat.redis") +public class WechatRedisProperies extends JedisPoolConfig { + private String host = Protocol.DEFAULT_HOST; + private int port = Protocol.DEFAULT_PORT; + private String password; + private int database = 1; + private int connectionTimeout = Protocol.DEFAULT_TIMEOUT; + private int soTimeout = Protocol.DEFAULT_TIMEOUT; + private String clientName; + private boolean ssl; + private SSLSocketFactory sslSocketFactory; + private SSLParameters sslParameters; + private HostnameVerifier hostnameVerifier; + + public boolean isSsl() { + return ssl; + } + + public void setSsl(boolean ssl) { + this.ssl = ssl; + } + + public SSLSocketFactory getSslSocketFactory() { + return sslSocketFactory; + } + + public void setSslSocketFactory(SSLSocketFactory sslSocketFactory) { + this.sslSocketFactory = sslSocketFactory; + } + + public SSLParameters getSslParameters() { + return sslParameters; + } + + public void setSslParameters(SSLParameters sslParameters) { + this.sslParameters = sslParameters; + } + + public HostnameVerifier getHostnameVerifier() { + return hostnameVerifier; + } + + public void setHostnameVerifier(HostnameVerifier hostnameVerifier) { + this.hostnameVerifier = hostnameVerifier; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + if (host == null || "".equals(host)) { + host = Protocol.DEFAULT_HOST; + } + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + if ("".equals(password)) { + password = null; + } + this.password = password; + } + + public int getDatabase() { + return database; + } + + public void setDatabase(int database) { + this.database = database; + } + + public String getClientName() { + return clientName; + } + + public void setClientName(String clientName) { + if ("".equals(clientName)) { + clientName = null; + } + this.clientName = clientName; + } + + public int getConnectionTimeout() { + return connectionTimeout; + } + + public void setConnectionTimeout(int connectionTimeout) { + this.connectionTimeout = connectionTimeout; + } + + public int getSoTimeout() { + return soTimeout; + } + + public void setSoTimeout(int soTimeout) { + this.soTimeout = soTimeout; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java index 903032bd2..668a21175 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java @@ -2,6 +2,7 @@ package com.iformall.domain.dto; import java.io.Serializable; import java.util.Date; +import java.util.List; import javax.persistence.Id; import javax.persistence.Transient; @@ -45,12 +46,27 @@ public class WxCUserBasicInfoDto implements Serializable{ @Transient private Integer levelStartScore; + @Transient private Integer levelEndScore; @Transient private Integer sex; + @Transient + List tagIds; + + + @Transient + private String phones; + + + @Transient + protected String sortColumns; + + @Transient + protected List filterList; + public Long getId() { return id; } @@ -140,5 +156,36 @@ public class WxCUserBasicInfoDto implements Serializable{ public void setLevelStartScore(Integer levelStartScore) { this.levelStartScore = levelStartScore; } - + + public List getTagIds() { + return tagIds; + } + + public void setTagIds(List tagIds) { + this.tagIds = tagIds; + } + + public String getPhones() { + return phones; + } + + public void setPhones(String phones) { + this.phones = phones; + } + + public String getSortColumns() { + return sortColumns; + } + + public void setSortColumns(String sortColumns) { + this.sortColumns = sortColumns; + } + + public List getFilterList() { + return filterList; + } + + public void setFilterList(List filterList) { + this.filterList = filterList; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoFilterDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoFilterDto.java new file mode 100644 index 000000000..3e37e6048 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoFilterDto.java @@ -0,0 +1,48 @@ +package com.iformall.domain.dto; + +import javax.persistence.Id; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 用户查询dto + * @author jinguo + * + */ +public class WxCUserBasicInfoFilterDto implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -1116465873573690766L; + + Long typeId; + Long id; + String param; + + public Long getTypeId() { + return typeId; + } + + public void setTypeId(Long typeId) { + this.typeId = typeId; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getParam() { + return param; + } + + public void setParam(String param) { + this.param = param; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoFilterListDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoFilterListDto.java new file mode 100644 index 000000000..db89ff99d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoFilterListDto.java @@ -0,0 +1,36 @@ +package com.iformall.domain.dto; + +import java.io.Serializable; +import java.util.List; + +/** + * 用户查询dto + * @author jinguo + * + */ +public class WxCUserBasicInfoFilterListDto implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -1116465873573690766L; + + String name; + List tagList; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getTagList() { + return tagList; + } + + public void setTagList(List tagList) { + this.tagList = tagList; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxCouponMerchantDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxCouponMerchantDto.java new file mode 100644 index 000000000..7c86cd9f2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCouponMerchantDto.java @@ -0,0 +1,45 @@ +package com.iformall.domain.dto; + +import java.io.Serializable; + + + +public class WxCouponMerchantDto implements Serializable { + private static final long serialVersionUID = 1L; + Long merchantId; + String parameter; + Integer business; + Integer subBusiness; + + public Long getMerchantId() { + return merchantId; + } + + public void setMerchantId(Long merchantId) { + this.merchantId = merchantId; + } + + public String getParameter() { + return parameter; + } + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + public Integer getBusiness() { + return business; + } + + public void setBusiness(Integer business) { + this.business = business; + } + + public Integer getSubBusiness() { + return subBusiness; + } + + public void setSubBusiness(Integer subBusiness) { + this.subBusiness = subBusiness; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxCreditHistoryDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxCreditHistoryDto.java new file mode 100644 index 000000000..9a2c7746a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCreditHistoryDto.java @@ -0,0 +1,4 @@ +package com.iformall.domain.dto; + +public class WxCreditHistoryDto { +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/BaseMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/BaseMsg.java deleted file mode 100644 index cfef7c793..000000000 --- a/mallinkService/src/main/java/com/iformall/domain/po/BaseMsg.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.iformall.domain.po; - -import javax.persistence.Transient; -import java.io.Serializable; - -/** - * @author luozukai - * @date 2019/3/7 10:05 - */ -public class BaseMsg implements Serializable { - private static final long serialVersionUID = 923764283764823L; - //租户id - private String tenantId; - - //唯一标识 - @Transient - private String uuid; - - //接收人,手机号邮件地址等 - @Transient - private String receiver; - - //消息类型 1短信 2回调短信 3邮件 4微信小程序模板 5微信公众号模板 6系统通知 - @Transient - private Integer msgType; - - //消息状态 0默认1发送成功2消费成功3消费失败 - @Transient - private Integer msgStatus; - - //结果信息 - @Transient - private String statusMessage; - - //rocketMQ延迟消息1s,5s,10s,30s,1m,2m,3m,4m,5m,6m,7m,8m,9m,10m,20m,30m,1h,2h - @Transient - private Integer delayTimeLevel = 0; - - - public String getTenantId() { - return tenantId; - } - - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - - public String getReceiver() { - return receiver; - } - - public void setReceiver(String receiver) { - this.receiver = receiver; - } - - public Integer getDelayTimeLevel() { - return delayTimeLevel; - } - - public void setDelayTimeLevel(Integer delayTimeLevel) { - this.delayTimeLevel = delayTimeLevel; - } - - public String getStatusMessage() { - return statusMessage; - } - - public void setStatusMessage(String statusMessage) { - this.statusMessage = statusMessage; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public Integer getMsgStatus() { - return msgStatus; - } - - public void setMsgStatus(Integer msgStatus) { - this.msgStatus = msgStatus; - } - - public Integer getMsgType() { - return msgType; - } - - public void setMsgType(Integer msgType) { - this.msgType = msgType; - } -} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MailMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/MailMsg.java deleted file mode 100644 index b3de76d13..000000000 --- a/mallinkService/src/main/java/com/iformall/domain/po/MailMsg.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.iformall.domain.po; - -import java.util.Map; - -/** - * @author luozukai - * @date 2019/3/7 10:05 - */ -public class MailMsg extends BaseMsg { - private static final long serialVersionUID = 923764283760321L; - // 模板id - private Integer modelId; - private String[] to; - private String from; - private String msg; - - //标题 - private String subject; - //是否html格式 - private boolean isHtml; - //附件 - private String filePath; - //嵌入静态资源 - private String rscPath; - private String rscI; - - //动态替换内容 - private Map dynamicContentMap; - - public Map getDynamicContentMap() { - return dynamicContentMap; - } - - public void setDynamicContentMap(Map dynamicContentMap) { - this.dynamicContentMap = dynamicContentMap; - } - - public Integer getModelId() { - return modelId; - } - - public void setModelId(Integer modelId) { - this.modelId = modelId; - } - - public String[] getTo() { - return to; - } - - public void setTo(String[] to) { - this.to = to; - } - - public String getFrom() { - return from; - } - - public void setFrom(String from) { - this.from = from; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public boolean isHtml() { - return isHtml; - } - - public void setHtml(boolean html) { - isHtml = html; - } - - public String getFilePath() { - return filePath; - } - - public void setFilePath(String filePath) { - this.filePath = filePath; - } - - public String getRscPath() { - return rscPath; - } - - public void setRscPath(String rscPath) { - this.rscPath = rscPath; - } - - public String getRscI() { - return rscI; - } - - public void setRscI(String rscI) { - this.rscI = rscI; - } -} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java index 33ab0c92e..d48cf6bb5 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java @@ -21,7 +21,7 @@ public class MallUserInfo implements Serializable { protected Long id; @Transient - protected List ids; + protected List ids; @Transient protected String sortColumns; @@ -37,13 +37,6 @@ public class MallUserInfo implements Serializable { return sortColumns; } - public List getIds() { - return ids; - } - public void setIds(List ids) { - this.ids = ids; - } - /**租户ID**/ @@ -108,6 +101,17 @@ public class MallUserInfo implements Serializable { @io.swagger.annotations.ApiModelProperty(value="1合同审批 2账单审批",name="flowPermission") private String flowPermission; + @io.swagger.annotations.ApiModelProperty(value = "邮箱", name = "email") + private String email; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + public String getFlowPermission() { return flowPermission; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java deleted file mode 100644 index 411e5ffa8..000000000 --- a/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.iformall.domain.po; - -import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; -import java.util.List; - -/** - * 微信小程序消息 - * @author luozukai - * @date 2019/3/7 10:05 - */ -public class SmartAppMsg extends BaseMsg { - private static final long serialVersionUID = 223232132183760321L; - - //小程序的appId - private String appId; - private String to; - private String from; - private Integer templateType; - private String gotopage; - private String emphasisKeyword; - private List templateDataList; - - public String getAppId() { - return appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getEmphasisKeyword() { - return emphasisKeyword; - } - - public void setEmphasisKeyword(String emphasisKeyword) { - this.emphasisKeyword = emphasisKeyword; - } - - public String getGotopage() { - return gotopage; - } - - public void setGotopage(String gotopage) { - this.gotopage = gotopage; - } - - public String getTo() { - return to; - } - - public void setTo(String to) { - this.to = to; - } - - public String getFrom() { - return from; - } - - public void setFrom(String from) { - this.from = from; - } - - public Integer getTemplateType() { - return templateType; - } - - public void setTemplateType(Integer templateType) { - this.templateType = templateType; - } - - public List getTemplateDataList() { - return templateDataList; - } - - public void setTemplateDataList(List templateDataList) { - this.templateDataList = templateDataList; - } -} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java index dad1ab0bd..01a03e870 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java @@ -21,6 +21,10 @@ public class WxAuthorizerInfo implements Serializable { @Transient protected String sortColumns; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="1B端2C端",name="type") + private Integer type; @io.swagger.annotations.ApiModelProperty(value="授权方appid",name="authorizerAppid") private String authorizerAppid; @io.swagger.annotations.ApiModelProperty(value="授权方头像",name="headImg") @@ -63,12 +67,19 @@ public class WxAuthorizerInfo implements Serializable { private String openAppid; @io.swagger.annotations.ApiModelProperty(value="绑定开发平台时间",name="bindOpenTime") private Date bindOpenTime; + @io.swagger.annotations.ApiModelProperty(value="refresh_token",name="refreshToken") + private String refreshToken; + @io.swagger.annotations.ApiModelProperty(value="access_token",name="accessToken") + private String accessToken; + @io.swagger.annotations.ApiModelProperty(value="accessToken过期时间",name="accessTokenExpire") + private Date accessTokenExpire; public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") ,AuthorizerAppid_ASC("`authorizer_appid` ASC"),AuthorizerAppid_DESC("`authorizer_appid` DESC") ,HeadImg_ASC("`head_img` ASC"),HeadImg_DESC("`head_img` DESC") ,Alias_ASC("`alias` ASC"),Alias_DESC("`alias` DESC") @@ -90,6 +101,7 @@ public class WxAuthorizerInfo implements Serializable { ,ReleaseTime_ASC("`release_time` ASC"),ReleaseTime_DESC("`release_time` DESC") ,OpenAppId_ASC("`open_appid` ASC"),OpenAppId_DESC("`open_appid` DESC") ,BindOpenTime_ASC("`bind_open_time` ASC"),BindOpen_DESC("`bind_open_time` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") ; private String value; Field(String value){ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillAction.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillAction.java new file mode 100644 index 000000000..c856cd0e2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillAction.java @@ -0,0 +1,221 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author gongbiao + */ +@Table(name = "wx_bill_action") +public class WxBillAction implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSortColumns() { + return sortColumns; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value = "账单ID", name = "billId") + private Long billId; + + @io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "userId") + private Long userId; + + @io.swagger.annotations.ApiModelProperty(value = "用户名称", name = "userName") + private String userName; + + @io.swagger.annotations.ApiModelProperty(value = "手机号", name = "phone") + private String phone; + + @io.swagger.annotations.ApiModelProperty(value = "动作", name = "action") + private Integer action; + + @io.swagger.annotations.ApiModelProperty(value = "描述", name = "details") + private String details; + + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createtime") + private Date createtime; + + @io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updatetime") + private Date updatetime; + + @Transient + private Integer oldPrice; + + @Transient + private Integer newPrice; + + public Integer getOldPrice() { + return oldPrice; + } + + public void setOldPrice(Integer oldPrice) { + this.oldPrice = oldPrice; + } + + public Integer getNewPrice() { + return newPrice; + } + + public void setNewPrice(Integer newPrice) { + this.newPrice = newPrice; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public Long getBillId() { + return billId; + } + + public void setBillId(Long billId) { + this.billId = billId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Integer getAction() { + return action; + } + + public void setAction(Integer action) { + this.action = action; + } + + public String getDetails() { + return details; + } + + public void setDetails(String details) { + this.details = details; + } + + public Date getCreatetime() { + return createtime; + } + + public void setCreatetime(Date createtime) { + this.createtime = createtime; + } + + public Date getUpdatetime() { + return updatetime; + } + + public void setUpdatetime(Date updatetime) { + this.updatetime = updatetime; + } + + public static enum Field { + Id_ASC("`id` ASC"), Id_DESC("`id` DESC"); + private String value; + + Field(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setCol(String value) { + this.value = value; + } + + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxBillAction.Field... fields) { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java index 63329d737..a29898c5f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java @@ -108,6 +108,28 @@ public class WxBillDaily implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + @io.swagger.annotations.ApiModelProperty(value = "费用明细", name = "priceDetail") + private String priceDetail; + + public String getPriceDetail() { + return priceDetail; + } + + public void setPriceDetail(String priceDetail) { + this.priceDetail = priceDetail; + } + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + public Integer getReceivePay() { return receivePay; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java index 652d0ee9f..49f1937b2 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java @@ -104,6 +104,29 @@ public class WxBillDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "退还金额", name = "returnPrice") private Integer returnPrice; + @io.swagger.annotations.ApiModelProperty(value = "商铺信息", name = "shopInfo") + private String shopInfo; + + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + + public String getShopInfo() { + return shopInfo; + } + + public void setShopInfo(String shopInfo) { + this.shopInfo = shopInfo; + } + + public Date getStarttime() { return starttime; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java index 67d145637..24a602843 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java @@ -119,6 +119,17 @@ public class WxBillOther implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + public Integer getReceivePay() { return receivePay; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java index 1154fc19b..a1ede6d37 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java @@ -125,6 +125,17 @@ public class WxBillOtherDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "退还金额", name = "returnPrice") private Integer returnPrice; + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + public Integer getReceivePay() { return receivePay; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java index 6de3ee128..ef682723e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java @@ -119,6 +119,39 @@ public class WxBillProperty implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "预览账单0否1是", name = "isPreview") private Integer isPreview; + @io.swagger.annotations.ApiModelProperty(value = "商铺信息", name = "shopInfo") + private String shopInfo; + + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金状态", name = "latePayStatus") + private Integer latePayStatus; + + public Integer getLatePayStatus() { + return latePayStatus; + } + + public void setLatePayStatus(Integer latePayStatus) { + this.latePayStatus = latePayStatus; + } + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + + public String getShopInfo() { + return shopInfo; + } + + public void setShopInfo(String shopInfo) { + this.shopInfo = shopInfo; + } + public Integer getIsPreview() { return isPreview; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java index 5f0540a43..c9b4dd6ff 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java @@ -104,6 +104,28 @@ public class WxBillPropertyDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "退还金额", name = "returnPrice") private Integer returnPrice; + @io.swagger.annotations.ApiModelProperty(value = "商铺信息", name = "shopInfo") + private String shopInfo; + + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + + public String getShopInfo() { + return shopInfo; + } + + public void setShopInfo(String shopInfo) { + this.shopInfo = shopInfo; + } + public Date getStarttime() { return starttime; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java index 995a56f85..5042c9101 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java @@ -121,6 +121,40 @@ public class WxBillRent implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "预览账单0否1是", name = "isPreview") private Integer isPreview; + @io.swagger.annotations.ApiModelProperty(value = "商铺信息", name = "shopInfo") + private String shopInfo; + + @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") + private Integer payWay; + + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金状态", name = "latePayStatus") + private Integer latePayStatus; + + public Integer getLatePayStatus() { + return latePayStatus; + } + + public void setLatePayStatus(Integer latePayStatus) { + this.latePayStatus = latePayStatus; + } + + public Integer getPayWay() { + return payWay; + } + + public void setPayWay(Integer payWay) { + this.payWay = payWay; + } + + public String getShopInfo() { + return shopInfo; + } + + public void setShopInfo(String shopInfo) { + this.shopInfo = shopInfo; + } + public Integer getIsPreview() { return isPreview; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java index 052eca17c..73b29af35 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java @@ -3,13 +3,14 @@ package com.iformall.domain.po; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.iformall.utils.Constant; -import javax.persistence.*; -import java.util.*; -import java.math.*; -import javax.persistence.Transient; -import java.util.List; import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.UUID; @Table(name = "wx_c_user") @JsonIgnoreProperties(ignoreUnknown = true) @@ -135,6 +136,32 @@ public class WxCUser implements Serializable { @io.swagger.annotations.ApiModelProperty(value="是否关注公众号",name="isSubscribe") private Integer isSubscribe; + @io.swagger.annotations.ApiModelProperty(value="微信开放平台appId",name="openAppId") + private String openAppId; + @io.swagger.annotations.ApiModelProperty(value="服务号openId",name="mpOpenId") + private String mpOpenId; + @io.swagger.annotations.ApiModelProperty(value="服务号appId",name="mpAppId") + private String mpAppId; + @io.swagger.annotations.ApiModelProperty(value="是否关注服务号",name="mpSubscribe") + private Integer mpSubscribe; + @io.swagger.annotations.ApiModelProperty(value="关注服务号时间",name="mpSubscribeTime") + private Date mpSubscribeTime; + @io.swagger.annotations.ApiModelProperty(value="关注服务号Scene",name="mpSubscribeScene") + private String mpSubscribeScene; + @io.swagger.annotations.ApiModelProperty(value="订阅号openId",name="subsOpenId") + private String subsOpenId; + @io.swagger.annotations.ApiModelProperty(value="订阅号appId",name="subsAppId") + private String subsAppId; + @io.swagger.annotations.ApiModelProperty(value="是否关注订阅号",name="subsSubscribe") + private Integer subsSubscribe; + @io.swagger.annotations.ApiModelProperty(value="关注订阅号时间",name="subsSubscribeTime") + private Date subsSubscribeTime; + @io.swagger.annotations.ApiModelProperty(value="关注订阅号Scene",name="subsSubscribeScene") + private String subsSubscribeScene; + /**积分**/ + @io.swagger.annotations.ApiModelProperty(value="积分",name="credit") + private Integer credit; + //渠道名称 @Transient @@ -152,6 +179,29 @@ public class WxCUser implements Serializable { @Transient protected Date endDate; + /**操作人类型 枚举:EnumUserType*/ + @Transient + private Integer operatorType; + /**操作人ID*/ + @Transient + private Long operatorId; + + public Integer getOperatorType() { + return operatorType; + } + + public void setOperatorType(Integer operatorType) { + this.operatorType = operatorType; + } + + public Long getOperatorId() { + return operatorId; + } + + public void setOperatorId(Long operatorId) { + this.operatorId = operatorId; + } + public Date getStartDate() { return startDate; } @@ -377,6 +427,102 @@ public class WxCUser implements Serializable { this.isSubscribe = isSubscribe; } + public String getOpenAppId() { + return openAppId; + } + + public void setOpenAppId(String openAppId) { + this.openAppId = openAppId; + } + + public String getMpOpenId() { + return mpOpenId; + } + + public void setMpOpenId(String mpOpenId) { + this.mpOpenId = mpOpenId; + } + + public String getMpAppId() { + return mpAppId; + } + + public void setMpAppId(String mpAppId) { + this.mpAppId = mpAppId; + } + + public Integer getMpSubscribe() { + return mpSubscribe; + } + + public void setMpSubscribe(Integer mpSubscribe) { + this.mpSubscribe = mpSubscribe; + } + + public Date getMpSubscribeTime() { + return mpSubscribeTime; + } + + public void setMpSubscribeTime(Date mpSubscribeTime) { + this.mpSubscribeTime = mpSubscribeTime; + } + + public String getMpSubscribeScene() { + return mpSubscribeScene; + } + + public void setMpSubscribeScene(String mpSubscribeScene) { + this.mpSubscribeScene = mpSubscribeScene; + } + + public String getSubsOpenId() { + return subsOpenId; + } + + public void setSubsOpenId(String subsOpenId) { + this.subsOpenId = subsOpenId; + } + + public String getSubsAppId() { + return subsAppId; + } + + public void setSubsAppId(String subsAppId) { + this.subsAppId = subsAppId; + } + + public Integer getSubsSubscribe() { + return subsSubscribe; + } + + public void setSubsSubscribe(Integer subsSubscribe) { + this.subsSubscribe = subsSubscribe; + } + + public Date getSubsSubscribeTime() { + return subsSubscribeTime; + } + + public void setSubsSubscribeTime(Date subsSubscribeTime) { + this.subsSubscribeTime = subsSubscribeTime; + } + + public String getSubsSubscribeScene() { + return subsSubscribeScene; + } + + public void setSubsSubscribeScene(String subsSubscribeScene) { + this.subsSubscribeScene = subsSubscribeScene; + } + + public Integer getCredit() { + return credit; + } + + public void setCredit(Integer credit) { + this.credit = credit; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") @@ -409,7 +555,9 @@ public class WxCUser implements Serializable { ,LoginCount_ASC("`login_count` ASC"),LoginCount_DESC("`login_count` DESC") ,ExtraInfo_ASC("`extra_info` ASC"),ExtraInfo_DESC("`extra_info` DESC") ,IsSubscribe_ASC("`is_subscribe` ASC"),IsSubscribe_DESC("`is_subscribe` DESC") - ; + ,Credit_ASC("`credit` ASC"),Credit_DESC("`credit` DESC") + + ; private String value; Field(String value){ this.value = value; @@ -464,12 +612,12 @@ public class WxCUser implements Serializable { } public String createToken(Date currentDate) { - if (expireTime == null || expireTime.getTime() < currentDate.getTime()) + if (expireTime == null || expireTime.getTime() - Constant.H_EXPIRE < currentDate.getTime()) { //生成一个token this.token = UUID.randomUUID().toString(); //过期时间 - this.expireTime = new Date(currentDate.getTime() + Constant.EXPIRE * 1000); + this.expireTime = new Date(currentDate.getTime() + Constant.EXPIRE); } return this.token; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java index 1c0dc9a92..5367212a5 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -1,7 +1,6 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; -import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import javax.persistence.Id; @@ -11,6 +10,7 @@ import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Date; import java.util.List; +import java.util.Objects; @Table(name = "wx_c_user_basic_info") public class WxCUserBasicInfo implements Serializable { @@ -43,73 +43,90 @@ public class WxCUserBasicInfo implements Serializable { public void setIds(List ids) { this.ids = ids; } - + + /**用户姓名**/ + @Excel(name="姓名",width = 20,orderNum = "1") + @NotNull + @io.swagger.annotations.ApiModelProperty(value="用户姓名",name="name") + private String name; + /**性别:0:保密 1.男 2女**/ + @Excel(name="性别",width = 20,replace = { "保密_0", "男_1", "女_2"},orderNum = "2") + @NotNull + @io.swagger.annotations.ApiModelProperty(value="性别:0:保密 1.男 2女",name="sex") + private Integer sex; /**微信用户绑定的手机号**/ @Excel(name="手机号",width = 20,orderNum = "3") @io.swagger.annotations.ApiModelProperty(value="微信用户绑定的手机号",name="phone") @NotNull private String phone; - /**出生日期**/ - @Excel(name="生日",width = 20,format="yyyy-MM-dd",orderNum = "6") - @NotNull - @io.swagger.annotations.ApiModelProperty(value="出生日期",name="birthdate") - private Date birthdate; + /**用户昵称**/ + @Excel(name="微信昵称",width = 20,orderNum = "4") + @io.swagger.annotations.ApiModelProperty(value="用户昵称",name="nickName") + private String nickName; /**学历**/ @Excel(name="学历",width = 20,orderNum = "5") @NotNull @io.swagger.annotations.ApiModelProperty(value="学历",name="education") private String education; - /**性别:0:保密 1.男 2女**/ - @Excel(name="性别",width = 20,replace = { "保密_0", "男_1","女_2"},orderNum = "2") + /**出生日期**/ + @Excel(name="生日",width = 20,format="yyyy-MM-dd",orderNum = "6") @NotNull - @io.swagger.annotations.ApiModelProperty(value="性别:0:保密 1.男 2女",name="sex") - private Integer sex; - /**邮箱**/ - @io.swagger.annotations.ApiModelProperty(value="邮箱",name="email") - private String email; - /**地址**/ + @io.swagger.annotations.ApiModelProperty(value="出生日期",name="birthdate") + private Date birthdate; + @Excel(name="地址",width = 20,orderNum = "7") + @Transient + private String addressStr; + + /**更新时间**/ + @Excel(name="上次活跃时间",width = 20,format="yyyy-MM-dd", orderNum = "8") + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + /**创建时间**/ + @Excel(name="注册时间",width = 20,format="yyyy-MM-dd", orderNum = "9") + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + + /**成长值**/ + @Excel(name="成长值",width = 20, orderNum = "11") + @io.swagger.annotations.ApiModelProperty(value="成长值",name="poins") + private Integer poins; + + /**地址**/ @io.swagger.annotations.ApiModelProperty(value="地址",name="address") private String address; - /**积分**/ - @io.swagger.annotations.ApiModelProperty(value="积分",name="poins") - private Integer poins; + + /**邮箱**/ + @io.swagger.annotations.ApiModelProperty(value="邮箱",name="email") + private String email; + /**用户标签**/ @io.swagger.annotations.ApiModelProperty(value="用户标签",name="tagId") private Long tagId; - /**创建时间**/ - @Excel(name="注册时间",width = 20,format="yyyy-MM-dd", orderNum = "9") - @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") - private Date createDate; - /**更新时间**/ - @Excel(name="上次活跃时间",width = 20,format="yyyy-MM-dd", orderNum = "8") - @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") - private Date updateDate; + /**租户id**/ @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") private String tenantId; - /**用户姓名**/ - @Excel(name="姓名",width = 20,orderNum = "1") - @NotNull - @io.swagger.annotations.ApiModelProperty(value="用户姓名",name="name") - private String name; - /**会员等级**/ @io.swagger.annotations.ApiModelProperty(value="会员等级",name="level") private String level; - /**用户昵称**/ - @Excel(name="微信昵称",width = 20,orderNum = "4") - @io.swagger.annotations.ApiModelProperty(value="用户昵称",name="nickName") - private String nickName; + + /**积分**/ + @Excel(name="积分",width = 20, orderNum = "12") + @io.swagger.annotations.ApiModelProperty(value="积分",name="credit") + private Integer credit; @Transient - private String tagIds; - @Transient - @Excel(name="标签",width = 20,orderNum = "10") + @Excel(name="标签",width = 50,orderNum = "10") private String tagNames; + + @Transient + private String tagIds; + @Transient private List tagsList; @@ -121,11 +138,11 @@ public class WxCUserBasicInfo implements Serializable { @Transient private Date startTime; + @Transient private Date endTime; - @Transient - private String addressStr; + public String getLevel() { return level; @@ -291,6 +308,14 @@ public class WxCUserBasicInfo implements Serializable { this.carCount = carCount; } + public Integer getCredit() { + return credit; + } + + public void setCredit(Integer credit) { + this.credit = credit; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") @@ -306,7 +331,9 @@ public class WxCUserBasicInfo implements Serializable { ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") ,Name_ASC("`name` ASC"),Name_DESC("`name` DESC") - ; + ,Credit_ASC("`credit` ASC"),Credit_DESC("`credit` DESC") + + ; private String value; Field(String value){ this.value = value; @@ -359,4 +386,24 @@ public class WxCUserBasicInfo implements Serializable { this.setSortColumns(Field.valueOf(sortColumns)); } } + + @Override + public boolean equals(final Object obj) { + if (obj == null) { + return false; + } + final WxCUserBasicInfo user = (WxCUserBasicInfo) obj; + if (this == user) { + return true; + } else { + return (this.id.equals(user.id)); + } + } + + @Override + + public int hashCode() { + return Objects.hash(this.phone); + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCampaign.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCampaign.java index 3244bbc2a..e135aef2c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCampaign.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCampaign.java @@ -107,6 +107,14 @@ public class WxCampaign implements Serializable { @io.swagger.annotations.ApiModelProperty(value="富文本",name="html") private String html; + @Transient + @io.swagger.annotations.ApiModelProperty(value="小程序路径",name="weappPath") + protected String weappPath; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="小程序二维码Scene",name="weappScene") + protected String weappScene; + public String getTenantId() { return tenantId; } @@ -218,7 +226,19 @@ public class WxCampaign implements Serializable { this.html = html; } - public static enum Field + public String getWeappPath() { + if(type == null) + return "pages/index/index"; + return "pages/index/index?type=bd&bt="+type+"&id="+id; + } + + public String getWeappScene() { + if(type == null) + return ""; + return "t:bt:" + type + ":" +id; + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayRecord.java index cb0dda6bf..09b0f6dc9 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayRecord.java @@ -1,5 +1,7 @@ package com.iformall.domain.po; +import cn.afterturn.easypoi.excel.annotation.Excel; + import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; @@ -11,16 +13,28 @@ public class WxCarPayRecord implements Serializable { private static final long serialVersionUID = 1243232432423L; @Id private Long id; + + @Excel(name="车牌",width = 20,orderNum = "1") + private String plateNumber; + @Excel(name="车主电话",width = 20,orderNum = "2") + private String phone; + @Excel(name="进场时间",width = 20,orderNum = "3",format="yyyy-MM-dd HH:mm") + private Date entranceTime; + @Excel(name="出场时间",width = 20,orderNum = "4",format="yyyy-MM-dd HH:mm") + private Date exitTime; + @Excel(name="停车时长(分钟)",width = 20,orderNum = "5") + private Long stayedTime; + @Excel(name="缴费金额(元)",width = 20,orderNum = "6") + private String fee; + private String tenantId; private Integer vendorType; private String synId; private String parkId; private String parkName; private String userType; - private String plateNumber; - private Date entranceTime; - private Date exitTime; - private String fee; + + private Date feeTime; private String coupon; private String couponCode; @@ -28,10 +42,10 @@ public class WxCarPayRecord implements Serializable { private String remainingDays; private String discountAmount; private String paidServiceFee; - private String phone; + private Date createDate; private Date updateDate; - private Long stayedTime; + @Transient @io.swagger.annotations.ApiModelProperty(value="开始日期",name="startDate") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java index 18d912c9b..2d9555f50 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java @@ -1,7 +1,9 @@ package com.iformall.domain.po; +import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; import javax.persistence.*; +import java.math.BigDecimal; import java.util.*; import javax.persistence.Transient; import java.util.List; @@ -14,6 +16,7 @@ public class WxCardSpend implements Serializable { private static final long serialVersionUID = 1L; @Id + @Excel(name="交易编号",width = 20,orderNum = "1") protected Long id; @Transient @@ -62,6 +65,7 @@ public class WxCardSpend implements Serializable { private Integer cardBeforeRealAmount; /**创建时间*/ @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + @Excel(name="交易时间",width = 20,orderNum = "6",format="yyyy-MM-dd HH:mm") private Date createDate; /**更新时间*/ @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") @@ -69,11 +73,24 @@ public class WxCardSpend implements Serializable { /**支付状态*/ @io.swagger.annotations.ApiModelProperty(value="支付状态(0:未分帐, 1:已分账, 2:已人工分账)",name="payStatus") + @Excel(name="补贴状态",width = 20,orderNum = "10",replace = { "未支付_0", "已分账_1","已人工分账_2"}) private Integer payStatus; @Transient - protected List payStatusS; + @Excel(name="消费金额",width = 20,orderNum = "7") + private String deductionAmountStr; + + @Transient + @Excel(name="收款金额",width = 20,orderNum = "8") + private String paymentStr; + + @Transient + @Excel(name="收款实际金额",width = 20,orderNum = "9") + private String realPaymentStr; + + @Transient + protected List payStatusS; @Transient protected String payStatusStr; @@ -85,6 +102,39 @@ public class WxCardSpend implements Serializable { @io.swagger.annotations.ApiModelProperty(value="结束时间",name="enddate") private Date enddate; + public String getDeductionAmountStr() { + if(getDeductionAmount()!=null) { + deductionAmountStr = new BigDecimal(getDeductionAmount()).divide(new BigDecimal(100)).toString(); + } + return deductionAmountStr; + } + + public void setDeductionAmountStr(String deductionAmountStr) { + this.deductionAmountStr = deductionAmountStr; + } + + public String getPaymentStr() { + if(getPayment()!=null) { + paymentStr = new BigDecimal(getPayment()).divide(new BigDecimal(100)).toString(); + } + return paymentStr; + } + + public void setPaymentStr(String paymentStr) { + this.paymentStr = paymentStr; + } + + public String getRealPaymentStr() { + if(getRealPayment()!=null) { + realPaymentStr = new BigDecimal(getRealPayment()).divide(new BigDecimal(100)).toString(); + } + return realPaymentStr; + } + + public void setRealPaymentStr(String realPaymentStr) { + this.realPaymentStr = realPaymentStr; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java b/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java index f31a85f7f..2f470bc74 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java @@ -20,19 +20,19 @@ public class WxComponentVerifyTicket implements Serializable { protected List ids; @Transient protected String sortColumns; - - /**微信第三方componentAppid*/ + @io.swagger.annotations.ApiModelProperty(value="微信第三方componentAppid",name="componentAppid") private String componentAppid; - /**微信第三方component_verify_ticket*/ @io.swagger.annotations.ApiModelProperty(value="微信第三方component_verify_ticket",name="componentVerifyTicket") private String componentVerifyTicket; - /**创建时间*/ @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") private Date createTime; - /**失效时间*/ @io.swagger.annotations.ApiModelProperty(value="失效时间",name="deadline") private Date deadline; + @io.swagger.annotations.ApiModelProperty(value="access_token",name="accessToken") + private String accessToken; + @io.swagger.annotations.ApiModelProperty(value="access_token过期时间",name="accessTokenExpire") + private Date accessTokenExpire; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index cf4bb9204..e2df39f3f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -21,6 +21,9 @@ public class WxCoupon implements Serializable { @Transient protected List ids; + @Transient + protected List types; + @Transient protected List notinTypes; @Transient @@ -49,6 +52,13 @@ public class WxCoupon implements Serializable { this.ids = ids; } + public List getTypes() { + return types; + } + + public void setTypes(List types) { + this.types = types; + } @Transient private String salePriceStr; @@ -71,8 +81,8 @@ public class WxCoupon implements Serializable { /**租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; - /**券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,100.消费卡)**/ - @io.swagger.annotations.ApiModelProperty(value="券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,100.消费卡)",name="type") + /**券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,50.积分券,51.积分停车券,100.消费卡)**/ + @io.swagger.annotations.ApiModelProperty(value="券类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,50.积分券,51.积分停车券,100.消费卡)",name="type") private Integer type; /**封面图**/ @io.swagger.annotations.ApiModelProperty(value="封面图",name="coverImg") @@ -137,6 +147,9 @@ public class WxCoupon implements Serializable { /**业态**/ @io.swagger.annotations.ApiModelProperty(value="业态",name="business") private Integer business; + /**子业态**/ + @io.swagger.annotations.ApiModelProperty(value="子业态",name="subBusiness") + private Integer subBusiness; /**是否支持转送(0:不支持,1支持)**/ @io.swagger.annotations.ApiModelProperty(value="是否支持转送(0:不支持,1支持)",name="supportTransfer") private Integer supportTransfer; @@ -160,6 +173,14 @@ public class WxCoupon implements Serializable { @io.swagger.annotations.ApiModelProperty(value="砍价限制时间",name="pressLimitHours") private Integer pressLimitHours; + /**积分售价(适用于类型10,11)**/ + @io.swagger.annotations.ApiModelProperty(value="积分售价(适用于类型10,11)",name="creditPrice") + private Integer creditPrice; + + /**过期退积分(0:正常,1不退)**/ + @io.swagger.annotations.ApiModelProperty(value="过期退积分(0:正常,1不退)",name="autoRefund") + private Integer creditRefund; + @Transient private String merchantParams; @@ -320,6 +341,12 @@ public class WxCoupon implements Serializable { public void setBusiness(Integer _business) { business = _business; } + public Integer getSubBusiness() { + return subBusiness; + } + public void setSubBusiness(Integer _subBusiness) { + subBusiness = _subBusiness; + } public Integer getSupportTransfer() { return supportTransfer; @@ -454,6 +481,22 @@ public class WxCoupon implements Serializable { this.targetAd = targetAd; } + public Integer getCreditPrice() { + return creditPrice; + } + + public void setCreditPrice(Integer creditPrice) { + this.creditPrice = creditPrice; + } + + public Integer getCreditRefund() { + return creditRefund; + } + + public void setCreditRefund(Integer creditRefund) { + this.creditRefund = creditRefund; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java index d883f5ee0..6e81d324f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java @@ -1,5 +1,7 @@ package com.iformall.domain.po; +import com.iformall.enums.EnumCouponType; + import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; @@ -51,6 +53,7 @@ public class WxCouponChannel implements Serializable { @Transient protected List couponIds; + public List getCouponIds() { return couponIds; } @@ -58,7 +61,6 @@ public class WxCouponChannel implements Serializable { this.couponIds = couponIds; } - /*租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; @@ -78,6 +80,9 @@ public class WxCouponChannel implements Serializable { /***/ @io.swagger.annotations.ApiModelProperty(value="",name="business") private Integer business; + /**子业态**/ + @io.swagger.annotations.ApiModelProperty(value="子业态",name="subBusiness") + private Integer subBusiness; /*开始时间**/ @io.swagger.annotations.ApiModelProperty(value="开始时间",name="beginTime") private Date beginTime; @@ -87,16 +92,26 @@ public class WxCouponChannel implements Serializable { /*0:上架 1:下架**/ @io.swagger.annotations.ApiModelProperty(value="0:上架 1:下架",name="status") private Integer status; - /*创建时间**/ @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="子频道ID",name="subTargetId") private Long subTargetId; + @Transient + @io.swagger.annotations.ApiModelProperty(value = "小程序路径", name = "weaAppPath") + private String weaAppPath; + + @Transient + @io.swagger.annotations.ApiModelProperty(value = "小程序二维码scene", name = "weaAppScene") + private String weaAppScene; + + /**积分售价(适用于类型10,11)**/ + @Transient + @io.swagger.annotations.ApiModelProperty(value="积分售价(适用于类型10,11)",name="creditPrice") + private Integer creditPrice; + public String getTenantId() { return tenantId; @@ -134,6 +149,15 @@ public class WxCouponChannel implements Serializable { public void setBusiness(Integer _business) { business = _business; } + + public Integer getSubBusiness() { + return subBusiness; + } + + public void setSubBusiness(Integer subBusiness) { + this.subBusiness = subBusiness; + } + public Date getBeginTime() { return beginTime; } @@ -197,7 +221,35 @@ public class WxCouponChannel implements Serializable { this.supportTransfer = supportTransfer; } - public static enum Field + public Integer getCreditPrice() { + return creditPrice; + } + + public void setCreditPrice(Integer creditPrice) { + this.creditPrice = creditPrice; + } + + public String getWeaAppPath() { + if(type == null) + return "pages/index/index"; + if(!type.equals(EnumCouponType.COUPON_GROUP.getCode())) { + return "pages/index/index?type=cd&couponChannelId=" + id; + } else { + return "pages/index/index?type=sd&couponChannelId=" + id; + } + } + + public String getWeaAppScene() { + if(type == null) + return ""; + if(!type.equals(EnumCouponType.COUPON_GROUP.getCode())) { + return "t:cd:" + id; + } else { + return "t:sd:" + id; + } + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponInject.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponInject.java index 9da11bad3..58a706246 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponInject.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponInject.java @@ -1,5 +1,8 @@ package com.iformall.domain.po; +import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; +import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; + import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; @@ -36,6 +39,7 @@ public class WxCouponInject implements Serializable { @Transient protected Date sendTimeEnd; + public Long getId() { return id; } @@ -91,6 +95,7 @@ public class WxCouponInject implements Serializable { /*发送人群标签**/ @io.swagger.annotations.ApiModelProperty(value="发送人群标签",name="tags") private String tags; + @io.swagger.annotations.ApiModelProperty(value="",name="modelId") private Long modelId; /*创建时间**/ @@ -220,16 +225,26 @@ public class WxCouponInject implements Serializable { this.msgId = msgId; } - List tagsList; - public List getTagsList() { - return tagsList; - } - public void setTagsList(List tagsList) { - this.tagsList = tagsList; + @Transient + List filterList; + public List getFilterList() { + return filterList; } + public void setFilterList(List filterList) { + this.filterList = filterList; + } + + @Transient + protected String phones; + public String getPhones() { + return phones; + } + public void setPhones(String phones) { + this.phones = phones; + } public static enum Field { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java index b1f93eaed..9657efb3a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -90,7 +90,13 @@ public class WxCouponOrder implements Serializable { @Transient private String salePriceStr; @Transient - private Integer salePrice; + private Integer salePrice; + + @Transient + private Date startTime; + @Transient + private Date endTime; + public String getCouponPriceStr() { if(couponPrice!=null) { @@ -236,6 +242,22 @@ public class WxCouponOrder implements Serializable { this.autoRefund = autoRefund; } + public Date getStartTime() { + return startTime; + } + + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + public static enum Field { Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC"), diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java index 0153247fe..137ada341 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java @@ -1,11 +1,11 @@ package com.iformall.domain.po; -import javax.persistence.*; -import java.util.*; -import javax.persistence.Transient; -import java.util.List; import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; import java.io.Serializable; +import java.util.Date; +import java.util.List; @Table(name = "wx_coupon_send") public class WxCouponSend implements Serializable { @@ -73,6 +73,16 @@ public class WxCouponSend implements Serializable { @Transient protected int sendCount; + @io.swagger.annotations.ApiModelProperty(value = "1是0否", name = "是否发送短信1是0否") + private Integer sendSms; + + public Integer getSendSms() { + return sendSms; + } + + public void setSendSms(Integer sendSms) { + this.sendSms = sendSms; + } public String getTenantId() { return tenantId; @@ -145,7 +155,7 @@ public class WxCouponSend implements Serializable { ,SendType_ASC("`send_type` ASC"),SendType_DESC("`send_type` DESC") ,Status_ASC("`status` ASC"),Status_DESC("`status` DESC") ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") - ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC"), SendSms_ASC("`send_sms` ASC"), SendSms_DESC("`send_sms` DESC") ; private String value; Field(String value){ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java new file mode 100644 index 000000000..d1d54bf39 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java @@ -0,0 +1,158 @@ +package com.iformall.domain.po; + +import lombok.Data; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_credit_history") +@Data +public class WxCreditHistory implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="开始时间",name="startTime") + private Date startTime; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="结束时间",name="endTime") + private Date endTime; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="手机号",name="phone") + private String phone; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="姓名",name="name") + private String name; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="花费Str",name="spendStr") + private String spendStr; + + /**租户ID*/ + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + /**用户ID*/ + @io.swagger.annotations.ApiModelProperty(value="用户ID",name="cUserId") + private Long cUserId; + /**总积分*/ + @io.swagger.annotations.ApiModelProperty(value="总积分",name="creditAmount") + private Integer creditAmount; + /**每笔积分明细*/ + @io.swagger.annotations.ApiModelProperty(value="每笔积分明细",name="creditNum") + private Integer creditNum; + /**积分类型*/ + @io.swagger.annotations.ApiModelProperty(value="积分类型 1每日登录,2消费,3绑车牌,4连接WIFI,5微信用户昵称授权,6微信用户手机授权,7完善个人信息,8积分导入,10新增积分,11积分兑换,12消费积分 注:11积分兑换改为走订单接口",name="creditType") + private Integer creditType; + /**创建日期*/ + @io.swagger.annotations.ApiModelProperty(value="创建日期",name="createDate") + private Date createDate; + /**小票URL*/ + @io.swagger.annotations.ApiModelProperty(value="小票URL",name="receiptUrl") + private String receiptUrl; + /**操作人类型*/ + @io.swagger.annotations.ApiModelProperty(value="操作人类型 1:C端用户,2:A端会员,3:B端用户,4:A端用户",name="operatorType") + private Integer operatorType; + /**操作人ID*/ + @io.swagger.annotations.ApiModelProperty(value="操作人ID",name="operatorId") + private Long operatorId; + /**商户ID*/ + @io.swagger.annotations.ApiModelProperty(value="商户ID",name="merchantId") + private Long merchantId; + /**券ID(积分兑换券时生成)*/ + @io.swagger.annotations.ApiModelProperty(value="券ID(积分兑换券时生成)",name="couponId") + private Long couponId; + /**业态ID(计算新增积分时使用)*/ + @io.swagger.annotations.ApiModelProperty(value="业态ID(计算新增积分时使用)",name="businessId") + private Long businessId; + /**花费*/ + @io.swagger.annotations.ApiModelProperty(value="花费",name="spend") + private Integer spend; + /**兑换用途*/ + @io.swagger.annotations.ApiModelProperty(value="兑换用途",name="changePurpose") + private String changePurpose; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") + ,CUserId_ASC("`c_user_id` ASC"),CUserId_DESC("`c_user_id` DESC") + ,CreditAmount_ASC("`credit_amount` ASC"),CreditAmount_DESC("`credit_amount` DESC") + ,CreditNum_ASC("`credit_num` ASC"),CreditNum_DESC("`credit_num` DESC") + ,CreditType_ASC("`credit_type` ASC"),CreditType_DESC("`credit_type` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,ReceiptUrl_ASC("`receipt_url` ASC"),ReceiptUrl_DESC("`receipt_url` DESC") + ,OperatorType_ASC("`operator_type` ASC"),OperatorType_DESC("`operator_type` DESC") + ,OperatorId_ASC("`operator_id` ASC"),OperatorId_DESC("`operator_id` DESC") + ,MerchantId_ASC("`merchant_id` ASC"),MerchantId_DESC("`merchant_id` DESC") + ,CouponId_ASC("`coupon_id` ASC"),CouponId_DESC("`coupon_id` DESC") + ,BusinessId_ASC("`business_id` ASC"),BusinessId_DESC("`business_id` DESC") + ,Spend_ASC("`spend` ASC"),Spend_DESC("`spend` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java index be494c6ce..be3fd2d2a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java @@ -13,32 +13,67 @@ public class WxFlowRecord implements Serializable { @Id private Long id; + @io.swagger.annotations.ApiModelProperty(value="业务id",name="businessId") private Long businessId; //业务id + @io.swagger.annotations.ApiModelProperty(value="业务类型1合同审批2账单审批3合同终止",name="businessType") private Integer businessType;//业务类型 1合同审批2账单审批 + @io.swagger.annotations.ApiModelProperty(value="用户id",name="userId") private Long userId;//用户id + @io.swagger.annotations.ApiModelProperty(value="姓名",name="userName") private String userName;//姓名 + @io.swagger.annotations.ApiModelProperty(value="审批意见",name="remark") private String remark;//审批意见 + @io.swagger.annotations.ApiModelProperty(value="状态1发起申请2审批通过3审批驳回4待审批5合同作废6撤回",name="status") private Integer status;//状态 1新建2审批3驳回4审批通过 + @io.swagger.annotations.ApiModelProperty(value="任务id",name="taskId") private String taskId;//任务id + @io.swagger.annotations.ApiModelProperty(value="流程实例id",name="processInstanceId") private String processInstanceId;//流程实例id + //申请时间 + @io.swagger.annotations.ApiModelProperty(value="申请时间",name="startDate") + private Date startDate; + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; private String tenantId; private String taskKey; // key private String taskName;// 名称 + @io.swagger.annotations.ApiModelProperty(value="当前状态同apply_status0未审核1审核中2审核完成3驳回4合同作废5撤回",name="currStatus") private Integer currStatus;// 当前状态 + @io.swagger.annotations.ApiModelProperty(value="流程附加值",name="variables") private String variables;// 流程附加值 - private String contractType; private String contractNumber; private Integer endProperty; @Transient protected List ids; - //是否最后一个启动节点 @Transient private Integer isLastStart; + @Transient + private Integer limit; + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Integer getLimit() { + return limit; + } + + public void setLimit(Integer limit) { + this.limit = limit; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } public WxFlowRecord(){} public WxFlowRecord(Long businessId){ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java b/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java index f75860d99..2deb77beb 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java @@ -52,10 +52,7 @@ public class WxGame implements Serializable { */ @io.swagger.annotations.ApiModelProperty(value = "有效日期-结束", name = "validEndDate") private Date validEndDate; - /** - * 触发条件(-1:不受限制,1:登录触发) - */ - @io.swagger.annotations.ApiModelProperty(value = "触发条件(-1:不受限制,1:登录触发)", name = "triggleAction") + @io.swagger.annotations.ApiModelProperty(value = "触发条件(-1:不受限制,1:登录触发, 2:主页固定入口,3:购买触发,4:核销触发,5:公众号链接触发,6:二维码触发)", name = "triggleAction") private Integer triggleAction; /** * 玩次数限制 @@ -99,7 +96,13 @@ public class WxGame implements Serializable { @io.swagger.annotations.ApiModelProperty(value="游戏类型(1:卡牌),目前无用",name="type") private Integer type; + @Transient + @io.swagger.annotations.ApiModelProperty(value="小程序路径",name="weappPath") + private String weappPath; + @Transient + @io.swagger.annotations.ApiModelProperty(value="小程序二维码Scene",name="weappScene") + private String weappScene; public Long getId() { @@ -250,6 +253,18 @@ public class WxGame implements Serializable { this.type = type; } + public String getWeappPath() { + if (id == null) + return "pages/index/index"; + return "pages/index/index?type=gm&id="+id; + } + + public String getWeappScene() { + if(id == null) + return ""; + return "t:gm"+id; + } + public void setGameTemplate(WxGameTemplate gameTemplate) { if (gameTemplate != null) { this.imgUrl = gameTemplate.getImgUrl(); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java index 69ad6c904..be2cba662 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java @@ -87,6 +87,12 @@ public class WxMall implements Serializable { @io.swagger.annotations.ApiModelProperty(value="公众平台二维码",name="imgQrcodeWemp") private String imgQrcodeWemp; + @io.swagger.annotations.ApiModelProperty(value="分享标题",name="weappShareTitle") + private String weappShareTitle; + + @io.swagger.annotations.ApiModelProperty(value="分享封面图片",name="weappShareCoverImg") + private String weappShareCoverImg; + @io.swagger.annotations.ApiModelProperty(value="小程序提示",name="weapNote") private String weapNote; @@ -226,7 +232,23 @@ public class WxMall implements Serializable { this.imgQrcodeWemp = imgQrcodeWemp; } - public static enum Field + public String getWeappShareTitle() { + return weappShareTitle; + } + + public void setWeappShareTitle(String weappShareTitle) { + this.weappShareTitle = weappShareTitle; + } + + public String getWeappShareCoverImg() { + return weappShareCoverImg; + } + + public void setWeappShareCoverImg(String weappShareCoverImg) { + this.weappShareCoverImg = weappShareCoverImg; + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 247d16b01..c7d1f0a95 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -97,6 +97,9 @@ public class WxMerchant implements Serializable { @Transient private List levelConfigList; + @Transient + private Integer rentShopType; + /*租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; @@ -131,6 +134,9 @@ public class WxMerchant implements Serializable { @io.swagger.annotations.ApiModelProperty(value="经营业态ID:参照wx_business表",name="businessId") private Integer businessId; + @io.swagger.annotations.ApiModelProperty(value="子业态",name="subBusinessId") + private Integer subBusinessId; + @io.swagger.annotations.ApiModelProperty(value="店铺类型:1直营店2加盟店3个体店4旗舰店",name="shopType") private Integer shopType; @@ -143,6 +149,62 @@ public class WxMerchant implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "是否显示在C端", name = "isPublic") private Integer isPublic; + @io.swagger.annotations.ApiModelProperty(value = "邮件", name = "email") + private String email; + + @io.swagger.annotations.ApiModelProperty(value = "副标题", name = "title") + private String title; + + @io.swagger.annotations.ApiModelProperty(value = "封面图", name = "coverPicture") + private String coverPicture; + + /*商户状态**/ + @io.swagger.annotations.ApiModelProperty(value="是否为商管商户 1是 0否",name="status") + private Integer isAdmin; + + @io.swagger.annotations.ApiModelProperty(value = "待缴提醒", name = "billSetting") + private Integer billSetting; + + public Integer getBillSetting() { + return billSetting; + } + + public void setBillSetting(Integer billSetting) { + this.billSetting = billSetting; + } + + public Integer getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(Integer isAdmin) { + this.isAdmin = isAdmin; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCoverPicture() { + return coverPicture; + } + + public void setCoverPicture(String coverPicture) { + this.coverPicture = coverPicture; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + public List getLevelConfigList() { return levelConfigList; } @@ -331,6 +393,14 @@ public class WxMerchant implements Serializable { this.businessId = businessId; } + public Integer getSubBusinessId() { + return subBusinessId; + } + + public void setSubBusinessId(Integer subBusinessId) { + this.subBusinessId = subBusinessId; + } + public Integer getShopType() { return shopType; } @@ -388,6 +458,14 @@ public class WxMerchant implements Serializable { this.isPublic = isPublic; } + public Integer getRentShopType() { + return rentShopType; + } + + public void setRentShopType(Integer rentShopType) { + this.rentShopType = rentShopType; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantBUser.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantBUser.java index 4ff334779..c03ada1a2 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantBUser.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantBUser.java @@ -235,14 +235,15 @@ public class WxMerchantBUser implements Serializable { } } - public void createToken(Date currentDate) { - if (expireTime == null || expireTime.getTime() < currentDate.getTime()) { - //生成一个token + public String createToken(Date currentDate) { + if (expireTime == null || expireTime.getTime() - Constant.H_EXPIRE < currentDate.getTime()) { + //提前一小时, 新生成一个token String token = UUID.randomUUID().toString(); //过期时间 - Date expireTime = new Date(currentDate.getTime() + Constant.EXPIRE * 1000); + Date expireTime = new Date(currentDate.getTime() + Constant.EXPIRE); setToken(token); setExpireTime(expireTime); } + return this.token; } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java index 62e171f90..759685ec8 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java @@ -1,7 +1,9 @@ package com.iformall.domain.po; +import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; import javax.persistence.*; +import java.math.BigDecimal; import java.util.*; import javax.persistence.Transient; import java.util.List; @@ -12,7 +14,8 @@ import java.io.Serializable; @Data public class WxMerchantSubsidy implements Serializable { private static final long serialVersionUID = 1L; - + + @Id protected Long id; @@ -28,12 +31,16 @@ public class WxMerchantSubsidy implements Serializable { /**租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; + /**订单ID*/ + @Excel(name="交易单号",width = 20,orderNum = "1") @io.swagger.annotations.ApiModelProperty(value="订单ID",name="orderId") private Long orderId; + /**订单支付类型(0:券1:付款码支付,2:C扫码支付,3,储值卡)*/ @io.swagger.annotations.ApiModelProperty(value="订单支付类型(0:券1:付款码支付,2:C扫码支付,3,储值卡)",name="orderType") private Integer orderType; + /**商户ID*/ @io.swagger.annotations.ApiModelProperty(value="商户ID",name="merchantId") private Long merchantId; @@ -43,25 +50,39 @@ public class WxMerchantSubsidy implements Serializable { /**券包类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,100.消费卡)*/ @io.swagger.annotations.ApiModelProperty(value="券包类型(1.满减券,2.代金券,3.团购券,4.礼品券,5.停车券,6.多商户券,8.砍价券,9.团购券,100.消费卡)",name="couponType") private Integer couponType; + /**订单金额*/ @io.swagger.annotations.ApiModelProperty(value="订单金额",name="orderPayment") private Integer orderPayment; /**接收金额(包含通道费)*/ @io.swagger.annotations.ApiModelProperty(value="接收金额(包含通道费)",name="receiverPayment") private Integer receiverPayment; + + /**订单金额*/ + @Transient + @Excel(name="本次消费(元)",width = 20,orderNum = "4") + private String orderPaymentStr; + /**接收金额(包含通道费)*/ + @Transient + @Excel(name="商户应收(元)",width = 20,orderNum = "5") + private String receiverPaymentStr; + /** 实收金额(不包含通道费)*/ @io.swagger.annotations.ApiModelProperty(value=" 实收金额(不包含通道费)",name="realPayment") private Integer realPayment; /**补贴额(包含通道费)*/ + @Excel(name="补贴(元)",width = 20,orderNum = "6") @io.swagger.annotations.ApiModelProperty(value="补贴额(包含通道费)",name="subsidy") private Integer subsidy; /**线上补贴额/实收补贴额(通道费扣除)*/ @io.swagger.annotations.ApiModelProperty(value="线上补贴额/实收补贴额(通道费扣除)",name="realSubsidy") private Integer realSubsidy; /**状态(0:未补贴, 1:已自动补贴, 2:已手工补贴)*/ + @Excel(name="补贴状态",width = 20,orderNum = "7",replace = { "未补贴_0", "已自动补贴_1","已手工补贴_2"}) @io.swagger.annotations.ApiModelProperty(value="状态(0:未补贴, 1:已补贴, 2:已手工补贴)",name="status") private Integer status; /**创建时间*/ + @Excel(name="交易时间",width = 20,orderNum = "3",format="yyyy-MM-dd HH:mm") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; /**更新时间*/ @@ -80,6 +101,29 @@ public class WxMerchantSubsidy implements Serializable { @Transient protected String statusStr; + public String getOrderPaymentStr() { + + if(getOrderPayment()!=null) { + orderPaymentStr = new BigDecimal(getOrderPayment()).divide(new BigDecimal(100)).toString(); + } + return orderPaymentStr; + } + + public void setOrderPaymentStr(String orderPaymentStr) { + this.orderPaymentStr = orderPaymentStr; + } + + public String getReceiverPaymentStr() { + if(getReceiverPayment()!=null) { + receiverPaymentStr = new BigDecimal(getReceiverPayment()).divide(new BigDecimal(100)).toString(); + } + return receiverPaymentStr; + } + + public void setReceiverPaymentStr(String receiverPaymentStr) { + this.receiverPaymentStr = receiverPaymentStr; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java deleted file mode 100644 index 35b3a5ecf..000000000 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java +++ /dev/null @@ -1,340 +0,0 @@ -package com.iformall.domain.po; - -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Transient; -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -@Table(name = "wx_msg") -public class WxMsg extends BaseMsg { - private static final long serialVersionUID = 1L; - - @Id - protected Long id; - - @Transient - protected List ids; - @Transient - protected String sortColumns; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getSortColumns() { - return sortColumns; - } - - public List getIds() { - return ids; - } - - public void setIds(List ids) { - this.ids = ids; - } - - /*租户ID**/ - @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") - private String tenantId; - /*模板id**/ - @io.swagger.annotations.ApiModelProperty(value = "模板id", name = "modelId") - private Long modelId; - /*内容**/ - @io.swagger.annotations.ApiModelProperty(value = "内容", name = "msg") - private String msg; - /*发送时间**/ - @io.swagger.annotations.ApiModelProperty(value = "发送时间", name = "sendtime") - private String sendtime; - /*发送时间**/ - @io.swagger.annotations.ApiModelProperty(value = "发送时间", name = "createtime") - private Date createtime; - /*预计发送数量**/ - @io.swagger.annotations.ApiModelProperty(value = "预计发送数量", name = "expectSendNumber") - private Integer expectSendNumber; - /*成功数量**/ - @io.swagger.annotations.ApiModelProperty(value = "成功数量", name = "successNumber") - private Integer successNumber; - /*错误数量**/ - @io.swagger.annotations.ApiModelProperty(value = "错误数量", name = "errorNumber") - private Integer errorNumber; - /***/ - @io.swagger.annotations.ApiModelProperty(value = "", name = "returnResult") - private String returnResult; - /***/ - @io.swagger.annotations.ApiModelProperty(value = "", name = "phones") - private String phones; - /***/ - @io.swagger.annotations.ApiModelProperty(value = "", name = "signature") - private String signature; - /***/ - @io.swagger.annotations.ApiModelProperty(value = "", name = "isright") - private Integer isright; - /***/ - @io.swagger.annotations.ApiModelProperty(value = "", name = "name") - private String name; - /*发送状态0未发送 1已发送 2草稿箱**/ - @io.swagger.annotations.ApiModelProperty(value = "发送状态0失败1成功", name = "sendstatus") - private Integer sendstatus; - - @io.swagger.annotations.ApiModelProperty(value = "excelpath", name = "excelpath") - private String excelpath; - - @io.swagger.annotations.ApiModelProperty(value = "标签人群", name = "label") - private String label; - - @io.swagger.annotations.ApiModelProperty(value = "状态0未发送 1已发送 2草稿箱", name = "status") - private Integer status; - - @io.swagger.annotations.ApiModelProperty(value = "1标签短信2精准投放", name = "way") - private Integer way; - - @io.swagger.annotations.ApiModelProperty(value = "couponInjectId", name = "couponInjectId") - private Long couponInjectId; - - @Transient - List tagsList; - - //用于mq发送消息 - private WxMsgConfig wxMsgConfig; - private WxCouponInject couponInject; - - - public WxMsgConfig getWxMsgConfig() { - return wxMsgConfig; - } - - public void setWxMsgConfig(WxMsgConfig wxMsgConfig) { - this.wxMsgConfig = wxMsgConfig; - } - - public WxCouponInject getCouponInject() { - return couponInject; - } - - public void setCouponInject(WxCouponInject couponInject) { - this.couponInject = couponInject; - } - - public String getTenantId() { - return tenantId; - } - - public void setTenantId(String _tenantId) { - tenantId = _tenantId; - } - - public Long getModelId() { - return modelId; - } - - public void setModelId(Long _modelId) { - modelId = _modelId; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String _msg) { - msg = _msg; - } - - public String getSendtime() { - return sendtime; - } - - public void setSendtime(String _sendtime) { - sendtime = _sendtime; - } - - public Date getCreatetime() { - return createtime; - } - - public void setCreatetime(Date _createtime) { - createtime = _createtime; - } - - public Integer getExpectSendNumber() { - return expectSendNumber; - } - - public void setExpectSendNumber(Integer _expectSendNumber) { - expectSendNumber = _expectSendNumber; - } - - public Integer getSuccessNumber() { - return successNumber; - } - - public void setSuccessNumber(Integer _successNumber) { - successNumber = _successNumber; - } - - public Integer getErrorNumber() { - return errorNumber; - } - - public void setErrorNumber(Integer _errorNumber) { - errorNumber = _errorNumber; - } - - public String getReturnResult() { - return returnResult; - } - - public void setReturnResult(String _returnResult) { - returnResult = _returnResult; - } - - public String getPhones() { - return phones; - } - - public void setPhones(String _phones) { - phones = _phones; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String _signature) { - signature = _signature; - } - - public Integer getIsright() { - return isright; - } - - public void setIsright(Integer _isright) { - isright = _isright; - } - - public String getName() { - return name; - } - - public void setName(String _name) { - name = _name; - } - - public Integer getSendstatus() { - return sendstatus; - } - - public void setSendstatus(Integer _sendstatus) { - sendstatus = _sendstatus; - } - - public String getExcelpath() { - return excelpath; - } - - public void setExcelpath(String excelpath) { - this.excelpath = excelpath; - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public Integer getStatus() { - return status; - } - - public void setStatus(Integer status) { - this.status = status; - } - - public Integer getWay() { - return way; - } - - public void setWay(Integer way) { - this.way = way; - } - - public List getTagsList() { - return tagsList; - } - - public void setTagsList(List tagsList) { - this.tagsList = tagsList; - } - - public Long getCouponInjectId() { - return couponInjectId; - } - - public void setCouponInjectId(Long couponInjectId) { - this.couponInjectId = couponInjectId; - } - - public static enum Field { - Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC"), ModelId_ASC("`model_id` ASC"), ModelId_DESC("`model_id` DESC"), Msg_ASC("`msg` ASC"), Msg_DESC("`msg` DESC"), Sendtime_ASC("`sendtime` ASC"), Sendtime_DESC("`sendtime` DESC"), Createtime_ASC("`createtime` ASC"), Createtime_DESC("`createtime` DESC"), ExpectSendNumber_ASC("`expect_send_number` ASC"), ExpectSendNumber_DESC("`expect_send_number` DESC"), SuccessNumber_ASC("`success_number` ASC"), SuccessNumber_DESC("`success_number` DESC"), ErrorNumber_ASC("`error_number` ASC"), ErrorNumber_DESC("`error_number` DESC"), ReturnResult_ASC("`return_result` ASC"), ReturnResult_DESC("`return_result` DESC"), Phones_ASC("`phones` ASC"), Phones_DESC("`phones` DESC"), Signature_ASC("`signature` ASC"), Signature_DESC("`signature` DESC"), Isright_ASC("`isright` ASC"), Isright_DESC("`isright` DESC"), Name_ASC("`name` ASC"), Name_DESC("`name` DESC"), Sendstatus_ASC("`sendstatus` ASC"), Sendstatus_DESC("`sendstatus` DESC"); - private String value; - - Field(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setCol(String value) { - this.value = value; - } - - @Override - public String toString() { - return this.getValue(); - } - } - - public void setSortColumns(WxMsg.Field... fields) { - if (fields == null || fields.length == 0) { - return; - } - for (int k = 0; k < fields.length; k++) { - if (fields[k] == null) { - return; - } - } - StringBuilder sb = new StringBuilder(fields[0].toString()); - for (int k = 1; k < fields.length; k++) { - sb.append(","); - sb.append(fields[k].toString()); - } - - this.sortColumns = sb.toString(); - - } - - public void setSortColumns(String sortColumns) { - if (sortColumns == null || "".equals(sortColumns.trim())) { - return; - } - if (sortColumns.contains(",")) { - String[] cols = sortColumns.split(","); - java.util.List fList = new java.util.ArrayList(); - for (int k = 0; k < cols.length; k++) { - fList.add(Field.valueOf(cols[k])); - } - this.setSortColumns(fList.toArray(new Field[fList.size()])); - } else { - this.setSortColumns(Field.valueOf(sortColumns)); - } - } -} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java deleted file mode 100644 index 7c1467dff..000000000 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java +++ /dev/null @@ -1,211 +0,0 @@ -package com.iformall.domain.po; - -import javax.persistence.Id; -import javax.persistence.Table; -import java.util.Date; -import java.util.Map; - -@Table(name = "wx_msg_record") -public class WxMsgRecord extends BaseMsg { - private static final long serialVersionUID = 18957895653478L; - - @Id - protected Long id; - //租户id - private String tenantId; - //域1sys 2a端 3c端 4b端 - private Integer domain; - //msg 消息类型1短信 2回调短信 邮件 3微信小程序模板 4微信公众号模板 5系统通 - private String msg; - //发送时间 - private String sendTime; - //model_id - private Long modelId; - //from,手机号邮件地址等 - private String sender; - //发送人id - private Long senderUserId; - //发送人姓名 - private String senderUserName; - //接收人用户id - private Long receiverUserId; - //接收人姓名 - private String receiverUserName; - //签名 - private String signature; - //模板类型 - private Integer modelType; - //消息json - private String msgJson; - - private Date createtime; - private Date updatetime; - - private Integer msgStatus; - private String statusMessage; - - //动态替换内容 - private Map dynamicContentMap; - - @Override - public Integer getMsgStatus() { - return msgStatus; - } - - @Override - public void setMsgStatus(Integer msgStatus) { - this.msgStatus = msgStatus; - } - - @Override - public String getStatusMessage() { - return statusMessage; - } - - @Override - public void setStatusMessage(String statusMessage) { - this.statusMessage = statusMessage; - } - - public String getMsgJson() { - return msgJson; - } - - public void setMsgJson(String msgJson) { - this.msgJson = msgJson; - } - - public Map getDynamicContentMap() { - return dynamicContentMap; - } - - - public void setDynamicContentMap(Map dynamicContentMap) { - this.dynamicContentMap = dynamicContentMap; - } - - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Integer getDomain() { - return domain; - } - - public void setDomain(Integer domain) { - this.domain = domain; - } - - public String getSender() { - return sender; - } - - public void setSender(String sender) { - this.sender = sender; - } - - public Long getSenderUserId() { - return senderUserId; - } - - public void setSenderUserId(Long senderUserId) { - this.senderUserId = senderUserId; - } - - public String getSenderUserName() { - return senderUserName; - } - - public void setSenderUserName(String senderUserName) { - this.senderUserName = senderUserName; - } - - public Long getReceiverUserId() { - return receiverUserId; - } - - public void setReceiverUserId(Long receiverUserId) { - this.receiverUserId = receiverUserId; - } - - public String getReceiverUserName() { - return receiverUserName; - } - - public void setReceiverUserName(String receiverUserName) { - this.receiverUserName = receiverUserName; - } - - public Integer getModelType() { - return modelType; - } - - public void setModelType(Integer modelType) { - this.modelType = modelType; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; - } - - - public String getTenantId() { - return tenantId; - } - - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public String getSendTime() { - return sendTime; - } - - public void setSendTime(String sendTime) { - this.sendTime = sendTime; - } - - public Long getModelId() { - return modelId; - } - - public void setModelId(Long modelId) { - this.modelId = modelId; - } - - public Date getCreatetime() { - return createtime; - } - - public void setCreatetime(Date createtime) { - this.createtime = createtime; - } - - public Date getUpdatetime() { - return updatetime; - } - - public void setUpdatetime(Date updatetime) { - this.updatetime = updatetime; - } - - -} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java index 35f120bc3..6bf6c37a0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -48,65 +48,52 @@ public class WxOrder implements Serializable { @Transient private String phone; - /**订单码;正反向交易保持一致。**/ @io.swagger.annotations.ApiModelProperty(value="订单码;正反向交易保持一致。",name="orderNumber") private Long orderNumber; - /**租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; - /**c端用户id**/ @io.swagger.annotations.ApiModelProperty(value="c端用户id",name="cUserId") private Long cUserId; - /**渠道ID**/ @io.swagger.annotations.ApiModelProperty(value="渠道ID",name="couponChannelId") private Long couponChannelId; - /**产品ID,根据order type**/ @io.swagger.annotations.ApiModelProperty(value="产品ID(type-0:couponId, 1:buserId, 3:merchantId)",name="productId") private Long productId; - /**类型0:券,1:B刷卡支付,2:C扫码支付,3:储值卡**/ - @io.swagger.annotations.ApiModelProperty(value="类型",name="type") + @io.swagger.annotations.ApiModelProperty(value="类型(0:券,1:B刷卡支付,2:C扫码支付,3:储值卡)",name="type") private Integer type; - /**0: 付款 1: 退款**/ @io.swagger.annotations.ApiModelProperty(value="0: 付款 1: 退款",name="paymentType") private Integer paymentType; - /**支付金额(分):允许有负数,退款时为负值。**/ @io.swagger.annotations.ApiModelProperty(value="支付金额(分):允许有负数,退款时为负值。",name="payment") private Integer payment; - /**支付时间**/ @io.swagger.annotations.ApiModelProperty(value="支付时间",name="paymentTime") private Date paymentTime; - /**订单状态:-1全部;正向交易:0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款)反向交易:3-待退款;4-已退款,5-退款失败; 砍价:6-砍价中,7-砍价完成,8-砍价失败**/ @io.swagger.annotations.ApiModelProperty(value="订单状态:-1全部;正向交易:0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款)反向交易:3-已退款; 4-退款失败,5-退款失败; 砍价:6-砍价中,7-砍价完成,8-砍价失败",name="orderStatus") private Integer orderStatus; - /**创建时间/砍价开始时间**/ @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="detail") private String detail; - /**砍价结束时间**/ @io.swagger.annotations.ApiModelProperty(value="砍价结束时间",name="pressEndDate") private Date pressEndDate; - - /**砍价人数**/ @io.swagger.annotations.ApiModelProperty(value="砍价人数",name="pressCurrentNum") private Integer pressCurrentNum; - /**已砍价格**/ @io.swagger.annotations.ApiModelProperty(value="已砍价格",name="pressCurrentValue") private Integer pressCurrentValue; + @io.swagger.annotations.ApiModelProperty(value = "拼团ID", name = "orderGroupId") + private Long orderGroupId; + + @io.swagger.annotations.ApiModelProperty(value = "formId", name = "formId") + private String formId; + @Transient protected List statusS; @Transient protected String statusStr; - @io.swagger.annotations.ApiModelProperty(value = "拼团ID", name = "orderGroupId") - private Long orderGroupId; public Long getOrderNumber() { return orderNumber; @@ -275,7 +262,15 @@ public class WxOrder implements Serializable { this.orderGroupId = orderGroupId; } - public static enum Field + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,OrderNumber_ASC("`order_number` ASC"),OrderNumber_DESC("`order_number` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java index 7629bffe3..081096a89 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java @@ -90,7 +90,7 @@ public class WxPayAccount implements Serializable { this.subMchId = subMchId; } - public String getApiKey() { + public String getApiKey() { return apiKey; } public void setApiKey(String _apiKey) { @@ -111,9 +111,10 @@ public class WxPayAccount implements Serializable { public Integer getType() { return type; } - public void setType(Integer type) { - this.type = type; - } + + public void setType(Integer type) { + this.type = type; + } public Integer getShare() { return share; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccountBill.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccountBill.java index ad1998a5a..17fdb7fc6 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccountBill.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccountBill.java @@ -70,6 +70,12 @@ public class WxPayAccountBill implements Serializable { @io.swagger.annotations.ApiModelProperty(value="手续费",name="rate") private Integer rate; + @io.swagger.annotations.ApiModelProperty(value="接收账户名",name="bankAccountName") + private String bankAccountName; + /**证书本地存放位置**/ + @io.swagger.annotations.ApiModelProperty(value="接收银行卡号",name="bankCardId") + private String bankCardId; + public String getTenantId() { return tenantId; } @@ -132,7 +138,23 @@ public class WxPayAccountBill implements Serializable { this.rate = rate; } - public String getPayNotifyUrl() { + public String getBankAccountName() { + return bankAccountName; + } + + public void setBankAccountName(String bankAccountName) { + this.bankAccountName = bankAccountName; + } + + public String getBankCardId() { + return bankCardId; + } + + public void setBankCardId(String bankCardId) { + this.bankCardId = bankCardId; + } + + public String getPayNotifyUrl() { return notifyUrl + "/pay"; } public String getRefundNotifyUrl() { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java index 02f953189..be6a0fa62 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java @@ -175,6 +175,28 @@ public class WxPropertyContract implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "物业预账单列表", name = "previewBillRentList") private List previewBillRentList; + @io.swagger.annotations.ApiModelProperty(value = "租金信息", name = "rentInfo") + private String rentInfo; + + @io.swagger.annotations.ApiModelProperty(value = "上传文件名", name = "fileNames") + private String fileNames; + + public String getFileNames() { + return fileNames; + } + + public void setFileNames(String fileNames) { + this.fileNames = fileNames; + } + + public String getRentInfo() { + return rentInfo; + } + + public void setRentInfo(String rentInfo) { + this.rentInfo = rentInfo; + } + public String getAdjustRatio() { return adjustRatio; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java index 8888b8295..21f268798 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java @@ -59,6 +59,12 @@ public class WxRentContract implements Serializable { @Transient private String buildArea; + @Transient + private String priceStr; + + @Transient + private String depositStr; + public String getBuilding() { return building; } @@ -218,6 +224,20 @@ public class WxRentContract implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "物业合同预账单列表", name = "reviewBillPropertyPList") private List reviewBillPropertyPList; + @io.swagger.annotations.ApiModelProperty(value = "租金信息", name = "rentInfo") + private String rentInfo; + + @io.swagger.annotations.ApiModelProperty(value = "上传文件名", name = "fileNames") + private String fileNames; + + public String getRentInfo() { + return rentInfo; + } + + public void setRentInfo(String rentInfo) { + this.rentInfo = rentInfo; + } + public List getReviewBillPropertyPList() { return reviewBillPropertyPList; } @@ -570,6 +590,30 @@ public class WxRentContract implements Serializable { this.buildArea = buildArea; } + public String getFileNames() { + return fileNames; + } + + public void setFileNames(String fileNames) { + this.fileNames = fileNames; + } + + public String getPriceStr() { + return priceStr; + } + + public void setPriceStr(String priceStr) { + this.priceStr = priceStr; + } + + public String getDepositStr() { + return depositStr; + } + + public void setDepositStr(String depositStr) { + this.depositStr = depositStr; + } + public static enum Field { Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), MerchantId_ASC("`merchant_id` ASC"), MerchantId_DESC("`merchant_id` DESC"), Price_ASC("`price` ASC"), Price_DESC("`price` DESC"), RentalStartDate_ASC("`rental_start_date` ASC"), RentalStartDate_DESC("`rental_start_date` DESC"), RentalEndDate_ASC("`rental_end_date` ASC"), RentalEndDate_DESC("`rental_end_date` DESC"), SignDate_ASC("`sign_date` ASC"), SignDate_DESC("`sign_date` DESC"), ReceivePeriod_ASC("`receive_period` ASC"), ReceivePeriod_DESC("`receive_period` DESC"), TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC"), Filepath_ASC("`filepath` ASC"), Filepath_DESC("`filepath` DESC"), Status_ASC("`status` ASC"), Status_DESC("`status` DESC"), ContractNumber_ASC("`contract_number` ASC"), ContractNumber_DESC("`contract_number` DESC"), Deposit_ASC("`deposit` ASC"), Deposit_DESC("`deposit` DESC"), PayDate_ASC("`pay_date` ASC"), PayDate_DESC("`pay_date` DESC"), IsDel_ASC("`is_del` ASC"), IsDel_DESC("`is_del` DESC"), MerchantName_ASC("`merchant_name` ASC"), MerchantName_DESC("`merchant_name` DESC"), Brand_ASC("`brand` ASC"), Brand_DESC("`brand` DESC"), BusinessId_ASC("`business_id` ASC"), BusinessId_DESC("`business_id` DESC"), ShopType_ASC("`shop_type` ASC"), ShopType_DESC("`shop_type` DESC"), ShopId_ASC("`shop_id` ASC"), ShopId_DESC("`shop_id` DESC"), Updatetime_ASC("`updatetime` ASC"), Updatetime_DESC("`updatetime` DESC"), Createtime_ASC("`createtime` ASC"), Createtime_DESC("`createtime` DESC"); private String value; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java b/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java index d300ad929..f389840d7 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java @@ -2,6 +2,7 @@ package com.iformall.domain.po; import com.alibaba.fastjson.JSONObject; import com.iformall.enums.EnumScoreType; +import lombok.Data; import javax.persistence.*; import java.util.*; @@ -21,20 +22,24 @@ import java.io.Serializable; */ @Table(name = "wx_score_rules") +@Data public class WxScoreRules implements Serializable { private static final long serialVersionUID = 1L; @Transient - private static final String defaultRules = + private static final String scoreDefaultRules = "[" + "{\"id\":1,\"limit\":0,\"step\":1,\"score\":10 ,\"desc\":\"每日登陆\"}," + - // "{\"id\":2,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + "{\"id\":2,\"childs\":[" + " {\"businessId\":1,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + " {\"businessId\":2,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + " {\"businessId\":3,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + " {\"businessId\":4,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + " {\"businessId\":5,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":7,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":8,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":9,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":10,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}," + " {\"businessId\":6,\"limit\":0,\"step\":1,\"score\":50 ,\"desc\":\"线上交易1元\"}" + "]}," + "{\"id\":3,\"limit\":1,\"step\":1,\"score\":100,\"desc\":\"绑定车牌1个\"}," + @@ -44,6 +49,29 @@ public class WxScoreRules implements Serializable { "{\"id\":7,\"limit\":1,\"step\":1,\"score\":100,\"desc\":\"编辑个人信息\"}" + "]"; + @Transient + private static final String creditDefaultRules = + "[" + + "{\"id\":1,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"每日登陆\"}," + + "{\"id\":2,\"childs\":[" + + " {\"businessId\":1,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":2,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":3,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":4,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":5,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":7,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":8,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":9,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"线上交易1元\"}," + + " {\"businessId\":10,\"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\":4,\"limit\":0,\"step\":1,\"score\":0 ,\"desc\":\"连接WIFI1次\"}," + + "{\"id\":5,\"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\":\"编辑个人信息\"}" + + "]"; + @Transient public static final String ID = "id"; @Transient @@ -95,6 +123,11 @@ public class WxScoreRules implements Serializable { @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; + @io.swagger.annotations.ApiModelProperty(value="1成长值 2积分",name="type") + private Integer type; + + @io.swagger.annotations.ApiModelProperty(value="清除前多少年积分",name="clearYear") + private Integer clearYear; public String getTenantId() { return tenantId; @@ -103,9 +136,12 @@ public class WxScoreRules implements Serializable { tenantId = _tenantId; } + public static String getScoreDefaultRules() { + return scoreDefaultRules; + } - public static String getDefaultRules() { - return defaultRules; + public static String getCreditDefaultRules() { + return creditDefaultRules; } public void setRules(String rules) { @@ -227,4 +263,5 @@ public class WxScoreRules implements Serializable { this.setSortColumns(Field.valueOf(sortColumns)); } } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java b/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java index 83dfa4812..e5d96db98 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxShop.java @@ -1,5 +1,7 @@ package com.iformall.domain.po; +import cn.afterturn.easypoi.excel.annotation.Excel; + import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; @@ -11,7 +13,7 @@ import java.util.List; @Table(name = "wx_shop") public class WxShop implements Serializable { private static final long serialVersionUID = 1L; - + @Id protected Long id; @@ -52,14 +54,22 @@ public class WxShop implements Serializable { /*租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value = "点位类型", name = "pointType") + @Excel(name="类型",width = 20,orderNum = "1", + replace = {"商铺_null", "固定点位_1", "临时促销点位_2", "宣传点位_3","ATM点位_4","仓库点位_5","其他点位_6"}) + private Integer pointType; /*商铺编号**/ @io.swagger.annotations.ApiModelProperty(value="商铺编号",name="shopNumber") + @Excel(name="商铺号/多径点位号",width = 20,orderNum = "2") private String shopNumber; /*建筑面积**/ @io.swagger.annotations.ApiModelProperty(value="建筑面积",name="buildArea") + @Excel(name="建筑面积(㎡)",width = 20,orderNum = "5") private String buildArea; /*经营面积**/ @io.swagger.annotations.ApiModelProperty(value="经营面积",name="operationArea") + @Excel(name="计租面积(㎡)",width = 20,orderNum = "6") private String operationArea; /*楼座号**/ @io.swagger.annotations.ApiModelProperty(value="楼座号",name="building") @@ -69,6 +79,7 @@ public class WxShop implements Serializable { private Long floor; /*状态(0:未出租, 1:已出租)**/ @io.swagger.annotations.ApiModelProperty(value="状态(0:未出租, 1:已出租)",name="status") + @Excel(name="租赁状态",width = 20,orderNum = "7",replace = {"未出租_0","已出租_1"}) private Integer status; /*店铺相对位置x**/ @io.swagger.annotations.ApiModelProperty(value="店铺相对位置x",name="x") @@ -107,12 +118,40 @@ public class WxShop implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "类型", name = "type") private Integer type; - @io.swagger.annotations.ApiModelProperty(value = "点位类型", name = "pointType") - private Integer pointType; + @io.swagger.annotations.ApiModelProperty(value = "备注", name = "comments") private String comments; + @io.swagger.annotations.ApiModelProperty(value = "是否删除1是0否", name = " ") + private Integer isDel; + + //开始时间 + @Transient + private Date startdate; + //结束时间 + @Transient + private Date enddate; + //闲置时间 + @Transient + private Integer freeDay; + + public Integer getFreeDay() { + return freeDay; + } + + public void setFreeDay(Integer freeDay) { + this.freeDay = freeDay; + } + + public Integer getIsDel() { + return isDel; + } + + public void setIsDel(Integer isDel) { + this.isDel = isDel; + } + public String getTenantId() { return tenantId; } @@ -203,6 +242,21 @@ public class WxShop implements Serializable { public void setUpdateDate(Date _updateDate) { updateDate = _updateDate; } + public Date getStartdate() { + return startdate; + } + + public void setStartdate(Date startdate) { + this.startdate = startdate; + } + + public Date getEnddate() { + return enddate; + } + + public void setEnddate(Date enddate) { + this.enddate = enddate; + } public String getImgUrl() { return imgUrl; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxSubBusiness.java b/mallinkService/src/main/java/com/iformall/domain/po/WxSubBusiness.java new file mode 100644 index 000000000..d42e32e4f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxSubBusiness.java @@ -0,0 +1,163 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_sub_business") +public class WxSubBusiness implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Integer id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getSortColumns() { + return sortColumns; + } + + public List getIds() { + return ids; + } + public void setIds(List ids) { + this.ids = ids; + } + + + + /*子业态名**/ + @io.swagger.annotations.ApiModelProperty(value="子业态名",name="title") + private String title; + + /*业态ID**/ + @io.swagger.annotations.ApiModelProperty(value="业态ID",name="businessId") + private Integer businessId; + + /*业态名**/ + @io.swagger.annotations.ApiModelProperty(value="业态名",name="businessTitle") + private String businessTitle; + + /*创建时间**/ + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + + /*更新时间**/ + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + public String getTitle() { + return title; + } + public void setTitle(String _title) { + title = _title; + } + + public Integer getBusinessId() { + return businessId; + } + + public void setBusinessId(Integer businessId) { + this.businessId = businessId; + } + + public String getBusinessTitle() { + return businessTitle; + } + + public void setBusinessTitle(String businessTitle) { + this.businessTitle = businessTitle; + } + + public Date getCreateDate() { + return createDate; + } + public void setCreateDate(Date _createDate) { + createDate = _createDate; + } + public Date getUpdateDate() { + return updateDate; + } + public void setUpdateDate(Date _updateDate) { + updateDate = _updateDate; + } + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,Title_ASC("`title` ASC"),Title_DESC("`title` DESC") + ,BusinessId_ASC("`business_id` ASC"),BusinessId_DESC("`business_id` DESC") + ,BusinessTitle_ASC("`business_title` ASC"),BusinessTitle_DESC("`business_title` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + + this.sortColumns = sb.toString(); + + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxTags.java b/mallinkService/src/main/java/com/iformall/domain/po/WxTags.java index ded19006f..1d1cdaf4e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxTags.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxTags.java @@ -54,11 +54,11 @@ public class WxTags implements Serializable { @Transient - protected long count; - public long getCount() { + protected Long count; + public Long getCount() { return count; } - public void setCount(long count) { + public void setCount(Long count) { this.count = count; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java index db4fc6dfe..af437a000 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java @@ -21,21 +21,15 @@ public class WxTemplateMsg implements Serializable { protected List ids; @Transient protected String sortColumns; - - - /**租户ID**/ + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; - /**模板ID**/ @io.swagger.annotations.ApiModelProperty(value="模板ID",name="templateId") private String templateId; - /**模板类型1:核销成功消息, 2:核销失败消息**/ - @io.swagger.annotations.ApiModelProperty(value="模板类型1:核销成功消息,2:核销失败消息",name="type") + @io.swagger.annotations.ApiModelProperty(value="模板类型1:核销成功消息,2:核销失败消息, 101:公众号审核结果消息, 102:公众号卡券核销消息",name="type") private Integer type; - /**创建时间**/ @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; - /**更新时间**/ @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxTopic.java b/mallinkService/src/main/java/com/iformall/domain/po/WxTopic.java new file mode 100644 index 000000000..5d0568cbe --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxTopic.java @@ -0,0 +1,253 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_topic") +public class WxTopic implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + /*租户ID**/ + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + /*名称**/ + @io.swagger.annotations.ApiModelProperty(value="名称",name="name") + private String name; + /*标题**/ + @io.swagger.annotations.ApiModelProperty(value="标题",name="title") + private String title; + /*内容**/ + @io.swagger.annotations.ApiModelProperty(value="内容",name="content") + private String content; + /*封面**/ + @io.swagger.annotations.ApiModelProperty(value="封面",name="cover") + private String cover; + /*广告图**/ + @io.swagger.annotations.ApiModelProperty(value="广告图",name="advert") + private String advert; + /*开始时间**/ + @io.swagger.annotations.ApiModelProperty(value="开始时间",name="beginTime") + private Date beginTime; + /*结束时间**/ + @io.swagger.annotations.ApiModelProperty(value="结束时间",name="endTime") + private Date endTime; + /*状态1投放2作废**/ + @io.swagger.annotations.ApiModelProperty(value="状态1生效2失效3作废",name="status") + private Integer status; + @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="bgColor") + private String bgColor; + + /*优惠券ids**/ + @io.swagger.annotations.ApiModelProperty(value="优惠券ids",name="couponIds") + @Transient + private String couponIds; + /*商品列表**/ + @io.swagger.annotations.ApiModelProperty(value="商品列表",name="couponList") + @Transient + private List couponList; + //状态,一个或者多个 + @Transient + private String statusStr; + @Transient + protected List statusList; + //查询下架状态 + @Transient + private boolean queryDownLineStatus; + @io.swagger.annotations.ApiModelProperty(value="上架标志 1正在上架",name="isOnline") + @Transient + private Integer isOnline; + @Transient + private Long couponChannelId; + + + public Long getCouponChannelId() { + return couponChannelId; + } + + public void setCouponChannelId(Long couponChannelId) { + this.couponChannelId = couponChannelId; + } + + @Transient + @io.swagger.annotations.ApiModelProperty(value="小程序路径",name="weappPath") + private String weappPath; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="小程序二维码Scene",name="weappScene") + private String weappScene; + + public Integer getIsOnline() { + return isOnline; + } + + public void setIsOnline(Integer isOnline) { + this.isOnline = isOnline; + } + + public boolean isQueryDownLineStatus() { + return queryDownLineStatus; + } + + public void setQueryDownLineStatus(boolean queryDownLineStatus) { + this.queryDownLineStatus = queryDownLineStatus; + } + + public List getStatusList() { + return statusList; + } + + public void setStatusList(List statusList) { + this.statusList = statusList; + } + + public String getBgColor() { + return bgColor; + } + + public void setBgColor(String bgColor) { + this.bgColor = bgColor; + } + + public String getStatusStr() { + return statusStr; + } + + public void setStatusStr(String statusStr) { + this.statusStr = statusStr; + } + + public List getCouponList() { + return couponList; + } + + public void setCouponList(List couponList) { + this.couponList = couponList; + } + + public String getCouponIds() { + return couponIds; + } + + public void setCouponIds(String couponIds) { + this.couponIds = couponIds; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getCover() { + return cover; + } + + public void setCover(String cover) { + this.cover = cover; + } + + public String getAdvert() { + return advert; + } + + public void setAdvert(String advert) { + this.advert = advert; + } + + public Date getBeginTime() { + return beginTime; + } + + public void setBeginTime(Date beginTime) { + this.beginTime = beginTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Date getCreatetime() { + return createtime; + } + + public void setCreatetime(Date createtime) { + this.createtime = createtime; + } + + public Date getUpdatetime() { + return updatetime; + } + + public void setUpdatetime(Date updatetime) { + this.updatetime = updatetime; + } + + public String getWeappPath() { + if(id == null) + return "pages/index/index"; + return "pages/index/index?type=td&id="+id; + } + + public String getWeappScene() { + if(id == null) + return ""; + return "t:td:" + id; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java index d36400456..3fab9ff8f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java @@ -23,6 +23,8 @@ public class WxWeappAuditStatus implements Serializable { @Transient protected String sortColumns; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") private String appId; @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") @@ -43,6 +45,7 @@ public class WxWeappAuditStatus implements Serializable { public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") ,UserVersion_ASC("`user_version` ASC"),UserVersion_DESC("`user_version` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java index 0ad54b1f6..86800b39c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java @@ -23,29 +23,27 @@ public class WxWeappCodeStatus implements Serializable { @Transient protected String sortColumns; - /**小程序ID*/ + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") private String appId; - /**小程序类型(1-B端 2-C端)*/ - @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端 3-公众服务号 4-公众订阅号)",name="type") private Integer type; - /**用户版本*/ @io.swagger.annotations.ApiModelProperty(value="用户版本",name="userVersion") private String userVersion; @io.swagger.annotations.ApiModelProperty(value="用户版本描述",name="versionDesc") private String versionDesc; - /**code提交状态*/ @io.swagger.annotations.ApiModelProperty(value="code提交状态(0:成功, 1:失败)",name="codeStatus") private Integer codeStatus; @io.swagger.annotations.ApiModelProperty(value="code提交错误码",name="codeErrCode") private String codeErrCode; - /**更新时间*/ @io.swagger.annotations.ApiModelProperty(value="code提交时间",name="codeTime") private Date codeTime; public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") ,UserVersion_ASC("`user_version` ASC"),UserVersion_DESC("`user_version` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java index a3d5fe1ce..44a607b97 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java @@ -23,6 +23,8 @@ public class WxWeappReleaseStatus implements Serializable { @Transient protected String sortColumns; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") private String appId; @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") @@ -41,6 +43,7 @@ public class WxWeappReleaseStatus implements Serializable { public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") ,UserVersion_ASC("`user_version` ASC"),UserVersion_DESC("`user_version` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/AppUniformMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/AppUniformMsg.java new file mode 100644 index 000000000..5a289f05c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/AppUniformMsg.java @@ -0,0 +1,37 @@ +package com.iformall.domain.po.msg; + +import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.List; + +/** + * 微信公众号-模板消息 + * @author Stormeye + * @date 2019/4/9 13:55 + */ +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class AppUniformMsg extends BaseMsg { + private static final long serialVersionUID = 223232132183760321L; + + @io.swagger.annotations.ApiModelProperty(value="小程序AppId",name="appId") + private String appId; + @io.swagger.annotations.ApiModelProperty(value="小程序openid",name="to") + private String to; + @io.swagger.annotations.ApiModelProperty(value="小程序路径",name="pagePath") + private String pagePath; + @io.swagger.annotations.ApiModelProperty(value="formId",name="formId") + private String formId; + @io.swagger.annotations.ApiModelProperty(value="模板类型",name="templateType") + private Integer templateType; + @io.swagger.annotations.ApiModelProperty(value="公众号AppId",name="mpAppId") + private String mpAppId; + @io.swagger.annotations.ApiModelProperty(value="公众号url",name="url") + private String url; + @io.swagger.annotations.ApiModelProperty(value="公众号模板主体",name="templateDataList") + private List templateDataList; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/BaseMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/BaseMsg.java new file mode 100644 index 000000000..8619c8a0b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/BaseMsg.java @@ -0,0 +1,47 @@ +package com.iformall.domain.po.msg; + +import lombok.Data; + +import javax.persistence.Transient; +import java.io.Serializable; + +/** + * @author luozukai + * @date 2019/3/7 10:05 + */ +@Data +public class BaseMsg implements Serializable { + private static final long serialVersionUID = 923764283764823L; + + @io.swagger.annotations.ApiModelProperty(value="域0全部 1sys 2a端 3c端 4b端",name="domain") + @Transient + private Integer domain = 0; + + @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") + @Transient + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value="唯一标识",name="uuid") + @Transient + private String uuid; + + @io.swagger.annotations.ApiModelProperty(value="接收人,手机号邮件地址等",name="receiver") + @Transient + private String receiver; + + @io.swagger.annotations.ApiModelProperty(value="消息类型 1短信 2回调短信 3邮件 4微信小程序模板 5微信公众号模板 6系统通知 7websocket",name="msgType") + @Transient + private Integer msgType; + + @io.swagger.annotations.ApiModelProperty(value="消息状态 0默认1发送成功2消费成功3消费失败",name="msgStatus") + @Transient + private Integer msgStatus; + + @io.swagger.annotations.ApiModelProperty(value="结果信息",name="statusMessage") + @Transient + private String statusMessage; + + @io.swagger.annotations.ApiModelProperty(value="rocketMQ延迟消息1s,5s,10s,30s,1m,2m,3m,4m,5m,6m,7m,8m,9m,10m,20m,30m,1h,2h",name="delayTimeLevel") + @Transient + private Integer delayTimeLevel = 0; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/MailMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/MailMsg.java new file mode 100644 index 000000000..b031ccafc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/MailMsg.java @@ -0,0 +1,37 @@ +package com.iformall.domain.po.msg; + +import com.iformall.domain.po.msg.BaseMsg; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Map; + +/** + * @author luozukai + * @date 2019/3/7 10:05 + */ +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class MailMsg extends BaseMsg { + private static final long serialVersionUID = 923764283760321L; + // 模板id + private Integer modelId; + private String[] to; + private String from; + private String msg; + + //标题 + private String subject; + //是否html格式 + private boolean isHtml; + //附件 + private String filePath; + //嵌入静态资源 + private String rscPath; + private String rscI; + + //动态替换内容 + private Map dynamicContentMap; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java new file mode 100644 index 000000000..0dea4f57a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java @@ -0,0 +1,34 @@ +package com.iformall.domain.po.msg; + +import com.iformall.domain.po.msg.BaseMsg; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; + +import java.util.List; + +/** + * 微信公众号-模板消息 + * @author Stormeye + * @date 2019/4/9 13:55 + */ +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class MpAppMsg extends BaseMsg { + private static final long serialVersionUID = 223232132183760321L; + + @io.swagger.annotations.ApiModelProperty(value="公众号AppId",name="appId") + private String appId; + @io.swagger.annotations.ApiModelProperty(value="公众号openid",name="to") + private String to; + @io.swagger.annotations.ApiModelProperty(value="模板类型",name="templateType") + private Integer templateType; + @io.swagger.annotations.ApiModelProperty(value="小程序AppId",name="miniAppId") + private String miniAppId; + @io.swagger.annotations.ApiModelProperty(value="小程序路径",name="miniPagePath") + private String miniPagePath; + @io.swagger.annotations.ApiModelProperty(value="公众号模板主体",name="templateDataList") + private List templateDataList; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/SmartAppMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/SmartAppMsg.java new file mode 100644 index 000000000..fdf749256 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/SmartAppMsg.java @@ -0,0 +1,36 @@ +package com.iformall.domain.po.msg; + +import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; +import com.iformall.domain.po.msg.BaseMsg; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.List; + +/** + * 微信小程序消息 + * @author luozukai + * @date 2019/3/7 10:05 + */ +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class SmartAppMsg extends BaseMsg { + private static final long serialVersionUID = 223232132183760321L; + + @io.swagger.annotations.ApiModelProperty(value="小程序AppId",name="appId") + private String appId; + @io.swagger.annotations.ApiModelProperty(value="小程序用户openId",name="to") + private String to; + @io.swagger.annotations.ApiModelProperty(value="小程序formId",name="formId") + private String formId; + @io.swagger.annotations.ApiModelProperty(value="小程序模板类型",name="templateType") + private Integer templateType; + @io.swagger.annotations.ApiModelProperty(value="小程序路径",name="gotopage") + private String gotopage; + @io.swagger.annotations.ApiModelProperty(value="小程序模板消息标题",name="emphasisKeyword") + private String emphasisKeyword; + @io.swagger.annotations.ApiModelProperty(value="小程序模板实体",name="templateDataList") + private List templateDataList; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/WxMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/WxMsg.java new file mode 100644 index 000000000..1de6f8195 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/WxMsg.java @@ -0,0 +1,193 @@ +package com.iformall.domain.po.msg; + +import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; +import com.iformall.domain.po.WxCouponInject; +import com.iformall.domain.po.WxMsgConfig; +import com.iformall.domain.po.WxTags; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_msg") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxMsg extends BaseMsg { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value = "模板id", name = "modelId") + private Long modelId; + @io.swagger.annotations.ApiModelProperty(value = "内容", name = "msg") + private String msg; + @io.swagger.annotations.ApiModelProperty(value = "发送时间", name = "sendtime") + private String sendtime; + @io.swagger.annotations.ApiModelProperty(value = "发送时间", name = "createtime") + private Date createtime; + @io.swagger.annotations.ApiModelProperty(value = "预计发送数量", name = "expectSendNumber") + private Integer expectSendNumber; + @io.swagger.annotations.ApiModelProperty(value = "成功数量", name = "successNumber") + private Integer successNumber; + @io.swagger.annotations.ApiModelProperty(value = "错误数量", name = "errorNumber") + private Integer errorNumber; + @io.swagger.annotations.ApiModelProperty(value = "", name = "returnResult") + private String returnResult; + @io.swagger.annotations.ApiModelProperty(value = "", name = "phones") + private String phones; + @io.swagger.annotations.ApiModelProperty(value = "", name = "signature") + private String signature; + @io.swagger.annotations.ApiModelProperty(value = "", name = "isright") + private Integer isright; + @io.swagger.annotations.ApiModelProperty(value = "", name = "name") + private String name; + @io.swagger.annotations.ApiModelProperty(value = "发送状态0失败1成功", name = "sendstatus") + private Integer sendstatus; + + @io.swagger.annotations.ApiModelProperty(value = "excelpath", name = "excelpath") + private String excelpath; + + /*发送人群标签**/ + @io.swagger.annotations.ApiModelProperty(value="发送人群标签",name="tags") + private String tags; + + @io.swagger.annotations.ApiModelProperty(value = "标签人群", name = "label") + private String label; + + @io.swagger.annotations.ApiModelProperty(value = "状态0未发送 1已发送 2草稿箱", name = "status") + private Integer status; + + @io.swagger.annotations.ApiModelProperty(value = "1标签短信2精准投放", name = "way") + private Integer way; + + @io.swagger.annotations.ApiModelProperty(value = "couponInjectId", name = "couponInjectId") + private Long couponInjectId; + + + //用于mq发送消息 + private WxMsgConfig wxMsgConfig; + private WxCouponInject couponInject; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + + @Transient + List filterList; + + public List getFilterList() { + return filterList; + } + + public void setFilterList(List filterList) { + this.filterList = filterList; + } + + + public WxMsgConfig getWxMsgConfig() { + return wxMsgConfig; + } + + public void setWxMsgConfig(WxMsgConfig wxMsgConfig) { + this.wxMsgConfig = wxMsgConfig; + } + + public WxCouponInject getCouponInject() { + return couponInject; + } + + public void setCouponInject(WxCouponInject couponInject) { + this.couponInject = couponInject; + } + + public static enum Field { + Id_ASC("`id` ASC"), Id_DESC("`id` DESC") + , TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC") + , ModelId_ASC("`model_id` ASC"), ModelId_DESC("`model_id` DESC") + , Msg_ASC("`msg` ASC"), Msg_DESC("`msg` DESC") + , Sendtime_ASC("`sendtime` ASC"), Sendtime_DESC("`sendtime` DESC") + , Createtime_ASC("`createtime` ASC"), Createtime_DESC("`createtime` DESC") + , ExpectSendNumber_ASC("`expect_send_number` ASC"), ExpectSendNumber_DESC("`expect_send_number` DESC") + , SuccessNumber_ASC("`success_number` ASC"), SuccessNumber_DESC("`success_number` DESC") + , ErrorNumber_ASC("`error_number` ASC"), ErrorNumber_DESC("`error_number` DESC") + , ReturnResult_ASC("`return_result` ASC"), ReturnResult_DESC("`return_result` DESC") + , Phones_ASC("`phones` ASC"), Phones_DESC("`phones` DESC") + , Signature_ASC("`signature` ASC"), Signature_DESC("`signature` DESC") + , Isright_ASC("`isright` ASC"), Isright_DESC("`isright` DESC") + , Name_ASC("`name` ASC"), Name_DESC("`name` DESC") + , Sendstatus_ASC("`sendstatus` ASC"), Sendstatus_DESC("`sendstatus` DESC") + ; + private String value; + + Field(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setCol(String value) { + this.value = value; + } + + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxMsg.Field... fields) { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + + this.sortColumns = sb.toString(); + + } + + public void setSortColumns(String sortColumns) { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/WxMsgRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/WxMsgRecord.java new file mode 100644 index 000000000..07119578c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/WxMsgRecord.java @@ -0,0 +1,60 @@ +package com.iformall.domain.po.msg; + +import com.iformall.domain.po.msg.BaseMsg; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; +import java.util.Map; + +@Table(name = "wx_msg_record") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxMsgRecord extends BaseMsg { + private static final long serialVersionUID = 18957895653478L; + + @Id + protected Long id; + //msg 消息类型1短信 2回调短信 邮件 3微信小程序模板 4微信公众号模板 5系统通 + @io.swagger.annotations.ApiModelProperty(value="消息类型 1短信 2回调短信 3邮件 4微信小程序模板 5微信公众号模板 6系统通知 7websocket",name="msg") + private String msg; + @io.swagger.annotations.ApiModelProperty(value="发送时间",name="sendTime") + private String sendTime; + @io.swagger.annotations.ApiModelProperty(value="modelId",name="modelId") + private Long modelId; + @io.swagger.annotations.ApiModelProperty(value="from,手机号邮件地址等",name="sender") + private String sender; + @io.swagger.annotations.ApiModelProperty(value="发送人id",name="senderUserId") + private Long senderUserId; + @io.swagger.annotations.ApiModelProperty(value="发送人姓名",name="senderUserName") + private String senderUserName; + @io.swagger.annotations.ApiModelProperty(value="接收人用户id",name="receiverUserId") + private Long receiverUserId; + @io.swagger.annotations.ApiModelProperty(value="接收人姓名",name="receiverUserName") + private String receiverUserName; + @io.swagger.annotations.ApiModelProperty(value="签名",name="signature") + private String signature; + @io.swagger.annotations.ApiModelProperty(value="模板类型",name="modelType") + private Integer modelType; + @io.swagger.annotations.ApiModelProperty(value="消息json",name="msgJson") + private String msgJson; + + @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="msgStatus") + private Integer msgStatus; + @io.swagger.annotations.ApiModelProperty(value="结果信息",name="statusMessage") + private String statusMessage; + + @io.swagger.annotations.ApiModelProperty(value="动态替换内容",name="dynamicContentMap") + private Map dynamicContentMap; + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/CUserBaseInfoT.java b/mallinkService/src/main/java/com/iformall/domain/vo/CUserBaseInfoT.java index f5e4a6afc..17257a9fb 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/CUserBaseInfoT.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/CUserBaseInfoT.java @@ -34,27 +34,31 @@ public class CUserBaseInfoT implements Serializable { @Excel(name="生日",width = 20,orderNum = "6") @io.swagger.annotations.ApiModelProperty(value="出生日期",name="birthdate") private String birthdate; + /**积分**/ + @Excel(name="积分",width = 20,orderNum = "7") + @io.swagger.annotations.ApiModelProperty(value="积分",name="credit") + private String credit; /**地址**/ - @Excel(name="地址",width = 20,orderNum = "7") + @Excel(name="地址",width = 20,orderNum = "8") @io.swagger.annotations.ApiModelProperty(value="地址",name="address") private String address; /**更新时间**/ - @Excel(name="上次活跃时间",width = 20, orderNum = "8") + @Excel(name="上次活跃时间",width = 20, orderNum = "9") @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private String updateDate; /**创建时间**/ - @Excel(name="注册时间",width = 20, orderNum = "9") + @Excel(name="注册时间",width = 20, orderNum = "10") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private String createDate; @Transient - @Excel(name="标签",width = 20,orderNum = "10") + @Excel(name="标签",width = 20,orderNum = "11") private String tagNames; @Transient - @Excel(name="成长值",width = 20,orderNum = "11") + @Excel(name="成长值",width = 20,orderNum = "12") private String poins; public String getName() { @@ -144,4 +148,12 @@ public class CUserBaseInfoT implements Serializable { public void setPoins(String poins) { this.poins = poins; } + + public String getCredit() { + return credit; + } + + public void setCredit(String credit) { + this.credit = credit; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OweMerchantVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/OweMerchantVo.java new file mode 100644 index 000000000..aef79ec20 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OweMerchantVo.java @@ -0,0 +1,109 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; + +import java.math.BigDecimal; + +public class OweMerchantVo { + + @Excel(name="商户名",width = 20,orderNum = "1") + private String name; + @Excel(name="楼座",width = 20,orderNum = "2") + private Long building; + @Excel(name="楼层",width = 20,orderNum = "3") + private Long floor; + @Excel(name="负责人",width = 20,orderNum = "4") + private String linkPerson; + @Excel(name="负责人电话",width = 20,orderNum = "5") + private String linkPhone; + @Excel(name="欠缴租金(元)",width = 20,orderNum = "6") + private BigDecimal rentOwe; + @Excel(name="欠缴物业费(元)",width = 20,orderNum = "7") + private BigDecimal propertyOwe; + @Excel(name="欠缴押金(元)",width = 20,orderNum = "8") + private BigDecimal depositOwe; + @Excel(name="其他费用(元)",width = 20,orderNum = "9") + private BigDecimal otherOwe; + @Excel(name="欠缴总额(元)",width = 20,orderNum = "10") + private BigDecimal totalOwe; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getBuilding() { + return building; + } + + public void setBuilding(Long building) { + this.building = building; + } + + public Long getFloor() { + return floor; + } + + public void setFloor(Long floor) { + this.floor = floor; + } + + public String getLinkPerson() { + return linkPerson; + } + + public void setLinkPerson(String linkPerson) { + this.linkPerson = linkPerson; + } + + public String getLinkPhone() { + return linkPhone; + } + + public void setLinkPhone(String linkPhone) { + this.linkPhone = linkPhone; + } + + public BigDecimal getRentOwe() { + return rentOwe; + } + + public void setRentOwe(BigDecimal rentOwe) { + this.rentOwe = rentOwe; + } + + public BigDecimal getPropertyOwe() { + return propertyOwe; + } + + public void setPropertyOwe(BigDecimal propertyOwe) { + this.propertyOwe = propertyOwe; + } + + public BigDecimal getDepositOwe() { + return depositOwe; + } + + public void setDepositOwe(BigDecimal depositOwe) { + this.depositOwe = depositOwe; + } + + public BigDecimal getOtherOwe() { + return otherOwe; + } + + public void setOtherOwe(BigDecimal otherOwe) { + this.otherOwe = otherOwe; + } + + public BigDecimal getTotalOwe() { + return totalOwe; + } + + public void setTotalOwe(BigDecimal totalOwe) { + this.totalOwe = totalOwe; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java index fd3d3d270..e0d57bc93 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java @@ -53,6 +53,59 @@ public class WxBillAll { @io.swagger.annotations.ApiModelProperty(value = "租赁店铺类型", name = "rentShopType") private Integer rentShopType; + //费用收缴数据 + @io.swagger.annotations.ApiModelProperty(value = "欠缴租金", name = "rentOwe") + private Integer rentOwe; + @io.swagger.annotations.ApiModelProperty(value = "欠缴物业费", name = "propertyOwe") + private Integer propertyOwe; + @io.swagger.annotations.ApiModelProperty(value = "欠缴押金", name = "depositOwe") + private Integer depositOwe; + @io.swagger.annotations.ApiModelProperty(value = "欠缴其他费用", name = "otherOwe") + private Integer otherOwe; + @io.swagger.annotations.ApiModelProperty(value = "欠缴总额", name = "totalOwe") + private Integer totalOwe; + + + public Integer getRentOwe() { + return rentOwe; + } + + public void setRentOwe(Integer rentOwe) { + this.rentOwe = rentOwe; + } + + public Integer getPropertyOwe() { + return propertyOwe; + } + + public void setPropertyOwe(Integer propertyOwe) { + this.propertyOwe = propertyOwe; + } + + public Integer getDepositOwe() { + return depositOwe; + } + + public void setDepositOwe(Integer depositOwe) { + this.depositOwe = depositOwe; + } + + public Integer getOtherOwe() { + return otherOwe; + } + + public void setOtherOwe(Integer otherOwe) { + this.otherOwe = otherOwe; + } + + public Integer getTotalOwe() { + return totalOwe; + } + + public void setTotalOwe(Integer totalOwe) { + this.totalOwe = totalOwe; + } + public Long getId() { return id; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java new file mode 100644 index 000000000..098bb07fd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java @@ -0,0 +1,274 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author gongbiao + */ +public class WxBillAllVo { + private Long id; + + private String tenantId; + + private Long merchantId; + + private Long shopId; + + //@Excel(name="商铺号",width = 20,orderNum = "1") + private String shopNumber; + + //@Excel(name="商户名称",width = 20,orderNum = "2") + private String merchantName; + + //@Excel(name="商铺类型",width = 20,orderNum = "3", replace = {"店铺_1","多经点位_2"}) + private Integer rentShopType; + + @Excel(name="费用类型",width = 20,orderNum = "4") + private String billType; + + @Excel(name="实际应收金额(元)",width = 20,orderNum = "5") + private String receivePayStr; + + @Excel(name="实收金额(元)",width = 20,orderNum = "6") + private String payStr; + + @Excel(name="欠缴金额(元)",width = 20,orderNum = "7") + private String oweStr; + + @Excel(name="缴款截止日期",width = 20,orderNum = "8", format="yyyy-MM-dd") + private Date receiveDate; + + @Excel(name="逾期天数",width = 20,orderNum = "9") + private Integer expiredDay; + + @Excel(name="账单状态",width = 20,orderNum = "10", replace = {"欠缴_1","待缴_2","已结清_3","未到期_4","已退还_5","失效_6"}) + private Integer status; + + private Integer billTypeValue; + private Integer needPay; + private Integer receivePay; + private Integer pay; + private Integer owe; + private Date payDate; + private Date starttime; + private Date endtime; + + private String manager; + private String managerPhone; + + private String shopInfo; + + public String getShopInfo() { + return shopInfo; + } + + public void setShopInfo(String shopInfo) { + this.shopInfo = shopInfo; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getMerchantId() { + return merchantId; + } + + public void setMerchantId(Long merchantId) { + this.merchantId = merchantId; + } + + public Long getShopId() { + return shopId; + } + + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + public Integer getBillTypeValue() { + return billTypeValue; + } + + public void setBillTypeValue(Integer billTypeValue) { + this.billTypeValue = billTypeValue; + } + + public String getBillType() { + return billType; + } + + public void setBillType(String billType) { + this.billType = billType; + } + + public Integer getNeedPay() { + return needPay; + } + + public void setNeedPay(Integer needPay) { + this.needPay = needPay; + } + + public Integer getReceivePay() { + return receivePay; + } + + public void setReceivePay(Integer receivePay) { + this.receivePay = receivePay; + } + + public Integer getPay() { + return pay; + } + + public void setPay(Integer pay) { + this.pay = pay; + } + + public Integer getOwe() { + return owe; + } + + public void setOwe(Integer owe) { + this.owe = owe; + } + + public Date getReceiveDate() { + return receiveDate; + } + + public void setReceiveDate(Date receiveDate) { + this.receiveDate = receiveDate; + } + + public Date getPayDate() { + return payDate; + } + + public void setPayDate(Date payDate) { + this.payDate = payDate; + } + + public Integer getExpiredDay() { + return expiredDay; + } + + public void setExpiredDay(Integer expiredDay) { + this.expiredDay = expiredDay; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public Date getStarttime() { + return starttime; + } + + public void setStarttime(Date starttime) { + this.starttime = starttime; + } + + public Date getEndtime() { + return endtime; + } + + public void setEndtime(Date endtime) { + this.endtime = endtime; + } + + + public Integer getRentShopType() { + return rentShopType; + } + + public void setRentShopType(Integer rentShopType) { + this.rentShopType = rentShopType; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + + public String getShopNumber() { + return shopNumber; + } + + public void setShopNumber(String shopNumber) { + this.shopNumber = shopNumber; + } + + public String getManager() { + return manager; + } + + public void setManager(String manager) { + this.manager = manager; + } + + public String getManagerPhone() { + return managerPhone; + } + + public void setManagerPhone(String managerPhone) { + this.managerPhone = managerPhone; + } + + + public String getReceivePayStr() { + if(getReceivePay()!=null) { + receivePayStr = new BigDecimal(getReceivePay()).divide(new BigDecimal(100)).toString(); + } + return receivePayStr; + } + + public void setReceivePayStr(String receivePayStr) { + this.receivePayStr = receivePayStr; + } + + public String getPayStr() { + if(getPay()!=null) { + payStr = new BigDecimal(getPay()).divide(new BigDecimal(100)).toString(); + } + return payStr; + } + + public void setPayStr(String payStr) { + this.payStr = payStr; + } + + public String getOweStr() { + if(getOwe()!=null) { + oweStr = new BigDecimal(getOwe()).divide(new BigDecimal(100)).toString(); + } + return oweStr; + } + + public void setOweStr(String oweStr) { + this.oweStr = oweStr; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java index d3dee8eb4..e32e41f2b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java @@ -21,6 +21,9 @@ public class WxCUserVo extends WxCUser { private Integer discountRate; private Integer amount; + private Integer upgradePercent; + private Integer upgradeScore; + public Date getBirthdate() { return birthdate; } @@ -85,4 +88,20 @@ public class WxCUserVo extends WxCUser { public void setAmount(Integer amount) { this.amount = amount; } + + public Integer getUpgradePercent() { + return upgradePercent; + } + + public void setUpgradePercent(Integer upgradePercent) { + this.upgradePercent = upgradePercent; + } + + public Integer getUpgradeScore() { + return upgradeScore; + } + + public void setUpgradeScore(Integer upgradeScore) { + this.upgradeScore = upgradeScore; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCardSpendVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCardSpendVo.java index d067ad62c..b354fa598 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCardSpendVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCardSpendVo.java @@ -1,5 +1,6 @@ package com.iformall.domain.vo; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.iformall.domain.po.WxCardSpend; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,10 +17,12 @@ public class WxCardSpendVo extends WxCardSpend { /**卡信息*/ /**券名称**/ @io.swagger.annotations.ApiModelProperty(value="券名称",name="title") + @Excel(name="卡名",width = 20,orderNum = "4") private String title; /**使用商户名**/ @io.swagger.annotations.ApiModelProperty(value="商户名",name="merchantName") + @Excel(name="商户",width = 20,orderNum = "5") private String merchantName; /**补贴额(包含通道费)*/ @@ -34,10 +37,12 @@ public class WxCardSpendVo extends WxCardSpend { /**持有人昵称*/ @io.swagger.annotations.ApiModelProperty(value="持有人昵称",name="onickName") + @Excel(name="消费者",width = 20,orderNum = "2") private String onickName; /**持有人绑定的手机号**/ @io.swagger.annotations.ApiModelProperty(value="持有人绑定的手机号",name="ouPhone") + @Excel(name="手机号",width = 20,orderNum = "3") private String ouPhone; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java index 347941a18..5bda75a9b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java @@ -82,6 +82,10 @@ public class WxCouponChannelVo extends WxCouponChannel implements Serializable { @io.swagger.annotations.ApiModelProperty(value="自领取之日几日有效,(停车券当天有效)",name="validDays") private Integer validDays; + /**积分售价(适用于类型10,11)**/ + @io.swagger.annotations.ApiModelProperty(value="积分售价(适用于类型10,11)",name="creditPrice") + private Integer creditPrice; + @Transient private String salePriceStr; @@ -301,4 +305,12 @@ public class WxCouponChannelVo extends WxCouponChannel implements Serializable { public void setValidDays(Integer validDays) { this.validDays = validDays; } + + public Integer getCreditPrice() { + return creditPrice; + } + + public void setCreditPrice(Integer creditPrice) { + this.creditPrice = creditPrice; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java index bcc1a0b91..8472d1772 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java @@ -111,19 +111,34 @@ public class WxCouponOrderBVo extends WxCouponOrder{ @io.swagger.annotations.ApiModelProperty(value="商户列表",name="merchantVoList") private List merchantVoList; - @Transient - private Date startDate; + @Transient + private Date startDate; - @Transient - private Date endDate; + @Transient + private Date endDate; @Transient private Long couponId; @Transient private Integer couponType; + public Date getStartDate() { + return startDate; + } - @Override + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + @Override public Long getCouponId() { return couponId; } @@ -143,22 +158,6 @@ public class WxCouponOrderBVo extends WxCouponOrder{ this.couponType = couponType; } - public Date getStartDate() { - return startDate; - } - - public void setStartDate(Date startDate) { - this.startDate = startDate; - } - - public Date getEndDate() { - return endDate; - } - - public void setEndDate(Date endDate) { - this.endDate = endDate; - } - public String getTenantId() { return tenantId; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCreditHistoryVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCreditHistoryVo.java new file mode 100644 index 000000000..16a56902a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCreditHistoryVo.java @@ -0,0 +1,55 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class WxCreditHistoryVo { + + @io.swagger.annotations.ApiModelProperty(value="手机号",name="phone") + private String phone; + + @io.swagger.annotations.ApiModelProperty(value="姓名",name="name") + private String name; + + @io.swagger.annotations.ApiModelProperty(value="性别",name="sex") + private String sex; + + @io.swagger.annotations.ApiModelProperty(value="积分ID",name="creditId") + private String creditId; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value="用户ID",name="cUserId") + private Long cUserId; + /**总积分*/ + @io.swagger.annotations.ApiModelProperty(value="总积分",name="creditAmount") + private Integer creditAmount; + /**每笔积分明细*/ + @io.swagger.annotations.ApiModelProperty(value="每笔积分明细",name="creditNum") + private Integer creditNum; + /**积分类型*/ + @io.swagger.annotations.ApiModelProperty(value="积分类型",name="creditType") + private Integer creditType; + /**创建日期*/ + @io.swagger.annotations.ApiModelProperty(value="创建日期",name="createDate") + private Date createDate; + /**小票URL*/ + @io.swagger.annotations.ApiModelProperty(value="小票URL",name="receiptUrl") + private String receiptUrl; + + @io.swagger.annotations.ApiModelProperty(value="商户",name="merchantName") + private String merchantName; + + @io.swagger.annotations.ApiModelProperty(value="操作人类型",name="operator") + private Integer operatorType; + + @io.swagger.annotations.ApiModelProperty(value="操作人ID",name="operatorId") + private Long operatorId; + + @io.swagger.annotations.ApiModelProperty(value="操作人",name="operator") + private String operator; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSimpleVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSimpleVo.java new file mode 100644 index 000000000..ab8c80314 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSimpleVo.java @@ -0,0 +1,16 @@ +package com.iformall.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class WxMerchantSimpleVo { + + /**id**/ + @ApiModelProperty(value="id",name="id") + private Long id; + + /**商户名**/ + @ApiModelProperty(value="商户名",name="merchantName") + private String merchantName; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSubsidyVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSubsidyVo.java index 802c5cc59..1e5dcf4fb 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSubsidyVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSubsidyVo.java @@ -1,5 +1,6 @@ package com.iformall.domain.vo; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.iformall.domain.po.WxMerchantSubsidy; import lombok.Data; import lombok.EqualsAndHashCode; @@ -32,6 +33,7 @@ public class WxMerchantSubsidyVo extends WxMerchantSubsidy { private String remark; /**使用商户名**/ + @Excel(name="消费商户",width = 20,orderNum = "2") @io.swagger.annotations.ApiModelProperty(value="商户名",name="name") private String merchantName; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java index d0f0ca2af..828019d7d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java @@ -1,6 +1,10 @@ package com.iformall.domain.vo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + import javax.persistence.Id; +import java.util.List; +@JsonIgnoreProperties(value = {"handler"}) public class WxMerchantVo { private static final long serialVersionUID = 6687964942922444531L; @@ -30,6 +34,9 @@ public class WxMerchantVo { /**商户业态**/ @io.swagger.annotations.ApiModelProperty(value="商户业态",name="businessId") private Integer businessId; + /**商户子业态**/ + @io.swagger.annotations.ApiModelProperty(value="商户子业态",name="subBusinessId") + private Integer subBusinessId; /**商户业态**/ @io.swagger.annotations.ApiModelProperty(value="商户业态",name="parameter") private String parameter; @@ -53,6 +60,109 @@ public class WxMerchantVo { @io.swagger.annotations.ApiModelProperty(value = "是否显示在C端", name = "show") private Integer isPublic; + @io.swagger.annotations.ApiModelProperty(value = "店铺列表", name = "shopVoList") + private List shopVoList; + + @io.swagger.annotations.ApiModelProperty(value = "品牌名称", name = "brandName") + private String brandName; + + @io.swagger.annotations.ApiModelProperty(value = "品牌图", name = "brandImg") + private String brandImg; + + + @io.swagger.annotations.ApiModelProperty(value = "店面类型", name = "shopType") + private Integer shopType; + + @io.swagger.annotations.ApiModelProperty(value = "业态名称", name = "businessName") + private String businessName; + + + @io.swagger.annotations.ApiModelProperty(value = "email", name = "email") + private String email; + + + @io.swagger.annotations.ApiModelProperty(value = "副标题", name = "title") + private String title; + + + @io.swagger.annotations.ApiModelProperty(value = "封面图", name = "coverPicture") + private String coverPicture; + + @io.swagger.annotations.ApiModelProperty(value = "品牌简介", name = "summary") + private String summary; + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCoverPicture() { + return coverPicture; + } + + public void setCoverPicture(String coverPicture) { + this.coverPicture = coverPicture; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getShopType() { + return shopType; + } + + public void setShopType(Integer shopType) { + this.shopType = shopType; + } + + public String getBusinessName() { + return businessName; + } + + public void setBusinessName(String businessName) { + this.businessName = businessName; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getBrandImg() { + return brandImg; + } + + public void setBrandImg(String brandImg) { + this.brandImg = brandImg; + } + + public List getShopVoList() { + return shopVoList; + } + + public void setShopVoList(List shopVoList) { + this.shopVoList = shopVoList; + } + public Integer getIsPublic() { return isPublic; } @@ -98,6 +208,14 @@ public class WxMerchantVo { this.businessId = businessId; } + public Integer getSubBusinessId() { + return subBusinessId; + } + + public void setSubBusinessId(Integer subBusinessId) { + this.subBusinessId = subBusinessId; + } + public String getMerchantImgUrl() { return merchantImgUrl; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxNotRentShopVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxNotRentShopVo.java new file mode 100644 index 000000000..71e96de15 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxNotRentShopVo.java @@ -0,0 +1,78 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; + +public class WxNotRentShopVo { + + @Excel(name="商铺类型",width = 20,orderNum = "1", + replace = {"商铺_null", "固定点位_1", "临时促销点位_2", "宣传点位_3","ATM点位_4","仓库点位_5","其他点位_6"}) + private Integer pointType; + @Excel(name="商铺号",width = 20,orderNum = "2") + private String shopNumber; + @Excel(name="楼座",width = 20,orderNum = "3") + private Long building; + @Excel(name="楼层",width = 20,orderNum = "4") + private Long floor; + @Excel(name="建筑面积(㎡)",width = 20,orderNum = "5") + private String buildArea; + @Excel(name="计租面积(㎡)",width = 20,orderNum = "6") + private String operationArea; + @Excel(name="闲置时间(天)",width = 20,orderNum = "7") + private Integer freeDay; + + public Integer getPointType() { + return pointType; + } + + public void setPointType(Integer pointType) { + this.pointType = pointType; + } + + public String getShopNumber() { + return shopNumber; + } + + public void setShopNumber(String shopNumber) { + this.shopNumber = shopNumber; + } + + public Long getBuilding() { + return building; + } + + public void setBuilding(Long building) { + this.building = building; + } + + public Long getFloor() { + return floor; + } + + public void setFloor(Long floor) { + this.floor = floor; + } + + public String getBuildArea() { + return buildArea; + } + + public void setBuildArea(String buildArea) { + this.buildArea = buildArea; + } + + public String getOperationArea() { + return operationArea; + } + + public void setOperationArea(String operationArea) { + this.operationArea = operationArea; + } + + public Integer getFreeDay() { + return freeDay; + } + + public void setFreeDay(Integer freeDay) { + this.freeDay = freeDay; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderQueryVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderQueryVo.java index 1ad094c48..a18c1d0cd 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderQueryVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderQueryVo.java @@ -20,6 +20,8 @@ public class WxOrderQueryVo implements Serializable { @io.swagger.annotations.ApiModelProperty(value="结束时间",name="enddate") private Date enddate; + private Integer payment; + public String getTenantId() { return tenantId; } @@ -51,4 +53,12 @@ public class WxOrderQueryVo implements Serializable { public void setEnddate(Date enddate) { this.enddate = enddate; } + + public Integer getPayment() { + return payment; + } + + public void setPayment(Integer payment) { + this.payment = payment; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxShopVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxShopVo.java new file mode 100644 index 000000000..50648cdac --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxShopVo.java @@ -0,0 +1,111 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.iformall.domain.po.WxShop; + + +public class WxShopVo extends WxShop { + private static final long serialVersionUID = 6687964942922444531L; + + + @io.swagger.annotations.ApiModelProperty(value="楼座",name="buildingName") + @Excel(name="楼座",width = 20,orderNum = "3") + private String buildingName; + /**楼层号**/ + @io.swagger.annotations.ApiModelProperty(value="楼层",name="floorName") + @Excel(name="楼层",width = 20,orderNum = "4") + private String floorName; + + + @io.swagger.annotations.ApiModelProperty(value="商户ID",name="merchantId") + private Long merchantId; + + @Excel(name="租赁商户",width = 20,orderNum = "8") + @io.swagger.annotations.ApiModelProperty(value="商户名",name="merchantName") + private String merchantName; + + /*联系方式**/ + @io.swagger.annotations.ApiModelProperty(value="联系方式",name="linkPhone") + @Excel(name="负责人电话",width = 20,orderNum = "12") + private String linkPhone; + + @io.swagger.annotations.ApiModelProperty(value="联系人",name="linkPerson") + @Excel(name="负责人",width = 20,orderNum = "11") + private String linkPerson; + + @io.swagger.annotations.ApiModelProperty(value="品牌",name="brandName") + @Excel(name="品牌",width = 20,orderNum = "10") + private String brandName; + + @io.swagger.annotations.ApiModelProperty(value="经营业态",name="business") + @Excel(name="经营业态",width = 20,orderNum = "9") + private String business; + + public String getBuildingName() { + return buildingName; + } + + public void setBuildingName(String buildingName) { + this.buildingName = buildingName; + } + + public String getFloorName() { + return floorName; + } + + public void setFloorName(String floorName) { + this.floorName = floorName; + } + + public Long getMerchantId() { + return merchantId; + } + + public void setMerchantId(Long merchantId) { + this.merchantId = merchantId; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + + @Override + public String getLinkPhone() { + return linkPhone; + } + + @Override + public void setLinkPhone(String linkPhone) { + this.linkPhone = linkPhone; + } + + @Override + public String getLinkPerson() { + return linkPerson; + } + + @Override + public void setLinkPerson(String linkPerson) { + this.linkPerson = linkPerson; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getBusiness() { + return business; + } + + public void setBusiness(String business) { + this.business = business; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java index 9838377f0..1be27ae9f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java @@ -10,19 +10,16 @@ import java.util.List; @Data @EqualsAndHashCode(callSuper = true) public class WxWeappInfo extends WxAuthorizerInfo { - - /**小程序类型(1-B端 2-C端)*/ - @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") - private Integer type; - /**小程序名称*/ + @io.swagger.annotations.ApiModelProperty(value="小程序名称",name="name") private String name; public static enum Field { Id_ASC("ai.`id` ASC"),Id_DESC("ai.`id` DESC") + ,TenantID_ASC("ai.`tenant_id` ASC"),TenantID_DESC("ai.`tenant_id` DESC") + ,Type_ASC("ai.`type` ASC"),Type_DESC("ai.`type` DESC") ,AuthorizerAppid_ASC("ai.`authorizer_appid` ASC"),AuthorizerAppid_DESC("ai.`authorizer_appid` DESC") - ,HeadImg_ASC("ai.`head_img` ASC"),HeadImg_DESC("ai.`head_img` DESC") ,Alias_ASC("ai.`alias` ASC"),Alias_DESC("ai.`alias` DESC") ,QrcodeUrl_ASC("ai.`qrcode_url` ASC"),QrcodeUrl_DESC("ai.`qrcode_url` DESC") @@ -44,7 +41,6 @@ public class WxWeappInfo extends WxAuthorizerInfo { ,OpenAppid_ASC("ai.`open_appid` ASC"),OpenAppid_DESC("ai.`open_appid` DESC") ,BindOpenTime_ASC("ai.`bind_open_time` ASC"),BindOpenTime_DESC("ai.`bind_open_time` DESC") ,Name_ASC("a.`name` ASC"),Name_DESC("a.`name` DESC") - ,Type_ASC("a.`type` ASC"),Type_DESC("a.`type` DESC") ; private String value; Field(String value){ diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillAction.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillAction.java new file mode 100644 index 000000000..0471f7722 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillAction.java @@ -0,0 +1,40 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumBillAction { + SELF_SERVICE_PAY(1, "自助缴费"), + UPDATE_BILL(2, "变更账单"), + OFFLINE_PAY(3, "线下缴费"), + DEPOSIT_PAY(4, "押金缴费"), + DEPOSIT_RETURN(5, "押金退款"), + DEPOSIT_MODIFY(6, "押金变更"),; + + public static EnumBillAction getEnum(Integer code) { + for (EnumBillAction value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBillAction(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyType.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyType.java index c6bf1b61d..1b0760915 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyType.java @@ -9,6 +9,7 @@ public enum EnumBillDailyType { WATER(1,"水费"), POWER(2,"电费"), + AIR_CONDITIONING(3, "空调费"), ; public static EnumBillDailyType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillPayWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillPayWay.java new file mode 100644 index 000000000..813b45b67 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillPayWay.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumBillPayWay { + CASH(1, "现金缴费"), + ALIPAY(2, "支付宝缴费"), + WECHAT_PAY(3, "微信缴费"), + BANK(4, "银行卡转账缴费"), + OTHER(-1, "其他缴费"); + + public static EnumBillPayWay getEnum(Integer code) { + for (EnumBillPayWay value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBillPayWay(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillType.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillType.java index c9906c785..9cb32c36c 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillType.java @@ -12,7 +12,8 @@ public enum EnumBillType { PROPERTY(3,"物业"), WATER(4, "水费"), POWER(5, "电费"), - ROUTINE(6,"其他") + ROUTINE(6, "其他"), + AIR_CONDITIONING(7, "空调费"), ; public static EnumBillType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java index 1cd2df063..fcf76a503 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java @@ -14,7 +14,8 @@ public enum EnumBillTypeParam { WATER(5, "水费"), POWER(6, "电费"), ROUTINE(7, "其他费用"), - ATHER_DEPOSIT(8, "其他押金") + ATHER_DEPOSIT(8, "其他押金"), + AIR_CONDITIONING(9, "空调费") ; public static EnumBillTypeParam getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java b/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java index 29cbcb08e..0e52ff16b 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java @@ -12,7 +12,12 @@ public enum EnumBusiness { BUSINESS_ID3(3, "服饰"), BUSINESS_ID4(4, "亲子"), BUSINESS_ID5(5, "超市"), - BUSINESS_ID6(6, "其他"), + BUSINESS_ID6(6, "其它"), + BUSINESS_ID7(7, "美妆"), + BUSINESS_ID8(8, "珠宝"), + BUSINESS_ID9(9, "服务"), + BUSINESS_ID10(10, "家居") + ; public static EnumBusiness getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumChart.java b/mallinkService/src/main/java/com/iformall/enums/EnumChart.java index ac74c6d6d..ad9546384 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumChart.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumChart.java @@ -13,7 +13,7 @@ public enum EnumChart { HYYHSJ(6, "活跃用户数据"), XSSJ(7, "销售数据"), JDSJ(8, "解单数据"), - JRCNCLL(9, "今日场内车流量"), + JRCNCLL(9, "今日场内车流量"), // 合并至历史车流量 JRYBCPL(10, "今日已绑车牌量"), SSCLL(11, "实时车流量"), LSCLL(12, "历史车流量"), @@ -53,7 +53,14 @@ public enum EnumChart { SALE_CARD(45, "卡营销数据"), SALE_COUPON(46, "卷营销数据"), SALE_PRESS(47, "砍价营销数据"), - SALE_GROUP(48, "拼团营销数据"),; + SALE_GROUP(48, "拼团营销数据"), + + + INDEX_SHOP_RENT(49, "商铺出租数据"), + INDEX_BILL_RECE_RATE(50, "费用收缴数据"), + INDEX_COUPON_SCENE(51, "场景发券"), + INDEX_SALE_DATA(52, "营销数据"), + ; public static EnumChart getEnum(Integer code) { for (EnumChart value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java index 4fe09053d..4c4d4fca8 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java @@ -11,7 +11,9 @@ public enum EnumCouponChannelType { COUPON_CHANNEL_ID_GAME(4, "游戏"), COUPON_CHANNEL_ID_CARD(5, "卡频道"), COUPON_CHANNEL_ID_PRESS(6, "砍价频道"), - COUPON_CHANNEL_ID_ORDER_GROUP(7, "拼团频道") + COUPON_CHANNEL_ID_ORDER_GROUP(7, "拼团频道"), + COUPON_CHANNEL_ID_TOPIC(8, "专题"), + COUPON_CHANNEL_ID_CREDIT(50, "积分商城") ; public static EnumCouponChannelType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java index e6abcd534..c54dd044a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java @@ -4,7 +4,8 @@ package com.iformall.enums; * Created by Stormeye on 2018/08/09. */ public enum EnumCouponOrderStatus { - // 0-已领取/已购买/未核销/未使用/待使用,1:已核销/已使用,3:已过期,6:已作废 + // 券状态 0-已领取/已购买/未核销/未使用/待使用,1:已核销/已使用,2:已过期,3:已作废 + // 卡状态 4-使用中 5-已过期 6-已用完 7-已线下退款 COUPON_ORDER_USE_WAIT(0, "待使用"), COUPON_ORDER_USED(1, "已核销"), @@ -15,7 +16,7 @@ public enum EnumCouponOrderStatus { CARD_OVER_TIME(5, "已过期"), CARD_COMPLETE(6, "已用完"), CARD_RETURNED(7, "已线下退款"), - CARD_TRANSFER(8, "已转赠") + CARD_TRANSFER(8, "已转赠") /// 此状态不在wx_coupon_order中使用,已移到transfer表 ; public static EnumCouponOrderStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSms.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSms.java new file mode 100644 index 000000000..b9540866d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSms.java @@ -0,0 +1,35 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCouponSendSms { + + YES(1, "发送"), + NO(0, "不发送"); + + public static EnumCouponSendSms getEnum(Integer code) { + for (EnumCouponSendSms value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCouponSendSms(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java index 6e6fb08ba..a5ae1eef1 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java @@ -15,6 +15,8 @@ public enum EnumCouponType { COUPON_MULTIMCH(6, "通用券"), COUPON_PRESS(8, "砍价券"), COUPON_GROUP(9, "团购券"), + COUPON_CREDIT(50,"积分券"), + COUPON_CREDIT_PARK(51,"积分停车券"), CARD_MULTIMCH(100, "消费卡"), ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java b/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java index ea0ffe236..ed4ea9844 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java @@ -7,7 +7,7 @@ package com.iformall.enums; public enum EnumFlowKey { CONTRACT("contract_flow", "合同审批流程"), - BILL("bill_flow", "账单审批流程"), + BILL("end_bill_flow", "账单审批流程"), END_CONTRACT("end_contract_flow", "终止合同审批流程"), ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java new file mode 100644 index 000000000..3bfa720e1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java @@ -0,0 +1,40 @@ +package com.iformall.enums; + +/** + * Created by luozukai + * 短信模板 + */ +public enum EnumMailMsgModel { + MAIL_PASS_NODIFY(1, "审批通过通知"), + MAIL_BILL_WAIT_PAY(2, "待缴账单通知"), + MAIL_APPLY_NODIFY(3, "审批通知"), + MAIL_BILL_OWE(4, "欠缴账单通知"), + MAIL_ASSIGNEE_NODIFY(5, "代办通知"), + MAIL_REJECT_NODIFY(6, "驳回通知"), + ; + + public static EnumMailMsgModel getEnum(Integer code) { + for (EnumMailMsgModel value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMailMsgModel(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidyStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidyStatus.java index 343f67c0c..32ce95bd3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidyStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMerchantSubsidyStatus.java @@ -7,7 +7,7 @@ public enum EnumMerchantSubsidyStatus { NOT_SUBSIDY(0, "未补贴"), AUTO_SUBSIDIED(1, "已自动补贴"), - MANUAL_SUBSIDIED(1, "已手工补贴"), + MANUAL_SUBSIDIED(2, "已手工补贴"), ; public static EnumMerchantSubsidyStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java index 27dadc8b4..9c118be3c 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java @@ -7,13 +7,14 @@ package com.iformall.enums; public enum EnumMsgModel { // type,name MALL_APPLY(1, "申请试用"), - FLOW_ASSIGNEE_NODIFY(2, "代办通知"), + FLOW_ASSIGNEE_NODIFY(2, "待办通知"), FLOW_APPLY_NODIFY(3, "审批通知"), FLOW_PASS_NODIFY(4, "通过审批通知"), FLOW_REJECT_NODIFY(5, "驳回通知"), VALIDATION_CODE(6, "验证码"), BILL_WAIT_PAY(7, "账单待缴通知"), - BILL_OWE(8, "账单欠缴通知") + BILL_OWE(8, "账单欠缴通知"), + COUPON_SEND(9, "场景投放"), ; public static EnumMsgModel getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordDomain.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordDomain.java new file mode 100644 index 000000000..3e4cb1f5e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordDomain.java @@ -0,0 +1,40 @@ +package com.iformall.enums; + +/** + * Created by luozukai + * 域:0全部1sys 2a端 3c端 4b端 + */ +public enum EnumMsgRecordDomain { + ALL(0, "全部"), + SYS(2, "系统消息"), + A(3, "a端"), + C(4, "c端"), + B(5, "b端"), + USER(6, "用户"), + ; + + public static EnumMsgRecordDomain getEnum(Integer code) { + for (EnumMsgRecordDomain value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMsgRecordDomain(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index d212db91d..325eb8545 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -10,6 +10,8 @@ public enum EnumMsgRecordType { SMART_APP(4, "小程序"), PUBLIC(5, "公众号"), SYSTEM(6, "系统通知"), + SMART_APP_UNIFORM(7, "小程序统一消息"), + WEBSOCKET_APP(8, "小程序websocket"), ; public static EnumMsgRecordType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java index 75704bcc5..d8d922ed0 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java @@ -10,7 +10,8 @@ public enum EnumOrderType { COUPON(0,"券"), MICROPAY(1,"B收款码支付"), NATIVEPAY(2,"C扫码支付"), - PREPAIDCARD(3, "储值卡") + PREPAIDCARD(3, "储值卡"), + CREDIT(4,"积分支付") ; public static EnumOrderType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java index dcdba0369..00e464089 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustPeriod.java @@ -8,7 +8,9 @@ package com.iformall.enums; public enum EnumRentContractAdjustPeriod { ADJUST_PERIOD_DAY(1, "按日计租"), - ADJUST_PERIOD_MONTH(2, "按月计租"),; + ADJUST_PERIOD_MONTH(2, "按月计租"), + ADJUST_PERIOD_NAR_MONTH(3, "按自然月计租"), + ; public static EnumRentContractAdjustPeriod getEnum(Integer code) { for (EnumRentContractAdjustPeriod value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumScoreRules.java b/mallinkService/src/main/java/com/iformall/enums/EnumScoreRules.java new file mode 100644 index 000000000..8c1167f68 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumScoreRules.java @@ -0,0 +1,33 @@ +package com.iformall.enums; + +public enum EnumScoreRules { + + SCORE(1, "成长值"), + CREDIT(2, "积分") + ; + + public static EnumScoreRules getEnum(Integer code) { + for (EnumScoreRules value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumScoreRules(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumScoreType.java b/mallinkService/src/main/java/com/iformall/enums/EnumScoreType.java index bd99dfa10..610660149 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumScoreType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumScoreType.java @@ -13,7 +13,10 @@ public enum EnumScoreType { WECHAT_PHONE(6, "微信用户手机授权"), COMPLETE_INFO(7, "完善个人信息"), MEM_IMPORT(8, "会员导入"), - MEM_REDUCE(9, "会员成长值扣减"); + MEM_REDUCE(9, "会员成长值扣减"), + SPEND_CREDIT(10, "新增积分"), + CHANGE_CREDIT(11, "积分兑换"), + REDUCE_CREDIT(12, "消费积分"); public static EnumScoreType getEnum(Integer code) { for (EnumScoreType value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java index 38ad6f188..012faa9dd 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java @@ -7,11 +7,13 @@ public enum EnumTag { ID_1(1L, EnumTagType.ID_1, "男"), ID_2(2L, EnumTagType.ID_1, "女"), + ID_3(3L, EnumTagType.ID_2, "00后"), ID_4(4L, EnumTagType.ID_2, "90后"), ID_5(5L, EnumTagType.ID_2, "80后"), ID_6(6L, EnumTagType.ID_2, "70后"), ID_7(7L, EnumTagType.ID_2, "60后"), + ID_8(8L, EnumTagType.ID_3, "鼠"), ID_9(9L, EnumTagType.ID_3, "牛"), ID_10(10L, EnumTagType.ID_3, "虎"), @@ -24,6 +26,7 @@ public enum EnumTag { ID_17(17L, EnumTagType.ID_3, "鸡"), ID_18(18L, EnumTagType.ID_3, "狗"), ID_19(19L, EnumTagType.ID_3, "猪"), + ID_20(20L, EnumTagType.ID_4, "白羊座"), ID_21(21L, EnumTagType.ID_4, "金牛座"), ID_22(22L, EnumTagType.ID_4, "双子座"), @@ -36,16 +39,20 @@ public enum EnumTag { ID_29(29L, EnumTagType.ID_4, "摩羯座"), ID_30(30L, EnumTagType.ID_4, "水瓶座"), ID_31(31L, EnumTagType.ID_4, "双鱼座"), + ID_32(32L, EnumTagType.ID_5, "线上"), ID_33(33L, EnumTagType.ID_5, "线下"), + ID_34(34L, EnumTagType.ID_6, "高中"), ID_35(35L, EnumTagType.ID_6, "大专"), ID_36(36L, EnumTagType.ID_6, "本科"), ID_37(37L, EnumTagType.ID_6, "硕士"), ID_38(38L, EnumTagType.ID_6, "博士"), + ID_39(39L, EnumTagType.ID_7, "移动"), ID_40(40L, EnumTagType.ID_7, "联通"), ID_41(41L, EnumTagType.ID_7, "电信"), + ID_42(42L, EnumTagType.ID_8, "5000以下"), ID_43(43L, EnumTagType.ID_8, "5000~10000"), ID_44(44L, EnumTagType.ID_8, "10001~20000"), @@ -53,38 +60,46 @@ public enum EnumTag { ID_46(46L, EnumTagType.ID_8, "20001~30000"), ID_47(47L, EnumTagType.ID_8, "30001~50000"), ID_48(48L, EnumTagType.ID_8, "50001以上"), + ID_49(49L, EnumTagType.ID_9, "iphone"), ID_50(50L, EnumTagType.ID_9, "华为"), ID_51(51L, EnumTagType.ID_9, "VO"), ID_52(52L, EnumTagType.ID_9, "三星"), ID_53(53L, EnumTagType.ID_9, "小米"), ID_54(54L, EnumTagType.ID_9, "其他"), + ID_55(55L, EnumTagType.ID_10,"未婚"), ID_56(56L, EnumTagType.ID_10,"已婚"), ID_57(57L, EnumTagType.ID_10,"已婚有孩"), + ID_58(58L, EnumTagType.ID_11,"有车一族"), + ID_59(59L, EnumTagType.ID_12,"学生"), ID_60(60L, EnumTagType.ID_12,"上班族"), ID_61(61L, EnumTagType.ID_12,"企业高管"), ID_62(62L, EnumTagType.ID_12,"个体户"), ID_63(63L, EnumTagType.ID_12,"自由职业"), ID_64(64L, EnumTagType.ID_12,"其他"), + ID_65(65L, EnumTagType.ID_13,"租房"), ID_66(66L, EnumTagType.ID_13,"自购"), ID_67(67L, EnumTagType.ID_13,"宿舍"), - ID_68(68L, EnumTagType.ID_14,"服装"), - ID_69(69L, EnumTagType.ID_14,"服饰"), - ID_70(70L, EnumTagType.ID_14,"餐饮"), - ID_71(71L, EnumTagType.ID_14,"休闲娱乐"), - ID_72(72L, EnumTagType.ID_14,"家居"), - ID_73(73L, EnumTagType.ID_14,"图书音像"), - ID_74(74L, EnumTagType.ID_14,"母婴"), - ID_75(75L, EnumTagType.ID_14,"儿童"), - ID_76(76L, EnumTagType.ID_14,"生活服务"), + + ID_68(68L, EnumTagType.ID_14,"餐饮"), + ID_69(69L, EnumTagType.ID_14,"娱乐"), + ID_70(70L, EnumTagType.ID_14,"服饰"), + ID_71(71L, EnumTagType.ID_14,"亲子"), + ID_72(72L, EnumTagType.ID_14,"超市"), + ID_73(73L, EnumTagType.ID_14,"美妆"), + ID_74(74L, EnumTagType.ID_14,"珠宝"), + ID_75(75L, EnumTagType.ID_14,"服务"), + ID_76(76L, EnumTagType.ID_14,"家居"), + ID_77(77L, EnumTagType.ID_15,"中低端"), ID_78(78L, EnumTagType.ID_15,"中端"), ID_79(79L, EnumTagType.ID_15,"中高端"), ID_80(80L, EnumTagType.ID_15,"高端"), + ID_81(81L, EnumTagType.ID_16,"快时尚"), ID_82(82L, EnumTagType.ID_16,"轻奢"), ID_83(83L, EnumTagType.ID_16,"奢侈品"), @@ -96,44 +111,88 @@ public enum EnumTag { ID_89(89L, EnumTagType.ID_16,"日本品牌"), ID_90(90L, EnumTagType.ID_16,"韩国品牌"), ID_91(91L, EnumTagType.ID_16,"欧美品牌等"), - ID_92(92L, EnumTagType.ID_17,"轻餐"), - ID_93(93L, EnumTagType.ID_17,"小吃快餐"), - ID_94(94L, EnumTagType.ID_17,"西餐"), - ID_95(95L, EnumTagType.ID_17,"日料,中餐,甜点/咖啡"), - ID_96(96L, EnumTagType.ID_17,"火锅"), + + ID_92(92L, EnumTagType.ID_17,"西餐"), + ID_93(93L, EnumTagType.ID_17,"日本料理"), + ID_94(94L, EnumTagType.ID_17,"韩国料理"), + ID_95(95L, EnumTagType.ID_17,"东南亚菜"), + ID_96(96L, EnumTagType.ID_17,"自助餐"), + ID_97(97L, EnumTagType.ID_18,"工作日白天"), ID_98(98L, EnumTagType.ID_18,"工作日晚上"), ID_99(99L, EnumTagType.ID_18,"周末(含节假日)白天"), ID_100(100L, EnumTagType.ID_18,"周末(含节假日)晚上"), + ID_101(101L, EnumTagType.ID_19,"现金"), ID_102(102L, EnumTagType.ID_19,"移动支付"), ID_103(103L, EnumTagType.ID_19,"银行卡支付"), + ID_104(104L, EnumTagType.ID_20,"实惠型"), ID_105(105L, EnumTagType.ID_20,"享乐型"), ID_106(106L, EnumTagType.ID_20,"品质型"), + ID_107(107L, EnumTagType.ID_21,"低频"), ID_108(108L, EnumTagType.ID_21,"中频"), ID_109(109L, EnumTagType.ID_21,"高频"), + ID_110(110L, EnumTagType.ID_22,"低度"), ID_111(111L, EnumTagType.ID_22,"中度"), ID_112(112L, EnumTagType.ID_22,"高度"), + ID_113(113L, EnumTagType.ID_23,"低客单价"), ID_114(114L, EnumTagType.ID_23,"中客单价"), ID_115(115L, EnumTagType.ID_23,"高客单价"), + ID_116(116L, EnumTagType.ID_24,"口碑宣传型"), ID_117(117L, EnumTagType.ID_24,"纠结型客户"), ID_118(118L, EnumTagType.ID_24,"选择型客户"), ID_119(119L, EnumTagType.ID_24,"参与型客户"), ID_120(120L, EnumTagType.ID_24,"安静型客户"), + ID_121(121L, EnumTagType.ID_25,"时尚"), ID_122(122L, EnumTagType.ID_25,"旅游"), ID_123(123L, EnumTagType.ID_25,"运动"), ID_124(124L, EnumTagType.ID_25,"电玩"), ID_125(125L, EnumTagType.ID_25,"看书"), ID_126(126L, EnumTagType.ID_25,"其他"), + ID_127(127L, EnumTagType.ID_26,"附近住户"), ID_128(128L, EnumTagType.ID_26,"较远住户"), + ID_129(129L, EnumTagType.ID_17,"火锅"), + ID_130(130L, EnumTagType.ID_17,"特色菜"), + ID_131(131L, EnumTagType.ID_17,"私房菜"), + ID_132(132L, EnumTagType.ID_17,"素食"), + ID_133(133L, EnumTagType.ID_17,"烧烤"), + ID_134(134L, EnumTagType.ID_17,"小吃快餐"), + ID_135(135L, EnumTagType.ID_17,"川菜"), + ID_136(136L, EnumTagType.ID_17,"湘菜"), + ID_137(137L, EnumTagType.ID_17,"鲁菜"), + ID_138(138L, EnumTagType.ID_17,"粤菜"), + ID_139(139L, EnumTagType.ID_17,"湖北菜"), + ID_140(140L, EnumTagType.ID_17,"云贵菜"), + ID_141(141L, EnumTagType.ID_17,"东北菜"), + ID_142(142L, EnumTagType.ID_17,"面包店"), + ID_143(143L, EnumTagType.ID_17,"咖啡厅"), + ID_144(144L, EnumTagType.ID_17,"饮品店"), + + + ID_1000(1000L, EnumTagType.ID_50,"一天以内"), + ID_1001(1001L, EnumTagType.ID_50,"一周以内"), + ID_1002(1002L, EnumTagType.ID_50,"一月以内"), + ID_1003(1003L, EnumTagType.ID_50,"三月以内"), + ID_1004(1004L, EnumTagType.ID_50,"一年以内"), + ID_1005(1005L, EnumTagType.ID_50,"五年以内"), + ID_1006(1006L, EnumTagType.ID_50,"五年以上"), + ID_1007(1007L, EnumTagType.ID_50,"一年以上"), + ID_1008(1008L, EnumTagType.ID_50,"三月以上"), + ID_1009(1009L, EnumTagType.ID_50,"一月以上"), + ID_1010(1010L, EnumTagType.ID_50,"一周以上"), + ID_1011(1011L, EnumTagType.ID_50,"一天以上"), + + ID_1100(1100L, EnumTagType.ID_50,"今天生日"), + ID_1101(1101L, EnumTagType.ID_50,"本周生日"), + ID_1102(1102L, EnumTagType.ID_50,"当月生日"), ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java b/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java index 52a354b86..b9b4aff07 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTagGroup.java @@ -10,6 +10,7 @@ public enum EnumTagGroup { ID_3(3L, "消费偏好"), ID_4(4L, "行为偏好"), + ID_10(10L, "会员属性"), ; public static EnumTagGroup getEnum(Long code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java b/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java index 190816e4a..6a13ccd10 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTagType.java @@ -31,6 +31,11 @@ public enum EnumTagType { ID_24(24L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_4, "会员性格"), ID_25(25L, EnumTagTypeFlag.FLAG_NORMAL, EnumTagGroup.ID_4, "爱好"), ID_26(26L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_4, "生活半径"), + + ID_0(0L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员手机"), + ID_50(50L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员会龄"), + ID_51(51L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员等级"), + ID_52(52L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员生日"), ; public static EnumTagType getEnum(Long code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java b/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java index e0a960f11..06150bb75 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java @@ -7,9 +7,10 @@ public enum EnumTemplateType { // 1-核销成功消息, 2-核销失败消息 - VERIFY_SUCCESS(1, "核销成功消息"), - VERIFY_FAIL(2, "核销失败消息"), - AUDIT_MESSAGE(3, "审核结果通知") + VERIFY_SUCCESS(1, "核销成功消息"), // 小程序 + VERIFY_FAIL(2, "核销失败消息"), // 小程序 + AUDIT_MESSAGE(101, "公众号审核结果通知"), // 公众号 + VERIFY_RESULT(102, "公众号卡券核销通知"), // 公众号 ; public static EnumTemplateType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java b/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java new file mode 100644 index 000000000..a41dcd459 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumUserType.java @@ -0,0 +1,35 @@ +package com.iformall.enums; + +public enum EnumUserType { + + CUSER(1, "C端用户"), + CUSERBASIC(2, "C端用户(偏向A端)"), + BUSER(3, "B端用户"), + MALLUSER(4, "A端用户") + ; + + public static EnumUserType getEnum(Integer code) { + for (EnumUserType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumUserType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumWxTopicStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumWxTopicStatus.java new file mode 100644 index 000000000..42c2e6c2f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumWxTopicStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by luozukai + * 状态1生效2失效3作废 + */ +public enum EnumWxTopicStatus { + DEF(0, "保存"), + VAILD(1, "上架"), + INVAILD(2, "下架"), + CANCLE(3, "作废") + ; + + public static EnumWxTopicStatus getEnum(Integer code) { + for (EnumWxTopicStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumWxTopicStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/exception/BeanMappingException.java b/mallinkService/src/main/java/com/iformall/exception/BeanMappingException.java new file mode 100644 index 000000000..c7b281de1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/exception/BeanMappingException.java @@ -0,0 +1,17 @@ +package com.iformall.exception; + +public class BeanMappingException extends RuntimeException { + private static final long serialVersionUID = -3616240376550557648L; + + public BeanMappingException() { + this("Bean对象映射异常"); + } + + public BeanMappingException(String message) { + super(message); + } + + public BeanMappingException(Throwable cause) { + super(cause); + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java index f40d727c4..3d9c36042 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java @@ -24,11 +24,13 @@ public interface MallUserInfoMapper extends CommonMapper { void removeWebOpenId(MallUserInfo mallUserInfo); + void removeAllOpenId(MallUserInfo mallUserInfo); + MallUserInfo selectByPhone(@Param("phone") String phone, @Param("tenantId") String tenantId); Integer hasButtonPermission(@Param("userId") Long userId, @Param("permission") String permission); - long cntByUserName(Map params); + int cntByUserName(Map params); List selectUsersByPhone(@Param("phone") String phone); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java index ddd61732d..d14770682 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java @@ -9,13 +9,20 @@ public interface WxAuthorizerInfoMapper extends CommonMapper findList(WxAuthorizerInfo wxAuthorizerInfo); - List findVoList(WxWeappInfo wxWeappInfo); + WxAuthorizerInfo findMp(WxAuthorizerInfo wxAuthorizerInfo); - void updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); - - + int updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); - - + int updateRefreshToken(WxAuthorizerInfo wxAuthorizerInfo); + + int updateAccessToken(WxAuthorizerInfo wxAuthorizerInfo); + + List findWeappList(); + + List findWxMpList(); + + List findVoList(WxWeappInfo wxWeappInfo); + + WxWeappInfo findVo(WxWeappInfo wxWeappInfo); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillActionMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillActionMapper.java new file mode 100644 index 000000000..7788f7539 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillActionMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxBillAction; +import com.iformall.domain.po.WxShop; + +import java.util.List; + +/** + * @author gongbiao + */ +public interface WxBillActionMapper extends CommonMapper { + + List findList(WxBillAction wxBillAction); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java index a3c0f5384..1790beb4c 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java @@ -1,6 +1,7 @@ package com.iformall.mapper; import com.iformall.domain.vo.WxBillAll; +import com.iformall.domain.vo.WxBillAllVo; import java.util.List; import java.util.Map; @@ -11,7 +12,7 @@ import java.util.Map; public interface WxBillAllMapper { - List> list(WxBillAll record); + List list(WxBillAll record); Map queryOweInfo(WxBillAll record); @@ -23,4 +24,21 @@ public interface WxBillAllMapper { List> getOweBill(); + /** + * +group by账单类型 + * @return + */ + List> getOweBillForEmail(); + + /** + * +group by账单类型 + * @return + */ + List> getWaitPayBillForEmail(); + + /** + * 欠缴商户分页列表 + * @return + */ + List> getOweBillAsPage(WxBillAll record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java index a9280dbf0..dcc37d055 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java @@ -18,6 +18,10 @@ public interface WxBillDepositMapper extends CommonMapper { Map queryPayInfo(Map params); + Map queryOweInfoAll(Map params); + + Map queryPayInfoAll(Map params); + void updateNotPaidStatus(Map params); void updateWaitPayStatus(Map params); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillOtherMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillOtherMapper.java index d395b88fa..4779434c1 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillOtherMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillOtherMapper.java @@ -19,4 +19,7 @@ public interface WxBillOtherMapper extends CommonMapper { List> queryBillList(WxBillOther record); + Map queryPayInfo(Map params); + + Map queryOweInfo(Map params); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java index 866a4e798..9d824f204 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java @@ -20,6 +20,8 @@ public interface WxBillPropertyMapper extends CommonMapper Map queryPayInfo(Map params); + Map queryOweInfo(Map params); + void updateNotPaidStatus(Map params); void updateWaitPayStatus(Map params); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java index da57cbe32..91f11f8ec 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java @@ -18,6 +18,8 @@ public interface WxBillRentMapper extends CommonMapper { Map queryPayInfo(Map params); + Map queryOweInfo(Map params); + void updateNotPaidStatus(Map params); void updateWaitPayStatus(Map params); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBusinessMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBusinessMapper.java index 7c4274677..13c167507 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBusinessMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBusinessMapper.java @@ -7,10 +7,7 @@ import com.iformall.domain.po.WxBusiness; public interface WxBusinessMapper extends CommonMapper { List findList(WxBusiness wxBusiness); - - - - - + List findListAll(); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java index 6c2baeb62..0868b8778 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java @@ -10,6 +10,10 @@ import java.util.List; public interface WxCUserBasicInfoMapper extends CommonMapper { + long findCountByFilter(WxCUserBasicInfoDto dto); + + List findListByFilter(WxCUserBasicInfoDto dto); + List findList(WxCUserBasicInfo wxCUserBasicInfo); void updateScore(WxCUserBasicInfo record); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java index 00fe3c653..ff4f07394 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java @@ -15,6 +15,8 @@ public interface WxCUserMapper extends CommonMapper { WxCUser findByOpenId(WxCUser record); + WxCUser findByUnionId(WxCUser record); + WxCUser findByToken(String token); long findCount(WxCUserBasicInfoDto dto); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserTagsMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserTagsMapper.java index 0691e259f..58bef4b85 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserTagsMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserTagsMapper.java @@ -12,14 +12,6 @@ public interface WxCUserTagsMapper extends CommonMapper { List findList(WxCUserTags wxCUserTags); - long findCountByTags(@Param("tagIds")String tagIds, @Param("tenantId")String tenantId); - - long findCUserCountByTags(@Param("tagIds")String tagIds, @Param("tenantId")String tenantId); - - List findByTags(@Param("tagIds")String tagIds,@Param("tenantId")String tenantId); - - List findCUserByTags(@Param("tagIds")String tagIds,@Param("tenantId")String tenantId); - long countUser(@Param("tagIds")String tagIds,@Param("tenantId")String tenantId, @Param("startTime")Date startTime,@Param("endTime")Date endTime); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java index 6a0bfa2aa..f22e66c3a 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java @@ -11,11 +11,13 @@ public interface WxCardSpendMapper extends CommonMapper { void updateByCond(WxCardSpend wxCardSpend); - List findCardSpendVoList(WxCardSpend wxCardSpend); + int findCount(WxCardSpend wxCardSpend); - List> sumCardSpendVoForMerchant(WxCardSpend wxCardSpend); + List findCardSpendVoList(WxCardSpendVo wxCardSpend); - List> sumCardSpendVoForOwner(WxCardSpend wxCardSpend); + List> sumCardSpendVoForMerchant(WxCardSpendVo wxCardSpend); + + List> sumCardSpendVoForOwner(WxCardSpendVo wxCardSpend); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java index 72d6514de..db9f2055f 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java @@ -7,10 +7,8 @@ import com.iformall.domain.po.WxComponentVerifyTicket; public interface WxComponentVerifyTicketMapper extends CommonMapper { List findList(WxComponentVerifyTicket wxComponentVerifyTicket); - - - - + int updateAccessToken(WxComponentVerifyTicket wxComponentVerifyTicket); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java index 878ddcff9..79edd18fc 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java @@ -2,6 +2,7 @@ package com.iformall.mapper; import java.util.*; import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxTopic; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponChannelVo; import com.iformall.domain.po.WxCouponChannel; @@ -28,5 +29,6 @@ public interface WxCouponChannelMapper extends CommonMapper { List pressPaymentHistory(WxCoupon wxCoupon); String pressSuccRate(WxCoupon wxCoupon); Long sumJoin(WxCoupon wxCoupon); + + + List findCouponByTopic(WxTopic wxTopic); + + Long priceCouponCancelCount(WxCoupon wxCoupon); + + List findSaleCardCountHistory(WxCoupon wxCoupon); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index 830632407..9a90ce41a 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -12,13 +12,15 @@ import java.util.Map; public interface WxCouponOrderMapper extends CommonMapper { - List findList(WxCouponOrder wxCouponOrder); - Integer countList(WxCouponOrder wxCouponOrder); + //统一的计数接口 + int findCount(WxCouponOrder wxCouponOrder); + //统一额度统计接口 + int queryPriceTotal(WxCouponOrder wxCouponOrder); - Integer dayCountCarList(Map params); - List findCarListOfCUser(WxCouponOrder wxCouponOrder); + List findList(WxCouponOrder wxCouponOrder); + List findCarListOfCUser(WxCouponOrder wxCouponOrder); List findListOfOrderedByDate(Map dateMap); List findListOfVerifiedByDate(Map dateMap); @@ -30,19 +32,6 @@ public interface WxCouponOrderMapper extends CommonMapper { WxCouponOrderCVo findDetailOfCUser(@Param("id")Long id); List findListOfAdmin(WxCouponOrderBVo wxCouponOrder); WxCouponOrderBVo findDetailOfAdmin(@Param("id")Long id); - /** - * 查询用户核销/领券数 - * @param cUserId - * @param startTime - * @param endTime - * @return - */ - int findOrderedCountByCUser(@Param("cUserId")Long cUserId,@Param("startTime") Date startTime,@Param("endTime")Date endTime); - int findVerifiedCountByCUser(@Param("cUserId")Long cUserId,@Param("startTime") Date startTime,@Param("endTime")Date endTime); - - - - //营销报表 券数据图表 List couponDataMap(HashMap params); @@ -54,14 +43,6 @@ public interface WxCouponOrderMapper extends CommonMapper { List touchUsersReportList(HashMap params); //返回日期格式yy-MM-dd - /** - * 查询商场领券数 - * @param tenantId - * @param startTime - * @param endTime - * @return - */ - int findCountByDateLimit(@Param("tenantId")String tenantId,@Param("startTime") Date startTime,@Param("endTime")Date endTime); /** * 日期分组 消费总数 * @param tenantId @@ -70,28 +51,10 @@ public interface WxCouponOrderMapper extends CommonMapper { * @return */ List queryPriceTotalGroup(@Param("tenantId")String tenantId, @Param("startTime") Date startTime, @Param("endTime")Date endTime); - /** - * 查询时间段内消费总数 - * @param tenantId - * @param startTime - * @param endTime - * @return - */ - int queryPriceTotal(@Param("tenantId")String tenantId, @Param("startTime") Date startTime, @Param("endTime")Date endTime); List queryForSceneRepotyHistoryVerified(HashMap params); List queryForSceneRepotyHistoryOrdered(HashMap params); - /** - * 查询核销/领券数 - * @param startTime - * @param endTime - * @return - */ - int findOrderedCount(@Param("tenantId")String tenantId, @Param("startTime") Date startTime,@Param("endTime")Date endTime); - int findVerifiedCount(@Param("tenantId")String tenantId, @Param("startTime") Date startTime,@Param("endTime")Date endTime); - - List findExpiredFreeCouponOrderByValidDate(); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java new file mode 100644 index 000000000..a6c101581 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java @@ -0,0 +1,21 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxScoreHistory; +import com.iformall.domain.vo.WxCreditHistoryVo; +import com.iformall.domain.po.WxCreditHistory; + +public interface WxCreditHistoryMapper extends CommonMapper { + + List findList(WxCreditHistory wxCreditHistory); + + List findListMore(WxCreditHistory wxCreditHistory); + + int loginCount(WxCreditHistory wxCreditHistory); + + int creditAmount(Long cUserId); + + int countList(WxCreditHistory wxCreditHistory); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java index 26d00aa9b..6a3e0b6b4 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java @@ -9,4 +9,8 @@ public interface WxFlowRecordMapper extends CommonMapper { List findList(WxFlowRecord flowRecord); void updateCurrStatus(WxFlowRecord record); + + List myHandelList(WxFlowRecord flowRecord); + + Integer myHandelListTotal(WxFlowRecord flowRecord); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgMapper.java index 51665fdc0..c270f1db8 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgMapper.java @@ -2,7 +2,7 @@ package com.iformall.mapper; import java.util.*; import com.iformall.common.CommonMapper; -import com.iformall.domain.po.WxMsg; +import com.iformall.domain.po.msg.WxMsg; public interface WxMsgMapper extends CommonMapper { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java index 0cc02bf2d..bfaff6bbb 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java @@ -1,8 +1,8 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; -import com.iformall.domain.po.BaseMsg; -import com.iformall.domain.po.WxMsgRecord; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.WxMsgRecord; import java.util.List; diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java index ed4bbb8b4..6768f7cc8 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java @@ -1,8 +1,10 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxOrderGroup; +import com.iformall.domain.vo.WxCouponStatisVo; import com.iformall.domain.vo.WxOrderGroupMarketing; import java.util.List; @@ -31,5 +33,8 @@ public interface WxOrderGroupMapper extends CommonMapper { long queryOrderGroupPeopleCount(Map params); + long queryOrderGroupVerifyCount(Map params); + + List queryOrderGroupCountHistory(WxCoupon wxCoupon); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java index 25b866896..158fb06e9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java @@ -34,7 +34,9 @@ public interface WxPropertyContractMapper extends CommonMapper getRentContractList(Map params); + List getRentContractListByShop(Map params); + + List getRentContractListByPoint(Map params); void updateApplyStatus(WxPropertyContract wxPropertyContract); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java index 1d452a296..6aed6be26 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java @@ -9,7 +9,7 @@ import java.util.Map; /** * @author gongbiao */ -public interface WxRentContractMapper extends CommonMapper { +public interface WxRentContractMapper extends CommonMapper { List findList(WxRentContract wxRentContract); @@ -44,4 +44,11 @@ public interface WxRentContractMapper extends CommonMapper getMerchants(WxRentContract wxRentContract); + + int selectRentContractCountByShopId(WxRentContract wxRentContract); + + void updateInvalidContract(WxRentContract record); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java index 630277d27..c69d8e01f 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java @@ -2,6 +2,7 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxShop; +import com.iformall.domain.vo.WxShopVo; import java.util.List; import java.util.Map; @@ -26,5 +27,9 @@ public interface WxShopMapper extends CommonMapper { int hasShopNumber(WxShop wxShop); - List> findListWithMerchantMap(WxShop record); + List findListWithMerchantMap(WxShop record); + + List findShopVoList(Map map); + + Long getCountByWxShop(WxShop wxShop); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxSubBusinessMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxSubBusinessMapper.java new file mode 100644 index 000000000..58ddd2cf2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxSubBusinessMapper.java @@ -0,0 +1,14 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxSubBusiness; + +import java.util.List; + +public interface WxSubBusinessMapper extends CommonMapper { + + List findList(WxSubBusiness wxSubBusiness); + + List findListAll(); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxTagsMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxTagsMapper.java index dbb6aafe9..9a5c7b039 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxTagsMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxTagsMapper.java @@ -4,9 +4,10 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxTags; import java.util.List; +import java.util.Map; public interface WxTagsMapper extends CommonMapper { List findList(WxTags wxTags); - List getByName(String name); + List findListAll(); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxTopicMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxTopicMapper.java new file mode 100644 index 000000000..66ffeb0b5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxTopicMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxTopic; +import java.util.List; + +public interface WxTopicMapper extends CommonMapper { + + List findList(WxTopic wxTopic); + + List findExist(WxTopic wxTopic); + + WxTopic show(WxTopic record); + + void updateStatus(WxTopic record); +} diff --git a/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java b/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java index 505e04406..93c836a64 100644 --- a/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java +++ b/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java @@ -1,6 +1,6 @@ package com.iformall.mq; -import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.msg.BaseMsg; public interface MqBaseProducer { diff --git a/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java b/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java index 5dddd82bd..f9dd20ffd 100644 --- a/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java +++ b/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java @@ -1,6 +1,6 @@ package com.iformall.mq.impl; -import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.msg.BaseMsg; import com.iformall.enums.EnumMsgRecordStatus; import com.iformall.mapper.WxMsgRecordMapper; import com.iformall.mq.MQConfig; diff --git a/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java b/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java index 63e328acb..25ac16e20 100644 --- a/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java +++ b/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java @@ -1,15 +1,12 @@ package com.iformall.mq.impl; -import com.iformall.domain.po.BaseMsg; -import com.iformall.domain.po.WxMsg; -import com.iformall.domain.po.WxMsgRecord; +import com.iformall.domain.po.msg.BaseMsg; import com.iformall.enums.EnumMsgRecordStatus; import com.iformall.mapper.WxMsgRecordMapper; import com.iformall.mq.MQConfig; import com.iformall.mq.MqBaseProducer; import com.iformall.service.WxMsgRecordService; import com.iformall.utils.JsonUtil; -import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendResult; diff --git a/mallinkService/src/main/java/com/iformall/service/ExcelService.java b/mallinkService/src/main/java/com/iformall/service/ExcelService.java new file mode 100644 index 000000000..21563014c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/ExcelService.java @@ -0,0 +1,115 @@ +package com.iformall.service; + + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import com.iformall.common.ErrorCode; +import com.iformall.exception.MallinkException; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Workbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; + +@Service +public class ExcelService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + public static void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) + { + ExportParams exportParams = new ExportParams(title, sheetName); + exportParams.setCreateHeadRows(isCreateHeader); + defaultExport(list, pojoClass, fileName, response, exportParams); + } + + public static void exportExcel(List list, String title, String sheetName, Class pojoClass,String fileName, HttpServletResponse response) + { + defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName)); + } + + public static void exportExcel(List> list, String fileName, HttpServletResponse response) + { + defaultExport(list, fileName, response); + } + + + private static void defaultExport(List list, Class pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) + { + Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list); + if (workbook != null); + downLoadExcel(fileName, response, workbook); + } + + private static void defaultExport(List> list, String fileName, HttpServletResponse response) + { + Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF); + if (workbook != null); + downLoadExcel(fileName, response, workbook); + } + + private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) + { + try { + response.setCharacterEncoding("UTF-8"); + response.setHeader("content-Type", "application/vnd.ms-excel"); + response.setHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); + workbook.write(response.getOutputStream()); } + catch (IOException e) + { + throw new MallinkException(ErrorCode.EXCEL_EXPORT_ERROR.getCode(),e.getMessage()); + } + } + + public static List importExcel(String filePath,Integer titleRows,Integer headerRows, Class pojoClass){ + if (StringUtils.isBlank(filePath)){ + return null; + } + ImportParams params = new ImportParams(); + params.setTitleRows(titleRows); + params.setHeadRows(headerRows); + List list = null; + try { + list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params); + }catch (NoSuchElementException e){ + throw new MallinkException(ErrorCode.EXCEL_IMPORT_ERROR.getCode(),"模板不能为空"); + } catch (Exception e) { + e.printStackTrace(); + throw new MallinkException(ErrorCode.EXCEL_IMPORT_ERROR.getCode(),e.getMessage()); + } + return list; + } + + public static List importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class pojoClass) { + if (file == null) { + return null; + } + ImportParams params = new ImportParams(); + params.setTitleRows(titleRows); + params.setHeadRows(headerRows); + List list = null; + try { + list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params); + } catch (NoSuchElementException e) { + throw new MallinkException(ErrorCode.EXCEL_IMPORT_ERROR.getCode(),"excel文件不能为空"); + } catch (Exception e) { + throw new MallinkException(ErrorCode.EXCEL_IMPORT_ERROR.getCode(),e.getMessage()); + } + return list; + + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java index 577ff348f..a5444c382 100644 --- a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java @@ -25,7 +25,7 @@ public interface MallUserInfoService { * @return */ int cntUserList(MallUserInfo record); - + /** * 根据Id获得实体 * @@ -52,7 +52,13 @@ public interface MallUserInfoService { * 查询用户名总数,用于校验用户名是否重复 * @param username */ - long cntByUserName(String username); + int cntByUserName(String username); + + /** + * 查询手机号,用于校验手机号是否重复 + * @param phone + */ + int cntByUserPhone(String phone); /** * 根据用户名查询用户对象 @@ -137,6 +143,8 @@ public interface MallUserInfoService { void cleanWebOpenId(MallUserInfo user); + void cleanAllOpenId(MallUserInfo user); + /** * 根据条件用户列表 * @return diff --git a/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java b/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java index 01e6d7e44..82f7af593 100644 --- a/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java +++ b/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java @@ -16,6 +16,8 @@ public interface MarkingDataReportService { Map getSceneData(String tenantId); + Map getSceneDataHistory(String tenantId,String startDate,String endDate); + PageInfo getCouponDataList(String tenantId, MarkingCouponDataReportDto markingCouponDataReportDto, Integer pageIndex, Integer pageSize); PageInfo getSceneDataList(String tenantId, MarkingCouponDataReportDto markingCouponDataReportDto, Integer pageIndex, Integer pageSize); diff --git a/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java b/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java index de26477ef..9a378261a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java @@ -63,18 +63,4 @@ public interface WxAppinfoService { */ void deleteById(Long id); - - /** - * 更新accessToken - * @param appId - */ - void ctokenUpdate(String appId); - - /** - * 位置码/导购码生成 - */ - void exportQrcode(HttpServletRequest request, HttpServletResponse response, - String appId, int type, String pageUrl, String sceneParam, - int withText, String text1, String text2); - } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillActionService.java b/mallinkService/src/main/java/com/iformall/service/WxBillActionService.java new file mode 100644 index 000000000..f6bc6777d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxBillActionService.java @@ -0,0 +1,18 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; + +/** + * @author gongbiao + */ +public interface WxBillActionService { + + PageInfo listAsPage(WxBillAction record, Integer pageIndex, Integer pageSize); + + int save(WxBillAction action); + + int modifyBill(WxBillAction wxBillAction, MallUserInfo mallUserInfo); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index 27652f0bd..da6d55718 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -2,7 +2,6 @@ package com.iformall.service; import com.iformall.common.ResultData; import com.iformall.domain.vo.WxBillAll; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -26,4 +25,23 @@ public interface WxBillAllService { Object getBillInfo(WxBillAll wxBillAll); Long hasOweBill(Long contractId,Integer type); + + /** + * 发送待缴通知邮件 + */ + void sendWaitPayBillEmail(); + + /** + * 发送欠缴通知邮件 + */ + void sendOweBillForEmail(); + + /** + * 欠缴商户分页列表 + * @return + */ + Map getOweBillAsPage(WxBillAll record, Integer pageNum, Integer pageSize); + + + void exportOweMerchant(WxBillAll record, HttpServletRequest request, HttpServletResponse response); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillDailyService.java b/mallinkService/src/main/java/com/iformall/service/WxBillDailyService.java index 797d43705..82d9ce13f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillDailyService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillDailyService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillDaily; import java.util.Map; @@ -34,9 +35,10 @@ public interface WxBillDailyService { /** * 保存或更新实体 * - * @param record - */ - ResultData saveOrUpdate(WxBillDaily record); + * @param record + * @param user + */ + ResultData saveOrUpdate(WxBillDaily record, MallUserInfo user); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java b/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java index 8f9e3ca48..5bd145511 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillDeposit; import java.util.Map; @@ -31,9 +32,10 @@ public interface WxBillDepositService { /** * 保存或更新实体 * - * @param record - */ - ResultData saveOrUpdate(WxBillDeposit record); + * @param record + * @param user + */ + ResultData saveOrUpdate(WxBillDeposit record, MallUserInfo user); /** * 根据Id删除实体 @@ -45,7 +47,7 @@ public interface WxBillDepositService { ResultData updatePaid(Long id); - ResultData returnDeposit(WxBillDeposit wxBillDeposit); + ResultData returnDeposit(WxBillDeposit wxBillDeposit, MallUserInfo user); ResultData adjustDeposit(WxBillDeposit wxBillDeposit); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java b/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java index 556ad8c88..63dbfaf30 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java @@ -2,8 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillDeposit; -import com.iformall.domain.po.WxBillOther; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillOtherDeposit; import java.util.Map; @@ -37,8 +36,9 @@ public interface WxBillOtherDepositService { * 保存或更新实体 * * @param record + * @param user */ - ResultData saveOrUpdate(WxBillOtherDeposit record); + ResultData saveOrUpdate(WxBillOtherDeposit record, MallUserInfo user); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillOtherService.java b/mallinkService/src/main/java/com/iformall/service/WxBillOtherService.java index ab3390573..aeb5cbe4e 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillOtherService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillOtherService.java @@ -2,7 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillOther; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillOther; import java.util.Map; @@ -35,9 +35,10 @@ public interface WxBillOtherService { /** * 保存或更新实体 * - * @param record - */ - ResultData saveOrUpdate(WxBillOther record); + * @param record + * @param user + */ + ResultData saveOrUpdate(WxBillOther record, MallUserInfo user); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java index 6663d40bb..832446725 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java @@ -2,7 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillDeposit; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillPropertyDeposit; import java.util.Map; @@ -36,8 +36,9 @@ public interface WxBillPropertyDepositService { * 保存或更新实体 * * @param record + * @param user */ - ResultData saveOrUpdate(WxBillPropertyDeposit record); + ResultData saveOrUpdate(WxBillPropertyDeposit record, MallUserInfo user); /** * 根据Id删除实体 @@ -49,7 +50,7 @@ public interface WxBillPropertyDepositService { ResultData updatePaid(Long id); - ResultData returnDeposit(WxBillPropertyDeposit wxBillPropertyDeposit); + ResultData returnDeposit(WxBillPropertyDeposit wxBillPropertyDeposit, MallUserInfo user); ResultData adjustDeposit(WxBillPropertyDeposit wxBillPropertyDeposit); diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java index b194d6d32..bd2640c70 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java @@ -2,7 +2,9 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxBillRent; import java.util.Map; @@ -36,8 +38,9 @@ public interface WxBillPropertyService { * 保存或更新实体 * * @param record + * @param user */ - ResultData saveOrUpdate(WxBillProperty record); + ResultData saveOrUpdate(WxBillProperty record, MallUserInfo user); /** * 根据Id删除实体 @@ -53,4 +56,6 @@ public interface WxBillPropertyService { Object detail(Long id); + ResultData updateLatePayStatus(WxBillProperty wxBillProperty); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java b/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java index 0c1192d09..900a4ecc1 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java @@ -3,6 +3,8 @@ package com.iformall.service; import java.util.*; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillProperty; import com.iformall.domain.po.WxBillRent; /** @@ -34,8 +36,9 @@ public interface WxBillRentService { * 保存或更新实体 * * @param record + * @param user */ - ResultData saveOrUpdate(WxBillRent record); + ResultData saveOrUpdate(WxBillRent record, MallUserInfo user); /** * 根据Id删除实体 @@ -54,4 +57,6 @@ public interface WxBillRentService { ResultData updateRevenue(WxBillRent wxBillRent); + ResultData updateLatePayStatus(WxBillRent wxBillRent); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBusinessService.java b/mallinkService/src/main/java/com/iformall/service/WxBusinessService.java index b656ef289..f62e0674b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBusinessService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBusinessService.java @@ -23,7 +23,14 @@ public interface WxBusinessService { * @param record * @return */ - List getList(WxBusiness record); + List findList(WxBusiness record); + + /** + * 查询全部列表 + * + * @return + */ + List findListAll(); /** * 根据Id获得实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java index a615ac711..b07a2717f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java @@ -2,17 +2,30 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; +import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCarPayRecord; import com.iformall.domain.po.WxTags; import com.iformall.domain.vo.CUserBaseInfoT; +import com.iformall.domain.vo.WxTagsGroupVo; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; public interface WxCUserBasicInfoService { + /** + * 根据租户ID获取会员过滤器列表 + * + * @return + */ + List listFilters(String tenantId); + long countByFilter(String tenantId, List filterList); + List listByFilter(String tenantId, List filterList); + List listByFilterList(String tenantId, List filterList); /** * 根据实体查询分页列表 * @@ -28,7 +41,7 @@ public interface WxCUserBasicInfoService { * @param record * @return */ - int cntUserList(WxCUserBasicInfo record); + int countUser(WxCUserBasicInfo record); /** * 根据Id获得实体 @@ -105,7 +118,7 @@ public interface WxCUserBasicInfoService { void exportTemplate(HttpServletRequest request, HttpServletResponse response, String tenantId); - void importOneMem(String tenantId, String importKey, List tagList, CUserBaseInfoT uBase); + void importOneMem(String tenantId, String importKey, List tagList, CUserBaseInfoT uBase,MallUserInfo mallUserInfo); long findCount(WxCUserBasicInfoDto dto); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java index 98137dde9..572ed9991 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java @@ -1,11 +1,10 @@ package com.iformall.service; -import java.util.HashMap; -import java.util.List; - import com.github.pagehelper.PageInfo; import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxCUser; +import me.chanjar.weixin.mp.bean.result.WxMpUser; public interface WxCUserService { @@ -28,20 +27,20 @@ public interface WxCUserService { WxCUser getById(Long id); /** - * 根据token获得实体 + * 根据openId获得实体 * - * @param token + * @param record * @return */ - WxCUser getByToken(String token); + WxCUser getByOpenId(WxCUser record); /** - * 根据openId获得实体 + * 根据object获得实体 * * @param record * @return */ - WxCUser getByOpenId(WxCUser record); + WxCUser getByObject(WxCUser record); /** * 保存或更新实体 @@ -50,6 +49,14 @@ public interface WxCUserService { */ int saveOrUpdate(WxCUser record); + /** + * 保存或更新实体 + * + * @param mpUser + * @param authorizerInfo + */ + int saveOrUpdateMpUser(WxMpUser mpUser, WxAuthorizerInfo authorizerInfo); + /** * 根据Id删除实体 * @@ -75,8 +82,4 @@ public interface WxCUserService { PageInfo listByChannel(WxCUser user, Integer pageIndex, Integer pageSize); long countByChannel(WxCUser user); - /** - * 计算当前用户成长值 - */ - void scoreCalculate(WxCUser user, boolean isNew); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserTagsService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserTagsService.java index b2e243a13..f5e74394f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserTagsService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserTagsService.java @@ -16,8 +16,6 @@ public interface WxCUserTagsService { * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit * @return */ PageInfo listAsPage(WxCUserTags record, Integer pageIndex, Integer pageSize); @@ -43,29 +41,11 @@ public interface WxCUserTagsService { * @param id */ void deleteById(Long id); - - - /** - * - * tagIds查询用户user信息集合(会员列表中的user) - * @param tagIds - * @return - */ - List findByTag(String tenantId, List tagIds); - - /** - * - * tagIds查询用户user信息集合(登陆过C端的用户,并且保有手机号) - * @param tagIds - * @return - */ - List findCUserByTag(String tenantId, List tagIds); - long countUser(String tenantId, Long tagId, Date startTime, Date endTime ); List findTagList(String tenantId, List tagIds); - List findTagListFromCUser(String tenantId, List tagIds); + List assignTags(List tagIdList, WxCUserBasicInfo user); List triggerAssignTags(EnumAssignTagsTrigger trigger, Object obj); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserTokenService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserTokenService.java new file mode 100644 index 000000000..0f38f3416 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserTokenService.java @@ -0,0 +1,21 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxCUser; + +public interface WxCUserTokenService { + + /** + * 根据token获得实体 + * + * @param token + * @return + */ + WxCUser getByToken(String token); + + /** + * 保存或更新实体 + * + * @param record + */ + int saveOrUpdate(WxCUser record); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index ec4401ec8..9314b254b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -151,13 +151,10 @@ public interface WxCouponOrderService { */ List queryPriceTotalGroup(String tenantId, Date startTime,Date endTime); /** - * 查询时间段内消费总数 - * @param tenantId - * @param startTime - * @param endTime + * 查询消费额 * @return */ - int queryPriceTotal(String tenantId, Date startTime, Date endTime); + int queryPriceTotal(WxCouponOrder wxCouponOrder); ////// ------- 卡 diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index 4a6fcb2a0..611ea7ea6 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -139,6 +139,12 @@ public interface WxCouponService { */ List priceCouponPaymentCount(WxCoupon wxCoupon); + /** + * 有价卷退款数量 + * @return + */ + Long priceCouponCancelCount(WxCoupon wxCoupon); + String findSumPriceSaleMoney(WxCoupon wxCoupon); String findSumPricePayMent(WxCoupon wxCoupon); String findSumSubsidyMoney(WxCoupon wxCoupon); @@ -174,4 +180,13 @@ public interface WxCouponService { * @return */ Long sumJoin(WxCoupon wxCoupon); + + + + /** + * 查询售出卡数量历史 + * @return + */ + List findSaleCardCountHistory(WxCoupon wxCoupon); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java b/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java new file mode 100644 index 000000000..a1bec2513 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java @@ -0,0 +1,56 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxCreditHistory; +import com.iformall.domain.vo.WxCreditHistoryVo; + +import java.util.Map; + +public interface WxCreditHistoryService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxCreditHistory record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询分页列表更多 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPageMore(WxCreditHistory record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxCreditHistory getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + WxCreditHistory saveOrUpdate(WxCreditHistory record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + Map findByMerchantIdAndSpend(Long merchantId, String spendStr, String tenantId); + + void clearCreditByYear(); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxFlowService.java b/mallinkService/src/main/java/com/iformall/service/WxFlowService.java index 21fb6c09c..f80c639c8 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxFlowService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxFlowService.java @@ -58,7 +58,7 @@ public interface WxFlowService { * @param params * @return */ - ResultData reject(@RequestBody Map params,Long userId,String userName,String tenantId); + ResultData reject(@RequestBody Map params,Long userId,String userName,String userPhone,String tenantId); /** * 撤回 @@ -81,4 +81,11 @@ public interface WxFlowService { * @return */ PageInfo listAsPage(WxFlowRecord record, Integer pageIndex, Integer pageSize); + + /** + * 我的审批 + * @param pageSize + * @return + */ + PageInfo myHandelList(WxFlowRecord record, Integer pageIndex, Integer pageSize); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxGameService.java b/mallinkService/src/main/java/com/iformall/service/WxGameService.java index faa72ba10..f3796f7ca 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxGameService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxGameService.java @@ -24,6 +24,13 @@ public interface WxGameService { */ WxGame getOne(WxGame record); + /** + * 获取用户要玩的游戏信息 + * @param record + * @return + */ + WxGame getOneGame(WxGame record); + ResultData addActionLog(Long userId, Long gameId, Long orderId); ResultData getCount(Long gameId, Long userId); diff --git a/mallinkService/src/main/java/com/iformall/service/WxLevelConfigService.java b/mallinkService/src/main/java/com/iformall/service/WxLevelConfigService.java index d0dd6d9db..da28d3d6b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxLevelConfigService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxLevelConfigService.java @@ -12,7 +12,7 @@ public interface WxLevelConfigService { public final static int DEFAULT_MERCHANT_DISCOUNT = 100; - public final static String DEFAULT_LEVEL = "无"; + public final static String DEFAULT_LEVEL = "普通会员"; /** * 根据实体查询分页列表 * diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index e5ce57f7a..7a739c49f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxLevelConfig; import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.vo.WxMerchantSimpleVo; import com.iformall.domain.vo.WxMerchantVo; import java.util.HashMap; @@ -39,6 +40,13 @@ public interface WxMerchantService { * @return */ List etcpList(WxMerchant record); + + /** + * 查询商户列表 + * @param tenantId + * @return + */ + List findList(String tenantId); /** * 根据Id获得实体 @@ -71,4 +79,7 @@ public interface WxMerchantService { ResultData updateMerchantTax(WxMerchant wxMerchant); ResultData updateMerchantLevel(WxMerchant wxMerchant); + + WxMerchantVo findMerchantById(Long id); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java index 252e9b9c5..14b4fb542 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java @@ -1,7 +1,7 @@ package com.iformall.service; -import com.iformall.domain.po.BaseMsg; -import com.iformall.domain.po.WxMsgRecord; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.WxMsgRecord; import java.util.List; public interface WxMsgRecordService { diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgService.java index e692a830c..e61f97e46 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgService.java @@ -3,7 +3,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCouponInject; -import com.iformall.domain.po.WxMsg; +import com.iformall.domain.po.msg.WxMsg; import com.iformall.domain.po.WxMsgConfig; public interface WxMsgService { @@ -26,19 +26,14 @@ public interface WxMsgService { */ WxMsg getById(Long id); - /** - * 保存或更新实体 - * - * @param record - * @param wxMsgConfig - */ - ResultData saveOrUpdate(WxMsg record, WxMsgConfig wxMsgConfig); - /** - * 根据Id删除实体 - * - * @param id - */ + ResultData add(WxMsg wxmsg); + + /** + * 根据Id删除实体 + * + * @param id + */ void deleteById(Long id); void sendMsgFromCouponInject(WxMsg wxmsg, WxMsgConfig wxMsgConfig, WxCouponInject record); diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index a3fdb80cd..2c8218f6c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -33,6 +33,14 @@ public interface WxOrderService { ResultData microPayListOnDateAsPage(Long bUserId, Integer type, String date, Integer pageIndex, Integer pageSize); + /** + * 下免费券订单接口 + * @param userId + * @param couponId + * @return WxOrder + */ + WxOrder saveFreeCouponOrder(Long userId, Long couponChannelId, Long couponId, String formId); + /** * 提交订单 * @param user @@ -40,7 +48,7 @@ public interface WxOrderService { * @param orderGroupId * @return 订单id */ - WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress, Long orderGroupId); + WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress, Long orderGroupId, String formId); /** * 付款码支付 @@ -60,14 +68,6 @@ public interface WxOrderService { */ WxOrder saveCardPayOrder(WxMerchant merchant, Long cUserId, String totalFeeStr, Integer payment); - /** - * 免费券订单接口 - * @param userId - * @param couponId - * @return WxOrder - */ - WxOrder saveFreeCouponOrder(Long userId, Long couponChannelId, Long couponId); - /** * 免费券订单接口 * @param userId diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayAccountBillService.java b/mallinkService/src/main/java/com/iformall/service/WxPayAccountBillService.java new file mode 100644 index 000000000..35a423b4c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxPayAccountBillService.java @@ -0,0 +1,55 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxPayAccountBill; + +public interface WxPayAccountBillService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxPayAccountBill record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxPayAccountBill getById(Long id); + + /** + * 根据tenantId获得实体 + * + * @param tenantId + * @return + */ + WxPayAccountBill getByTenantId(String tenantId); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxPayAccountBill record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayAccountService.java b/mallinkService/src/main/java/com/iformall/service/WxPayAccountService.java index ee0ac5f92..ffd49879b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayAccountService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayAccountService.java @@ -9,8 +9,8 @@ public interface WxPayAccountService { * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ PageInfo listAsPage(WxPayAccount record, Integer pageIndex, Integer pageSize); diff --git a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java index 88a15e878..067e71e88 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java @@ -75,4 +75,7 @@ public interface WxRentContractService { void buildDeposit(WxMerchant wxMerchant, Long userId,Long rentContractId); + Object getMerchants(WxRentContract wxRentContract); + + void updateInvalidContract(Long rentContractId); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java b/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java index 9d5777d87..fd9ffa57e 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java @@ -3,6 +3,8 @@ package com.iformall.service; import com.iformall.domain.po.WxScoreRules; import com.iformall.enums.EnumScoreType; +import java.util.List; + public interface WxScoreRulesService { /** @@ -11,6 +13,13 @@ public interface WxScoreRulesService { * @return */ WxScoreRules getScoreRules(String tenantId); + + /** + * 获取租户的积分规则 + * @param tenantId + * @return + */ + WxScoreRules getCreditRules(String tenantId); /** * 保存或更新实体 * @@ -33,4 +42,6 @@ public interface WxScoreRulesService { */ int reduceScore(EnumScoreType scoreType, Object param1, Object param2, Object param3); + List findList(WxScoreRules wxScoreRules); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxShopService.java b/mallinkService/src/main/java/com/iformall/service/WxShopService.java index 105e59e1a..ec89fc18f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxShopService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxShopService.java @@ -40,8 +40,9 @@ public interface WxShopService { * 根据Id删除实体 * * @param id + * @param isAdmin */ - void deleteById(Long id); + ResultData deleteById(Long id, Integer isAdmin); ResultData getbshoplist(String tenantId, String shopNumber); @@ -59,4 +60,12 @@ public interface WxShopService { * @param response */ void exportShop(WxShop wxShop, HttpServletRequest request, HttpServletResponse response); + + /** + * 导出未出租商铺数据 + * @param wxShop + * @param request + * @param response + */ + void exportNotRentShop(WxShop wxShop, HttpServletRequest request, HttpServletResponse response); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxSubBusinessService.java b/mallinkService/src/main/java/com/iformall/service/WxSubBusinessService.java new file mode 100644 index 000000000..8b9ac1af5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxSubBusinessService.java @@ -0,0 +1,44 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxSubBusiness; + +import java.util.List; + +public interface WxSubBusinessService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxSubBusiness record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List findList(WxSubBusiness record); + + /** + * 查询全部列表 + * + * @return + */ + List findListAll(); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxSubBusiness getById(Integer id); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxTagsService.java b/mallinkService/src/main/java/com/iformall/service/WxTagsService.java index 1e7d14c2b..b1696f6ed 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxTagsService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxTagsService.java @@ -3,6 +3,7 @@ package com.iformall.service; import java.util.*; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxTags; +import com.iformall.domain.vo.WxTagsGroupVo; public interface WxTagsService { @@ -39,5 +40,7 @@ public interface WxTagsService { void deleteById(Long id); List findList(WxTags wxTags); - + + List listAllVo(); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxTopicService.java b/mallinkService/src/main/java/com/iformall/service/WxTopicService.java new file mode 100644 index 000000000..93f710846 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxTopicService.java @@ -0,0 +1,24 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxTopic; + +public interface WxTopicService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxTopic record, Integer pageIndex, Integer pageSize); + + ResultData saveOrUpdate(WxTopic record); + + WxTopic show(WxTopic record); + + WxTopic findById(WxTopic record); +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java index 11897be3a..176ea3ec3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java @@ -248,8 +248,13 @@ public class DataTowerServiceImpl implements DataTowerService { cal.add(Calendar.DAY_OF_YEAR, 1); Date endTime = cal.getTime(); - long verifiedCount = wxCouponOrderMapper.findVerifiedCount(tenantId, startTime, endTime); - long orderedCount = wxCouponOrderMapper.findOrderedCount(tenantId, startTime, endTime); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setTenantId(tenantId); + wxCouponOrder.setStartTime(startTime); + wxCouponOrder.setEndTime(endTime); + long orderedCount = wxCouponOrderMapper.findCount(wxCouponOrder); + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + long verifiedCount = wxCouponOrderMapper.findCount(wxCouponOrder); couponMap.put("verifiedCount", verifiedCount); couponMap.put("orderedCount", orderedCount); WxCouponChannel wxCouponChannel = new WxCouponChannel(); @@ -477,6 +482,7 @@ public class DataTowerServiceImpl implements DataTowerService { @Override public Map queryCar(String tenantId) { + logger.info("停车-月统计-开始"); HashMap params = new HashMap<>(); params.put("tenantId", tenantId); params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); @@ -507,8 +513,10 @@ public class DataTowerServiceImpl implements DataTowerService { } Map datamap = new HashMap<>(); datamap.put("history", historymap); + logger.info("停车-月统计-结束"); // 查询近一周的缴费车辆----start------ + logger.info("停车-查询近一周的缴费车辆-开始"); HashMap weekParams = new HashMap<>(); weekParams.put("tenantId", tenantId); String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); @@ -518,8 +526,10 @@ public class DataTowerServiceImpl implements DataTowerService { weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); datamap.put("oneWeekCarPayCount",wxCarCmdLogMapper.queryWeekCarPayCount(weekParams)); + logger.info("停车-查询近一周的缴费车辆-结束"); // 近一周缴费金额 + logger.info("停车-查询近一周的缴费金额-开始"); weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(weekParams); Map weekCollect = weekCarPayHistoryList.stream().collect(Collectors.toMap(m -> { @@ -537,8 +547,10 @@ public class DataTowerServiceImpl implements DataTowerService { weekMap.put(key,weekCollect.get(key)); } datamap.put("oneWeekCarPayFeeCount",weekMap); + logger.info("停车-查询近一周的缴费金额-结束"); // 近一周新增会员历史 + logger.info("停车-近一周新增会员历史-开始"); List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(weekParams); Map weekCarCollect = carCountHistory.stream().collect(Collectors.toMap(m -> { return (String)m.get("create_time"); @@ -553,8 +565,10 @@ public class DataTowerServiceImpl implements DataTowerService { weekCarMap.put(key,weekCarCollect.get(key)); } datamap.put("oneWeekNewCarUserHistory",weekCarMap); + logger.info("停车-近一周新增会员历史-结束"); //近一周新增停车会员数 + logger.info("停车-近一周新增停车会员数-开始"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); wxCUserBasicInfoDto.setTenantId(tenantId); @@ -565,14 +579,18 @@ public class DataTowerServiceImpl implements DataTowerService { e.printStackTrace(); } datamap.put("oneWeekNewCarUserCount",wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + logger.info("停车-近一周新增停车会员数-结束"); //停车会员总数 + logger.info("停车-停车会员总数-开始"); wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); wxCUserBasicInfoDto.setTenantId(tenantId); datamap.put("newCarUserSumCount",wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + logger.info("停车-停车会员总数-结束"); // 查询近一周的缴费车辆----end------ //今日车流量 + logger.info("停车-今日车流量-开始"); long todaycar = (long) historymap.get(DateUtils.getSystemTime("MM/dd")); datamap.put("todaycar", todaycar); //环比 @@ -585,8 +603,10 @@ public class DataTowerServiceImpl implements DataTowerService { } else { datamap.put("hb", "--"); } + logger.info("停车-今日车流量-结束"); //上周同期 + logger.info("停车-上周同期-开始"); String lastweek = DateUtils.getTimeBefore(7, new Date()); long last = (long) historymap.get(lastweek.substring(5).replace("-", "/")); if (last > 0) { @@ -596,7 +616,10 @@ public class DataTowerServiceImpl implements DataTowerService { } else { datamap.put("lasthb", "--"); } + logger.info("停车-上周同期-结束"); + // 今日 + logger.info("停车-今日停车数据-开始"); params.put("startdate", systemTime + " 05:00:00"); params.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); @@ -623,7 +646,10 @@ public class DataTowerServiceImpl implements DataTowerService { hourMap.putAll(todaycollect); datamap.put("todaycardata", hourMap); + logger.info("停车-今日停车数据-结束"); + // 昨日 + logger.info("停车-昨日停车数据-开始"); params.put("startdate", yesterday + " 05:00:00"); params.put("enddate", yesterday + " 22:59:59"); List> yesterdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); @@ -636,20 +662,25 @@ public class DataTowerServiceImpl implements DataTowerService { yesterdaytreemap.putAll(yesterdaycollect); datamap.put("yesterdaycardata", yesterdaytreemap); + logger.info("停车-昨日停车数据-结束"); + // 上周同期 + logger.info("停车-上周同期停车数据-开始"); params.put("startdate", lastweek + " 05:00:00"); params.put("enddate", lastweek + " 22:59:59"); - List> lastdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map lastdaycollect = lastdayCarlist.stream().collect(Collectors.toMap(m -> { + List> lastweekCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map lastweekcollect = lastweekCarlist.stream().collect(Collectors.toMap(m -> { return m.get("create_time"); }, m -> { return m.get("carcount"); })); - TreeMap lastdaytreemap = getTimeTreeMap(); - lastdaytreemap.putAll(lastdaycollect); - datamap.put("lastdaycardata", lastdaytreemap); + TreeMap lastweektreemap = getTimeTreeMap(); + lastweektreemap.putAll(lastweekcollect); + datamap.put("lastdaycardata", lastweektreemap); + logger.info("停车-上周同期停车数据-结束"); //绑定车牌 + logger.info("停车-绑定车牌-开始"); Map carParams=new HashMap<>(); carParams.put("tenantId",tenantId); carParams.put("startdate",DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); @@ -678,6 +709,7 @@ public class DataTowerServiceImpl implements DataTowerService { } else { datamap.put("lastweekbindhb", "--"); } + logger.info("停车-绑定车牌-结束"); return datamap; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java index 6bab4c279..b68f7554c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java @@ -113,15 +113,25 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { mallUserInfoMapper.removeWebOpenId(updateUser); } + + @Override + public void cleanAllOpenId(MallUserInfo user) { + MallUserInfo updateUser = new MallUserInfo(); + updateUser.setId(user.getId()); + updateUser.setTenantId(user.getTenantId()); + updateUser.setUsername(user.getUsername()); + mallUserInfoMapper.removeAllOpenId(updateUser); + } + @Override public void saveOrUpdate(MallUserInfo record) { + if(StringUtils.isBlank(record.getFlowPermission())){ + record.setFlowPermission("[]"); + } if (record.getId() == null) { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); - if(StringUtils.isBlank(record.getFlowPermission())){ - record.setFlowPermission("[]"); - } mallUserInfoMapper.insertSelective(record); } else { mallUserInfoMapper.updateByPrimaryKeySelective(record); @@ -139,10 +149,17 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { } @Override - public long cntByUserName(String username) { - MallUserInfo userInfo = new MallUserInfo(); - userInfo.setUsername(username); - return PageHelper.count(() -> mallUserInfoMapper.select(userInfo)); + public int cntByUserName(String username) { + Map params = new HashMap<>(); + params.put("username", username); + return mallUserInfoMapper.cntByUserName(params); + } + + @Override + public int cntByUserPhone(String phone) { + Map params = new HashMap<>(); + params.put("phone", phone); + return mallUserInfoMapper.cntByUserName(params); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java index a25dbfbbe..0a7fe98d4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java @@ -5,11 +5,13 @@ import com.github.pagehelper.PageInfo; import com.iformall.domain.dto.MarkingCouponDataReportDto; import com.iformall.domain.dto.WxOrderReportDto; import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.mapper.*; import com.iformall.service.MarkingDataReportService; import com.iformall.utils.DateUtils; +import org.apache.commons.collections.map.HashedMap; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,9 +73,17 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { public Map getCouponData(String tenantId) { //今日领取券数 //查询coupon order表 - int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1)); - int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0)); - int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6)); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setTenantId(tenantId); + wxCouponOrder.setStartTime(addDay(0)); + wxCouponOrder.setEndTime(addDay(1)); + int todayCouponCount = wxCouponOrderMapper.findCount(wxCouponOrder); + wxCouponOrder.setStartTime(addDay(-1)); + wxCouponOrder.setEndTime(addDay(0)); + int yesterdayCount = wxCouponOrderMapper.findCount(wxCouponOrder); + wxCouponOrder.setStartTime(addDay(-7)); + wxCouponOrder.setEndTime(addDay(-6)); + int lastWeekCount = wxCouponOrderMapper.findCount(wxCouponOrder); NumberFormat nf = NumberFormat.getPercentInstance(); nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 @@ -411,6 +421,78 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { return new PageInfo<>(list); } + @Override + public Map getSceneDataHistory(String tenantId,String startDate, String endDate) { + Map result = new HashedMap(); + + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + if (StringUtils.isNotBlank(startDate)) + params.put("startTime", startDate); + if (StringUtils.isNotBlank(endDate)) + params.put("endTime", endDate); + + List days = DateUtils.getTjTimeList(startDate,endDate,"0"); + TreeMap historyMap = new TreeMap<>(); + + //停车发券 + params.put("channelType", EnumCouponSendSendType.CAR_STOP.getCode()); + List carStopList = wxCouponActionLogMapper.sceneDataList(params); + Map countMap = carStopList.stream().collect(Collectors.toMap(MarkingSceneDataVo::getxTime, p -> p.getSendCount())); + for (String date:days) { + historyMap.put(date.substring(5,date.length()).replace("-","/"),"0"); + } + for (String key : countMap.keySet()) { + String keySub = key.substring(5,key.length()).replace("-","/"); + historyMap.put(keySub,countMap.get(key)); + } + result.put("carStopHistory",historyMap); + + //核销发券 + params.put("channelType", EnumCouponSendSendType.COUPON_VERIFY.getCode()); + List couponVerifyList = wxCouponActionLogMapper.sceneDataList(params); + countMap = couponVerifyList.stream().collect(Collectors.toMap(MarkingSceneDataVo::getxTime, p -> p.getSendCount())); + historyMap = new TreeMap<>(); + for (String date:days) { + historyMap.put(date.substring(5,date.length()).replace("-","/"),"0"); + } + for (String key : countMap.keySet()) { + String keySub = key.substring(5,key.length()).replace("-","/"); + historyMap.put(keySub,countMap.get(key)); + } + result.put("couponVerifyHistory",historyMap); + + //交易发券 + params.put("channelType", EnumCouponSendSendType.C_ORDER.getCode()); + List orderList = wxCouponActionLogMapper.sceneDataList(params); + countMap = orderList.stream().collect(Collectors.toMap(MarkingSceneDataVo::getxTime, p -> p.getSendCount())); + historyMap = new TreeMap<>(); + for (String date:days) { + historyMap.put(date.substring(5,date.length()).replace("-","/"),"0"); + } + for (String key : countMap.keySet()) { + String keySub = key.substring(5,key.length()).replace("-","/"); + historyMap.put(keySub,countMap.get(key)); + } + result.put("orderHistory",historyMap); + + //收银台发券 + params.put("channelType", EnumCouponSendSendType.B_MICROPAY.getCode()); + List micropayList = wxCouponActionLogMapper.sceneDataList(params); + countMap = micropayList.stream().collect(Collectors.toMap(MarkingSceneDataVo::getxTime, p -> p.getSendCount())); + historyMap = new TreeMap<>(); + for (String date:days) { + historyMap.put(date.substring(5,date.length()).replace("-","/"),"0"); + } + for (String key : countMap.keySet()) { + String keySub = key.substring(5,key.length()).replace("-","/"); + historyMap.put(keySub,countMap.get(key)); + } + result.put("micropayHistory",historyMap); + + return result; + } + @Override public Map listOrderReportByDate(WxOrderReportDto wxOrderReportDto) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java index ea0e7b226..651f28e6e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java @@ -86,160 +86,4 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { public void deleteById(Long id) { wxAppinfoMapper.deleteByPrimaryKey(id); } - - - /** - * 租户c端小程序更新token - * @param tenantId - */ - @Override - public void ctokenUpdate(String tenantId) { - WxAppinfo appQ = new WxAppinfo(); - appQ.setTenantId(tenantId); - appQ.setType(EnumAppType.C.getCode()); - List appList = wxAppinfoMapper.findList(appQ); - if (appList.size() <= 0) { - return; - } - WxAppinfo appinfo = appList.get(0); - if(appinfo == null) { - return; - } - // get access_token - WxMaService wxMaService = MaUtil.getWeappService(appinfo); - if(wxMaService == null) { - return; - } - - String access_token = ""; - try{ - access_token = wxMaService.getAccessToken(); - } catch (Exception e) { - logger.error(e.getMessage()); - } - Date date = new Date(); - // update db - appinfo.setAccessToken(access_token); - appinfo.setLastTokenTime(date); - wxAppinfoMapper.updateByPrimaryKeySelective(appinfo); - } - - private void downFile(String filePath, String filename, HttpServletResponse response, HttpServletRequest req) throws IOException { - try { - response.reset(); - response.setContentType("bin"); - String agent = req.getHeader("user-agent"); - if (agent.contains("Firefox")) { - response.setHeader("Content-disposition", - "attachment; filename=" - + new String(filename.getBytes("GB2312"),"ISO-8859-1")); - } else { - response.setHeader("Content-disposition", - "attachment; filename=" - + java.net.URLEncoder.encode(filename,"UTF-8")); - } - // 循环取出流中的数据 - byte[] b = new byte[1024]; - int len; - InputStream inStream = new FileInputStream(filePath); - while ((len = inStream.read(b)) > 0) - response.getOutputStream().write(b, 0, len); - inStream.close(); - } catch (Exception e) { - logger.error(e.getMessage()); - } - } - - @Override - public void exportQrcode(HttpServletRequest request, HttpServletResponse response, - String tenantId, int type, String pageUrl, String sceneParam, - int withText, String text1, String text2 ) { - // type 0 有限二维码, 1 无限制二维码 - // withText 0 不带字 1. 带下面的字,2 带下面的两行字 - WxAppinfo appQ = new WxAppinfo(); - appQ.setTenantId(tenantId); - appQ.setType(EnumAppType.C.getCode()); - List appList = wxAppinfoMapper.findList(appQ); - if (appList.size() <= 0) { - return; - } - WxAppinfo appinfo = appList.get(0); - boolean autoColor = false; - boolean isHyaline = true; - WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0"); - - WxMaInMemoryConfig config = new WxMaInMemoryConfig(); - config.setAppid(appinfo.getAppId()); - config.setSecret(appinfo.getSecret()); - WxMaService wxMaService = new WxMaServiceImpl(); - wxMaService.setWxMaConfig(config); - - String pathStr = ""; - if (StringUtils.isNotBlank(sceneParam)) { - pathStr = pageUrl + "?scene="+sceneParam; - } else { - pathStr = pageUrl; - } - - - String filepath = Constant.fileDirectory; - String fileName = sceneParam + ".png"; - String destPath1 = filepath + "1_" + fileName; - String destPath = filepath + fileName; - - File dest = new File(destPath); - File pDest = dest.getParentFile(); - if (!pDest.exists()) { - pDest.mkdirs(); - } - try { - Date imgDate = new Date(); - if(type == 0) { - final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH); - if (withText == 1) { - File dest1 = new File(destPath1); - org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); - QRCodeUtils.graphicsGeneration(dest1, dest, text1); - org.apache.commons.io.FileUtils.forceDelete(dest1); - } else if (withText == 2) { - File dest1 = new File(destPath1); - org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); - QRCodeUtils.graphicsGeneration2(dest1, dest, text1, text2); - org.apache.commons.io.FileUtils.forceDelete(dest1); - } else { - org.apache.commons.io.FileUtils.copyFile(codeFile, dest); - } - org.apache.commons.io.FileUtils.forceDelete(codeFile); - } else { - final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline); - if (withText == 1) { - File dest1 = new File(destPath1); - org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); - QRCodeUtils.graphicsGeneration(dest1, dest, text1); - org.apache.commons.io.FileUtils.forceDelete(dest1); - } else if (withText == 2) { - File dest1 = new File(destPath1); - org.apache.commons.io.FileUtils.copyFile(codeFile, dest1); - QRCodeUtils.graphicsGeneration2(dest1, dest, text1, text2); - org.apache.commons.io.FileUtils.forceDelete(dest1); - } else { - org.apache.commons.io.FileUtils.copyFile(codeFile, dest); - } - org.apache.commons.io.FileUtils.forceDelete(codeFile); - } - - } catch (WxErrorException e) { - logger.error(e.getMessage()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - try { - downFile(destPath, fileName, response, request); - org.apache.commons.io.FileUtils.forceDelete(dest); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillActionServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillActionServiceImpl.java new file mode 100644 index 000000000..5e1b4e443 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillActionServiceImpl.java @@ -0,0 +1,66 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; +import com.iformall.enums.EnumBillAction; +import com.iformall.mapper.WxBillActionMapper; +import com.iformall.service.WxBillActionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author gongbiao + */ +@Service +public class WxBillActionServiceImpl implements WxBillActionService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxBillActionMapper wxBillActionMapper; + + @Override + public PageInfo listAsPage(WxBillAction record, Integer pageIndex, Integer pageSize) { + logger.info("查询账单操作记录列表"); + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBillActionMapper.findList(record)); + } + + @Override + public int save(WxBillAction action) { + final IdWorker idWorker = IdWorker.get(); + action.setId(idWorker.nextId()); + Date date = new Date(); + action.setCreatetime(date); + action.setUpdatetime(date); + return wxBillActionMapper.insertSelective(action); + } + + + @Override + public int modifyBill(WxBillAction action, MallUserInfo user) { + final IdWorker idWorker = IdWorker.get(); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setId(idWorker.nextId()); + wxBillAction.setBillId(action.getBillId()); + String oldPrice = new BigDecimal(action.getOldPrice()).divide(new BigDecimal(100)).toPlainString(); + String newPrice = new BigDecimal(action.getNewPrice()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(oldPrice + "元变更成" + newPrice + "元"); + wxBillAction.setAction(EnumBillAction.UPDATE_BILL.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(user.getTenantId()); + Date date = new Date(); + wxBillAction.setCreatetime(date); + wxBillAction.setUpdatetime(date); + return wxBillActionMapper.insertSelective(wxBillAction); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java index 64c42c1d3..6492ecc16 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -1,31 +1,36 @@ package com.iformall.service.impl; +import cn.afterturn.easypoi.excel.entity.ExportParams; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.MailMsg; +import com.iformall.domain.vo.OweMerchantVo; import com.iformall.domain.vo.WxBillAll; +import com.iformall.domain.vo.WxBillAllVo; +import com.iformall.domain.vo.WxNotRentShopVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; -import com.iformall.utils.Constant; -import com.iformall.utils.DateUtils; -import org.apache.commons.io.FileUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.map.HashedMap; +import org.apache.commons.lang3.StringUtils; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; import java.math.BigDecimal; +import java.math.RoundingMode; + import java.util.*; import java.util.stream.Collectors; @@ -81,13 +86,24 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Autowired WxBillOtherDepositMapper wxBillOtherDepositMapper; + @Autowired + ExcelService excelService; + + @Autowired + MqBaseProducer mqBaseProducer; + + @Autowired + WxBillActionService wxBillActionService; + + @Autowired + WxMerchantBUserMapper wxMerchantBUserMapper; + @Override public Map listAsPage(WxBillAll record, Integer pageIndex, Integer pageSize) { //更新各账单状态 updateBillStatus(record); - PageHelper.startPage(pageIndex, pageSize); - List> billList = wxBillAllMapper.list(record); - PageInfo> pageInfo = new PageInfo<>(billList); + PageInfo pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBillAllMapper.list(record)); + Map result = new HashMap<>(); result.put("pageInfo", pageInfo); return result; @@ -127,6 +143,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillAll.setBillTypeValue(EnumBillTypeParam.POWER.getCode()); } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.ROUTINE.getCode())) { wxBillAll.setBillTypeValue(EnumBillTypeParam.ROUTINE.getCode()); + } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.AIR_CONDITIONING.getCode())) { + wxBillAll.setBillTypeValue(EnumBillTypeParam.AIR_CONDITIONING.getCode()); } else { logger.info("账单不存在"); return new ResultData(ErrorCode.BILL_ROUTINE_IS_NOT_FOUND); @@ -182,12 +200,24 @@ public class WxBillAllServiceImpl implements WxBillAllService { if(wxBillDaily!=null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ updateBillDaily(bill); } + } else if (billTypeValue == EnumBillTypeParam.AIR_CONDITIONING.getCode().intValue()) { + //更新空调费账单 + WxBillDaily wxBillDaily = wxBillDailyMapper.selectByPrimaryKey(bill.get("id")); + if (wxBillDaily != null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { + updateBillDaily(bill); + } } else if (billTypeValue==EnumBillTypeParam.ROUTINE.getCode().intValue()) { //更新其他账单 WxBillOther wxBillOther = wxBillOtherMapper.selectByPrimaryKey(bill.get("id")); if(wxBillOther!=null && !wxBillOther.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ updateBillOther(bill); } + } else if (billTypeValue == EnumBillTypeParam.ATHER_DEPOSIT.getCode().intValue()) { + //更新其他押金账单 + WxBillOtherDeposit wxBillOtherDeposit = wxBillOtherDepositMapper.selectByPrimaryKey(bill.get("id")); + if (wxBillOtherDeposit != null && !wxBillOtherDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { + updateBillOtherDeposit(bill); + } } else { logger.info("账单类型不存在"); } @@ -195,136 +225,75 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillAll wxBillAll) { - //得到当前月 - //String month = DateUtils.getSystemTime("yyyy-MM"); - //设置查询参数-当前月 - //wxBillAll.setMonth(month); - //查询 - Map>> billMapList = wxBillAllMapper.list(wxBillAll).parallelStream().collect(Collectors.groupingBy(x -> { - return x.get("merchantId"); - })); - XSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; - try { - File file = new File(filepath); - workbook = new XSSFWorkbook(); - int count=1; - Set>>> entries = billMapList.entrySet(); - for(Map.Entry>> entry:entries){ - List> billList = entry.getValue(); - Map billInfo = billList.get(0); - String merchantName = billInfo.get("merchantName").toString(); - XSSFSheet sheet = workbook.createSheet(merchantName+"-"+count++); - Row row = sheet.createRow(0); - Cell shopNumberCell = row.createCell(0); - Cell merchantNameCell = row.createCell(1); - Cell shopTypeCell = row.createCell(2); - Cell billNameCell = row.createCell(3); - Cell receivePayCell = row.createCell(4); - Cell payCell = row.createCell(5); - Cell oweCell = row.createCell(6); - Cell receiveDateCell = row.createCell(7); - Cell expiredDayCell = row.createCell(8); - Cell statusCell = row.createCell(9); - - shopNumberCell.setCellValue("商铺号"); - merchantNameCell.setCellValue("商户名称"); - shopTypeCell.setCellValue("商铺类型"); - billNameCell.setCellValue("费用类型"); - receivePayCell.setCellValue("实际应收金额(元)"); - payCell.setCellValue("实收金额(元)"); - oweCell.setCellValue("欠缴金额(元)"); - receiveDateCell.setCellValue("缴款截止日期"); - expiredDayCell.setCellValue("逾期天数"); - statusCell.setCellValue("账单状态"); - - for (int i = 0,size=billList.size(); i < size; i++) { - row = sheet.createRow(i + 1); - shopNumberCell = row.createCell(0); - merchantNameCell = row.createCell(1); - shopTypeCell = row.createCell(2); - billNameCell = row.createCell(3); - receivePayCell = row.createCell(4); - payCell = row.createCell(5); - oweCell = row.createCell(6); - receiveDateCell = row.createCell(7); - expiredDayCell = row.createCell(8); - statusCell = row.createCell(9); - Map billMap = billList.get(i); - logger.info(billMap.toString()); - shopNumberCell.setCellValue(billMap.get("shopNumber").toString()); - merchantNameCell.setCellValue(billMap.get("merchantName").toString()); - shopTypeCell.setCellValue(EnumRentShopType.getEnum((Integer) billMap.get("rentShopType")).getMessage()); - billNameCell.setCellValue(billMap.get("name").toString()); - BigDecimal needPay = new BigDecimal(billMap.get("pay").toString()).divide(new BigDecimal(100)); - payCell.setCellValue(needPay.toString()); - BigDecimal receivePay = new BigDecimal(billMap.get("receivePay").toString()).divide(new BigDecimal(100)); - receivePayCell.setCellValue(receivePay.toString()); - BigDecimal owe = new BigDecimal(billMap.get("owe").toString()).divide(new BigDecimal(100)); - oweCell.setCellValue(owe.toString()); - String receiveDate = DateUtils.date2String((Date) billMap.get("receiveDate"), "yyyy-MM-dd"); - receiveDateCell.setCellValue(receiveDate); - expiredDayCell.setCellValue(billMap.get("expiredDay").toString()); - statusCell.setCellValue(EnumBillRentStatus.getEnum((Integer) billMap.get("status")).getMessage()); - } - row = sheet.createRow(billList.size()+1); - Cell managerInfoCell = row.createCell(0); - Cell managerCell = row.createCell(1); - Cell managerPhoneCell = row.createCell(2); - managerInfoCell.setCellValue("负责人信息:"); - managerCell.setCellValue(billInfo.get("manager")==null?"":billInfo.get("manager").toString()); - managerPhoneCell.setCellValue(billInfo.get("managerPhone")==null?"":billInfo.get("managerPhone").toString()); - - } - - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - downFile(filepath, filename, "账单数据.xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - e.printStackTrace(); + Map> billMapList = wxBillAllMapper.list(wxBillAll) + .parallelStream() + .collect(Collectors.groupingBy(WxBillAllVo::getMerchantId)); + + List> list = new ArrayList<>(); + + Iterator>> entries = billMapList.entrySet().iterator(); + while (entries.hasNext()) { + Map.Entry> entry = entries.next(); + Map map = new HashMap<>(); + ExportParams deptExportParams = new ExportParams(); + WxBillAllVo first = ((List)(entry.getValue())).get(0); + deptExportParams.setSheetName(first.getMerchantName()); + deptExportParams.setTitle(first.getMerchantName() + + " (" + + EnumRentShopType.getEnum((Integer)first.getRentShopType()).getMessage() + + "-"+first.getShopNumber() + + ")"); + //deptExportParams.setSecondTitle(); + map.put("title", deptExportParams); + map.put("entity", WxBillAllVo.class); + map.put("data", entry.getValue()); + list.add(map); } - + excelService.exportExcel(list, "账单数据.xls", response); } - public void downFile(String filePath, String filename, String exportFileName,HttpServletResponse response, - HttpServletRequest req) throws IOException { + private int updateBillOtherDeposit(Map bill) { + logger.info("updateBillOtherDeposit params:" + bill.toString()); + Object id = bill.get("id"); + WxBillOtherDeposit wxBillOtherDeposit = wxBillOtherDepositMapper.selectByPrimaryKey(id); + if (wxBillOtherDeposit == null) { + return 0; + } + Date date = new Date(); + wxBillOtherDeposit.setPayDate(date); + Integer owe = (Integer) bill.get("owe"); + wxBillOtherDeposit.setPay(wxBillOtherDeposit.getPay() + owe); + wxBillOtherDeposit.setOwe(0); + wxBillOtherDeposit.setStatus(EnumBillDailyStatus.PAID.getCode()); + wxBillOtherDeposit.setUpdatetime(date); + wxBillOtherDeposit.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + int count = 0; try { - response.reset(); - response.setContentType("bin"); - String agent = req.getHeader("user-agent"); - if (agent.contains("Firefox")) { - response.setHeader("Content-disposition", - "attachment; filename=" - + new String(exportFileName.getBytes("GB2312"), - "ISO-8859-1")); - } else { - response - .setHeader("Content-disposition", - "attachment; filename=" - + java.net.URLEncoder.encode(exportFileName, - "UTF-8")); - } - // 循环取出流中的数据 - byte[] b = new byte[1024]; - int len; - InputStream inStream = new FileInputStream(filePath); - while ((len = inStream.read(b)) > 0) - response.getOutputStream().write(b, 0, len); - inStream.close(); + count = wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillOtherDeposit); + } catch (Exception e) { + logger.error("更新其他押金账单失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillOtherDeposit.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); } catch (Exception e) { - e.printStackTrace(); + logger.error("添加其他押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + return count; } private int updateBillOther(Map bill) { @@ -341,12 +310,32 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillOther.setOwe(0); wxBillOther.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillOther.setUpdatetime(date); + wxBillOther.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + int count = 0; try { - return wxBillOtherMapper.updateByPrimaryKeySelective(wxBillOther); + count = wxBillOtherMapper.updateByPrimaryKeySelective(wxBillOther); } catch (Exception e) { logger.error("更新其他账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillOther.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加其他账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return count; } private int updateBillDaily(Map bill) { @@ -363,12 +352,33 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillDaily.setOwe(0); wxBillDaily.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillDaily.setUpdatetime(date); + wxBillDaily.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + + int count = 0; try { - return wxBillDailyMapper.updateByPrimaryKeySelective(wxBillDaily); + count = wxBillDailyMapper.updateByPrimaryKeySelective(wxBillDaily); } catch (Exception e) { logger.error("更新日常账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDaily.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加日常账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return count; } private int updateBillPropertyDeposit(Map bill) { @@ -385,12 +395,33 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillPropertyDeposit.setOwe(0); wxBillPropertyDeposit.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillPropertyDeposit.setUpdatetime(date); + wxBillPropertyDeposit.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + + int count = 0; try { - return wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillPropertyDeposit); + count = wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillPropertyDeposit); } catch (Exception e) { logger.error("更新物业押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillPropertyDeposit.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加物业押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return count; } private int updateBillProperty(Map bill) { @@ -407,12 +438,33 @@ public class WxBillAllServiceImpl implements WxBillAllService { property.setOwe(0); property.setStatus(EnumBillDailyStatus.PAID.getCode()); property.setUpdatetime(date); + property.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + + int count = 0; try { - return wxBillPropertyMapper.updateByPrimaryKeySelective(property); + count = wxBillPropertyMapper.updateByPrimaryKeySelective(property); } catch (Exception e) { logger.error("更新物业账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(property.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加物业账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return count; } private int updateBillRentDeposit(Map bill) { @@ -429,12 +481,33 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillDeposit.setOwe(0); wxBillDeposit.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillDeposit.setUpdatetime(date); + wxBillDeposit.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + + int count = 0; try { - return wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + count = wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); } catch (Exception e) { logger.error("更新租赁押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDeposit.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加其他押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return count; } private int updateBillRent(Map bill) { @@ -451,12 +524,33 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillRent.setOwe(0); wxBillRent.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillRent.setUpdatetime(date); + wxBillRent.setPayWay(EnumBillPayWay.WECHAT_PAY.getCode()); + + int count = 0; try { - return wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); + count = wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); } catch (Exception e) { logger.error("更新租金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bill.get("userId")); + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillRent.getId()); + String price = new BigDecimal(owe).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails("线上缴费" + price + "元"); + wxBillAction.setAction(EnumBillAction.SELF_SERVICE_PAY.getCode()); + wxBillAction.setUserId(wxMerchantBUser.getId()); + wxBillAction.setUserName(wxMerchantBUser.getName()); + wxBillAction.setPhone(wxMerchantBUser.getPhone()); + wxBillAction.setTenantId(wxMerchantBUser.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加其他押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return count; } @@ -525,4 +619,157 @@ public class WxBillAllServiceImpl implements WxBillAllService { } return 0l; } + + public Map>> toMap(List> mapList){ + Map>> result = new HashMap<>(); + for (Map bill:mapList) { + Long merchantId = (Long)bill.get("merchantId"); + List> currList = result.get(merchantId); + if(currList == null) currList = new ArrayList<>(); + currList.add(bill); + result.put(merchantId,currList); + } + return result; + } + + @Override + public void sendWaitPayBillEmail() { + List> waitBillListForEmail = wxBillAllMapper.getWaitPayBillForEmail(); + + if(CollectionUtils.isNotEmpty(waitBillListForEmail)) { + Map>> merchantMap = toMap(waitBillListForEmail); + for (Long merchantId : merchantMap.keySet()) { + List> mapList = merchantMap.get(merchantId); + if(CollectionUtils.isNotEmpty(mapList)){ + String email = (String)mapList.get(0).get("email"); + if(StringUtils.isBlank(email)){ + continue; + } + String tenantId = (String)mapList.get(0).get("tenantId"); + String receiveDate = (String)mapList.get(0).get("receiveDate"); + String manager = (String)mapList.get(0).get("manager"); + String managerPhone = (String)mapList.get(0).get("managerPhone"); + + String billListStr = ""; + BigDecimal sumNeedPay = new BigDecimal(0); + for (Map bill : mapList) { + String billType = bill.get("billType").toString(); + BigDecimal needPay = (BigDecimal) bill.get("needPay"); + BigDecimal price = needPay.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + + sumNeedPay = sumNeedPay.add(price); + billListStr += "
"; + billListStr += "
" + billType + "
"; + billListStr += "
" + price + "
"; + billListStr += "
" + receiveDate + "
"; + billListStr += "
"; + } + //发邮件 + Map map = new HashedMap(); + map.put("price", sumNeedPay.toString()); + map.put("date", receiveDate); + map.put("billList", billListStr); + map.put("linkName",manager==null?"":manager); + map.put("linkPhone",managerPhone==null?"":managerPhone); + MailMsg mailMsg = new MailMsg(); + mailMsg.setSubject("待缴账单通知"); + mailMsg.setHtml(true); + mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode()); + mailMsg.setModelId(EnumMailMsgModel.MAIL_BILL_WAIT_PAY.getCode()); + mailMsg.setTo(new String[]{email}); + mailMsg.setTenantId(tenantId); + mailMsg.setDynamicContentMap(map); + mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } + } + } + } + + @Override + public void sendOweBillForEmail() { + List> oweBillForEmail = wxBillAllMapper.getOweBillForEmail(); + + if(CollectionUtils.isNotEmpty(oweBillForEmail)) { + Map>> merchantMap = toMap(oweBillForEmail); + for (Long merchantId : merchantMap.keySet()) { + List> mapList = merchantMap.get(merchantId); + if(CollectionUtils.isNotEmpty(mapList)){ + String email = (String)mapList.get(0).get("email"); + if(StringUtils.isBlank(email)){ + continue; + } + String tenantId = (String)mapList.get(0).get("tenantId"); + String receiveDate = (String)mapList.get(0).get("receiveDate"); + String manager = (String)mapList.get(0).get("manager"); + String managerPhone = (String)mapList.get(0).get("managerPhone"); + Integer expiredDay = (Integer)mapList.get(0).get("expiredDay"); + + String billListStr = ""; + BigDecimal sumNeedPay = new BigDecimal(0); + for (Map bill : mapList) { + String billType = bill.get("billType").toString(); + BigDecimal needPay = (BigDecimal) bill.get("owe"); + BigDecimal price = needPay.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + + sumNeedPay = sumNeedPay.add(price); + billListStr += "
"; + billListStr += "
"; + billListStr += "
" + billType + "
"; + billListStr += "
" + price + "
"; + billListStr += "
" + receiveDate + "
"; + billListStr += "
" + expiredDay + "
"; + billListStr += "
"; + } + //发邮件 + Map map = new HashedMap(); + map.put("price", sumNeedPay.toString()); + map.put("date", receiveDate); + map.put("billList", billListStr); + map.put("linkName",manager==null?"":manager); + map.put("linkPhone",managerPhone==null?"":managerPhone); + MailMsg mailMsg = new MailMsg(); + mailMsg.setSubject("欠缴账单通知"); + mailMsg.setHtml(true); + mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode()); + mailMsg.setModelId(EnumMailMsgModel.MAIL_BILL_OWE.getCode()); + mailMsg.setTo(new String[]{email}); + mailMsg.setTenantId(tenantId); + mailMsg.setDynamicContentMap(map); + mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } + } + } + + } + + @Override + public Map getOweBillAsPage(WxBillAll record, Integer pageNum, Integer pageSize) { + PageInfo> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxBillAllMapper.getOweBillAsPage(record)); + Map result = new HashMap<>(); + result.put("pageInfo", pageInfo); + return result; + } + + + @Override + public void exportOweMerchant(WxBillAll record, HttpServletRequest request, HttpServletResponse response) { + List> data = wxBillAllMapper.getOweBillAsPage(record); + List list = new ArrayList<>(); + for (Map map:data) { + OweMerchantVo oweMerchantVo = new OweMerchantVo(); + oweMerchantVo.setBuilding((Long)map.get("building")); + oweMerchantVo.setDepositOwe((BigDecimal) map.get("depositOwe")); + oweMerchantVo.setFloor((Long)map.get("floor")); + oweMerchantVo.setLinkPerson((String)map.get("manager")); + oweMerchantVo.setName((String)map.get("merchantName")); + oweMerchantVo.setLinkPhone((String)map.get("managerPhone")); + oweMerchantVo.setOtherOwe((BigDecimal) map.get("otherOwe")); + oweMerchantVo.setPropertyOwe((BigDecimal) map.get("propertyOwe")); + oweMerchantVo.setRentOwe((BigDecimal) map.get("rentOwe")); + oweMerchantVo.setTotalOwe((BigDecimal) map.get("totalOwe")); + list.add(oweMerchantVo); + } + String name = "欠缴商户列表"; + excelService.exportExcel(list,null, name, OweMerchantVo.class,name+".xls",response); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDailyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDailyServiceImpl.java index 51d5425c5..a8d3151d6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDailyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDailyServiceImpl.java @@ -6,14 +6,15 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; import com.iformall.domain.po.WxBillDaily; import com.iformall.domain.po.WxShop; -import com.iformall.enums.EnumBillDailyStatus; -import com.iformall.enums.EnumBillRentStatus; -import com.iformall.enums.EnumDelStatus; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillDailyMapper; import com.iformall.mapper.WxShopMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillDailyService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; /** @@ -35,6 +37,8 @@ public class WxBillDailyServiceImpl implements WxBillDailyService { @Autowired WxShopMapper wxShopMapper; + @Autowired + WxBillActionService wxBillActionService; @Override public PageInfo> listAsPage(WxBillDaily record, Integer pageIndex, Integer pageSize) { @@ -108,7 +112,7 @@ public class WxBillDailyServiceImpl implements WxBillDailyService { } @Override - public ResultData saveOrUpdate(WxBillDaily record) { + public ResultData saveOrUpdate(WxBillDaily record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ @@ -145,12 +149,30 @@ public class WxBillDailyServiceImpl implements WxBillDailyService { wxBillDaily.setOwe(record.getReceivePay()-record.getPay()); wxBillDaily.setStatus(record.getPay().equals(record.getReceivePay()) ? EnumBillDailyStatus.PAID.getCode() : wxBillDaily.getStatus()); wxBillDaily.setUpdatetime(new Date()); + wxBillDaily.setPayWay(record.getPayWay()); try { wxBillDailyMapper.updateByPrimaryKeySelective(wxBillDaily); } catch (Exception e) { logger.error("更新日常账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDaily.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillDaily.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加日常账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新日常账单成功"); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java index 8ff2827ac..433a0d55a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java @@ -6,11 +6,16 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; import com.iformall.domain.po.WxBillDeposit; +import com.iformall.enums.EnumBillAction; +import com.iformall.enums.EnumBillPayWay; import com.iformall.enums.EnumBillRentStatus; import com.iformall.enums.EnumDelStatus; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillDepositMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillDepositService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -33,6 +39,8 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { @Autowired WxBillDepositMapper wxBillDepositMapper; + @Autowired + WxBillActionService wxBillActionService; @Override public PageInfo> listAsPage(WxBillDeposit record, Integer pageIndex, Integer pageSize) { @@ -92,7 +100,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { } @Override - public ResultData saveOrUpdate(WxBillDeposit record) { + public ResultData saveOrUpdate(WxBillDeposit record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ @@ -126,12 +134,30 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { wxBillDeposit.setOwe(record.getReceivePay()-record.getPay()); wxBillDeposit.setStatus(record.getPay().equals(record.getReceivePay())?EnumBillRentStatus.PAID.getCode():wxBillDeposit.getStatus()); wxBillDeposit.setUpdatetime(new Date()); + wxBillDeposit.setPayWay(record.getPayWay()); try { wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); } catch (Exception e) { logger.error("更新租赁押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDeposit.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillDeposit.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加租赁押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新租赁押金账单成功", wxBillDeposit); } } @@ -163,7 +189,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { @Transactional(rollbackFor = {Exception.class}) @Override - public ResultData returnDeposit(WxBillDeposit record) { + public ResultData returnDeposit(WxBillDeposit record, MallUserInfo user) { logger.info("租赁押金退还"); WxBillDeposit wxBillDeposit = wxBillDepositMapper.selectByPrimaryKey(record.getId()); if (wxBillDeposit == null) { @@ -178,6 +204,23 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { logger.error("租赁押金退还失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDeposit.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getReturnPrice()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.DEPOSIT_RETURN.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillDeposit.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加租赁押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "租赁押金退还成功", wxBillDeposit); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java index 957da7b1c..925b4c6d9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java @@ -6,14 +6,15 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; import com.iformall.domain.po.WxBillOtherDeposit; import com.iformall.domain.po.WxShop; -import com.iformall.enums.EnumBillDailyStatus; -import com.iformall.enums.EnumBillRentStatus; -import com.iformall.enums.EnumDelStatus; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillOtherDepositMapper; import com.iformall.mapper.WxShopMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillOtherDepositService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; /** @@ -36,6 +38,10 @@ public class WxBillOtherDepositServiceImpl implements WxBillOtherDepositService @Autowired WxShopMapper wxShopMapper; + @Autowired + WxBillActionService wxBillActionService; + + @Override public PageInfo> listAsPage(WxBillOtherDeposit record, Integer pageIndex, Integer pageSize) { //更新账单状态 @@ -108,7 +114,7 @@ public class WxBillOtherDepositServiceImpl implements WxBillOtherDepositService } @Override - public ResultData saveOrUpdate(WxBillOtherDeposit record) { + public ResultData saveOrUpdate(WxBillOtherDeposit record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if (pay > receivepay) { @@ -144,12 +150,30 @@ public class WxBillOtherDepositServiceImpl implements WxBillOtherDepositService wxBillOtherDeposit.setOwe(record.getReceivePay() - record.getPay()); wxBillOtherDeposit.setStatus(record.getPay().equals(record.getReceivePay()) ? EnumBillDailyStatus.PAID.getCode() : wxBillOtherDeposit.getStatus()); wxBillOtherDeposit.setUpdatetime(new Date()); + wxBillOtherDeposit.setPayWay(record.getPayWay()); try { wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillOtherDeposit); } catch (Exception e) { logger.error("更新其他账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillOtherDeposit.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillOtherDeposit.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加其他押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新其他账单成功"); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherServiceImpl.java index 8946882c6..e56ea3161 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherServiceImpl.java @@ -6,14 +6,15 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; import com.iformall.domain.po.WxBillOther; import com.iformall.domain.po.WxShop; -import com.iformall.enums.EnumBillDailyStatus; -import com.iformall.enums.EnumBillRentStatus; -import com.iformall.enums.EnumDelStatus; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillOtherMapper; import com.iformall.mapper.WxShopMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillOtherService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; /** @@ -36,6 +38,9 @@ public class WxBillOtherServiceImpl implements WxBillOtherService { @Autowired WxShopMapper wxShopMapper; + @Autowired + WxBillActionService wxBillActionService; + @Override public PageInfo> listAsPage(WxBillOther record, Integer pageIndex, Integer pageSize) { //更新账单状态 @@ -108,7 +113,7 @@ public class WxBillOtherServiceImpl implements WxBillOtherService { } @Override - public ResultData saveOrUpdate(WxBillOther record) { + public ResultData saveOrUpdate(WxBillOther record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ @@ -144,12 +149,30 @@ public class WxBillOtherServiceImpl implements WxBillOtherService { wxBillOther.setOwe(record.getReceivePay()-record.getPay()); wxBillOther.setStatus(record.getPay().equals(record.getReceivePay()) ? EnumBillDailyStatus.PAID.getCode() : wxBillOther.getStatus()); wxBillOther.setUpdatetime(new Date()); + wxBillOther.setPayWay(record.getPayWay()); try { wxBillOtherMapper.updateByPrimaryKeySelective(wxBillOther); } catch (Exception e) { logger.error("更新其他账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillOther.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillOther.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加其他账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新其他账单成功"); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java index cbe960738..da40c0953 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java @@ -6,11 +6,16 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillAction; import com.iformall.domain.po.WxBillPropertyDeposit; +import com.iformall.enums.EnumBillAction; +import com.iformall.enums.EnumBillPayWay; import com.iformall.enums.EnumBillRentStatus; import com.iformall.enums.EnumDelStatus; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillPropertyDepositMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillPropertyDepositService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -32,7 +38,8 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe @Autowired WxBillPropertyDepositMapper wxBillPropertyDepositMapper; - + @Autowired + WxBillActionService wxBillActionService; @Override public PageInfo> listAsPage(WxBillPropertyDeposit record, Integer pageIndex, Integer pageSize) { @@ -93,7 +100,7 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe } @Override - public ResultData saveOrUpdate(WxBillPropertyDeposit record) { + public ResultData saveOrUpdate(WxBillPropertyDeposit record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ @@ -127,12 +134,30 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe wxBillDeposit.setOwe(record.getReceivePay()-record.getPay()); wxBillDeposit.setStatus(record.getPay().equals(record.getReceivePay())?EnumBillRentStatus.PAID.getCode():wxBillDeposit.getStatus()); wxBillDeposit.setUpdatetime(new Date()); + wxBillDeposit.setPayWay(record.getPayWay()); try { wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); } catch (Exception e) { logger.error("更新物业押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDeposit.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillDeposit.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加物业押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新物业押金账单成功", wxBillDeposit); } } @@ -163,7 +188,7 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe } @Override - public ResultData returnDeposit(WxBillPropertyDeposit record) { + public ResultData returnDeposit(WxBillPropertyDeposit record, MallUserInfo user) { logger.info("物业押金退还"); WxBillPropertyDeposit wxBillDeposit = wxBillPropertyDepositMapper.selectByPrimaryKey(record.getId()); if (wxBillDeposit == null) { @@ -178,6 +203,23 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe logger.error("物业押金退还失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillDeposit.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getReturnPrice()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.DEPOSIT_RETURN.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillDeposit.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加物业押金账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "物业押金退还成功", wxBillDeposit); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java index 2b1ef8fe1..38b96b2be 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java @@ -6,13 +6,12 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillProperty; -import com.iformall.domain.po.WxBillPropertyDeposit; -import com.iformall.enums.EnumBillRentStatus; -import com.iformall.enums.EnumDelStatus; +import com.iformall.domain.po.*; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillPropertyDepositMapper; import com.iformall.mapper.WxBillPropertyMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillPropertyService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -38,6 +38,9 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { @Autowired WxBillPropertyDepositMapper wxBillPropertyDepositMapper; + @Autowired + WxBillActionService wxBillActionService; + @Override public PageInfo> listAsPage(WxBillProperty record, Integer pageIndex, Integer pageSize) { //更新账单状态 @@ -96,7 +99,7 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { } @Override - public ResultData saveOrUpdate(WxBillProperty record) { + public ResultData saveOrUpdate(WxBillProperty record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ @@ -133,12 +136,30 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { property.setOwe(record.getReceivePay()-record.getPay()); property.setStatus(record.getPay().equals(record.getReceivePay())?EnumBillRentStatus.PAID.getCode():property.getStatus()); property.setUpdatetime(new Date()); + property.setPayWay(record.getPayWay()); try { wxBillPropertyMapper.updateByPrimaryKeySelective(property); } catch (Exception e) { logger.error("更新物业账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(property.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(property.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加物业账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新物业账单成功", property); } } @@ -200,5 +221,17 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { return result; } + @Override + public ResultData updateLatePayStatus(WxBillProperty record) { + record.setLatePayStatus(EnumBillDailyStatus.PAID.getCode()); + record.setUpdatetime(new Date()); + try { + wxBillPropertyMapper.updateByPrimaryKeySelective(record); + } catch (Exception e) { + logger.error("修改营业额失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "滞纳金结单失败"); + } + return new ResultData(Result.SUCCESS, "滞纳金结单成功", record); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java index ef47db601..d3503e063 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java @@ -6,13 +6,12 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillDeposit; -import com.iformall.domain.po.WxBillRent; -import com.iformall.enums.EnumBillRentStatus; -import com.iformall.enums.EnumDelStatus; +import com.iformall.domain.po.*; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxBillDepositMapper; import com.iformall.mapper.WxBillRentMapper; +import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillRentService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -38,6 +38,9 @@ public class WxBillRentServiceImpl implements WxBillRentService { @Autowired WxBillDepositMapper wxBillDepositMapper; + @Autowired + WxBillActionService wxBillActionService; + @Override public PageInfo> listAsPage(WxBillRent record, Integer pageIndex, Integer pageSize) { //更新账单状态 @@ -96,7 +99,7 @@ public class WxBillRentServiceImpl implements WxBillRentService { } @Override - public ResultData saveOrUpdate(WxBillRent record) { + public ResultData saveOrUpdate(WxBillRent record, MallUserInfo user) { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ @@ -133,12 +136,30 @@ public class WxBillRentServiceImpl implements WxBillRentService { wxBillRent.setOwe(record.getReceivePay()-record.getPay()); wxBillRent.setStatus(record.getPay().equals(record.getReceivePay())?EnumBillRentStatus.PAID.getCode():wxBillRent.getStatus()); wxBillRent.setUpdatetime(new Date()); + wxBillRent.setPayWay(record.getPayWay()); try { wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); } catch (Exception e) { logger.error("更新租赁账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + //日志 + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(wxBillRent.getId()); + String message = EnumBillPayWay.getEnum(record.getPayWay()).getMessage(); + String price = new BigDecimal(record.getPay()).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(message + price + "元"); + wxBillAction.setAction(EnumBillAction.OFFLINE_PAY.getCode()); + wxBillAction.setUserId(user.getId()); + wxBillAction.setUserName(user.getName()); + wxBillAction.setPhone(user.getPhone()); + wxBillAction.setTenantId(wxBillRent.getTenantId()); + try { + wxBillActionService.save(wxBillAction); + } catch (Exception e) { + logger.error("添加租赁账单行为日志,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } return new ResultData(Result.SUCCESS, "更新租赁账单成功"); } } @@ -209,9 +230,22 @@ public class WxBillRentServiceImpl implements WxBillRentService { wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); } catch (Exception e) { logger.error("修改营业额失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "修改营业额失败"); } return new ResultData(Result.SUCCESS, "修改营业额成功"); } + @Override + public ResultData updateLatePayStatus(WxBillRent record) { + record.setLatePayStatus(EnumBillDailyStatus.PAID.getCode()); + record.setUpdatetime(new Date()); + try { + wxBillRentMapper.updateByPrimaryKeySelective(record); + } catch (Exception e) { + logger.error("修改营业额失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "滞纳金结单失败"); + } + return new ResultData(Result.SUCCESS, "滞纳金结单成功", record); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessServiceImpl.java index 9f824ecca..896be04f8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessServiceImpl.java @@ -25,10 +25,16 @@ public class WxBusinessServiceImpl implements WxBusinessService { } @Override - public List getList(WxBusiness record) { + public List findList(WxBusiness record) { return wxBusinessMapper.findList(record); } + @Override + public List findListAll() { + return wxBusinessMapper.findListAll(); + } + + @Override public WxBusiness getById(Integer id) { return wxBusinessMapper.selectByPrimaryKey(id); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index a39d613fb..b6478ad78 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -5,42 +5,33 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.dto.WxCUserBasicInfoDto; -import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCarPayRecord; -import com.iformall.domain.po.WxTags; -import com.iformall.domain.vo.CUserBaseInfoT; -import com.iformall.domain.vo.CUserBaseVo; -import com.iformall.domain.vo.CUserTagVo; -import com.iformall.domain.vo.WxCUserBasicInfoVo; -import com.iformall.enums.EnumScoreType; +import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; +import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.*; +import com.iformall.enums.*; import com.iformall.mapper.*; -import com.iformall.service.WxCUserBasicInfoService; -import com.iformall.service.WxCUserTagsService; -import com.iformall.service.WxScoreRulesService; -import com.iformall.utils.Constant; -import com.iformall.utils.DownFileUtil; -import org.apache.commons.io.FileUtils; +import com.iformall.service.*; +import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.xssf.streaming.SXSSFSheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.TemporalAdjusters; +import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; @Service public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { @@ -70,13 +61,347 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { @Autowired WxCarPayRecordMapper wxCarPayRecordMapper; + @Autowired + ExcelService excelService; + + @Autowired + WxCreditHistoryService wxCreditHistoryService; + + @Autowired + WxLevelConfigService wxLevelConfigService; + + @Autowired + WxTagsService wxTagsService; + + private final static List memberTimeList = new ArrayList( + Arrays.asList( + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1000.getMessage()); + setId(EnumTag.ID_1000.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1001.getMessage()); + setId(EnumTag.ID_1001.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1002.getMessage()); + setId(EnumTag.ID_1002.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1003.getMessage()); + setId(EnumTag.ID_1003.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1004.getMessage()); + setId(EnumTag.ID_1004.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1005.getMessage()); + setId(EnumTag.ID_1005.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1006.getMessage()); + setId(EnumTag.ID_1006.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1007.getMessage()); + setId(EnumTag.ID_1007.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1008.getMessage()); + setId(EnumTag.ID_1008.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1009.getMessage()); + setId(EnumTag.ID_1009.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1010.getMessage()); + setId(EnumTag.ID_1010.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_50.getCode()); + setName(EnumTag.ID_1011.getMessage()); + setId(EnumTag.ID_1011.getCode()); + }} + ) + ); + + private final static String RANGE_START = "rangeStart"; + private final static String RANGE_END = "rangeEnd"; + + private final static Map> memberTimeMap + = new HashMap>() { + { + put(EnumTag.ID_1000.getCode(), + new HashMap(){{ + put(RANGE_START,0L); + put(RANGE_END,1L); + }}); + put(EnumTag.ID_1001.getCode(), + new HashMap(){{ + put(RANGE_START,0L); + put(RANGE_END,7L); + }}); + put(EnumTag.ID_1002.getCode(), + new HashMap(){{ + put(RANGE_START,0L); + put(RANGE_END,30L); + }}); + put(EnumTag.ID_1003.getCode(), + new HashMap(){{ + put(RANGE_START,0L); + put(RANGE_END,90L); + }}); + put(EnumTag.ID_1004.getCode(), + new HashMap(){{ + put(RANGE_START,0L); + put(RANGE_END,365L); + }}); + put(EnumTag.ID_1005.getCode(), + new HashMap(){{ + put(RANGE_START,0L); + put(RANGE_END,365*5L); + }}); + put(EnumTag.ID_1006.getCode(), + new HashMap(){{ + put(RANGE_START,365*5L); + }}); + put(EnumTag.ID_1007.getCode(), + new HashMap(){{ + put(RANGE_START,365L); + }}); + put(EnumTag.ID_1008.getCode(), + new HashMap(){{ + put(RANGE_START,90L); + }}); + put(EnumTag.ID_1009.getCode(), + new HashMap(){{ + put(RANGE_START,30L); + }}); + put(EnumTag.ID_1010.getCode(), + new HashMap(){{ + put(RANGE_START,7L); + }}); + put(EnumTag.ID_1011.getCode(), + new HashMap(){{ + put(RANGE_START,1L); + }}); + } + }; + + private final static List memberBirthday = new ArrayList( + Arrays.asList( + new WxTags(){{ + setTypeId(EnumTagType.ID_52.getCode()); + setName(EnumTag.ID_1100.getMessage()); + setId(EnumTag.ID_1100.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_52.getCode()); + setName(EnumTag.ID_1101.getMessage()); + setId(EnumTag.ID_1101.getCode()); + }}, + new WxTags(){{ + setTypeId(EnumTagType.ID_52.getCode()); + setName(EnumTag.ID_1102.getMessage()); + setId(EnumTag.ID_1102.getCode()); + }} + ) + ); + + private void filtersToDtoID0(WxCUserBasicInfoDto dto, WxCUserBasicInfoFilterDto f) { + dto.setPhones(f.getParam()); + } + + private void filtersToDtoID50(WxCUserBasicInfoDto dto, WxCUserBasicInfoFilterDto f) { + ZoneId zone = ZoneId.systemDefault(); + + Map rangeMap = memberTimeMap.get(f.getId()); + if (rangeMap != null) { + Long rangeEnd = rangeMap.get(RANGE_END); + if (rangeEnd != null) { + LocalDateTime localDateTimeStart = LocalDateTime.now().minusDays(rangeEnd); + dto.setStartTime(Date.from(localDateTimeStart.atZone(zone).toInstant())); + } + Long rangeStart = rangeMap.get(RANGE_START); + if (rangeStart != null) { + LocalDateTime localDateTimeEnd = LocalDateTime.now().minusDays(rangeStart); + dto.setEndTime(Date.from(localDateTimeEnd.atZone(zone).toInstant())); + } + } + } + private void filtersToDtoID51(WxCUserBasicInfoDto dto, WxCUserBasicInfoFilterDto f) { + List levels = wxLevelConfigService.getByTenantId(dto.getTenantId()); + if (f.getId().equals(0L)) { + dto.setLevelStartScore(0); + if (levels.isEmpty()) + dto.setLevelEndScore(null); + else + dto.setLevelEndScore(levels.get(0).getPoints()); + } else { + for (int i = 0; i < levels.size(); i++) { + WxLevelConfig l = levels.get(i); + if (l.getId().equals(f.getId())) { + dto.setLevelStartScore(l.getPoints()); + if (i + 1 < levels.size()) + dto.setLevelEndScore(levels.get(i + 1).getPoints()); + else + dto.setLevelEndScore(null); + break; + } + } + } + } + + private void filtersToDtoID52(WxCUserBasicInfoDto dto, WxCUserBasicInfoFilterDto f) { + LocalDate localDate = LocalDate.now(); + ZoneId zone = ZoneId.systemDefault(); + if (f.getId().equals(EnumTag.ID_1100.getCode())) { + dto.setBirthStartTime( + Date.from( + localDate.atStartOfDay().atZone(zone).toInstant())); + dto.setBirthEndTime( + Date.from( + localDate.plusDays(1).atStartOfDay().atZone(zone).toInstant())); + } else if (f.getId().equals(EnumTag.ID_1101.getCode())){ + dto.setBirthStartTime( + Date.from( + localDate.with(DayOfWeek.MONDAY).atStartOfDay().atZone(zone).toInstant())); + dto.setBirthEndTime( + Date.from( + localDate.plusWeeks(1).with(DayOfWeek.MONDAY).atStartOfDay().atZone(zone).toInstant())); + } else if (f.getId().equals(EnumTag.ID_1102.getCode())){ + dto.setBirthStartTime( + Date.from( + localDate.with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay().atZone(zone).toInstant())); + dto.setBirthEndTime( + Date.from( + localDate.plusMonths(1).with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay().atZone(zone).toInstant())); + } + } + private WxCUserBasicInfoDto filtersToDto(String tenantId, List filterList){ + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + List tagIdList = new ArrayList<>(); + + filterList.stream().forEach(f->{ + if (f.getTypeId()==null) { + tagIdList.add(f.getId()); + return; + } + if(f.getTypeId().equals(EnumTagType.ID_0.getCode())) { + filtersToDtoID0(dto,f); + } else if(f.getTypeId().equals(EnumTagType.ID_50.getCode())) { + filtersToDtoID50(dto,f); + } else if (f.getTypeId().equals(EnumTagType.ID_51.getCode())) { + filtersToDtoID51(dto,f); + } else if (f.getTypeId().equals(EnumTagType.ID_52.getCode())) { + filtersToDtoID52(dto,f); + } else { + tagIdList.add(f.getId()); + } + }); + if(!tagIdList.isEmpty()) + dto.setTagIds(tagIdList); + dto.setTenantId(tenantId); + return dto; + } + + public long countByFilter(String tenantId, List filterList) { + return wxCUserBasicInfoMapper.findCountByFilter(filtersToDto(tenantId,filterList)); + } + + public List listByFilter(String tenantId, List filterList) { + return wxCUserBasicInfoMapper.findListByFilter(filtersToDto(tenantId,filterList)); + } + + private WxTagsTypeVo generateType50() { + WxTagsTypeVo type = new WxTagsTypeVo(); + type.setFlag(EnumTagTypeFlag.FLAG_SINGLE.getCode()); + type.setName(EnumTagType.ID_50.getMessage()); + type.setId(EnumTagType.ID_50.getCode()); + type.setTags(memberTimeList); + return type; + } + + private WxTagsTypeVo generateType51(String tenentId) { + WxTagsTypeVo type = new WxTagsTypeVo(); + type.setFlag(EnumTagTypeFlag.FLAG_SINGLE.getCode()); + type.setName(EnumTagType.ID_51.getMessage()); + type.setId(EnumTagType.ID_51.getCode()); + + List tagsMemberLevel = new ArrayList<>(); + List levels = wxLevelConfigService.getByTenantId(tenentId); + + WxTags wxTagsBase = new WxTags(); + wxTagsBase.setName(WxLevelConfigService.DEFAULT_LEVEL); + wxTagsBase.setTypeId(EnumTagType.ID_51.getCode()); + wxTagsBase.setId(0L); + tagsMemberLevel.add(wxTagsBase); + + levels.stream().forEach(l->{ + WxTags wxTags = new WxTags(); + wxTags.setName(l.getLevel()); + wxTags.setId(l.getId()); + wxTags.setTypeId(EnumTagType.ID_51.getCode()); + tagsMemberLevel.add(wxTags); + }); + type.setTags(tagsMemberLevel); + return type; + } + + private WxTagsTypeVo generateType52() { + WxTagsTypeVo type = new WxTagsTypeVo(); + type.setFlag(EnumTagTypeFlag.FLAG_SINGLE.getCode()); + type.setName(EnumTagType.ID_52.getMessage()); + type.setId(EnumTagType.ID_52.getCode()); + type.setTags(memberBirthday); + return type; + } + + public List listFilters(String tenantId) { + WxTagsGroupVo filter = new WxTagsGroupVo(); + + filter.setId(EnumTagGroup.ID_10.getCode()); + filter.setName(EnumTagGroup.ID_10.getMessage()); + + List types = new ArrayList<>(); + types.add(generateType50()); + types.add(generateType51(tenantId)); + types.add(generateType52()); + + filter.setTypes(types); + List listVo =wxTagsService.listAllVo(); + listVo.add(0,filter); + return listVo; + } + + + @Override + public List listByFilterList(String tenantId, List filterList) { + HashSet userSet = new HashSet<>(); + filterList.stream().forEach(f->userSet.addAll(listByFilter(tenantId,f.getTagList()))); + return new ArrayList<>(userSet); + } + @Override public PageInfo listAsPage(WxCUserBasicInfo record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserBasicInfoMapper.findList(record)); } @Override - public int cntUserList(WxCUserBasicInfo record) { + public int countUser(WxCUserBasicInfo record) { return wxCUserBasicInfoMapper.selectCount(record); } @@ -85,7 +410,24 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { WxCUserBasicInfo basicQ = new WxCUserBasicInfo(); basicQ.setTenantId(tenantId); basicQ.setPhone(phone); - return wxCUserBasicInfoMapper.select(basicQ); + List basicInfos = wxCUserBasicInfoMapper.select(basicQ); + if (basicInfos != null && basicInfos.size() > 0) { + WxCUserBasicInfo wxCUserBasicInfo = basicInfos.get(0); + if (wxCUserBasicInfo.getPoins() != null) { + List levelList = wxLevelConfigService.getByTenantId(wxCUserBasicInfo.getTenantId()); + String level = WxLevelConfigService.DEFAULT_LEVEL; + for(WxLevelConfig levelConfig: levelList) { + if (wxCUserBasicInfo.getPoins() >= levelConfig.getPoints()) { + level = levelConfig.getLevel(); + } + } + wxCUserBasicInfo.setLevel(level); + List basicInfoList = Lists.newArrayList(); + basicInfoList.add(wxCUserBasicInfo); + return basicInfoList; + } + } + return basicInfos; } @Override @@ -148,259 +490,92 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { return wxCUserBasicInfoMapper.countVoList(basicInfo); } - @Override - public void exportData(WxCUserBasicInfo basicInfo, HttpServletRequest request, HttpServletResponse response) { - List memberlist = wxCUserBasicInfoMapper.findVoList(basicInfo); - SXSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; + public void exportData(WxCUserBasicInfo basicInfo, HttpServletRequest request, HttpServletResponse response) { + List list = wxCUserBasicInfoMapper.findVoList(basicInfo); + List tagList = wxTagsMapper.findListAll(); + Map tagMap = tagList.stream().collect(Collectors.toMap(WxTags::getId, WxTags::getName)); + list.stream().filter(u->u.getTags()!=null).forEach(u->{ + List ids = JSONObject.parseArray(u.getTags(), Long.class); + String tagNames = StringUtils.join(ids.stream().map(id->tagMap.get(id)).collect(Collectors.toList()),"/"); + u.setTagNames(tagNames); + }); + excelService.exportExcel(list,null,"会员信息",WxCUserBasicInfoVo.class,"会员信息数据.xls",response); + } + public void exportTemplate(HttpServletRequest request, HttpServletResponse response, String tenantId) { + List list = new ArrayList<>(); + WxCUserBasicInfoVo u1 = new WxCUserBasicInfoVo(); + WxCUserBasicInfoVo u2 = new WxCUserBasicInfoVo(); + WxCUserBasicInfoVo u3 = new WxCUserBasicInfoVo(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - WxTags wxTagsQ = new WxTags(); - List tagList = wxTagsMapper.findList(wxTagsQ); - - List tagIdList = new ArrayList(); + u1.setName("例子1"); + u1.setSex(0); + u1.setPhone("13900010001"); + u1.setNickName("昵称"); + u1.setEducation("本科"); + u1.setCredit(10); + u1.setAddress("地址"); try { - File file = new File(filepath); - workbook = new SXSSFWorkbook(100); - SXSSFSheet sheetTwo = workbook.createSheet("会员信息"); - Row rowtwo = sheetTwo.createRow(0); - Cell nameCellTwo = rowtwo.createCell(0); - Cell sexCellTwo = rowtwo.createCell(1); - Cell phoneCellTwo = rowtwo.createCell(2); - Cell nickNameCellTwo = rowtwo.createCell(3); - Cell educationCellTwo = rowtwo.createCell(4); - Cell birthdateCellTwo = rowtwo.createCell(5); - Cell addrCellTwo = rowtwo.createCell(6); - Cell updateDateCellTwo = rowtwo.createCell(7); - Cell createDateCellTwo = rowtwo.createCell(8); - Cell tagCellTwo = rowtwo.createCell(9); - Cell scoreCellTwo = rowtwo.createCell(10); - - nameCellTwo.setCellValue("姓名"); - sexCellTwo.setCellValue("性别"); - phoneCellTwo.setCellValue("手机号"); - nickNameCellTwo.setCellValue("微信昵称"); - educationCellTwo.setCellValue("学历"); - birthdateCellTwo.setCellValue("生日"); - addrCellTwo.setCellValue("地址"); - updateDateCellTwo.setCellValue("上次活跃时间"); - createDateCellTwo.setCellValue("注册时间"); - tagCellTwo.setCellValue("标签"); - scoreCellTwo.setCellValue("成长值"); - - for (int i = 0; i < memberlist.size(); i++) { - rowtwo = sheetTwo.createRow(i + 1); - nameCellTwo = rowtwo.createCell(0); - sexCellTwo = rowtwo.createCell(1); - phoneCellTwo = rowtwo.createCell(2); - nickNameCellTwo = rowtwo.createCell(3); - educationCellTwo = rowtwo.createCell(4); - birthdateCellTwo = rowtwo.createCell(5); - addrCellTwo = rowtwo.createCell(6); - updateDateCellTwo = rowtwo.createCell(7); - createDateCellTwo = rowtwo.createCell(8); - tagCellTwo = rowtwo.createCell(9); - scoreCellTwo = rowtwo.createCell(10); - - WxCUserBasicInfoVo entity = memberlist.get(i); - - String sexStr = "保密"; - if (entity.getSex() == 1) - sexStr = "男"; - else if (entity.getSex() == 2) - sexStr = "女"; - nameCellTwo.setCellValue(entity.getName()); - sexCellTwo.setCellValue(sexStr); - phoneCellTwo.setCellValue(entity.getPhone()); - nickNameCellTwo.setCellValue(entity.getNickName()); - educationCellTwo.setCellValue(entity.getEducation()); - if (entity.getBirthdate() != null) - birthdateCellTwo.setCellValue(sdf.format(entity.getBirthdate())); - addrCellTwo.setCellValue(entity.getAddressStr()); - updateDateCellTwo.setCellValue(sdf.format(entity.getUpdateDate())); - createDateCellTwo.setCellValue(sdf.format(entity.getCreateDate())); - if (entity != null) { - if (entity.getTagId() != null && entity.getTags() != null) { - if (StringUtils.isNotBlank(entity.getTags())) { - List ids = JSONObject.parseArray(entity.getTags(), Long.class); - if (!ids.isEmpty()) { - String tagNames = ""; - String tagIds = ""; - tagIdList.clear(); - for(Long id: ids) { - for(WxTags tag: tagList) { - if(id.equals(tag.getId())) { - tagNames += tag.getName() + "/"; - tagIds += tag.getId() + ","; - tagIdList.add(tag.getId()); - break; - } - } - } - if (StringUtils.isNotBlank(tagNames)) { - entity.setTagNames(tagNames.substring(0, tagNames.length() - 1)); - tagCellTwo.setCellValue(entity.getTagNames()); - } - if (StringUtils.isNoneBlank(tagIds)) { - entity.setTagIds(tagIds.substring(0, tagIds.length() - 1)); - } - } - } - } - } - // 成长值 - if (entity.getPoins() != null) { - scoreCellTwo.setCellValue(entity.getPoins()); - } - } + u1.setBirthdate(sdf.parse("2018-09-10")); + u1.setCreateDate(sdf.parse("2018-08-10")); + u1.setUpdateDate(sdf.parse("2018-08-10")); + } catch (Exception e){ + u1.setBirthdate(new Date()); + u1.setCreateDate(new Date()); + u1.setUpdateDate(new Date()); + } + u1.setTagNames("附近住户"); + u1.setPoins(100); + u2.setName("例子2"); + u2.setSex(1); + u2.setPhone("13900010002"); + u2.setNickName("昵称"); + u2.setEducation("本科"); + u2.setCredit(20); + u2.setAddress("地址"); - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - DownFileUtil.downFile(filepath,"会员信息数据.xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - e.printStackTrace(); + try { + u2.setBirthdate(sdf.parse("2018-09-10")); + u2.setCreateDate(sdf.parse("2018-08-10")); + u2.setUpdateDate(sdf.parse("2018-08-10")); + } catch (Exception e){ + u2.setBirthdate(new Date()); + u2.setCreateDate(new Date()); + u2.setUpdateDate(new Date()); } - } - @Override - public void exportTemplate(HttpServletRequest request, HttpServletResponse response, String tenantId) { + u2.setTagNames("男/附近住户"); + u2.setPoins(200); - SXSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; - try { - File file = new File(filepath); - workbook = new SXSSFWorkbook(100); - - SXSSFSheet sheetTwo = workbook.createSheet("会员信息"); - - Row rowtwo = sheetTwo.createRow(0); - - Cell nameCellTwo = rowtwo.createCell(0); - Cell sexCellTwo = rowtwo.createCell(1); - Cell phoneCellTwo = rowtwo.createCell(2); - Cell nickNameCellTwo = rowtwo.createCell(3); - Cell educationCellTwo = rowtwo.createCell(4); - Cell birthdateCellTwo = rowtwo.createCell(5); - Cell addrCellTwo = rowtwo.createCell(6); - Cell updateDateCellTwo = rowtwo.createCell(7); - Cell createDateCellTwo = rowtwo.createCell(8); - Cell tagCellTwo = rowtwo.createCell(9); - Cell scoreCellTwo = rowtwo.createCell(10); - - nameCellTwo.setCellValue("姓名"); - sexCellTwo.setCellValue("性别"); - phoneCellTwo.setCellValue("手机号"); - nickNameCellTwo.setCellValue("微信昵称"); - educationCellTwo.setCellValue("学历"); - birthdateCellTwo.setCellValue("生日"); - addrCellTwo.setCellValue("地址"); - updateDateCellTwo.setCellValue("上次活跃时间"); - createDateCellTwo.setCellValue("注册时间"); - tagCellTwo.setCellValue("标签"); - scoreCellTwo.setCellValue("成长值"); - { - rowtwo = sheetTwo.createRow(1); - nameCellTwo = rowtwo.createCell(0); - sexCellTwo = rowtwo.createCell(1); - phoneCellTwo = rowtwo.createCell(2); - nickNameCellTwo = rowtwo.createCell(3); - educationCellTwo = rowtwo.createCell(4); - birthdateCellTwo = rowtwo.createCell(5); - addrCellTwo = rowtwo.createCell(6); - updateDateCellTwo = rowtwo.createCell(7); - createDateCellTwo = rowtwo.createCell(8); - tagCellTwo = rowtwo.createCell(9); - scoreCellTwo = rowtwo.createCell(10); - nameCellTwo.setCellValue("例子1"); - sexCellTwo.setCellValue("保密"); - phoneCellTwo.setCellValue("13900010001"); - nickNameCellTwo.setCellValue("昵称"); - educationCellTwo.setCellValue("本科"); - birthdateCellTwo.setCellValue("2018-09-10"); - addrCellTwo.setCellValue("地址"); - updateDateCellTwo.setCellValue("2018-08-10"); - createDateCellTwo.setCellValue("2018-08-10"); - tagCellTwo.setCellValue("附近住户"); - scoreCellTwo.setCellValue("100"); - } - { - rowtwo = sheetTwo.createRow(2); - nameCellTwo = rowtwo.createCell(0); - sexCellTwo = rowtwo.createCell(1); - phoneCellTwo = rowtwo.createCell(2); - nickNameCellTwo = rowtwo.createCell(3); - educationCellTwo = rowtwo.createCell(4); - birthdateCellTwo = rowtwo.createCell(5); - addrCellTwo = rowtwo.createCell(6); - updateDateCellTwo = rowtwo.createCell(7); - createDateCellTwo = rowtwo.createCell(8); - tagCellTwo = rowtwo.createCell(9); - nameCellTwo.setCellValue("例子2"); - sexCellTwo.setCellValue("男"); - phoneCellTwo.setCellValue("13900020002"); - nickNameCellTwo.setCellValue("昵称"); - educationCellTwo.setCellValue("本科"); - birthdateCellTwo.setCellValue("2018-09-10"); - addrCellTwo.setCellValue("地址"); - updateDateCellTwo.setCellValue("2018-08-10"); - createDateCellTwo.setCellValue("2018-08-10"); - tagCellTwo.setCellValue("男/附近住户"); - scoreCellTwo.setCellValue("200"); - } - { - rowtwo = sheetTwo.createRow(3); - nameCellTwo = rowtwo.createCell(0); - sexCellTwo = rowtwo.createCell(1); - phoneCellTwo = rowtwo.createCell(2); - nickNameCellTwo = rowtwo.createCell(3); - educationCellTwo = rowtwo.createCell(4); - birthdateCellTwo = rowtwo.createCell(5); - addrCellTwo = rowtwo.createCell(6); - updateDateCellTwo = rowtwo.createCell(7); - createDateCellTwo = rowtwo.createCell(8); - tagCellTwo = rowtwo.createCell(9); - nameCellTwo.setCellValue("例子3"); - sexCellTwo.setCellValue("女"); - phoneCellTwo.setCellValue("13900030003"); - nickNameCellTwo.setCellValue("昵称"); - educationCellTwo.setCellValue("本科"); - birthdateCellTwo.setCellValue("2018-09-10"); - addrCellTwo.setCellValue("地址"); - updateDateCellTwo.setCellValue("2018-08-10"); - createDateCellTwo.setCellValue("2018-08-10"); - tagCellTwo.setCellValue("女/附近住户"); - scoreCellTwo.setCellValue("110"); - } + u3.setName("例子3"); + u3.setSex(2); + u3.setPhone("13900010003"); + u3.setNickName("昵称"); + u3.setEducation("本科"); + u3.setCredit(30); + u3.setAddress("地址"); - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - DownFileUtil.downFile(filepath, "会员信息模板.xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - logger.error("导出模板:" + e.getMessage()); + try { + u3.setBirthdate(sdf.parse("2018-09-10")); + u3.setCreateDate(sdf.parse("2018-08-10")); + u3.setUpdateDate(sdf.parse("2018-08-10")); + } catch (Exception e){ + u3.setBirthdate(new Date()); + u3.setCreateDate(new Date()); + u3.setUpdateDate(new Date()); } + u3.setTagNames("女/附近住户"); + u3.setPoins(110); + + list.add(u1); + list.add(u2); + list.add(u3); + excelService.exportExcel(list,null,"会员信息模板",WxCUserBasicInfoVo.class,"会员信息模板.xls",response); } @@ -453,7 +628,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { } @Override - public void importOneMem(String tenantId, String importKey, List tagList, CUserBaseInfoT uBase) { + public void importOneMem(String tenantId, String importKey, List tagList, CUserBaseInfoT uBase,MallUserInfo mallUserInfo) { final IdWorker idWorker = IdWorker.get(); if (StringUtils.isBlank(uBase.getPhone())) { @@ -481,6 +656,17 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { } } + //积分 + Integer credit = null; + if (StringUtils.isNotBlank(uBase.getCredit())) { + try { + credit = Integer.valueOf(uBase.getCredit()); + userBase.setCredit(credit); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + WxCUserBasicInfo oldUserBase = null; WxCUserBasicInfo userBaseQ = new WxCUserBasicInfo(); userBaseQ.setTenantId(tenantId); @@ -505,10 +691,18 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { if(points != null) { oldUserBase.setPoins(points); } + // 覆盖原积分 + if(credit != null) { + oldUserBase.setCredit(credit); + } } else { userBase.setId(idWorker.nextId()); userBase.setUpdateDate(userBase.getUpdateDate() == null ? new Date() : userBase.getUpdateDate()); userBase.setCreateDate(userBase.getCreateDate() == null ? new Date() : userBase.getCreateDate()); + //新增积分 + if(credit != null) { + userBase.setCredit(credit); + } } // update 昵称 @@ -521,6 +715,11 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { if (userList.size() > 0) { WxCUser user = userList.get(0); if (user != null) { + //覆盖积分 + if(credit != null) { + user.setCredit(credit); + wxCUserMapper.updateByPrimaryKey(user); + } bHaveCUser = true; if (oldUserBase != null) { if(oldUserBase != null) { @@ -589,6 +788,25 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { wxScoreRulesService.addScore2(EnumScoreType.MEM_IMPORT, userBase, bHaveCUser); } } + //积分处理逻辑:覆盖原积分 记录历史 + if (credit != null) { + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setTenantId(tenantId); + wxCreditHistory.setCreateDate(new Date()); + if (mallUserInfo != null) { + wxCreditHistory.setOperatorId(mallUserInfo.getId()); + wxCreditHistory.setOperatorType(EnumUserType.MALLUSER.getCode()); + } + wxCreditHistory.setCreditType(EnumScoreType.MEM_IMPORT.getCode()); + if (oldUserBase != null) { + wxCreditHistory.setCUserId(oldUserBase.getId()); + } else { + wxCreditHistory.setCUserId(userBase.getId()); + } + wxCreditHistory.setCreditAmount(credit); + wxCreditHistory.setCreditNum(credit); + wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + } } catch (Exception e) { logger.error(e.getMessage()); logger.error("打标签+成长值失败--继续导入"); @@ -606,74 +824,10 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { @Override public void exportCarPayData(WxCarPayRecord record, HttpServletRequest request, HttpServletResponse response) { - List carPayList = wxCarPayRecordMapper.findCarPayList(record); + List list = wxCarPayRecordMapper.findCarPayList(record); + String sheetName = (record.getIsPay()!=null && 1==record.getIsPay())?"线上缴费车辆列表":"进出车辆列表"; + excelService.exportExcel(list,null,sheetName,WxCarPayRecord.class,sheetName+".xls",response); + } - SXSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; - try { - File file = new File(filepath); - workbook = new SXSSFWorkbook(100); - String sheetName = (record.getIsPay()!=null && 1==record.getIsPay())?"线上缴费车辆列表":"进出车辆列表"; - SXSSFSheet sheetTwo = workbook.createSheet(sheetName); - Row rowtwo = sheetTwo.createRow(0); - Cell cell1 = rowtwo.createCell(0); - Cell cell2 = rowtwo.createCell(1); - Cell cell3 = rowtwo.createCell(2); - Cell cell4 = rowtwo.createCell(3); - Cell cell5 = rowtwo.createCell(4); - Cell cell6 = rowtwo.createCell(5); - - cell1.setCellValue("车牌"); - cell2.setCellValue("车主电话"); - cell3.setCellValue("进场时间"); - cell4.setCellValue("出场时间"); - cell5.setCellValue("停车时长(分钟)"); - cell6.setCellValue("缴费金额(元)"); - - for (int i = 0; i < carPayList.size(); i++) { - rowtwo = sheetTwo.createRow(i + 1); - cell1 = rowtwo.createCell(0); - cell2 = rowtwo.createCell(1); - cell3 = rowtwo.createCell(2); - cell4 = rowtwo.createCell(3); - cell5 = rowtwo.createCell(4); - cell6 = rowtwo.createCell(5); - - WxCarPayRecord entity = carPayList.get(i); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - cell1.setCellValue(entity.getPlateNumber()); - cell2.setCellValue(entity.getPhone()); - if(entity.getEntranceTime() != null) { - cell3.setCellValue(sdf.format(entity.getEntranceTime())); - } - if(entity.getExitTime() != null) { - cell4.setCellValue(sdf.format(entity.getExitTime())); - } - if(entity.getStayedTime() != null) { - cell5.setCellValue(entity.getStayedTime()); - } - if(entity.getFee() != null) { - cell6.setCellValue(entity.getFee()); - } - } - - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - String name = (record.getIsPay()!=null && 1==record.getIsPay())?"线上缴费车辆数据":"进出车辆数据"; - DownFileUtil.downFile(filepath,name+".xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - e.printStackTrace(); - } - } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index b9c962173..2a63e9f27 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -4,52 +4,27 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxCUser; -import com.iformall.enums.EnumScoreType; +import com.iformall.enums.EnumAppType; import com.iformall.mapper.WxCUserMapper; -import com.iformall.mapper.WxCouponOrderMapper; -import com.iformall.mapper.WxScoreHistoryMapper; -import com.iformall.mapper.WxScoreRulesMapper; import com.iformall.service.WxCUserService; -import com.iformall.service.WxScoreRulesService; +import me.chanjar.weixin.mp.bean.result.WxMpUser; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import java.util.Date; -import java.util.concurrent.TimeUnit; @Service public class WxCUserServiceImpl implements WxCUserService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private String tokenPrev = "weapp:token:"; - @Autowired WxCUserMapper wxCUserMapper; - @Autowired - WxCouponOrderMapper wxCouponOrderMapper; - - @Autowired - WxScoreRulesMapper wxScoreRulesMapper; - - @Autowired - WxScoreRulesService wxScoreRulesService; - - @Autowired - WxScoreHistoryMapper wxScoreHistoryMapper; - - - @Autowired - @Qualifier("cuserTokenRedisTemplate") - RedisTemplate cUserTokenRedisTemplate; - - @Override public PageInfo listAsPage(WxCUser record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserMapper.findList(record)); @@ -66,23 +41,13 @@ public class WxCUserServiceImpl implements WxCUserService { } @Override - public WxCUser getByToken(String token) { - logger.info("获取用户信息start ..."); - String key = tokenPrev + token; - ValueOperations operations = cUserTokenRedisTemplate.opsForValue(); - - // 缓存 - boolean hasKey = cUserTokenRedisTemplate.hasKey(key); - if(hasKey) { - // 从缓存获取用户信息 - WxCUser user = operations.get(key); - return user; + public WxCUser getByObject(WxCUser record) { + try { + return wxCUserMapper.selectOne(record); + } catch (Exception e) { + logger.error("NOT found: " + e.getMessage()); } - WxCUser user = wxCUserMapper.findByToken(token); - // 插入缓存 - operations.set(key, user, 3600, TimeUnit.SECONDS); - - return user; + return null; } @Override @@ -90,7 +55,17 @@ public class WxCUserServiceImpl implements WxCUserService { int ret = 0; Date curr = new Date(); if (user.getId() == null) { - //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + // 检查用户是否已有同一微信开放平台账号 + if(StringUtils.isNotBlank(user.getUnionId()) && StringUtils.isNotBlank(user.getOpenAppId())) { + WxCUser oldUser = wxCUserMapper.findByUnionId(user); + if(oldUser != null) { + // 已有,更新 + user.setId(oldUser.getId()); + // TODO 是否其他信息需要更新 + ret = wxCUserMapper.updateByPrimaryKeySelective(user); + return ret; + } + } final IdWorker idWorker = IdWorker.get(); user.setId(idWorker.nextId()); user.setLoginCount(1); @@ -101,17 +76,70 @@ public class WxCUserServiceImpl implements WxCUserService { user.setUpdateDate(curr); ret = wxCUserMapper.updateByPrimaryKeySelective(user); } - String key = tokenPrev + user.getToken(); - // 缓存已存在,删除 - boolean hasKey = cUserTokenRedisTemplate.hasKey(key); - if(hasKey) { - cUserTokenRedisTemplate.delete(key); - logger.info("更新用户,从缓存中删除用户 token >> " + user.getToken()); - } return ret; } + @Override + public int saveOrUpdateMpUser(WxMpUser mpUser, WxAuthorizerInfo authorizerInfo) { + // 1. check user exist + WxCUser userQ = new WxCUser(); + userQ.setTenantId(authorizerInfo.getTenantId()); + boolean bHaveUnionId = false; + if(StringUtils.isNotBlank(mpUser.getUnionId())) { + userQ.setUnionId(mpUser.getUnionId()); + bHaveUnionId = true; + } else { + userQ.setOpenAppId(authorizerInfo.getOpenAppid()); + if(authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpOpenId(mpUser.getOpenId()); + userQ.setMpAppId(authorizerInfo.getAuthorizerAppid()); + } else if(authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { + userQ.setSubsOpenId(mpUser.getOpenId()); + userQ.setSubsAppId(authorizerInfo.getAuthorizerAppid()); + } + } + WxCUser oldUser = getByObject(userQ); + boolean bHave = false; + if(oldUser != null) { + userQ.setId(oldUser.getId()); + bHave = true; + } + if(!bHave && !mpUser.getSubscribe()) { + // 未找到,且是关注消息, 直接返回 + return 0; + } + if(bHaveUnionId) { + userQ.setOpenAppId(authorizerInfo.getOpenAppid()); + if (authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpOpenId(mpUser.getOpenId()); + userQ.setMpAppId(authorizerInfo.getAuthorizerAppid()); + } else if (authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { + userQ.setSubsOpenId(mpUser.getOpenId()); + userQ.setSubsAppId(authorizerInfo.getAuthorizerAppid()); + } + } + if(((oldUser != null && StringUtils.isBlank(oldUser.getNickName())) || (oldUser == null)) + && StringUtils.isNotBlank(mpUser.getNickname())) { + userQ.setNickName(mpUser.getNickname()); + userQ.setGender(mpUser.getSex()); + userQ.setAvatarUrl(mpUser.getHeadImgUrl()); + userQ.setCity(mpUser.getCity()); + userQ.setProvince(mpUser.getProvince()); + userQ.setLanguage(mpUser.getLanguage()); + } + if(authorizerInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpSubscribe(mpUser.getSubscribe()?1:0); + userQ.setMpSubscribeScene(mpUser.getSubscribeScene()); + userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime())); + } else if(authorizerInfo.getType().equals(EnumAppType.MP_P.getCode())) { + userQ.setSubsSubscribe(mpUser.getSubscribe()?1:0); + userQ.setSubsSubscribeScene(mpUser.getSubscribeScene()); + userQ.setMpSubscribeTime(new Date(mpUser.getSubscribeTime())); + } + return saveOrUpdate(userQ); + } + @Override public void deleteById(Long id) { wxCUserMapper.deleteByPrimaryKey(id); @@ -131,11 +159,4 @@ public class WxCUserServiceImpl implements WxCUserService { public long countByChannel(WxCUser user) { return wxCUserMapper.countByChannel(user); } - - @Override - public void scoreCalculate(WxCUser user, boolean isNew) { - wxScoreRulesService.addScore(EnumScoreType.LOGIN,user); - } - - } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java index 42c5237c1..de0d6de02 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java @@ -6,10 +6,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; -import com.iformall.enums.EnumAssignTagsTrigger; -import com.iformall.enums.EnumCUserBaseInfoSex; -import com.iformall.enums.EnumTag; -import com.iformall.enums.EnumTagTypeFlag; +import com.iformall.enums.*; import com.iformall.mapper.*; import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxTagsService; @@ -35,6 +32,9 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { @Autowired WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxCardSpendMapper wxCardSpendMapper; + @Autowired WxCUserMapper wxCUserMapper; @@ -79,63 +79,12 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { } - private long findCountByTag(String tenantId, Long tagId) { - String str = JSON.toJSONString(tagId); - return wxCUserTagsMapper.findCountByTags(str,tenantId); - } - - private long findCUserCountByTag(String tenantId, Long tagId) { - String str = JSON.toJSONString(tagId); - return wxCUserTagsMapper.findCUserCountByTags(str,tenantId); - } - @Override public long countUser(String tenantId, Long tagId, Date startTime, Date endTime ) { String str = JSON.toJSONString(tagId); return wxCUserTagsMapper.countUser(str, tenantId, startTime, endTime); } - @Override - public List findCUserByTag(String tenantId, List tagIds) { - if (tagIds == null || tagIds.isEmpty()) - return new ArrayList(); - Set hs = new HashSet<>(); - - for (Long tagId:tagIds) { - String str = JSON.toJSONString(tagId); - hs.addAll(wxCUserTagsMapper.findCUserByTags(str, tenantId)); - } - if(hs.isEmpty()){ - return new ArrayList(); - } - List userIds = new ArrayList<>(); - userIds.addAll(hs); - WxCUser wxCUser = new WxCUser(); - wxCUser.setTenantId(tenantId); - wxCUser.setIds(userIds); - return wxCUserMapper.findList(wxCUser); - } - - @Override - public List findByTag(String tenantId, List tagIds) { - if (tagIds == null || tagIds.isEmpty()) - return new ArrayList(); - Set hs = new HashSet<>(); - - for (Long tagId:tagIds) { - String str = JSON.toJSONString(tagId); - hs.addAll(wxCUserTagsMapper.findByTags(str, tenantId)); - } - if (!hs.isEmpty()) { - List userIds = new ArrayList<>(); - userIds.addAll(hs); - WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo(); - wxCUserBasicInfo.setIds(userIds); - return wxCUserBasicInfoMapper.findList(wxCUserBasicInfo); - } - return new ArrayList<>(); - } - @Override public List findTagList(String tenantId, List tagIds) { @@ -145,20 +94,7 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { wxTags.setIds(tagIds); List list = wxTagsMapper.findList(wxTags); for (WxTags t : list) { - t.setCount(findCountByTag(tenantId,t.getId())); - } - return list; - } - - @Override - public List findTagListFromCUser(String tenantId, List tagIds) { - if (tagIds == null || tagIds.isEmpty()) - return new ArrayList(); - WxTags wxTags =new WxTags(); - wxTags.setIds(tagIds); - List list = wxTagsMapper.findList(wxTags); - for (WxTags t : list) { - t.setCount(findCUserCountByTag(tenantId,t.getId())); + t.setCount(countUser(tenantId,t.getId(),null,null)); } return list; } @@ -413,29 +349,45 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { Calendar endC = Calendar.getInstance(); Calendar startC = Calendar.getInstance(); - Date endTime = new Date(); - Date startTime = new Date(); - endC.setTime(endTime); - startC.setTime(startTime); + endC.setTime(new Date()); + startC.setTime(new Date()); endC.set(Calendar.HOUR_OF_DAY, 18); startC.set(Calendar.HOUR_OF_DAY, 6); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setcUserId(param.getId()); + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + + WxCardSpend wxCardSpend = new WxCardSpend(); + wxCardSpend.setOwnerId(param.getId()); + for (int ago = 0; ago > -30 ; ago-- ) { + wxCouponOrder.setStartTime(startC.getTime()); + wxCouponOrder.setEndTime(endC.getTime()); + wxCardSpend.setStartdate(startC.getTime()); + wxCardSpend.setEnddate(endC.getTime()); + int cardSpendCount = wxCardSpendMapper.findCount(wxCardSpend); + int verifiedCount = wxCouponOrderMapper.findCount(wxCouponOrder); if (endC.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY && endC.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) { - workDayCount += wxCouponOrderMapper.findVerifiedCountByCUser(param.getId(),startTime,endTime); + workDayCount += verifiedCount+cardSpendCount; } else { - WeekendDayCount += wxCouponOrderMapper.findVerifiedCountByCUser(param.getId(),startTime,endTime); + WeekendDayCount += verifiedCount+cardSpendCount; } endC.add(Calendar.DAY_OF_YEAR, -1); - + wxCouponOrder.setStartTime(endC.getTime()); + wxCouponOrder.setEndTime(startC.getTime()); + wxCardSpend.setStartdate(endC.getTime()); + wxCardSpend.setEnddate(startC.getTime()); + cardSpendCount = wxCardSpendMapper.findCount(wxCardSpend); + verifiedCount = wxCouponOrderMapper.findCount(wxCouponOrder); if (endC.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY && endC.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) { - workNightCount += wxCouponOrderMapper.findVerifiedCountByCUser(param.getId(),startTime,endTime); + workNightCount += verifiedCount+cardSpendCount; } else { - WeekendNightCount += wxCouponOrderMapper.findVerifiedCountByCUser(param.getId(),startTime,endTime); + WeekendNightCount += verifiedCount+cardSpendCount; } startC.add(Calendar.DAY_OF_YEAR, -1); @@ -462,12 +414,16 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { private List assignTypeId21(WxCUserBasicInfo user, WxCUser param) { List resList = null; - Calendar c = Calendar.getInstance(); - Date endTime = new Date(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - int count = wxCouponOrderMapper.findVerifiedCountByCUser(param.getId(),startTime,endTime); + Calendar startC = Calendar.getInstance(); + startC.setTime(new Date()); + startC.add(Calendar.DAY_OF_YEAR, -30); + + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setcUserId(param.getId()); + wxCouponOrder.setStartTime(startC.getTime()); + wxCouponOrder.setEndTime(new Date()); + + int count = wxCouponOrderMapper.findCount(wxCouponOrder); float verifiedRate = (float)count/30; if (verifiedRate > 1F/4) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTokenServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTokenServiceImpl.java new file mode 100644 index 000000000..da4f77544 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTokenServiceImpl.java @@ -0,0 +1,82 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxCUser; +import com.iformall.mapper.WxCUserMapper; +import com.iformall.mapper.WxCouponOrderMapper; +import com.iformall.mapper.WxScoreHistoryMapper; +import com.iformall.mapper.WxScoreRulesMapper; +import com.iformall.service.WxCUserTokenService; +import com.iformall.service.WxScoreRulesService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +@Service +public class WxCUserTokenServiceImpl implements WxCUserTokenService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private String tokenPrev = "weapp:token:"; + + @Autowired + WxCUserMapper wxCUserMapper; + + @Autowired + @Qualifier("cuserTokenRedisTemplate") + RedisTemplate cUserTokenRedisTemplate; + + @Override + public WxCUser getByToken(String token) { + logger.info("获取用户信息start ..."); + String key = tokenPrev + token; + ValueOperations operations = cUserTokenRedisTemplate.opsForValue(); + + // 缓存 + boolean hasKey = cUserTokenRedisTemplate.hasKey(key); + if(hasKey) { + // 从缓存获取用户信息 + WxCUser user = operations.get(key); + return user; + } + WxCUser user = wxCUserMapper.findByToken(token); + // 插入缓存 + operations.set(key, user, 3600, TimeUnit.SECONDS); + + return user; + } + + @Override + public int saveOrUpdate(WxCUser user) { + int ret = 0; + Date curr = new Date(); + if (user.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + user.setId(idWorker.nextId()); + user.setLoginCount(1); + user.setCreateDate(curr); + user.setUpdateDate(curr); + ret = wxCUserMapper.insertSelective(user); + } else { + user.setUpdateDate(curr); + ret = wxCUserMapper.updateByPrimaryKeySelective(user); + } + String key = tokenPrev + user.getToken(); + // 缓存已存在,删除 + boolean hasKey = cUserTokenRedisTemplate.hasKey(key); + if(hasKey) { + cUserTokenRedisTemplate.delete(key); + logger.info("更新用户,从缓存中删除用户 token >> " + user.getToken()); + } + + return ret; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java index e9bb25868..ff96353fa 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java @@ -210,6 +210,7 @@ public class WxCampaignServiceImpl implements WxCampaignService { wxCouponChannel.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_CAMPAIN.getCode()); wxCouponChannel.setTenantId(wxCoupon.getTenantId()); wxCouponChannel.setBusiness(wxCoupon.getBusiness()); + wxCouponChannel.setSubBusiness(wxCoupon.getSubBusiness()); wxCouponChannel.setTitle(wxCoupon.getTitle()); wxCouponChannel.setSubTargetId(record.getId()); final IdWorker idWorker = IdWorker.get(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index b67420091..201d2a479 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -11,14 +11,10 @@ import com.iformall.domain.vo.WxCardSpendVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.service.ExcelService; import com.iformall.service.WxCardSpendService; import com.iformall.service.WxProfitSharingOrderService; -import com.iformall.utils.Constant; -import org.apache.commons.io.FileUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,8 +26,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.text.DecimalFormat; -import java.text.SimpleDateFormat; + import java.util.*; @Service @@ -69,6 +64,9 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { @Autowired WxProfitSharingOrderService profitSharingOrderService; + @Autowired + ExcelService excelService; + @Override public WxCouponMerchant checkMerchantInCoupon(WxCardInfo cardInfo, Long merchantId) { WxCouponMerchant couponMerchant = null; @@ -500,125 +498,8 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { @Override public void exportData(WxCardSpendVo wxCardSpendVo, HttpServletRequest request, HttpServletResponse response) { - List cardSpendVoList = wxCardSpendMapper.findCardSpendVoList(wxCardSpendVo); - - XSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - DecimalFormat df = new DecimalFormat("0.00"); - - try { - File file = new File(filepath); - workbook = new XSSFWorkbook(); - XSSFSheet sheetTwo = workbook.createSheet("消费记录"); - Row rowtwo = sheetTwo.createRow(0); - Cell idCellTwo = rowtwo.createCell(0); - Cell ownerCellTwo = rowtwo.createCell(1); - Cell phoneCellTwo = rowtwo.createCell(2); - Cell cardNameCellTwo = rowtwo.createCell(3); - Cell merchantNameCellTwo = rowtwo.createCell(4); - Cell costCellTwo = rowtwo.createCell(5); - Cell costTimeCellTwo = rowtwo.createCell(6); - Cell receivePayCellTwo = rowtwo.createCell(7); - Cell realReceivePayCellTwo = rowtwo.createCell(8); - Cell payStatusCellTwo = rowtwo.createCell(9); - - idCellTwo.setCellValue("ID"); - ownerCellTwo.setCellValue("消费者"); - phoneCellTwo.setCellValue("手机号"); - cardNameCellTwo.setCellValue("卡名"); - merchantNameCellTwo.setCellValue("商户"); - costCellTwo.setCellValue("消费金额"); - costTimeCellTwo.setCellValue("地址"); - receivePayCellTwo.setCellValue("收款金额"); - realReceivePayCellTwo.setCellValue("收款实际金额"); - payStatusCellTwo.setCellValue("收款状态"); - - for (int i = 0; i < cardSpendVoList.size(); i++) { - rowtwo = sheetTwo.createRow(i + 1); - idCellTwo = rowtwo.createCell(0); - ownerCellTwo = rowtwo.createCell(1); - phoneCellTwo = rowtwo.createCell(2); - cardNameCellTwo = rowtwo.createCell(3); - merchantNameCellTwo = rowtwo.createCell(4); - costCellTwo = rowtwo.createCell(5); - costTimeCellTwo = rowtwo.createCell(6); - receivePayCellTwo = rowtwo.createCell(7); - realReceivePayCellTwo = rowtwo.createCell(8); - payStatusCellTwo = rowtwo.createCell(9); - - WxCardSpendVo entity = cardSpendVoList.get(i); - - idCellTwo.setCellValue(String.valueOf(entity.getId())); - ownerCellTwo.setCellValue(entity.getOnickName()); - phoneCellTwo.setCellValue(entity.getOuPhone()); - cardNameCellTwo.setCellValue(entity.getTitle()); - merchantNameCellTwo.setCellValue(entity.getMerchantName()); - String dStr = df.format((float)entity.getDeductionAmount()/100); - costCellTwo.setCellValue(dStr); - if (entity.getCreateDate() != null) - costTimeCellTwo.setCellValue(sdf.format(entity.getCreateDate())); - dStr = df.format((float)entity.getPayment()/100); - receivePayCellTwo.setCellValue(dStr); - dStr = df.format((float)entity.getRealPayment()/100); - realReceivePayCellTwo.setCellValue(dStr); - String statusStr = "未支付"; - if (entity.getPayStatus().equals(EnumCardSpendStatus.NOT_PAY.getCode())) - statusStr = "未支付"; - else if (entity.getPayStatus().equals(EnumCardSpendStatus.PS_SHARED.getCode())) - statusStr = "已分账"; - else if (entity.getPayStatus().equals(EnumCardSpendStatus.MANUAL_PAY.getCode())) - statusStr = "已手工分账"; - payStatusCellTwo.setCellValue(statusStr); - } - - - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - downFile(filepath, filename,"消费记录.xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void downFile(String filePath, String filename, String exportFileName, - HttpServletResponse response, HttpServletRequest req) throws IOException { - try { - response.reset(); - response.setContentType("bin"); - String agent = req.getHeader("user-agent"); - if (agent.contains("Firefox")) { - response.setHeader("Content-disposition", - "attachment; filename=" - + new String(exportFileName.getBytes("GB2312"), - "ISO-8859-1")); - } else { - response - .setHeader("Content-disposition", - "attachment; filename=" - + java.net.URLEncoder.encode(exportFileName, - "UTF-8")); - } - // 循环取出流中的数据 - byte[] b = new byte[1024]; - int len; - InputStream inStream = new FileInputStream(filePath); - while ((len = inStream.read(b)) > 0) - response.getOutputStream().write(b, 0, len); - inStream.close(); - } catch (Exception e) { - e.printStackTrace(); - } + List list = wxCardSpendMapper.findCardSpendVoList(wxCardSpendVo); + excelService.exportExcel(list,null,"消费记录",WxCardSpendVo.class,"消费记录.xls",response); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java index 4f4546088..82241205a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java @@ -3,12 +3,14 @@ package com.iformall.service.impl; import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.*; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.mapper.*; +import com.iformall.service.MarkingDataReportService; import com.iformall.service.WxChartDataService; import com.iformall.service.WxCouponService; import com.iformall.utils.DateUtils; @@ -62,6 +64,14 @@ public class WxChartServiceImpl implements WxChartDataService { WxCouponService wxCouponService; @Autowired WxOrderGroupMapper wxOrderGroupMapper; + @Autowired + WxBillPropertyMapper wxBillPropertyMapper; + @Autowired + WxBillDepositMapper wxBillDepositMapper; + @Autowired + WxBillOtherMapper wxBillOtherMapper; + @Autowired + MarkingDataReportService markingDataReportService; @Override public ResultData queryData(Map paramsMap) { @@ -78,1614 +88,2068 @@ public class WxChartServiceImpl implements WxChartDataService { } //出租率 - HashMap datamap = new HashMap<>(); if (chart.equals(EnumChart.CZL.getCode())) { - WxShop wxShop = new WxShop(); - wxShop.setTenantId(tenantId); - wxShop.setStatus(EnumShopStatus.RENT.getCode()); - List yczlist = wxShopMapper.findList(wxShop); - wxShop.setStatus(EnumShopStatus.NOT_RENT.getCode()); - List wczlist = wxShopMapper.findList(wxShop); - //出租与未出租 - int yczsize = yczlist.size(); - int wczsize = wczlist.size(); - int size = yczsize + wczsize; - if (size == 0) { - datamap.put("yczsl", 0); - datamap.put("wczsl", 0); - datamap.put("yczl", 0); - datamap.put("wczl", 0); - } else { - datamap.put("yczsl", yczsize); - datamap.put("wczsl", wczsize); - double yczld = ((double) yczsize / size) * 100; - double dczl = new BigDecimal(yczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - double wczld = ((double) wczsize / size) * 100; - double wczl = new BigDecimal(wczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("yczl", dczl); - datamap.put("wczl", wczl); - } - return new ResultData(datamap); + return getRentRate(tenantId); } //租金收缴率 if (chart.equals(EnumChart.ZJSJL.getCode())) { - //租金 - Map params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", enddate + " 23:59:59"); - Map payinfo = wxBillRentMapper.queryPayInfo(params); - if (payinfo != null) { - BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); - BigDecimal pay = (BigDecimal) payinfo.get("pay"); - if (receivepay.doubleValue() > 0) { - BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); - double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); - datamap.put("ysje", receivepay); - datamap.put("ssje", pay); - datamap.put("zjsjl", zjcjl); - } else { - datamap.put("ysje", 0); - datamap.put("ssje", 0); - datamap.put("zjsjl", 0); - } - } else { - datamap.put("ysje", 0); - datamap.put("ssje", 0); - datamap.put("zjsjl", 0); - } - return new ResultData(datamap); + return getRentMoneyRate(tenantId, startdate, enddate); } //昨日报单率 if (chart.equals(EnumChart.ZRBDL.getCode())) { - WxMerchant wxMerchant = new WxMerchant(); - wxMerchant.setTenantId(tenantId); - wxMerchant.setStatus(1); - List merchants = wxMerchantMapper.findList(wxMerchant); - WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setTenantId(tenantId); - String reportdate = DateUtils.getTimeBefore(1, new Date()); - wxMerchantTradeDaily.setReportDate(reportdate); - List tradelist = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); - int merchantsize = merchants.size(); - int tradesize = tradelist.size(); - if (merchantsize > 0 && tradesize > 0) { - double shsbld = ((double) tradesize / merchantsize) * 100; - double shsbl = new BigDecimal(shsbld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("shsbl", shsbl); - } else { - datamap.put("shsbl", 0); - } - int shsbjg = tradelist.stream().mapToInt(WxMerchantTradeDaily::getTradeAmt).sum(); - datamap.put("shsbjg", shsbjg); - return new ResultData(datamap); + return getYesterdayTradeRate(tenantId); } //车流数据 if (chart.equals(EnumChart.CLSJ.getCode())) { - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - startdate = DateUtils.getTimeBefore(30, new Date()); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - - List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); - - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", systemTime + " 23:59:59"); - - List> historylist = wxCarCmdLogMapper.queryHistory(params); - - Map collect = historylist.stream().collect(Collectors.toMap(m -> { - return m.get("create_date"); - }, m -> { - return m.get("carcount"); - })); - - Map historymap = new LinkedHashMap<>(); - for (String date : tjTimeList) { - Object o = collect.get(date); - if (o == null) { - historymap.put(date.substring(5).replace("-", "/"), 0L); - } else { - historymap.put(date.substring(5).replace("-", "/"), o); - } - } - datamap.put("history", historymap); - return new ResultData(datamap); + return getCarHistoryAndTodayAndHB(tenantId, false); } //券交易数据 if (chart.equals(EnumChart.QJYSJ.getCode())) { - //couponData - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-30)); - params.put("endTime", addDay(1)); - List couponDatalist = wxCouponOrderMapper.couponDataMap(params); - //查询券领取人数 - startdate = DateUtils.getTimeBefore(30, new Date()); - enddate = DateUtils.getTimeBefore(1, new Date()); - List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); - List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); - List couponTempDatalist = new LinkedList<>(); - for (String tj : tjList) { - Optional first = couponDatalist.stream().filter(c -> c.getCreateTime().equals(tj)).findFirst(); - if (!first.isPresent()) { - MarkingCouponDataReportVo markingCouponDataReportVo = new MarkingCouponDataReportVo(); - markingCouponDataReportVo.setCreateTime(tj); - markingCouponDataReportVo.setCouponCount(0); - markingCouponDataReportVo.setCouponUserCount(0); - markingCouponDataReportVo.setVerifyCount(0); - markingCouponDataReportVo.setVerifyUserCount(0); - couponTempDatalist.add(markingCouponDataReportVo); - continue; - } - couponTempDatalist.add(first.get()); - } - datamap.put("couponDataMap", couponTempDatalist); - return new ResultData(datamap); + return getCouponSaleAnalysis(tenantId); } //活跃用户数据 if (chart.equals(EnumChart.HYYHSJ.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - Map dateMap = new HashMap<>(); - for (TouchUsersReportVo vo : list) { - dateMap.put(vo.getxTime(), vo); - } - List monthVos = new ArrayList<>();//每月uv - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dateMap.get(dayStr) != null) { - TouchUsersReportVo rv = dateMap.get(dayStr); - Long l = new Long((long) rv.getUv()); - vo.setCount(l); - } else { - vo.setCount(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//月活跃数列表 - return new ResultData(datamap); + // TODO getActiveMemberAnalysis + return getActiveMemberTrade(tenantId); } //销售数据 if (chart.equals(EnumChart.XSSJ.getCode())) { - Calendar c = Calendar.getInstance(); - Date sTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date eTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 - List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); - List monthVos = new ArrayList<>();//周消费金额 - Map dataMap = new HashMap<>(); - for (CUserDateAmountVo v : datas) { - dataMap.put(v.getxTime(), v.getPrice()); - } - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(sTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (datamap.get(dateStr) != null) { - int price = dataMap.get(dateStr); - vo.setPrice(price); - } else { - vo.setPrice(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//一月金额列表 - return new ResultData(datamap); + return getSaleAnalysis(tenantId); } //解单数据 if (chart.equals(EnumChart.JDSJ.getCode())) { - WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setTenantId(tenantId); - - List recordList = wxMerchantTradeDailyMapper.findTotalListOfMonth(wxMerchantTradeDaily); - Map recordMap = recordList.stream().collect(Collectors.toMap(WxMerchantTradeDaily::getReportDate, r -> r)); - - List tradeList = new ArrayList<>(); - Calendar cal = Calendar.getInstance(); - SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat fmtv = new SimpleDateFormat("MM/dd"); - cal.setTime(new Date()); - for (int i = 0; i < 30; i++) { - cal.add(Calendar.DAY_OF_YEAR, -1); - WxMerchantTradeDaily trade = recordMap.get(fmt.format(cal.getTime())); - if (trade != null) { - trade.setReportDate(fmtv.format(cal.getTime())); - tradeList.add(trade); - } else { - trade = new WxMerchantTradeDaily(); - trade.setTradeAmt(0); - trade.setReportDate(fmtv.format(cal.getTime())); - tradeList.add(trade); - } - } - Collections.reverse(tradeList); - return new ResultData(tradeList); - } - //今日场内车流量 - if (chart.equals(EnumChart.JRCNCLL.getCode())) { - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - startdate = DateUtils.getTimeBefore(7, new Date()); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", systemTime + " 23:59:59"); - List> historylist = wxCarCmdLogMapper.queryHistory(params); - Map collect = historylist.stream().collect(Collectors.toMap(m -> { - return m.get("create_date"); - }, m -> { - return m.get("carcount"); - })); - Map historymap = new LinkedHashMap<>(); - for (String date : tjTimeList) { - Object o = collect.get(date); - if (o == null) { - historymap.put(date.substring(5).replace("-", "/"), 0L); - } else { - historymap.put(date.substring(5).replace("-", "/"), o); - } - } - datamap.put("history", historymap); - //今日车流量 - long todaycar = (long) historymap.get(DateUtils.getSystemTime("MM/dd")); - datamap.put("todaycar", todaycar); - //环比 - String yesterday = DateUtils.getTimeBefore(1, new Date()); - long yesterdaycar = (long) historymap.get(yesterday.substring(5).replace("-", "/")); - if (yesterdaycar > 0) { - double hbd = (double) (todaycar - yesterdaycar) / yesterdaycar * 100; - double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("hb", hb + "%"); - } else { - datamap.put("hb", "--"); - } - //上周同期 - String lastweek = DateUtils.getTimeBefore(7, new Date()); - long last = (long) historymap.get(lastweek.substring(5).replace("-", "/")); - if (last > 0) { - double lasthbd = (double) (todaycar - last) / last * 100; - double lasthb = new BigDecimal(lasthbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("lasthb", lasthb + "%"); - } else { - datamap.put("lasthb", "--"); - } - return new ResultData(datamap); - + return getMerchantTradeMonthly(tenantId); } + + ///// --- 车流 -- START //今日已绑车牌量 if (chart.equals(EnumChart.JRYBCPL.getCode())) { - String yesterday = DateUtils.getTimeBefore(1, new Date()); - String lastweek = DateUtils.getTimeBefore(7, new Date()); - //绑定车牌 - Map carParams = new HashMap<>(); - carParams.put("tenantId", tenantId); - carParams.put("startdate", DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); - carParams.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); - long todaybindcar = wxCUserCarMapper.queryCarCount(carParams); - carParams.put("startdate", yesterday + " 00:00:00"); - carParams.put("enddate", yesterday + " 23:59:59"); - long yesterdaybindcar = wxCUserCarMapper.queryCarCount(carParams); - carParams.put("startdate", lastweek + " 00:00:00"); - carParams.put("enddate", lastweek + " 23:59:59"); - long lastweekbindcar = wxCUserCarMapper.queryCarCount(carParams); - datamap.put("todaybindcar", todaybindcar); - if (yesterdaybindcar > 0) { - double yesterdaybinddhb = (double) (todaybindcar - yesterdaybindcar) / yesterdaybindcar * 100; - double yesterdaybindhb = new BigDecimal(yesterdaybinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("yesterdaybindhb", yesterdaybindhb + "%"); - } else { - datamap.put("yesterdaybindhb", "--"); - } - if (lastweekbindcar > 0) { - double lastweekbinddhb = (double) (todaybindcar - lastweekbindcar) / lastweekbindcar * 100; - double lastweekbindhb = new BigDecimal(lastweekbinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("lastweekbindhb", lastweekbindhb + "%"); - } else { - datamap.put("lastweekbindhb", "--"); - } - return new ResultData(datamap); + return getBindCarAnalysis(tenantId); } //实时车流量 if (chart.equals(EnumChart.SSCLL.getCode())) { - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - String yesterday = DateUtils.getTimeBefore(1, new Date()); - String lastweek = DateUtils.getTimeBefore(7, new Date()); - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - params.put("startdate", systemTime + " 05:00:00"); - params.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); - List> todayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map todaycollect = todayCarlist.stream().collect(Collectors.toMap(m -> { - return m.get("create_time"); - }, m -> { - return m.get("carcount"); - })); - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.HOUR_OF_DAY, 1); - int hour = instance.get(Calendar.HOUR_OF_DAY); - TreeMap hourMap = new TreeMap<>(); - int startHour = 6; - int endHour = 24; - for (int i = startHour; i < endHour; i++) { - if (i <= hour) { - hourMap.put(i < 10 ? "0" + i + ":00" : i + ":00", 0); - } else { - hourMap.put(i < 10 ? "0" + i + ":00" : i + ":00", ""); - } - } - hourMap.putAll(todaycollect); - datamap.put("todaycardata", hourMap); - params.put("startdate", yesterday + " 05:00:00"); - params.put("enddate", yesterday + " 22:59:59"); - List> yesterdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map yesterdaycollect = yesterdayCarlist.stream().collect(Collectors.toMap(m -> { - return m.get("create_time"); - }, m -> { - return m.get("carcount"); - })); - TreeMap yesterdaytreemap = getTimeTreeMap(); - yesterdaytreemap.putAll(yesterdaycollect); - - datamap.put("yesterdaycardata", yesterdaytreemap); - - params.put("startdate", lastweek + " 05:00:00"); - params.put("enddate", lastweek + " 22:59:59"); - List> lastdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map lastdaycollect = lastdayCarlist.stream().collect(Collectors.toMap(m -> { - return m.get("create_time"); - }, m -> { - return m.get("carcount"); - })); - TreeMap lastdaytreemap = getTimeTreeMap(); - lastdaytreemap.putAll(lastdaycollect); - datamap.put("lastdaycardata", lastdaytreemap); - - return new ResultData(datamap); - - } - //历史车流量 + return getCarDataCurrent(tenantId); + } + // 历史车流量+今日车流量 + 上周同期 if (chart.equals(EnumChart.LSCLL.getCode())) { - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - startdate = DateUtils.getTimeBefore(30, new Date()); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - - List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); - - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", systemTime + " 23:59:59"); - - List> historylist = wxCarCmdLogMapper.queryHistory(params); - - Map collect = historylist.stream().collect(Collectors.toMap(m -> { - return m.get("create_date"); - }, m -> { - return m.get("carcount"); - })); - - Map historymap = new LinkedHashMap<>(); - for (String date : tjTimeList) { - Object o = collect.get(date); - if (o == null) { - historymap.put(date.substring(5).replace("-", "/"), 0L); - } else { - historymap.put(date.substring(5).replace("-", "/"), o); - } - } - datamap.put("history", historymap); - return new ResultData(datamap); - + return getCarHistoryAndTodayAndHB(tenantId, true); } //近一周新增停车会员 if (chart.equals(EnumChart.JYZXXZTCHY.getCode())) { - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); - wxCUserBasicInfoDto.setTenantId(tenantId); - try { - wxCUserBasicInfoDto.setStartTime(sdf.parse(oneWeekStartdate)); - wxCUserBasicInfoDto.setEndTime(sdf.parse(oneWeekEndDate)); - } catch (Exception e) { - e.printStackTrace(); - } - datamap.put("oneWeekNewCarUserCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); - //停车会员总数 - wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); - wxCUserBasicInfoDto.setTenantId(tenantId); - datamap.put("newCarUserSumCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); - - return new ResultData(datamap); + return getCarNewMemberCount(tenantId); } //近一周线上缴费车辆 if (chart.equals(EnumChart.JYZXSJFCL.getCode())) { - HashMap weekParams = new HashMap<>(); - weekParams.put("tenantId", tenantId); - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); - weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); - weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - datamap.put("oneWeekCarPayCount", wxCarCmdLogMapper.queryWeekCarPayCount(weekParams)); - return new ResultData(datamap); + return getCarPayCarCountInWeek(tenantId); } //近一周线上缴费金额 if (chart.equals(EnumChart.JYZXSJFJE.getCode())) { - HashMap weekParams = new HashMap<>(); - weekParams.put("tenantId", tenantId); - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); - weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); - weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(weekParams); - Map weekCollect = weekCarPayHistoryList.stream().collect(Collectors.toMap(m -> { - return (String) m.get("create_time"); - }, m -> { - return m.get("fee"); - })); - List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); - - TreeMap weekMap = new TreeMap<>(); - for (String date : days) { - weekMap.put(date.substring(5, date.length()).replace("-", "/"), "0"); - } - for (String key : weekCollect.keySet()) { - weekMap.put(key, weekCollect.get(key)); - } - datamap.put("oneWeekCarPayFeeCount", weekMap); - return new ResultData(datamap); + return getCarPayCountInWeek(tenantId); } //近一周新增会员数 if (chart.equals(EnumChart.JYZXZHYS.getCode())) { - HashMap weekParams = new HashMap<>(); - weekParams.put("tenantId", tenantId); - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); - weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); - weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(weekParams); - Map weekCarCollect = carCountHistory.stream().collect(Collectors.toMap(m -> { - return (String) m.get("create_time"); - }, m -> { - return m.get("count"); - })); - List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); - TreeMap weekCarMap = new TreeMap<>(); - for (String date : days) { - weekCarMap.put(date.substring(5, date.length()).replace("-", "/"), "0"); - } - for (String key : weekCarCollect.keySet()) { - weekCarMap.put(key, weekCarCollect.get(key)); - } - datamap.put("oneWeekNewCarUserHistory", weekCarMap); + return getCarNewMemberCountInWeek(tenantId); } + //// --- 车流 -- END //昨日触达用户 if (chart.equals(EnumChart.ZRCDYH.getCode())) { - //查询UV PV - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-1)); - params.put("endTime", addDay(1)); - List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); - TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); - if (!wxUserVisitList.isEmpty()) { - touchUsersReportVo = wxUserVisitList.get(0); - } else { - touchUsersReportVo.setPv(0); - touchUsersReportVo.setUv(0); - touchUsersReportVo.setCouponCount(0); - touchUsersReportVo.setUserCount(0); - touchUsersReportVo.setVerifyCount(0); - touchUsersReportVo.setVerifyUserCount(0); - touchUsersReportVo.setxTime(DateUtils.getSystemTime("MM/dd")); - } - datamap.put("yesterday", touchUsersReportVo); - return new ResultData(datamap); + return getTodayTouchUser(tenantId); } //今日券交易数据 if (chart.equals(EnumChart.JRQJYSJ.getCode())) { - //今日领取券数 - //查询coupon order表 - int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1)); - int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0)); - int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6)); - NumberFormat nf = NumberFormat.getPercentInstance(); - nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 - String couponUpDay = "--"; - if (yesterdayCount != 0) { - couponUpDay = nf.format((todayCouponCount - yesterdayCount) / (float) yesterdayCount); - } - String couponUpWeek = "--"; - if (lastWeekCount != 0) { - couponUpWeek = nf.format((todayCouponCount - lastWeekCount) / (float) lastWeekCount); - } - datamap.put("couponUpDay", couponUpDay);//比昨日提升 - datamap.put("couponUpWeek", couponUpWeek);//比上周提升 - datamap.put("todayCouponCount", todayCouponCount);//今日领取数 - return new ResultData(datamap); + return getTodayCouponCount(tenantId); } //今日场景营销 if (chart.equals(EnumChart.JRCJYX.getCode())) { - int todaySceneCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(0), addDay(1)); - int yesterdayCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-1), addDay(0)); - int lastWeekCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-7), addDay(-6)); - NumberFormat nf = NumberFormat.getPercentInstance(); - nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 - String sceneDownDay = "--"; - if (yesterdayCount != 0) { - sceneDownDay = nf.format((yesterdayCount - todaySceneCount) / (float) yesterdayCount); - } - String sceneUpWeek = "--"; - if (lastWeekCount != 0) { - sceneUpWeek = nf.format((todaySceneCount - lastWeekCount) / (float) lastWeekCount); - } - datamap.put("sceneDownDay", sceneDownDay);//比昨日下降 - datamap.put("sceneUpWeek", sceneUpWeek);//比上周提升 - datamap.put("todaySceneCount", todaySceneCount);//今日领取数 - return new ResultData(datamap); + return getSaleSceneCount(tenantId); } //触达用户数 if (chart.equals(EnumChart.CDYHS.getCode())) { - //查询UV PV - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-30)); - params.put("endTime", addDay(1)); - List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); - startdate = DateUtils.getTimeBefore(30, new Date()); - enddate = DateUtils.getTimeBefore(1, new Date()); - List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); - List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); - List tempDatalist = new LinkedList<>(); - for (String tj : tjList) { - Optional first = wxUserVisitList.stream().filter(c -> c.getxTime().equals(tj)).findFirst(); - if (!first.isPresent()) { - TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); - touchUsersReportVo.setPv(0); - touchUsersReportVo.setUv(0); - touchUsersReportVo.setCouponCount(0); - touchUsersReportVo.setUserCount(0); - touchUsersReportVo.setVerifyCount(0); - touchUsersReportVo.setVerifyUserCount(0); - touchUsersReportVo.setxTime(tj); - tempDatalist.add(touchUsersReportVo); - continue; - } - tempDatalist.add(first.get()); - } - return new ResultData(tempDatalist); + return getTouchUserCount(tenantId); } //场景营销数据 if (chart.equals(EnumChart.CJYXSJ.getCode())) { - - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-30)); - params.put("endTime", addDay(1)); - //停车发券数 停车发券被核销数 核销发券数 核销发券被核销数 - List list = wxCouponActionLogMapper.sceneDataMap(params); - - //停车发券被核销数 - HashMap params1 = new HashMap<>(); - params1.put("tenantId", tenantId); - params1.put("startTime", addDay(-30)); - params1.put("endTime", addDay(1)); - params1.put("channelType", EnumCouponSendSendType.CAR_STOP.getCode());//停车 - List list1 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params1); - Map parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - //核销发券被核销数 - HashMap params2 = new HashMap<>(); - params2.put("tenantId", tenantId); - params2.put("startTime", addDay(-30)); - params2.put("endTime", addDay(1)); - params2.put("channelType", EnumCouponSendSendType.COUPON_VERIFY.getCode());//核销 - List list2 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params2); - Map verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - // B端刷卡支付被核销数 - HashMap params3 = new HashMap<>(); - params3.put("tenantId", tenantId); - params3.put("startTime", addDay(-30)); - params3.put("endTime", addDay(1)); - params3.put("channelType", EnumCouponSendSendType.B_MICROPAY.getCode());//B端刷卡支付 - List list3 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params3); - Map microPayCountMap = list3.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - // 购买发券被核销数 - HashMap params4 = new HashMap<>(); - params3.put("tenantId", tenantId); - params3.put("startTime", addDay(-30)); - params3.put("endTime", addDay(1)); - params3.put("channelType", EnumCouponSendSendType.C_ORDER.getCode());//买券 - List list4 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params4); - Map OrderCountMap = list4.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - for (MarkingSceneDataReportVo vo : list) { - vo.setParkCount(parkCountMap.get(vo.getXTime()) == null ? 0 : parkCountMap.get(vo.getXTime())); - vo.setVerifyCount(verifyCountMap.get(vo.getXTime()) == null ? 0 : verifyCountMap.get(vo.getXTime())); - vo.setMicroPayCount(microPayCountMap.get(vo.getXTime()) == null ? 0 : microPayCountMap.get(vo.getXTime())); - vo.setOrderCount(OrderCountMap.get(vo.getXTime()) == null ? 0 : OrderCountMap.get(vo.getXTime())); - } - - startdate = DateUtils.getTimeBefore(30, new Date()); - enddate = DateUtils.getTimeBefore(1, new Date()); - List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); - List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); - List tempDatalist = new LinkedList<>(); - - for (String tj : tjList) { - Optional first = list.stream().filter(c -> c.getXTime().equals(tj)).findFirst(); - - MarkingSceneDataReportVo msdVo; - if (!first.isPresent()) { - msdVo = new MarkingSceneDataReportVo(); - msdVo.setXTime(tj); - msdVo.setCarCount(0); - msdVo.setParkCount(0); - msdVo.setVerifyCount(0); - msdVo.setMicroPayCount(0); - msdVo.setOrderCount(0); - msdVo.setTempCount(0); - msdVo.setParkSendCount(0); - msdVo.setVerifySendCount(0); - msdVo.setMicroPaySendCount(0); - msdVo.setOrderSendCount(0); - msdVo.setTotal(0); - } else { - msdVo = first.get(); - msdVo.setTotal(msdVo.getParkSendCount() + - msdVo.getVerifySendCount() + - msdVo.getMicroPaySendCount() + - msdVo.getOrderSendCount()); - } - tempDatalist.add(msdVo); - } - datamap.put("sceneDataMap", tempDatalist); - return new ResultData(datamap); + return getSceneData(tenantId); } //新增用户 if (chart.equals(EnumChart.XZYH.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - long allCount = wxCUserMapper.findCount(dto);//总数 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -1); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long todayCount = wxCUserMapper.findCount(dto); - datamap.put("allCount", allCount);//会员总数 - datamap.put("todayCount", todayCount);//今日新增会员数 - return new ResultData(datamap); + return getNewUserCount(tenantId); } //活跃用户 if (chart.equals(EnumChart.HYYH.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - String yesterday = DateUtils.getTimeBefore(1, new Date()); - List collect = list.parallelStream().filter(x -> x.getxTime().equals(yesterday)).collect(Collectors.toList()); - int yesterdayCount = 0; - if (!collect.isEmpty()) { - yesterdayCount = collect.get(0).getUv(); - } - Integer thisMonthCount = list.parallelStream().collect(Collectors.summingInt(u -> u.getUv())); - datamap.put("yesterdayCount", yesterdayCount);//昨日活跃数 - datamap.put("thisMonthCount", thisMonthCount);//近一个月活跃数 - return new ResultData(datamap); + return getActiveMemberCount(tenantId); } //线上交易 if (chart.equals(EnumChart.XSJY.getCode())) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - int thisMonthCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 - c.clear(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - startTime = c.getTime(); - int todayCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 - DecimalFormat df = new DecimalFormat("0.00"); - datamap.put("todayCount", df.format((float) todayCount / 100));//今日消费金额 - String thisMonthCountStr = df.format((float) thisMonthCount / 100); - datamap.put("thisMonthCount", thisMonthCountStr);//近一个月消费金额数 - return new ResultData(datamap); + return getOnlineOrderCount(tenantId); } //近一周新增用户数 if (chart.equals(EnumChart.JYZXZYHS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List weekVos = new ArrayList<>();//周会员数 - for (int i = 7, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setSortNum(sortNum++); - vo.setCount(count); - weekVos.add(vo); - } - datamap.put("weekVos", weekVos);//月用户增加数列表 - return new ResultData(datamap); - + return getNewMemberInWeek(tenantId); } //近一周活跃用户数 if (chart.equals(EnumChart.JYZHYYHS.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -7); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - Map dateMap = new HashMap<>(); - for (TouchUsersReportVo vo : list) { - dateMap.put(vo.getxTime(), vo); - } - List weekVos = new ArrayList<>();//每周uv - for (int i = 7, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dateMap.get(dayStr) != null) { - TouchUsersReportVo rv = dateMap.get(dayStr); - Long l = new Long((long) rv.getUv()); - vo.setCount(l); - } else { - vo.setCount(0); - } - weekVos.add(vo); - } - datamap.put("weekVos", weekVos);//周活跃数列表 - return new ResultData(datamap); - + return getActiveMemberCountInWeek(tenantId); } //近一周线上交易金额(元) if (chart.equals(EnumChart.JYZXSJYJE.getCode())) { - Calendar c = Calendar.getInstance(); - Date today = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 - c.clear(); - c.setTime(endTime); - Date eTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -7); - Date sTime = c.getTime(); - List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); - Map dataMap = new HashMap<>(); - for (CUserDateAmountVo v : datas) { - dataMap.put(v.getxTime(), v.getPrice()); - } - List weekVos = new ArrayList<>();//周消费金额 - for (int i = 7, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dataMap.get(dateStr) != null) { - int price = dataMap.get(dateStr); - vo.setPrice(price); - } else { - vo.setPrice(0); - } - weekVos.add(vo); - } - datamap.put("weekVos", weekVos);//一周金额列表 - return new ResultData(datamap); + return getWeekMoneyData(tenantId); } //新增用户趋势 if (chart.equals(EnumChart.XZYHQS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List monthVos = new ArrayList<>();//会员数 - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setSortNum(sortNum++); - vo.setCount(count); - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//月用户增加数列表 - return new ResultData(datamap); + return getNewMemberTradeMonthly(tenantId); } //活跃用户趋势 if (chart.equals(EnumChart.HYYHQS.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - Map dateMap = new HashMap<>(); - for (TouchUsersReportVo vo : list) { - dateMap.put(vo.getxTime(), vo); - } - List monthVos = new ArrayList<>();//每月uv - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dateMap.get(dayStr) != null) { - TouchUsersReportVo rv = dateMap.get(dayStr); - Long l = new Long((long) rv.getUv()); - vo.setCount(l); - } else { - vo.setCount(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//月活跃数列表 - return new ResultData(datamap); + return getActiveMemberTrade(tenantId); } //线上交易趋势 if (chart.equals(EnumChart.XSJYQS.getCode())) { - Calendar c = Calendar.getInstance(); - Date today = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date eTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 - Date sTime = c.getTime(); - List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); - Map dataMap = new HashMap<>(); - for (CUserDateAmountVo v : datas) { - dataMap.put(v.getxTime(), v.getPrice()); - } - List monthVos = new ArrayList<>(); - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dataMap.get(dateStr) != null) { - int price = dataMap.get(dateStr); - vo.setPrice(price); - } else { - vo.setPrice(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//一月金额列表 - return new ResultData(datamap); + return getOnlineTrade(tenantId); } //微信用户总数 if (chart.equals(EnumChart.WXYHZS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - //微信用户数据 - long wxallCount = wxCUserMapper.findCount(dto);//总量 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - dto.setStartTime(today); - dto.setEndTime(null); - long wxtodayCount = wxCUserMapper.findCount(dto);//今天新增 - datamap.put("wxallCount", wxallCount);//累计会员总数 - datamap.put("wxtodayCount", wxtodayCount);//今日新增会员数 - return new ResultData(datamap); + return getMemeberWechatTotal(tenantId); } //会员总数 if (chart.equals(EnumChart.HYZS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - long allCount = wxCUserBasicInfoMapper.findCount(dto);//总量 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - dto.setStartTime(today); - dto.setEndTime(null); - long todayCount = wxCUserBasicInfoMapper.findCount(dto);//今天新增 - datamap.put("allCount", allCount);//累计会员总数 - datamap.put("todayCount", todayCount);//今日新增会员数 - return new ResultData(datamap); + return getMemberTotalCount(tenantId); } //微信用户累计趋势 if (chart.equals(EnumChart.WXYHLJQS.getCode())) { - final int daysBefore = 29; - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List wxnewCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - wxnewCountVos.add(vo); - } - List wxallCountVos = new ArrayList<>();//累计会员数 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -daysBefore); - dto.setEndTime(c.getTime()); - dto.setStartTime(null); - long firstDay = wxCUserMapper.findCount(dto);//统计的第一天总数 - int i = 0; - long sumCount = 0; - for (UserStructureVo v : wxnewCountVos) { - UserStructureVo vo = new UserStructureVo(); - sumCount += v.getCount(); - vo.setCount(firstDay + sumCount); - vo.setName(v.getName()); - vo.setSortNum(i + 1); - wxallCountVos.add(vo); - i++; - } - datamap.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) - return new ResultData(datamap); + return getMemberWechatJoinTrade(tenantId); } //会员累计趋势 if (chart.equals(EnumChart.HYLJQS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - final int daysBefore = 29; - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List newCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserBasicInfoMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - newCountVos.add(vo); - } - List allCountVos = new ArrayList<>();//累计会员数 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -daysBefore); - dto.setEndTime(c.getTime()); - dto.setStartTime(null); - long firstDay = wxCUserBasicInfoMapper.findCount(dto);//统计的第一天总数 - int i = 0; - long sumCount = 0; - for (UserStructureVo v : newCountVos) { - UserStructureVo vo = new UserStructureVo(); - sumCount += v.getCount(); - vo.setCount(firstDay + sumCount); - vo.setName(v.getName()); - vo.setSortNum(i + 1); - allCountVos.add(vo); - i++; - } - datamap.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) - return new ResultData(datamap); - + return getMemberJoinTrade(tenantId); } //微信用户新增趋势 if (chart.equals(EnumChart.WXYHXZQS.getCode())) { - final int daysBefore = 29; - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List wxnewCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - wxnewCountVos.add(vo); - } - datamap.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) - return new ResultData(datamap); + return getWechatMemberTrade(tenantId); } //会员新增趋势 if (chart.equals(EnumChart.HYXZQS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - final int daysBefore = 29; - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List newCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserBasicInfoMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - newCountVos.add(vo); - } - datamap.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) - return new ResultData(datamap); + return getNewMemberTrade(tenantId); } //拓客渠道 if (chart.equals(EnumChart.TKQD.getCode())) { - List channelStructureList = new ArrayList<>(); - WxCUser wxCUser = new WxCUser(); - wxCUser.setTenantId(tenantId); - List channels = wxUserChannelMapper.findDistinctChannel(); - for (WxUserChannel w : channels) { - WxUserChannel c = new WxUserChannel(); - c.setChannelName(w.getChannelName()); - PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); - if (page.getSize() > 0) { - List sceneList = new ArrayList<>(); - for (WxUserChannel uc : page.getList()) { - List scene = new ArrayList<>(); - scene.add(uc.getSceneAddress()); - wxCUser.setSceneList(scene); - sceneList.add(uc.getSceneAddress()); - } - wxCUser.setSceneList(sceneList); - WxUserChannel channelStructure = new WxUserChannel(); - channelStructure.setChannelName(w.getChannelName()); - channelStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); - channelStructureList.add(channelStructure); - } - } - datamap.put("channelList", channelStructureList); - return new ResultData(datamap); + return getFromChannelAnalysis(tenantId); } //场景排名 if (chart.equals(EnumChart.CJPM.getCode())) { - List senceStructureList = new ArrayList<>(); - WxCUser wxCUser = new WxCUser(); - wxCUser.setTenantId(tenantId); - List channels = wxUserChannelMapper.findDistinctChannel(); - for (WxUserChannel w : channels) { - WxUserChannel c = new WxUserChannel(); - c.setChannelName(w.getChannelName()); - PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); - if (page.getSize() > 0) { - for (WxUserChannel uc : page.getList()) { - List scene = new ArrayList<>(); - scene.add(uc.getSceneAddress()); - wxCUser.setSceneList(scene); - WxUserChannel senceStructure = new WxUserChannel(); - senceStructure.setDescription(uc.getDescription()); - senceStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); - senceStructureList.add(senceStructure); - } - } - } - Collections.sort(senceStructureList, (s1, s2) -> ((int) (s2.getCount() - s1.getCount()))); - datamap.put("senceList", senceStructureList.subList(0, 10)); - return new ResultData(datamap); + return getSceneAnalysis(tenantId); } //会员性别比例 if (chart.equals(EnumChart.HYXBBL.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - long all = wxCUserBasicInfoMapper.findCount(dto); - List vos = new ArrayList<>(); - Calendar c = Calendar.getInstance(); - for (EnumAgeInfo a : EnumAgeInfo.values()) { - c.clear(); - c.setTime(new Date()); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - long count = getCountByAge(a, c, dto); - vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); - } - return new ResultData(datamap); + return getMemberSexRate(tenantId, startdate, enddate); } //会员绑定车牌率 if (chart.equals(EnumChart.HYBDCPL.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - long total = wxCUserBasicInfoMapper.findCount(dto); - long userCountWithCar = wxCUserCarMapper.countUser(dto); - Map userWithCar = new HashMap(); - userWithCar.put("title", "已绑定车牌"); - userWithCar.put("count", userCountWithCar); - long userCountWithoutCar = total - userCountWithCar; - Map userWithoutCar = new HashMap(); - userWithoutCar.put("title", "未绑定车牌"); - userWithoutCar.put("count", userCountWithoutCar); - NumberFormat nf = NumberFormat.getPercentInstance(); - nf.setMinimumFractionDigits(2); - if (userCountWithoutCar + userCountWithCar > 0) { - userWithCar.put("percentage", nf.format(userCountWithCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); - userWithoutCar.put("percentage", nf.format(userCountWithoutCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); - } else { - userWithCar.put("percentage", "--"); - userWithoutCar.put("percentage", "--"); - } - List list = new ArrayList<>(); - list.add(userWithCar); - list.add(userWithoutCar); - return new ResultData(list); + return getMemberBindCar(tenantId, startdate, enddate); } //会员年龄层次 if (chart.equals(EnumChart.HYNLCC.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - long all = wxCUserBasicInfoMapper.findCount(dto); - List vos = new ArrayList<>(); - Calendar c = Calendar.getInstance(); - for (EnumAgeInfo a : EnumAgeInfo.values()) { - c.clear(); - c.setTime(new Date()); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - long count = getCountByAge(a, c, dto); - vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); - } - return new ResultData(datamap); - + return getMemberAgeAnalysis(tenantId, startdate, enddate); } //会员成长值 if (chart.equals(EnumChart.HYCZZ.getCode())) { - WxLevelConfig wxLevelConfig = new WxLevelConfig(); - wxLevelConfig.setTenantId(tenantId); - wxLevelConfig.setSortColumns(WxLevelConfig.Field.Points_ASC); - List levelList = wxLevelConfigMapper.findList(wxLevelConfig); - - for (int i = 0; i < levelList.size(); i++) { - - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - if (i + 1 < levelList.size()) { - dto.setLevelStartScore(levelList.get(i).getPoints()); - dto.setLevelEndScore(levelList.get(i + 1).getPoints()); - } else { - dto.setLevelStartScore(levelList.get(i).getPoints()); - } - - long all = wxCUserBasicInfoMapper.findCountByScore(dto); - - levelList.get(i).setCount(all); - } - WxLevelConfig other = new WxLevelConfig(); - //没有等级的会员 - other.setLevel("无"); - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - other.setCount(wxCUserBasicInfoMapper.findCount(dto) - - levelList.stream().map(WxLevelConfig::getCount).reduce(Long::sum).orElse(0L)); - levelList.add(other); - return new ResultData(levelList); + return getMemberGrowthAnalysis(tenantId, startdate, enddate); } //会员手机品牌 if (chart.equals(EnumChart.HYSJPP.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); - Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); - dto.setStartTime(startTime); - dto.setEndTime(endTime); - long total = wxCUserBasicInfoMapper.findCount(dto); - List tagList = new ArrayList<>(); - EnumTag[] tags = {EnumTag.ID_49, - EnumTag.ID_50, - EnumTag.ID_51, - EnumTag.ID_52, - EnumTag.ID_53, - EnumTag.ID_54}; - for (int i = 0; i < tags.length; i++) { - WxTags tag = new WxTags(); - tag.setName(tags[i].getMessage()); - tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); - tagList.add(tag); - total -= tag.getCount(); - } - - WxTags tag = new WxTags(); - tag.setName("暂未获取"); - tag.setCount(total); - tagList.add(tag); - return new ResultData(tagList); + return getMobileBrandAnalysis(tenantId, startdate, enddate); } //会员活跃度 if (chart.equals(EnumChart.HYHYD.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); - Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); - dto.setStartTime(startTime); - dto.setEndTime(endTime); - long total = wxCUserBasicInfoMapper.findCount(dto); - List tagList = new ArrayList<>(); - EnumTag[] tags = { - EnumTag.ID_112, - EnumTag.ID_111, - EnumTag.ID_110 - }; - for (int i = 0; i < tags.length; i++) { - WxTags tag = new WxTags(); - tag.setName(tags[i].getMessage()); - tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); - tagList.add(tag); - total -= tag.getCount(); - } - WxTags tag = new WxTags(); - tag.setName("休眠"); - tag.setCount(total); - tagList.add(tag); - return new ResultData(tagList); + return getMemActivity(tenantId, startdate, enddate); } //卡营销数据 if (chart.equals(EnumChart.SALE_CARD.getCode())) { - WxCoupon wxCoupon = new WxCoupon(); - - //默认时间本月第一天,截止到当天 - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH,1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - wxCoupon.setStartdate(c.getTime()); - }else{ - Date startTime = DateUtils.stringToDate(startdate); - wxCoupon.setStartdate(startTime); - } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - wxCoupon.setEnddate(new Date()); - }else{ - Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); - wxCoupon.setEnddate(endTime); - } - - Map result = new HashedMap(); - List saleMoneyList = wxCouponService.findSaleMoneyByDate(wxCoupon); - List paymentList = wxCouponService.findPaymentByDate(wxCoupon); - Map saleMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map payMentMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - - for (WxCouponStatisVo coupon:saleMoneyList){ - saleMap.put(coupon.getXtime(),coupon.getXcount()); - } - for (WxCouponStatisVo coupon:paymentList){ - payMentMap.put(coupon.getXtime(),coupon.getXcount()); - } - result.put("saleHistory",saleMap); - result.put("paymentHistory",payMentMap); - result.put("saleCardCount",wxCouponService.findSaleCardCount(wxCoupon)); - result.put("tranCount",wxCouponService.findTranCardCount(wxCoupon)); - result.put("subsidyCount",wxCouponService.findSubsidyMoney(wxCoupon)); - return new ResultData(result); + return getSaleCardAnalysis(paramsMap, startdate, enddate); } - //卷营销数据 + //券营销数据 if (chart.equals(EnumChart.SALE_COUPON.getCode())) { - WxCoupon wxCoupon = new WxCoupon(); - Map result = new HashedMap(); - - //默认时间本月第一天,截止到当天 - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH,1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - wxCoupon.setStartdate(c.getTime()); - }else{ - Date startTime = DateUtils.stringToDate(startdate); - wxCoupon.setStartdate(startTime); - } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - wxCoupon.setEnddate(new Date()); - }else{ - Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); - wxCoupon.setEnddate(endTime); - } - List orderCountList = wxCouponService.findCouponOrderCount(wxCoupon); - List paymentCountList = wxCouponService.findCouponPaymentCount(wxCoupon); - List priceCouponSaleCountList = wxCouponService.priceCouponSaleCount(wxCoupon); - List priceCouponPaymentCountList = wxCouponService.priceCouponPaymentCount(wxCoupon); - - Map orderCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map paymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map priceCouponSaleCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map priceCouponPaymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - - for (WxCouponStatisVo coupon:orderCountList){ - orderCountMap.put(coupon.getXtime(),coupon.getXcount()); - } - for (WxCouponStatisVo coupon:paymentCountList){ - paymentCountMap.put(coupon.getXtime(),coupon.getXcount()); - } - for (WxCouponStatisVo coupon:priceCouponSaleCountList){ - priceCouponSaleCountMap.put(coupon.getXtime(),coupon.getXcount()); - } - for (WxCouponStatisVo coupon:priceCouponPaymentCountList){ - priceCouponPaymentCountMap.put(coupon.getXtime(),coupon.getXcount()); - } - result.put("orderCountList",orderCountMap); - result.put("paymentCountList",paymentCountMap); - result.put("priceCouponSaleCountList",priceCouponSaleCountMap); - result.put("priceCouponPaymentCountList",priceCouponPaymentCountMap); - - result.put("sumPriceSaleMoney",wxCouponService.findSumPriceSaleMoney(wxCoupon)); - result.put("sumPricePayMent",wxCouponService.findSumPricePayMent(wxCoupon)); - result.put("sumSubsidyMoney",wxCouponService.findSumSubsidyMoney(wxCoupon)); - return new ResultData(result); + return getSaleCouponAnalysis(paramsMap, startdate, enddate); } //砍价营销数据 if (chart.equals(EnumChart.SALE_PRESS.getCode())) { - WxCoupon wxCoupon = new WxCoupon(); - Map result = new HashedMap(); - - //默认时间本月第一天,截止到当天 - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH,1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - wxCoupon.setStartdate(c.getTime()); - }else{ - Date startTime = DateUtils.stringToDate(startdate); - wxCoupon.setStartdate(startTime); - } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - wxCoupon.setEnddate(new Date()); - }else{ - Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); - wxCoupon.setEnddate(endTime); - } - List pressSendHistory = wxCouponService.pressSendHistory(wxCoupon); - List pressSuccHistory = wxCouponService.pressSuccHistory(wxCoupon); - List pressPaymentHistory = wxCouponService.pressPaymentHistory(wxCoupon); + return getSalePressAnalysis(paramsMap, tenantId, startdate, enddate); + } + + //拼团营销数据 + if (chart.equals(EnumChart.SALE_GROUP.getCode())) { + return getSaleGroupAnalysis(paramsMap, tenantId, startdate); + } + + //首页商铺出租数据 + if (chart.equals(EnumChart.INDEX_SHOP_RENT.getCode())) { + return getIndexShopRentData(tenantId, startdate); + } + + //首页商铺出租数据 + if (chart.equals(EnumChart.INDEX_BILL_RECE_RATE.getCode())) { + return getBillReceRate(tenantId, startdate); + } + + //首页场景发券 + if (chart.equals(EnumChart.INDEX_COUPON_SCENE.getCode())) { + return new ResultData(markingDataReportService.getSceneDataHistory(tenantId, startdate, enddate)); + } + + //首页营销数据 + if (chart.equals(EnumChart.INDEX_SALE_DATA.getCode())) { + return getSaleDataHistory(tenantId, startdate, enddate); + } + - Map pressSendHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map pressSuccHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map pressPaymentHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - for (WxCouponStatisVo coupon:pressSendHistory){ - pressSendHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + return new ResultData(ErrorCode.REPORT_TYPE_UNKNOWN); + } + + /** + * 解单数据 - 月 + * @param tenantId + * @return + */ + private ResultData getMerchantTradeMonthly(String tenantId) { + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + + List recordList = wxMerchantTradeDailyMapper.findTotalListOfMonth(wxMerchantTradeDaily); + Map recordMap = recordList.stream().collect(Collectors.toMap(WxMerchantTradeDaily::getReportDate, r -> r)); + + List tradeList = new ArrayList<>(); + Calendar cal = Calendar.getInstance(); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat fmtv = new SimpleDateFormat("MM/dd"); + cal.setTime(new Date()); + for (int i = 0; i < 30; i++) { + cal.add(Calendar.DAY_OF_YEAR, -1); + WxMerchantTradeDaily trade = recordMap.get(fmt.format(cal.getTime())); + if (trade != null) { + trade.setReportDate(fmtv.format(cal.getTime())); + tradeList.add(trade); + } else { + trade = new WxMerchantTradeDaily(); + trade.setTradeAmt(0); + trade.setReportDate(fmtv.format(cal.getTime())); + tradeList.add(trade); } - for (WxCouponStatisVo coupon:pressSuccHistory){ - pressSuccHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + Collections.reverse(tradeList); + return new ResultData(tradeList); + } + + /** + * 今日已绑车牌量 + * @param tenantId + * @return + */ + private ResultData getBindCarAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + String lastweek = DateUtils.getTimeBefore(7, new Date()); + //绑定车牌 + Map carParams = new HashMap<>(); + carParams.put("tenantId", tenantId); + carParams.put("startdate", DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); + carParams.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + long todaybindcar = wxCUserCarMapper.queryCarCount(carParams); + carParams.put("startdate", yesterday + " 00:00:00"); + carParams.put("enddate", yesterday + " 23:59:59"); + long yesterdaybindcar = wxCUserCarMapper.queryCarCount(carParams); + carParams.put("startdate", lastweek + " 00:00:00"); + carParams.put("enddate", lastweek + " 23:59:59"); + long lastweekbindcar = wxCUserCarMapper.queryCarCount(carParams); + datamap.put("todaybindcar", todaybindcar); + if (yesterdaybindcar > 0) { + double yesterdaybinddhb = (double) (todaybindcar - yesterdaybindcar) / yesterdaybindcar * 100; + double yesterdaybindhb = new BigDecimal(yesterdaybinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("yesterdaybindhb", yesterdaybindhb + "%"); + } else { + datamap.put("yesterdaybindhb", "--"); + } + if (lastweekbindcar > 0) { + double lastweekbinddhb = (double) (todaybindcar - lastweekbindcar) / lastweekbindcar * 100; + double lastweekbindhb = new BigDecimal(lastweekbinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("lastweekbindhb", lastweekbindhb + "%"); + } else { + datamap.put("lastweekbindhb", "--"); + } + return new ResultData(datamap); + } + + /** + * 实时车流量 + * @param tenantId + * @return + */ + private ResultData getCarDataCurrent(String tenantId) { + HashMap datamap = new HashMap<>(); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + String lastweek = DateUtils.getTimeBefore(7, new Date()); + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); + params.put("startdate", systemTime + " 05:00:00"); + params.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + List> todayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map todaycollect = todayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + List hourList = new ArrayList<>(); + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.HOUR_OF_DAY, 1); + int hour = instance.get(Calendar.HOUR_OF_DAY); + int startHour = 6; + int endHour = 24; + for (int i = startHour; i < endHour; i++) { + hourList.add(i < 10 ? "0" + i + ":00" : i + ":00"); + } + List todayCarList = new ArrayList<>(); + for (int i = startHour; i < endHour; i++) { + if(i> yesterdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map yesterdaycollect = yesterdayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + List yesterdayCarList = new ArrayList<>(); + for (int i = startHour; i < endHour; i++) { + yesterdayCarList.add(yesterdaycollect.get((Object) hourList.get(i-startHour))); + } + datamap.put("yesterdaycardata", yesterdayCarList); + + params.put("startdate", lastweek + " 05:00:00"); + params.put("enddate", lastweek + " 22:59:59"); + List> lastdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map lastweekdaycollect = lastdayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + List lastweekdayCarList = new ArrayList<>(); + for (int i = startHour; i < endHour; i++) { + lastweekdayCarList.add(lastweekdaycollect.get((Object) hourList.get(i-startHour))); + } + datamap.put("lastdaycardata", lastweekdayCarList); + + return new ResultData(datamap); + } + + /** + * 数据塔台-数据总览-车流数据 | 数据塔台-车流数据-(历史车流量 + 今日车流量 + 上周同期) + * @param tenantId + * @return + */ + private ResultData getCarHistoryAndTodayAndHB(String tenantId, boolean withOthers ) { + String startdate; + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); + startdate = DateUtils.getTimeBefore(30, new Date()); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + + List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); + + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", systemTime + " 23:59:59"); + + List> historylist = wxCarCmdLogMapper.queryHistory(params); + + Map collect = historylist.stream().collect(Collectors.toMap(m -> { + return m.get("create_date"); + }, m -> { + return m.get("carcount"); + })); + + List timeList = new ArrayList<>(); + List valList = new ArrayList<>(); + for (String date : tjTimeList) { + Object o = collect.get(date); + timeList.add(date.substring(5).replace("-", "/")); + if (o == null) { + valList.add(0L); + } else { + valList.add(o); } - result.put("pressSendHistory",pressSendHistoryMap); - result.put("pressSuccHistory",pressSuccHistoryMap); - result.put("pressPaymentHistory",pressPaymentHistoryMap); + } + Map map = new HashMap(); + map.put("index", timeList); + map.put("val", valList); + datamap.put("history", map); - wxCoupon.setTenantId(tenantId); - result.put("pressSuccRate",wxCouponService.pressSuccRate(wxCoupon)); - result.put("sumJoin",wxCouponService.sumJoin(wxCoupon)); - return new ResultData(result); + if(withOthers) { + //今日车流量 + long todaycar = ((Long) valList.get(valList.size()-1)).longValue(); + datamap.put("todaycar", todaycar); + //环比 + long yesterdaycar = (long) ((Long) valList.get(valList.size()-2)).longValue(); + if (yesterdaycar > 0) { + double hbd = (double) (todaycar - yesterdaycar) / yesterdaycar * 100; + double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("hb", hb + "%"); + } else { + datamap.put("hb", "--"); + } + //上周同期 + long lastweekcar = ((Long) valList.get(valList.size()-8)).longValue(); + if (lastweekcar > 0) { + double lasthbd = (double) (todaycar - lastweekcar) / lastweekcar * 100; + double lasthb = new BigDecimal(lasthbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("lasthb", lasthb + "%"); + } else { + datamap.put("lasthb", "--"); + } + // 周入场数量 + long carWeekCount = 0L; + for(int i=0;i<7;i++) { + carWeekCount += ((Long)valList.get(valList.size()-1-i)).longValue(); + } + datamap.put("carWeekCount", carWeekCount); } + return new ResultData(datamap); + } - //拼团营销数据 - if (chart.equals(EnumChart.SALE_GROUP.getCode())) { - Map params = new HashMap<>(); - params.put("tenantId", tenantId); - //默认时间本月第一天,截止到当天 - Map result = new HashMap<>(); - Date startTime = new Date(); - Date endTime = startTime; - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - startTime = c.getTime(); - params.put("startdate", startTime); + /** + * 近一周线上缴费车辆 + * @param tenantId + * @return + */ + private ResultData getCarPayCarCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + datamap.put("oneWeekCarPayCount", wxCarCmdLogMapper.queryWeekCarPayCount(weekParams)); + return new ResultData(datamap); + } + + /** + * 近一周线上缴费金额 + * @param tenantId + * @return + */ + private ResultData getCarPayCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(weekParams); + Map weekCollect = weekCarPayHistoryList.stream().collect(Collectors.toMap(m -> { + return (String) m.get("create_time"); + }, m -> { + return m.get("fee"); + })); + List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); + List timeList = new ArrayList<>(); + List valList = new ArrayList<>(); + for (String date : days) { + Object o = weekCollect.get(date); + timeList.add(date.substring(5, date.length()).replace("-", "/")); + if (o == null) { + valList.add(0L); } else { - startTime = DateUtils.stringToDate(startdate + " 00:00:00"); - params.put("startdate", startTime); + valList.add(o); } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - params.put("enddate", endTime); + } + + Map map = new HashMap(); + map.put("index", timeList); + map.put("val", valList); + datamap.put("oneWeekCarPayFeeCount", map); + return new ResultData(datamap); + } + + /** + * 车流 - 近一周新增停车会员 + * @param tenantId + * @return + */ + private ResultData getCarNewMemberCount(String tenantId) { + HashMap datamap = new HashMap<>(); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + try { + wxCUserBasicInfoDto.setStartTime(sdf.parse(oneWeekStartdate)); + wxCUserBasicInfoDto.setEndTime(sdf.parse(oneWeekEndDate)); + } catch (Exception e) { + e.printStackTrace(); + } + datamap.put("oneWeekNewCarUserCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + //停车会员总数 + wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + datamap.put("newCarUserSumCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + + return new ResultData(datamap); + } + + /** + * 车流 - 近一周新增会员数 + * @param tenantId + * @return + */ + private ResultData getCarNewMemberCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(weekParams); + Map weekCarCollect = carCountHistory.stream().collect(Collectors.toMap(m -> { + return (String) m.get("create_time"); + }, m -> { + return m.get("count"); + })); + List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); + List timeList = new ArrayList<>(); + List valList = new ArrayList<>(); + for (String date : days) { + Object o = weekCarCollect.get(date); + timeList.add(date.substring(5, date.length()).replace("-", "/")); + if (o == null) { + valList.add(0L); } else { - endTime = DateUtils.stringToDate(paramsMap.get("enddate") + " 23:59:59", "yyyy-MM-dd HH:mm:ss"); - params.put("enddate", paramsMap.get("enddate") + " 23:59:59"); + valList.add(o); + } + } + + Map map = new HashMap(); + map.put("index", timeList); + map.put("val", valList); + datamap.put("oneWeekNewCarUserHistory", map); + return new ResultData(datamap); + } + + /** + * 今日券交易数据 + * @param tenantId + * @return + */ + private ResultData getTodayTouchUser(String tenantId) { + HashMap datamap = new HashMap<>(); + //查询UV PV + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-1)); + params.put("endTime", addDay(1)); + List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); + TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); + if (!wxUserVisitList.isEmpty()) { + touchUsersReportVo = wxUserVisitList.get(0); + } else { + touchUsersReportVo.setPv(0); + touchUsersReportVo.setUv(0); + touchUsersReportVo.setCouponCount(0); + touchUsersReportVo.setUserCount(0); + touchUsersReportVo.setVerifyCount(0); + touchUsersReportVo.setVerifyUserCount(0); + touchUsersReportVo.setxTime(DateUtils.getSystemTime("MM/dd")); + } + datamap.put("yesterday", touchUsersReportVo); + return new ResultData(datamap); + } + + /** + * 今日券交易数据 + * @param tenantId + * @return + */ + private ResultData getTodayCouponCount(String tenantId) { + HashMap datamap = new HashMap<>(); + //今日领取券数 + //查询coupon order表 + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setTenantId(tenantId); + wxCouponOrder.setStartTime(addDay(0)); + wxCouponOrder.setEndTime(addDay(1)); + int todayCouponCount = wxCouponOrderMapper.findCount(wxCouponOrder); + wxCouponOrder.setStartTime(addDay(-1)); + wxCouponOrder.setEndTime( addDay(0)); + int yesterdayCount = wxCouponOrderMapper.findCount(wxCouponOrder); + wxCouponOrder.setStartTime(addDay(-7)); + wxCouponOrder.setEndTime( addDay(-6)); + int lastWeekCount = wxCouponOrderMapper.findCount(wxCouponOrder); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + String couponUpDay = "--"; + if (yesterdayCount != 0) { + couponUpDay = nf.format((todayCouponCount - yesterdayCount) / (float) yesterdayCount); + } + String couponUpWeek = "--"; + if (lastWeekCount != 0) { + couponUpWeek = nf.format((todayCouponCount - lastWeekCount) / (float) lastWeekCount); + } + datamap.put("couponUpDay", couponUpDay);//比昨日提升 + datamap.put("couponUpWeek", couponUpWeek);//比上周提升 + datamap.put("todayCouponCount", todayCouponCount);//今日领取数 + return new ResultData(datamap); + } + + /** + * 今日场景营销 + * @param tenantId + * @return + */ + private ResultData getSaleSceneCount(String tenantId) { + HashMap datamap = new HashMap<>(); + int todaySceneCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(0), addDay(1)); + int yesterdayCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-1), addDay(0)); + int lastWeekCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-7), addDay(-6)); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + String sceneDownDay = "--"; + if (yesterdayCount != 0) { + sceneDownDay = nf.format((yesterdayCount - todaySceneCount) / (float) yesterdayCount); + } + String sceneUpWeek = "--"; + if (lastWeekCount != 0) { + sceneUpWeek = nf.format((todaySceneCount - lastWeekCount) / (float) lastWeekCount); + } + datamap.put("sceneDownDay", sceneDownDay);//比昨日下降 + datamap.put("sceneUpWeek", sceneUpWeek);//比上周提升 + datamap.put("todaySceneCount", todaySceneCount);//今日领取数 + return new ResultData(datamap); + } + + /** + * 触达用户数 + * @param tenantId + * @return + */ + private ResultData getTouchUserCount(String tenantId) { + String startdate; + String enddate;//查询UV PV + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List tempDatalist = new LinkedList<>(); + for (String tj : tjList) { + Optional first = wxUserVisitList.stream().filter(c -> c.getxTime().equals(tj)).findFirst(); + if (!first.isPresent()) { + TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); + touchUsersReportVo.setPv(0); + touchUsersReportVo.setUv(0); + touchUsersReportVo.setCouponCount(0); + touchUsersReportVo.setUserCount(0); + touchUsersReportVo.setVerifyCount(0); + touchUsersReportVo.setVerifyUserCount(0); + touchUsersReportVo.setxTime(tj); + tempDatalist.add(touchUsersReportVo); + continue; } - List> successlist = wxOrderGroupMapper.queryOrderGroupSuccessCountAndTime(params); - List> verifyList = wxOrderGroupMapper.queryOrderGroupVerifyCountAndTime(params); - - Map successMap = getDateMap(startTime, endTime); - Map verifyMap = getDateMap(startTime, endTime); - - long successCount = wxOrderGroupMapper.queryOrderGroupSuccessCount(params); - long groupCount = wxOrderGroupMapper.queryOrderGroupCount(params); - long peopleCount = wxOrderGroupMapper.queryOrderGroupPeopleCount(params); - double transferRatio = 0; - if (groupCount > 0) { - double transfer = (double) successCount / groupCount * 100; - transferRatio = new BigDecimal(transfer).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + tempDatalist.add(first.get()); + } + return new ResultData(tempDatalist); + } + + /** + * 场景营销数据 + * @param tenantId + * @return + */ + private ResultData getSceneData(String tenantId) { + String startdate; + String enddate; + HashMap datamap = new HashMap<>(); + + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + //停车发券数 停车发券被核销数 核销发券数 核销发券被核销数 + List list = wxCouponActionLogMapper.sceneDataMap(params); + + //停车发券被核销数 + HashMap params1 = new HashMap<>(); + params1.put("tenantId", tenantId); + params1.put("startTime", addDay(-30)); + params1.put("endTime", addDay(1)); + params1.put("channelType", EnumCouponSendSendType.CAR_STOP.getCode());//停车 + List list1 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params1); + Map parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + //核销发券被核销数 + HashMap params2 = new HashMap<>(); + params2.put("tenantId", tenantId); + params2.put("startTime", addDay(-30)); + params2.put("endTime", addDay(1)); + params2.put("channelType", EnumCouponSendSendType.COUPON_VERIFY.getCode());//核销 + List list2 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params2); + Map verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + // B端刷卡支付被核销数 + HashMap params3 = new HashMap<>(); + params3.put("tenantId", tenantId); + params3.put("startTime", addDay(-30)); + params3.put("endTime", addDay(1)); + params3.put("channelType", EnumCouponSendSendType.B_MICROPAY.getCode());//B端刷卡支付 + List list3 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params3); + Map microPayCountMap = list3.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + // 购买发券被核销数 + HashMap params4 = new HashMap<>(); + params3.put("tenantId", tenantId); + params3.put("startTime", addDay(-30)); + params3.put("endTime", addDay(1)); + params3.put("channelType", EnumCouponSendSendType.C_ORDER.getCode());//买券 + List list4 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params4); + Map OrderCountMap = list4.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + for (MarkingSceneDataReportVo vo : list) { + vo.setParkCount(parkCountMap.get(vo.getXTime()) == null ? 0 : parkCountMap.get(vo.getXTime())); + vo.setVerifyCount(verifyCountMap.get(vo.getXTime()) == null ? 0 : verifyCountMap.get(vo.getXTime())); + vo.setMicroPayCount(microPayCountMap.get(vo.getXTime()) == null ? 0 : microPayCountMap.get(vo.getXTime())); + vo.setOrderCount(OrderCountMap.get(vo.getXTime()) == null ? 0 : OrderCountMap.get(vo.getXTime())); + } + + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List tempDatalist = new LinkedList<>(); + + for (String tj : tjList) { + Optional first = list.stream().filter(c -> c.getXTime().equals(tj)).findFirst(); + + MarkingSceneDataReportVo msdVo; + if (!first.isPresent()) { + msdVo = new MarkingSceneDataReportVo(); + msdVo.setXTime(tj); + msdVo.setCarCount(0); + msdVo.setParkCount(0); + msdVo.setVerifyCount(0); + msdVo.setMicroPayCount(0); + msdVo.setOrderCount(0); + msdVo.setTempCount(0); + msdVo.setParkSendCount(0); + msdVo.setVerifySendCount(0); + msdVo.setMicroPaySendCount(0); + msdVo.setOrderSendCount(0); + msdVo.setTotal(0); + } else { + msdVo = first.get(); + msdVo.setTotal(msdVo.getParkSendCount() + + msdVo.getVerifySendCount() + + msdVo.getMicroPaySendCount() + + msdVo.getOrderSendCount()); } + tempDatalist.add(msdVo); + } + datamap.put("sceneDataMap", tempDatalist); + return new ResultData(datamap); + } + + /** + * 活跃用户 + * @param tenantId + * @return + */ + private ResultData getNewUserCount(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + long allCount = wxCUserMapper.findCount(dto);//总数 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -1); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long todayCount = wxCUserMapper.findCount(dto); + datamap.put("allCount", allCount);//会员总数 + datamap.put("todayCount", todayCount);//今日新增会员数 + return new ResultData(datamap); + } + + /** + * 活跃用户 + * @param tenantId + * @return + */ + private ResultData getActiveMemberCount(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + List collect = list.parallelStream().filter(x -> x.getxTime().equals(yesterday)).collect(Collectors.toList()); + int yesterdayCount = 0; + if (!collect.isEmpty()) { + yesterdayCount = collect.get(0).getUv(); + } + Integer thisMonthCount = list.parallelStream().collect(Collectors.summingInt(u -> u.getUv())); + datamap.put("yesterdayCount", yesterdayCount);//昨日活跃数 + datamap.put("thisMonthCount", thisMonthCount);//近一个月活跃数 + return new ResultData(datamap); + } + + /** + * 线上交易 + * @param tenantId + * @return + */ + private ResultData getOnlineOrderCount(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setStartTime(startTime); + wxCouponOrder.setEndTime(endTime); + wxCouponOrder.setTenantId(tenantId); + int thisMonthCount = wxCouponOrderMapper.queryPriceTotal(wxCouponOrder);//月消费金额 + c.clear(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + startTime = c.getTime(); + wxCouponOrder.setStartTime(startTime); + wxCouponOrder.setEndTime(endTime); + wxCouponOrder.setTenantId(tenantId); + int todayCount = wxCouponOrderMapper.queryPriceTotal(wxCouponOrder);//月消费金额 + DecimalFormat df = new DecimalFormat("0.00"); + datamap.put("todayCount", df.format((float) todayCount / 100));//今日消费金额 + String thisMonthCountStr = df.format((float) thisMonthCount / 100); + datamap.put("thisMonthCount", thisMonthCountStr);//近一个月消费金额数 + return new ResultData(datamap); + } + + private ResultData getNewMemberCount(String tenantId, int days, String returnName) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List weekVos = new ArrayList<>();//周会员数 + for (int i = days, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setSortNum(sortNum++); + vo.setCount(count); + weekVos.add(vo); + } + datamap.put(returnName, weekVos);//月用户增加数列表 + return new ResultData(datamap); + } + + /** + * 近一周新增用户数 + * @param tenantId + * @return + */ + private ResultData getNewMemberInWeek(String tenantId) { + return getNewMemberCount(tenantId, 7, "weekVos"); + } - Map successListMap = successlist.parallelStream().collect(Collectors.toMap(x -> { - return x.get("time").toString(); - }, x -> { - return x.get("total").toString(); - })); + /** + * 近一周活跃用户数 + * @param tenantId + * @return + */ + private ResultData getActiveMemberCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -7); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List weekVos = new ArrayList<>();//每周uv + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//周活跃数列表 + return new ResultData(datamap); + } - Map verifyListMap = verifyList.parallelStream().collect(Collectors.toMap(x -> { - return x.get("time").toString(); - }, x -> { - return x.get("total").toString(); - })); + /** + * 近一周线上交易金额(元) + * @param tenantId + * @return + */ + private ResultData getWeekMoneyData(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + Date today = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + c.clear(); + c.setTime(endTime); + Date eTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -7); + Date sTime = c.getTime(); + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + List weekVos = new ArrayList<>();//周消费金额 + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dataMap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); + } + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//一周金额列表 + return new ResultData(datamap); + } - successMap.putAll(successListMap); - verifyMap.putAll(verifyListMap); + /** + * 销售数据 + * @param tenantId + * @return + */ + private ResultData getSaleAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + Date sTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date eTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + List monthVos = new ArrayList<>();//周消费金额 + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(sTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (datamap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//一月金额列表 + return new ResultData(datamap); + } - result.put("successList", successMap); - result.put("verifyList", verifyMap); + private ResultData getActiveMemberAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List monthVos = new ArrayList<>();//每月uv + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//月活跃数列表 + return new ResultData(datamap); + } - result.put("successCount", successCount); - result.put("groupCount", groupCount); - result.put("peopleCount", peopleCount); - result.put("transferRatio", transferRatio); + /** + * 新增用户趋势-月 + * @param tenantId + * @return + */ + private ResultData getNewMemberTradeMonthly(String tenantId) { + return getNewMemberCount(tenantId, 29, "monthVos"); + } - return new ResultData(result); + /** + * 活跃用户趋势 + * @param tenantId + * @return + */ + private ResultData getActiveMemberTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List monthVos = new ArrayList<>();//每月uv + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + monthVos.add(vo); } + datamap.put("monthVos", monthVos);//月活跃数列表 + return new ResultData(datamap); + } + /** + * 线上交易趋势 + * @param tenantId + * @return + */ + private ResultData getOnlineTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + Date today = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date eTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + Date sTime = c.getTime(); + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + List monthVos = new ArrayList<>(); + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dataMap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//一月金额列表 + return new ResultData(datamap); + } + /** + * 微信用户总数 + * @param tenantId + * @return + */ + private ResultData getMemeberWechatTotal(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + //微信用户数据 + long wxallCount = wxCUserMapper.findCount(dto);//总量 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + dto.setStartTime(today); + dto.setEndTime(null); + long wxtodayCount = wxCUserMapper.findCount(dto);//今天新增 + datamap.put("wxallCount", wxallCount);//累计会员总数 + datamap.put("wxtodayCount", wxtodayCount);//今日新增会员数 + return new ResultData(datamap); + } + + /** + * 会员总数 + * @param tenantId + * @return + */ + private ResultData getMemberTotalCount(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + long allCount = wxCUserBasicInfoMapper.findCount(dto);//总量 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + dto.setStartTime(today); + dto.setEndTime(null); + long todayCount = wxCUserBasicInfoMapper.findCount(dto);//今天新增 + datamap.put("allCount", allCount);//累计会员总数 + datamap.put("todayCount", todayCount);//今日新增会员数 + return new ResultData(datamap); + } + + /** + * 微信用户累计趋势 + * @param tenantId + * @return + */ + private ResultData getMemberWechatJoinTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + final int daysBefore = 29; + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List wxnewCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + wxnewCountVos.add(vo); + } + List wxallCountVos = new ArrayList<>();//累计会员数 + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); + dto.setEndTime(c.getTime()); + dto.setStartTime(null); + long firstDay = wxCUserMapper.findCount(dto);//统计的第一天总数 + int i = 0; + long sumCount = 0; + for (UserStructureVo v : wxnewCountVos) { + UserStructureVo vo = new UserStructureVo(); + sumCount += v.getCount(); + vo.setCount(firstDay + sumCount); + vo.setName(v.getName()); + vo.setSortNum(i + 1); + wxallCountVos.add(vo); + i++; + } + datamap.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) + return new ResultData(datamap); + } + + /** + * 券交易数据 + * @param tenantId + * @return + */ + private ResultData getCouponSaleAnalysis(String tenantId) { + String startdate; + String enddate; + HashMap datamap = new HashMap<>(); + //couponData + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + List couponDatalist = wxCouponOrderMapper.couponDataMap(params); + //查询券领取人数 + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List couponTempDatalist = new LinkedList<>(); + for (String tj : tjList) { + Optional first = couponDatalist.stream().filter(c -> c.getCreateTime().equals(tj)).findFirst(); + if (!first.isPresent()) { + MarkingCouponDataReportVo markingCouponDataReportVo = new MarkingCouponDataReportVo(); + markingCouponDataReportVo.setCreateTime(tj); + markingCouponDataReportVo.setCouponCount(0); + markingCouponDataReportVo.setCouponUserCount(0); + markingCouponDataReportVo.setVerifyCount(0); + markingCouponDataReportVo.setVerifyUserCount(0); + couponTempDatalist.add(markingCouponDataReportVo); + continue; + } + couponTempDatalist.add(first.get()); + } + datamap.put("couponDataMap", couponTempDatalist); + return new ResultData(datamap); + } + + /** + * 会员累计趋势 + * @param tenantId + * @return + */ + private ResultData getMemberJoinTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + final int daysBefore = 29; + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List newCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserBasicInfoMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + newCountVos.add(vo); + } + List allCountVos = new ArrayList<>();//累计会员数 + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); + dto.setEndTime(c.getTime()); + dto.setStartTime(null); + long firstDay = wxCUserBasicInfoMapper.findCount(dto);//统计的第一天总数 + int i = 0; + long sumCount = 0; + for (UserStructureVo v : newCountVos) { + UserStructureVo vo = new UserStructureVo(); + sumCount += v.getCount(); + vo.setCount(firstDay + sumCount); + vo.setName(v.getName()); + vo.setSortNum(i + 1); + allCountVos.add(vo); + i++; + } + datamap.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) + return new ResultData(datamap); + } + + /** + * 拓客渠道 + * @param tenantId + * @return + */ + private ResultData getFromChannelAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + List channelStructureList = new ArrayList<>(); + WxCUser wxCUser = new WxCUser(); + wxCUser.setTenantId(tenantId); + List channels = wxUserChannelMapper.findDistinctChannel(); + for (WxUserChannel w : channels) { + WxUserChannel c = new WxUserChannel(); + c.setChannelName(w.getChannelName()); + PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); + if (page.getSize() > 0) { + List sceneList = new ArrayList<>(); + for (WxUserChannel uc : page.getList()) { + List scene = new ArrayList<>(); + scene.add(uc.getSceneAddress()); + wxCUser.setSceneList(scene); + sceneList.add(uc.getSceneAddress()); + } + wxCUser.setSceneList(sceneList); + WxUserChannel channelStructure = new WxUserChannel(); + channelStructure.setChannelName(w.getChannelName()); + channelStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); + channelStructureList.add(channelStructure); + } + } + datamap.put("channelList", channelStructureList); + return new ResultData(datamap); + } + + /** + * 微信用户新增趋势 + * @param tenantId + * @return + */ + private ResultData getWechatMemberTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + final int daysBefore = 29; + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List wxnewCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + wxnewCountVos.add(vo); + } + datamap.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) + return new ResultData(datamap); + } + + /** + * 会员新增趋势 + * @param tenantId + * @return + */ + private ResultData getNewMemberTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + final int daysBefore = 29; + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List newCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserBasicInfoMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + newCountVos.add(vo); + } + datamap.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) + return new ResultData(datamap); + } + + /** + * 场景排名 + * @param tenantId + * @return + */ + private ResultData getSceneAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + List senceStructureList = new ArrayList<>(); + WxCUser wxCUser = new WxCUser(); + wxCUser.setTenantId(tenantId); + List channels = wxUserChannelMapper.findDistinctChannel(); + for (WxUserChannel w : channels) { + WxUserChannel c = new WxUserChannel(); + c.setChannelName(w.getChannelName()); + PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); + if (page.getSize() > 0) { + for (WxUserChannel uc : page.getList()) { + List scene = new ArrayList<>(); + scene.add(uc.getSceneAddress()); + wxCUser.setSceneList(scene); + WxUserChannel senceStructure = new WxUserChannel(); + senceStructure.setDescription(uc.getDescription()); + senceStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); + senceStructureList.add(senceStructure); + } + } + } + Collections.sort(senceStructureList, (s1, s2) -> ((int) (s2.getCount() - s1.getCount()))); + datamap.put("senceList", senceStructureList.subList(0, 10)); + return new ResultData(datamap); + } + + /** + * 会员性别比例 TODO + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberSexRate(String tenantId, String startdate, String enddate) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long all = wxCUserBasicInfoMapper.findCount(dto); + List vos = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + for (EnumAgeInfo a : EnumAgeInfo.values()) { + c.clear(); + c.setTime(new Date()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + long count = getCountByAge(a, c, dto); + vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); + } + return new ResultData(datamap); + } + + /** + * 会员绑定车牌率 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberBindCar(String tenantId, String startdate, String enddate) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long total = wxCUserBasicInfoMapper.findCount(dto); + long userCountWithCar = wxCUserCarMapper.countUser(dto); + Map userWithCar = new HashMap(); + userWithCar.put("title", "已绑定车牌"); + userWithCar.put("count", userCountWithCar); + long userCountWithoutCar = total - userCountWithCar; + Map userWithoutCar = new HashMap(); + userWithoutCar.put("title", "未绑定车牌"); + userWithoutCar.put("count", userCountWithoutCar); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + if (userCountWithoutCar + userCountWithCar > 0) { + userWithCar.put("percentage", nf.format(userCountWithCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); + userWithoutCar.put("percentage", nf.format(userCountWithoutCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); + } else { + userWithCar.put("percentage", "--"); + userWithoutCar.put("percentage", "--"); + } + List list = new ArrayList<>(); + list.add(userWithCar); + list.add(userWithoutCar); + return new ResultData(list); + } + + /** + * 会员年龄层次 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberAgeAnalysis(String tenantId, String startdate, String enddate) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long all = wxCUserBasicInfoMapper.findCount(dto); + List vos = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + for (EnumAgeInfo a : EnumAgeInfo.values()) { + c.clear(); + c.setTime(new Date()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + long count = getCountByAge(a, c, dto); + vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); + } + return new ResultData(datamap); + } + + /** + * 会员成长值 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberGrowthAnalysis(String tenantId, String startdate, String enddate) { + WxLevelConfig wxLevelConfig = new WxLevelConfig(); + wxLevelConfig.setTenantId(tenantId); + wxLevelConfig.setSortColumns(WxLevelConfig.Field.Points_ASC); + List levelList = wxLevelConfigMapper.findList(wxLevelConfig); + + for (int i = 0; i < levelList.size(); i++) { + + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + if (i + 1 < levelList.size()) { + dto.setLevelStartScore(levelList.get(i).getPoints()); + dto.setLevelEndScore(levelList.get(i + 1).getPoints()); + } else { + dto.setLevelStartScore(levelList.get(i).getPoints()); + } + + long all = wxCUserBasicInfoMapper.findCountByScore(dto); + + levelList.get(i).setCount(all); + } + WxLevelConfig other = new WxLevelConfig(); + //没有等级的会员 + other.setLevel("无"); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + other.setCount(wxCUserBasicInfoMapper.findCount(dto) + - levelList.stream().map(WxLevelConfig::getCount).reduce(Long::sum).orElse(0L)); + levelList.add(other); + return new ResultData(levelList); + } + + /** + * 会员手机品牌 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMobileBrandAnalysis(String tenantId, String startdate, String enddate) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + long total = wxCUserBasicInfoMapper.findCount(dto); + List tagList = new ArrayList<>(); + EnumTag[] tags = {EnumTag.ID_49, + EnumTag.ID_50, + EnumTag.ID_51, + EnumTag.ID_52, + EnumTag.ID_53, + EnumTag.ID_54}; + for (int i = 0; i < tags.length; i++) { + WxTags tag = new WxTags(); + tag.setName(tags[i].getMessage()); + tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); + tagList.add(tag); + total -= tag.getCount(); + } + + WxTags tag = new WxTags(); + tag.setName("暂未获取"); + tag.setCount(total); + tagList.add(tag); + return new ResultData(tagList); + } + + /** + * 会员活跃度 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemActivity(String tenantId, String startdate, String enddate) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + long total = wxCUserBasicInfoMapper.findCount(dto); + List tagList = new ArrayList<>(); + EnumTag[] tags = { + EnumTag.ID_112, + EnumTag.ID_111, + EnumTag.ID_110 + }; + for (int i = 0; i < tags.length; i++) { + WxTags tag = new WxTags(); + tag.setName(tags[i].getMessage()); + tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); + tagList.add(tag); + total -= tag.getCount(); + } + WxTags tag = new WxTags(); + tag.setName("休眠"); + tag.setCount(total); + tagList.add(tag); + return new ResultData(tagList); + } + + /** + * 卡营销数据 + * @param paramsMap + * @param startdate + * @param enddate + * @return + */ + private ResultData getSaleCardAnalysis(Map paramsMap, String startdate, String enddate) { + WxCoupon wxCoupon = new WxCoupon(); + + //默认时间本月第一天,截止到当天 + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + wxCoupon.setStartdate(getMonthFirstDay()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + wxCoupon.setEnddate(new Date()); + }else{ + Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); + wxCoupon.setEnddate(endTime); + } + + Map result = new HashedMap(); + List saleMoneyList = wxCouponService.findSaleMoneyByDate(wxCoupon); + List paymentList = wxCouponService.findPaymentByDate(wxCoupon); + Map saleMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map payMentMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCouponStatisVo coupon:saleMoneyList){ + saleMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:paymentList){ + payMentMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("saleHistory",saleMap); + result.put("paymentHistory",payMentMap); + result.put("saleCardCount",wxCouponService.findSaleCardCount(wxCoupon)); + result.put("tranCount",wxCouponService.findTranCardCount(wxCoupon)); + result.put("subsidyCount",wxCouponService.findSubsidyMoney(wxCoupon)); + return new ResultData(result); + } + + /** + * 券营销数据 + * @param paramsMap + * @param startdate + * @param enddate + * @return + */ + private ResultData getSaleCouponAnalysis(Map paramsMap, String startdate, String enddate) { + WxCoupon wxCoupon = new WxCoupon(); + Map result = new HashedMap(); + + //默认时间本月第一天,截止到当天 + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + wxCoupon.setStartdate(getMonthFirstDay()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + wxCoupon.setEnddate(new Date()); + }else{ + Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); + wxCoupon.setEnddate(endTime); + } + List orderCountList = wxCouponService.findCouponOrderCount(wxCoupon); + List paymentCountList = wxCouponService.findCouponPaymentCount(wxCoupon); + List priceCouponSaleCountList = wxCouponService.priceCouponSaleCount(wxCoupon); + List priceCouponPaymentCountList = wxCouponService.priceCouponPaymentCount(wxCoupon); + Long priceCouponCancelCount = wxCouponService.priceCouponCancelCount(wxCoupon); + + Map orderCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map paymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map priceCouponSaleCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map priceCouponPaymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCouponStatisVo coupon:orderCountList){ + orderCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:paymentCountList){ + paymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:priceCouponSaleCountList){ + priceCouponSaleCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:priceCouponPaymentCountList){ + priceCouponPaymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("orderCountList",orderCountMap); + result.put("paymentCountList",paymentCountMap); + result.put("priceCouponSaleCountList",priceCouponSaleCountMap); + result.put("priceCouponPaymentCountList",priceCouponPaymentCountMap); + result.put("sumPriceSaleMoney",wxCouponService.findSumPriceSaleMoney(wxCoupon)); + result.put("sumPricePayMent",wxCouponService.findSumPricePayMent(wxCoupon)); + result.put("sumSubsidyMoney",wxCouponService.findSumSubsidyMoney(wxCoupon)); + result.put("priceCouponCancelCount",priceCouponCancelCount); + return new ResultData(result); + } + + /** + * 砍价营销数据 + * @param paramsMap + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getSalePressAnalysis(Map paramsMap, String tenantId, String startdate, String enddate) { + WxCoupon wxCoupon = new WxCoupon(); + Map result = new HashedMap(); + + //默认时间本月第一天,截止到当天 + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + wxCoupon.setStartdate(getMonthFirstDay()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + wxCoupon.setEnddate(new Date()); + }else{ + Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); + wxCoupon.setEnddate(endTime); + } + List pressSendHistory = wxCouponService.pressSendHistory(wxCoupon); + List pressSuccHistory = wxCouponService.pressSuccHistory(wxCoupon); + List pressPaymentHistory = wxCouponService.pressPaymentHistory(wxCoupon); + + Map pressSendHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map pressSuccHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map pressPaymentHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCouponStatisVo coupon:pressSendHistory){ + pressSendHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:pressSuccHistory){ + pressSuccHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:pressPaymentHistory){ + pressPaymentHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("pressSendHistory",pressSendHistoryMap); + result.put("pressSuccHistory",pressSuccHistoryMap); + result.put("pressPaymentHistory",pressPaymentHistoryMap); + + wxCoupon.setTenantId(tenantId); + result.put("pressSuccRate",wxCouponService.pressSuccRate(wxCoupon)); + result.put("sumJoin",wxCouponService.sumJoin(wxCoupon)); + return new ResultData(result); + } + + private Date getMonthFirstDay() { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + return c.getTime(); + } + + /** + * 拼团营销数据 + * @param paramsMap + * @param tenantId + * @param startdate + * @return + */ + private ResultData getSaleGroupAnalysis(Map paramsMap, String tenantId, String startdate) { + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + //默认时间本月第一天,截止到当天 + Map result = new HashMap<>(); + Date startTime = new Date(); + Date endTime = startTime; + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + startTime = getMonthFirstDay(); + params.put("startdate", startTime); + } else { + startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + params.put("startdate", startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + params.put("enddate", endTime); + } else { + endTime = DateUtils.stringToDate(paramsMap.get("enddate") + " 23:59:59", "yyyy-MM-dd HH:mm:ss"); + params.put("enddate", paramsMap.get("enddate") + " 23:59:59"); + } + List> successlist = wxOrderGroupMapper.queryOrderGroupSuccessCountAndTime(params); + List> verifyList = wxOrderGroupMapper.queryOrderGroupVerifyCountAndTime(params); + + Map successMap = getDateMap(startTime, endTime); + Map verifyMap = getDateMap(startTime, endTime); + + long successCount = wxOrderGroupMapper.queryOrderGroupSuccessCount(params); + long groupCount = wxOrderGroupMapper.queryOrderGroupCount(params); + long peopleCount = wxOrderGroupMapper.queryOrderGroupPeopleCount(params); + long verifyCount = wxOrderGroupMapper.queryOrderGroupVerifyCount(params); + + double transferRatio = 0; + if (groupCount > 0) { + double transfer = (double) successCount / groupCount * 100; + transferRatio = new BigDecimal(transfer).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + + Map successListMap = successlist.parallelStream().collect(Collectors.toMap(x -> { + return x.get("time").toString(); + }, x -> { + return x.get("total").toString(); + })); + + Map verifyListMap = verifyList.parallelStream().collect(Collectors.toMap(x -> { + return x.get("time").toString(); + }, x -> { + return x.get("total").toString(); + })); + + successMap.putAll(successListMap); + verifyMap.putAll(verifyListMap); + + result.put("successList", successMap); + result.put("verifyList", verifyMap); + + result.put("successCount", successCount); + result.put("groupCount", groupCount); + result.put("peopleCount", peopleCount); + result.put("transferRatio", transferRatio); + result.put("verifyCount", verifyCount); + + + return new ResultData(result); + } + + /** + * 昨日解单率 + * @param tenantId + * @return + */ + private ResultData getYesterdayTradeRate(String tenantId) { + HashMap datamap = new HashMap<>(); + WxMerchant wxMerchant = new WxMerchant(); + wxMerchant.setTenantId(tenantId); + wxMerchant.setStatus(1); + List merchants = wxMerchantMapper.findList(wxMerchant); + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + String reportdate = DateUtils.getTimeBefore(1, new Date()); + wxMerchantTradeDaily.setReportDate(reportdate); + List tradelist = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); + int merchantsize = merchants.size(); + int tradesize = tradelist.size(); + if (merchantsize > 0 && tradesize > 0) { + double shsbld = ((double) tradesize / merchantsize) * 100; + double shsbl = new BigDecimal(shsbld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("shsbl", shsbl); + } else { + datamap.put("shsbl", 0); + } + int shsbjg = tradelist.stream().mapToInt(WxMerchantTradeDaily::getTradeAmt).sum(); + datamap.put("shsbjg", shsbjg); + return new ResultData(datamap); + } + + /** + * 出租率 + * @param tenantId + */ + private ResultData getRentRate(String tenantId) { + HashMap datamap = new HashMap<>(); + WxShop wxShop = new WxShop(); + wxShop.setTenantId(tenantId); + wxShop.setStatus(EnumShopStatus.RENT.getCode()); + List yczlist = wxShopMapper.findList(wxShop); + wxShop.setStatus(EnumShopStatus.NOT_RENT.getCode()); + List wczlist = wxShopMapper.findList(wxShop); + //出租与未出租 + int yczsize = yczlist.size(); + int wczsize = wczlist.size(); + int size = yczsize + wczsize; + if (size == 0) { + datamap.put("yczsl", 0); + datamap.put("wczsl", 0); + datamap.put("yczl", 0); + datamap.put("wczl", 0); + } else { + datamap.put("yczsl", yczsize); + datamap.put("wczsl", wczsize); + double yczld = ((double) yczsize / size) * 100; + double dczl = new BigDecimal(yczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + double wczld = ((double) wczsize / size) * 100; + double wczl = new BigDecimal(wczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("yczl", dczl); + datamap.put("wczl", wczl); + } + return new ResultData(datamap); + } + + /** + * 租金收缴率 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getRentMoneyRate(String tenantId, String startdate, String enddate) { + HashMap datamap = new HashMap<>(); + //租金 + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", enddate + " 23:59:59"); + Map payinfo = wxBillRentMapper.queryPayInfo(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("ysje", receivepay); + datamap.put("ssje", pay); + datamap.put("zjsjl", zjcjl); + } else { + datamap.put("ysje", 0); + datamap.put("ssje", 0); + datamap.put("zjsjl", 0); + } + } else { + datamap.put("ysje", 0); + datamap.put("ssje", 0); + datamap.put("zjsjl", 0); + } return new ResultData(datamap); } @@ -1712,29 +2176,6 @@ public class WxChartServiceImpl implements WxChartDataService { return result; } - public TreeMap getTimeTreeMap() { - TreeMap timemap = new TreeMap(); - timemap.put("06:00", 0); - timemap.put("07:00", 0); - timemap.put("08:00", 0); - timemap.put("09:00", 0); - timemap.put("10:00", 0); - timemap.put("11:00", 0); - timemap.put("12:00", 0); - timemap.put("13:00", 0); - timemap.put("14:00", 0); - timemap.put("15:00", 0); - timemap.put("16:00", 0); - timemap.put("17:00", 0); - timemap.put("18:00", 0); - timemap.put("19:00", 0); - timemap.put("20:00", 0); - timemap.put("21:00", 0); - timemap.put("22:00", 0); - timemap.put("23:00", 0); - return timemap; - } - private long getCountByAge(EnumAgeInfo a, Calendar c, WxCUserBasicInfoDto dto) { if (a.getStart() != 0 || a.getEnd() != 0) { c.add(Calendar.YEAR, -a.getEnd()); @@ -1786,4 +2227,254 @@ public class WxChartServiceImpl implements WxChartDataService { return map; } + /** + * 首页商铺出租数据 + * @param tenantId + * @return + */ + private ResultData getIndexShopRentData(String tenantId, String startDateStr) { + HashMap datamap = new HashMap<>(); + Date startDate = DateUtils.getDateFromString(startDateStr,"yyyy-MM-dd HH:mm:ss").getTime(); + Date endDate = DateUtils.getLastDayForMonth(startDate); + WxShop query = new WxShop(); + query.setTenantId(tenantId); + query.setStartdate(startDate); + query.setEnddate(endDate); + + query.setType(null); + Long total = wxShopMapper.getCountByWxShop(query); + query.setType(EnumRentShopType.SHOP.getCode()); + Long totalShop = wxShopMapper.getCountByWxShop(query); + query.setType(EnumRentShopType.POINT.getCode()); + Long totalPoint = wxShopMapper.getCountByWxShop(query); + + query.setType(null); + query.setStatus(EnumShopStatus.RENT.getCode()); + Long rentTotal = wxShopMapper.getCountByWxShop(query); + query.setType(EnumRentShopType.SHOP.getCode()); + Long rentTotalShop = wxShopMapper.getCountByWxShop(query); + query.setType(EnumRentShopType.POINT.getCode()); + Long rentTotalPoint = wxShopMapper.getCountByWxShop(query); + + query.setType(null); + query.setStatus(EnumShopStatus.NOT_RENT.getCode()); + Long notRentTotal = wxShopMapper.getCountByWxShop(query); + query.setType(EnumRentShopType.SHOP.getCode()); + Long notRentTotalShop = wxShopMapper.getCountByWxShop(query); + query.setType(EnumRentShopType.POINT.getCode()); + Long notRentTotalPoint = wxShopMapper.getCountByWxShop(query); + + datamap.put("total",total); + datamap.put("totalShop",totalShop); + datamap.put("totalPoint",totalPoint); + datamap.put("rentTotal",rentTotal); + datamap.put("rentTotalShop",rentTotalShop); + datamap.put("rentTotalPoint",rentTotalPoint); + datamap.put("notRentTotal",notRentTotal); + datamap.put("notRentTotalShop",notRentTotalShop); + datamap.put("notRentTotalPoint",notRentTotalPoint); + return new ResultData(datamap); + } + + /** + * 费用收缴数据 + * @param tenantId + * @return + */ + private ResultData getBillReceRate(String tenantId, String startDateStr) { + HashMap datamap = new HashMap<>(); + Date startDate = DateUtils.getDateFromString(startDateStr,"yyyy-MM-dd HH:mm:ss").getTime(); + Date endDate = DateUtils.getLastDayForMonth(startDate); + + //租金收缴率 + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startdate", startDateStr + " 00:00:00"); + params.put("enddate", DateUtils.date2String(endDate,"yyyy-MM-dd") + " 23:59:59"); + Map payinfo = wxBillRentMapper.queryPayInfo(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("rentysje", receivepay); + datamap.put("rentssje", pay); + datamap.put("rentzjsjl", zjcjl); + } else { + datamap.put("rentysje", 0); + datamap.put("rentssje", 0); + datamap.put("rentzjsjl", 0); + } + } else { + datamap.put("rentysje", 0); + datamap.put("rentssje", 0); + datamap.put("rentzjsjl", 0); + } + + //物业费收缴率 + payinfo = wxBillPropertyMapper.queryPayInfo(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("propertyysje", receivepay); + datamap.put("propertyssje", pay); + datamap.put("propertyzjsjl", zjcjl); + } else { + datamap.put("propertyysje", 0); + datamap.put("propertyssje", 0); + datamap.put("propertyzjsjl", 0); + } + } else { + datamap.put("propertyysje", 0); + datamap.put("propertyssje", 0); + datamap.put("propertyzjsjl", 0); + } + + //押金收缴率 + payinfo = wxBillDepositMapper.queryPayInfoAll(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("depositysje", receivepay); + datamap.put("depositssje", pay); + datamap.put("propertyzjsjl", zjcjl); + } else { + datamap.put("depositysje", 0); + datamap.put("depositssje", 0); + datamap.put("depositzjsjl", 0); + } + } else { + datamap.put("depositysje", 0); + datamap.put("depositssje", 0); + datamap.put("depositzjsjl", 0); + } + + //其他费用收缴率 + payinfo = wxBillOtherMapper.queryPayInfo(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("otherysje", receivepay); + datamap.put("otherssje", pay); + datamap.put("otherzjsjl", zjcjl); + } else { + datamap.put("otherysje", 0); + datamap.put("otherssje", 0); + datamap.put("otherzjsjl", 0); + } + } else { + datamap.put("otherysje", 0); + datamap.put("otheryssje", 0); + datamap.put("otherzjsjl", 0); + } + + //欠缴数据 + BigDecimal totalOwe = new BigDecimal(0); + payinfo = wxBillRentMapper.queryOweInfo(params); + if (payinfo != null) { + BigDecimal owe = (BigDecimal) payinfo.get("owe"); + totalOwe.add(owe); + datamap.put("rentOwe", owe); + } else { + datamap.put("rentOwe", 0); + } + + payinfo = wxBillPropertyMapper.queryOweInfo(params); + if (payinfo != null) { + BigDecimal owe = (BigDecimal) payinfo.get("owe"); + totalOwe.add(owe); + datamap.put("propertyOwe", owe); + } else { + datamap.put("propertyOwe", 0); + } + + payinfo = wxBillOtherMapper.queryOweInfo(params); + if (payinfo != null) { + BigDecimal owe = (BigDecimal) payinfo.get("owe"); + totalOwe.add(owe); + datamap.put("otherOwe", owe); + } else { + datamap.put("otherOwe", 0); + } + + payinfo = wxBillDepositMapper.queryOweInfoAll(params); + if (payinfo != null) { + BigDecimal owe = (BigDecimal) payinfo.get("owe"); + totalOwe.add(owe); + datamap.put("depositOwe", owe); + } else { + datamap.put("depositOwe", 0); + } + datamap.put("totalOwe", totalOwe); + + return new ResultData(datamap); + } + + /** + * 营销数据 + * @param tenantId + * @return + */ + private ResultData getSaleDataHistory(String tenantId, String startdate,String enddate) { + Date startDate = DateUtils.getDateFromString(startdate,"yyyy-MM-dd HH:mm:ss").getTime(); + Date endDate = DateUtils.getDateFromString(enddate,"yyyy-MM-dd HH:mm:ss").getTime(); + + HashMap datamap = new HashMap<>(); + List days = DateUtils.getTjTimeList(new SimpleDateFormat("yyyy-MM-dd").format(startDate),new SimpleDateFormat("yyyy-MM-dd").format(endDate),"0"); + TreeMap historyMap; + Map countMap; + WxCoupon couponQuery = new WxCoupon(); + couponQuery.setTenantId(tenantId); + couponQuery.setStartdate(startDate); + couponQuery.setEnddate(endDate); + + //卡数据 + List couponStatisVoList = wxCouponService.findSaleCardCountHistory(couponQuery); + countMap = couponStatisVoList.stream().collect(Collectors.toMap(WxCouponStatisVo::getXtime, p -> Integer.parseInt(p.getXcount()))); + historyMap = new TreeMap<>(); + for (String date:days) { + historyMap.put(date.substring(5,date.length()).replace("-","/"),"0"); + } + for (String key : countMap.keySet()) { + String keySub = key.substring(5,key.length()).replace("-","/"); + historyMap.put(keySub,countMap.get(key)); + } + datamap.put("cardHistory",historyMap); + + //砍价数据 + List wxCouponStatisVoList = wxCouponService.pressSendHistory(couponQuery); + Map countHistoryMap = getDateMap(startDate,endDate); + for (WxCouponStatisVo coupon:wxCouponStatisVoList){ + countHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + datamap.put("pressSendHistory",countHistoryMap); + + //拼团 + wxCouponStatisVoList = wxOrderGroupMapper.queryOrderGroupCountHistory(couponQuery); + countHistoryMap = getDateMap(startDate,endDate); + for (WxCouponStatisVo coupon:wxCouponStatisVoList){ + countHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + datamap.put("groupHistory",countHistoryMap); + + //卷数据 + wxCouponStatisVoList = wxCouponService.findCouponOrderCount(couponQuery); + countHistoryMap = getDateMap(startDate,endDate); + for (WxCouponStatisVo coupon:wxCouponStatisVoList){ + countHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + datamap.put("couponHistory",countHistoryMap); + + return new ResultData(datamap); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java index 0d3727a7e..61175c6f5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java @@ -67,7 +67,6 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { record.setId(idWorker.nextId()); wxCouponChannelMapper.insertSelective(record); } else { - if (record.getCouponId() != null && record.getStatus() != null) { WxCouponChannel orignal = getById(record.getId()); if (orignal.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) @@ -100,6 +99,7 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { wxOrderService.updateOrderGroupStatusByCouponChannelId(record.getId(), record.getTenantId(), EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); } } + record.setUpdateDate(new Date()); wxCouponChannelMapper.updateByPrimaryKeySelective(record); } return new ResultData(); @@ -214,6 +214,7 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { wxCouponChannel.setTargetAd(channelId); wxCouponChannel.setTenantId(tanantId); wxCouponChannel.setBusiness(wxCoupon.getBusiness()); + wxCouponChannel.setSubBusiness(wxCoupon.getSubBusiness()); wxCouponChannel.setTitle(wxCoupon.getTitle()); saveOrUpdate(wxCouponChannel); return null; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponInjectServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponInjectServiceImpl.java index bf3b6d8a7..8be4626d7 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponInjectServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponInjectServiceImpl.java @@ -6,19 +6,22 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.ResultData; +import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; +import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsg; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCouponInjectMapper; import com.iformall.service.*; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Service public class WxCouponInjectServiceImpl implements WxCouponInjectService { @@ -26,16 +29,25 @@ public class WxCouponInjectServiceImpl implements WxCouponInjectService { @Autowired WxCouponInjectMapper couponInjectMapper; + @Autowired WxCouponOrderService wxCouponOrderService; + @Autowired WxCouponService wxCouponService; + @Autowired - WxCUserTagsService wxCUserTagsService; + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + WxCUserService wxCUserService; + @Autowired WxCouponActionLogService wxCouponActionLogService; + @Autowired WxMsgService wxMsgService; + @Autowired WxMsgModelService wxMsgModelService; @@ -99,23 +111,41 @@ public class WxCouponInjectServiceImpl implements WxCouponInjectService { return new ResultData(ErrorCode.COUPON_TYPE_IS_NOT_PASSIVE); } - //解析前台tags,并转换json - String[] arys = record.getTags().split(","); - List tagids = new ArrayList<>(); - for (int i = 0; i < arys.length; i++) { - tagids.add(Long.parseLong(arys[i])); + //1、手机多条以逗号分隔,直接通过实体得到wxmsg.getphones + //2、通过标签 + String phones = record.getPhones(); + List filter = record.getFilterList(); + if (!phones.isEmpty() && !filter.isEmpty()) {//两种方式只能选其一 + return new ResultData(ErrorCode.MSG_SEND_WAY_CHOOSE_ERROR); + } + if (phones.isEmpty() && filter.isEmpty()) {//两种方式必须选其一 + return new ResultData(ErrorCode.MSG_SEND_WAY_CHOOSE_ERROR); + } + + if (!phones.isEmpty()) {//有手工输入手机号时解析 + String[] phoneSplit = phones.split(","); + Set phoneSet = new HashSet<>(Arrays.asList(phoneSplit)); + WxCUserBasicInfoFilterDto tag = new WxCUserBasicInfoFilterDto(); + tag.setTypeId(EnumTagType.ID_0.getCode()); + tag.setParam(StringUtils.join(phoneSet,",")); + WxCUserBasicInfoFilterListDto filterListDto = new WxCUserBasicInfoFilterListDto(); + filterListDto.setName(tag.getParam()); + filterListDto.setTagList(new ArrayList(){{add(tag);}}); + record.setFilterList(new ArrayList(){{add(filterListDto);}}); } + record.setTags(JSON.toJSONString(record.getFilterList())); + List userList = + wxCUserBasicInfoService.listByFilterList(record.getTenantId(),record.getFilterList()); - List cUsers = wxCUserTagsService.findCUserByTag(record.getTenantId(), tagids); - if(cUsers.isEmpty()){ + if(userList.isEmpty()){ return new ResultData(ErrorCode.TAGS_MATCHED_NULL); } + int inventory = wxCoupon.getRemainInventory();//库存数量 - if(cUsers.size()>inventory){ + if(userList.size()>inventory){ return new ResultData(ErrorCode.COUPON_IS_SELL_OUT); } - record.setTags(JSON.toJSONString(arys)); //生成雪花id final IdWorker idWorker = IdWorker.get(); @@ -128,11 +158,11 @@ public class WxCouponInjectServiceImpl implements WxCouponInjectService { } record.setCouponName(wxCoupon.getTitle()); - record.setSendAmount(cUsers.size()); + record.setSendAmount(userList.size()); couponInjectMapper.insertSelective(record); if(record.getSendType().equals(EnumCouponInjectSendType.IMMEDIATE.getCode())) { - List sentUsers = sendCoupon(wxCoupon, cUsers, record); + List sentUsers = sendCoupon(wxCoupon, userList, record); if (sentUsers.size() > 0) { record.setStatus(EnumCouponInjectStatus.HAS_SENT.getCode()); //发送短信 @@ -186,7 +216,6 @@ public class WxCouponInjectServiceImpl implements WxCouponInjectService { } } wxmsg.setPhones(sb.deleteCharAt(sb.length()-1).toString()); - wxmsg.setLabel(""); if(wxmsg.getPhones().equals("")){ return new ResultData(ErrorCode.MSG_NO_VALID_PHONE); } @@ -208,14 +237,17 @@ public class WxCouponInjectServiceImpl implements WxCouponInjectService { return new ResultData(); } - private List sendCoupon(WxCoupon wxCoupon,List cUsers,WxCouponInject record){ + private List sendCoupon(WxCoupon wxCoupon,List cUsers,WxCouponInject record){ //查询标签用户 List sentUsers = new ArrayList(); - for (WxCUser tempCUser : cUsers) { - boolean bResult = sendCouponToUser(tempCUser,wxCoupon,record.getId()); - if (bResult) { - sentUsers.add(tempCUser); + for (WxCUserBasicInfo tempCUserBasicInfo : cUsers) { + WxCUser tempCUser = wxCUserService.getById(tempCUserBasicInfo.getId()); + if (tempCUser != null) { + boolean bResult = sendCouponToUser(tempCUser, wxCoupon, record.getId()); + if (bResult) { + sentUsers.add(tempCUser); + } } } return sentUsers; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 64b09e76b..4f0dad893 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -1,11 +1,7 @@ package com.iformall.service.impl; -import cn.afterturn.easypoi.excel.ExcelExportUtil; -import cn.afterturn.easypoi.excel.entity.ExportParams; -import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; -import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; -import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; @@ -15,17 +11,18 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.AppUniformMsg; +import com.iformall.domain.po.msg.MpAppMsg; +import com.iformall.domain.po.msg.SmartAppMsg; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; -import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; -import com.iformall.utils.MaUtil; -import me.chanjar.weixin.common.error.WxErrorException; -import org.apache.poi.ss.usermodel.Workbook; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -35,7 +32,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -104,6 +101,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Autowired MqBaseProducer mqBaseProducer; + @Autowired + WxAuthorizerInfoMapper authorizerInfoMapper; + + @Autowired + ExcelService excelService; + @Override public PageInfo listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findList(record)); @@ -263,62 +266,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override public void exportData(HttpServletRequest request, HttpServletResponse response, WxCouponOrderBVo wxCouponOrder) { - - List list = wxCouponOrderMapper.findListOfAdmin(wxCouponOrder); WxMall wxMall = new WxMall(); wxMall.setTenantId(wxCouponOrder.getTenantId()); wxMall = wxMallMapper.findList(wxMall).get(0); - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - - Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("", "", ExcelType.XSSF), WxCouponOrderBVo.class, list); - FileOutputStream fos = null; - try { - String filename = wxMall.getName() + DateUtils.getSystemTime("yyyyMMDDHHmmss") + ".xlsx"; - filepath = filepath + filename; - fos = new FileOutputStream(filepath); - workbook.write(fos); - fos.close(); - downFile(filepath, filename, response, request); - } catch (Exception e) { - e.printStackTrace(); - } - - - } - - - public void downFile(String filePath, String filename, HttpServletResponse response, - HttpServletRequest req) throws IOException { - try { - response.reset(); - response.setContentType("bin"); - String agent = req.getHeader("user-agent"); - if (agent.contains("Firefox")) { - response.setHeader("Content-disposition", - "attachment; filename=" - + new String(filename.getBytes("GB2312"), - "ISO-8859-1")); - } else { - response - .setHeader("Content-disposition", - "attachment; filename=" - + java.net.URLEncoder.encode(filename, - "UTF-8")); - } - // 循环取出流中的数据 - byte[] b = new byte[1024]; - int len; - InputStream inStream = new FileInputStream(filePath); - while ((len = inStream.read(b)) > 0) - response.getOutputStream().write(b, 0, len); - inStream.close(); - } catch (Exception e) { - e.printStackTrace(); - } + String filename = wxMall.getName() + DateUtils.getSystemTime("yyyyMMDDHHmmss"); + List list = wxCouponOrderMapper.findListOfAdmin(wxCouponOrder); + excelService.exportExcel(list, null, filename, WxCouponOrderBVo.class, filename + ".xls", response); } @Override @@ -445,13 +398,20 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder.getTenantId()); WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(wxAppinfo.getPayId()); - - // 本张券的补贴额 - Integer subsidyFee = coupon.getSubsidyNum(); - if (subsidyFee > 0) { + Integer subsidyNum = coupon.getSubsidyNum(); + if (subsidyNum == null || subsidyNum.intValue() == 0) { + String parameter = couponMerchant.getParameter(); + try { + JSONObject jParameter = JSONObject.parseObject(parameter); + subsidyNum = new BigDecimal(jParameter.getString("subsidyNumStr")).multiply(new BigDecimal(100)).intValue(); + } catch (Exception e) { + subsidyNum = null; + } + } + if (subsidyNum != null && subsidyNum.intValue() > 0) { // 有补贴时入库 - Double dSubChargeFee = Math.ceil(subsidyFee * 1.0D * payAccount.getRate() / 10000); - Integer realSubsidyFee = subsidyFee - dSubChargeFee.intValue(); + Double dSubChargeFee = Math.ceil(subsidyNum * 1.0D * payAccount.getRate() / 10000); + Integer realSubsidyFee = subsidyNum - dSubChargeFee.intValue(); Double priceChargeFee = Math.ceil(coupon.getSalePrice() * 1.0D * payAccount.getRate() / 10000); Integer realPayment = coupon.getSalePrice() - priceChargeFee.intValue(); @@ -463,11 +423,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { merchantSubsidy.setOrderType(EnumOrderType.COUPON.getCode()); merchantSubsidy.setMerchantId(merchantId); merchantSubsidy.setCouponOrderId(couponOrder.getId()); - merchantSubsidy.setCouponType(EnumCouponType.COUPON_MULTIMCH.getCode()); + merchantSubsidy.setCouponType(couponOrder.getCouponType()); merchantSubsidy.setOrderPayment(coupon.getPrice()); merchantSubsidy.setReceiverPayment(coupon.getSalePrice()); merchantSubsidy.setRealPayment(realPayment); - merchantSubsidy.setSubsidy(subsidyFee); + merchantSubsidy.setSubsidy(subsidyNum); merchantSubsidy.setRealSubsidy(realSubsidyFee); merchantSubsidy.setStatus(EnumMerchantSubsidyStatus.NOT_SUBSIDY.getCode()); merchantSubsidy.setCreateDate(new Date()); @@ -522,16 +482,16 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("找不到订单信息"); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); } + String formId = null; + if(StringUtils.isNotBlank(order.getFormId())) { + formId = order.getFormId(); + } // 2. get coupon info WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(couponOrder.getCouponId()); if (coupon == null) { logger.error("找不到券信息"); throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); } - if(coupon.getSalePrice().equals(0)) { - logger.info("免费券不发模板消息!"); - return; - } // 3. merchant info WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(bUser.getMerchantId()); if (merchant == null) { @@ -549,25 +509,31 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { // WxAppinfo appInfo = wxAppinfoService.getByAppId(user.getAppId()); // 6. get payOrder info - WxPayOrder payOrder = null; - WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.setTenantId(couponOrder.getTenantId()); - payOrderQ.setOrderId(order.getId()); - payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); - List payList = wxPayOrderMapper.select(payOrderQ); - if (payList.size() > 0) { - payOrder = payList.get(0); - } - if (payOrder == null) { - logger.error("找不到payOrder信息"); - throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); - } - if (payOrder.getPrepayId() == null) { - logger.error("payOrder信息中,prepay_id为空"); - throw new MallinkException(ErrorCode.PREPAY_ID_IS_EMPTY); + if(StringUtils.isBlank(order.getFormId())) { + WxPayOrder payOrder = null; + WxPayOrder payOrderQ = new WxPayOrder(); + payOrderQ.setTenantId(couponOrder.getTenantId()); + payOrderQ.setOrderId(order.getId()); + payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + List payList = wxPayOrderMapper.select(payOrderQ); + if (payList.size() > 0) { + payOrder = payList.get(0); + } + if (payOrder == null) { + logger.error("找不到payOrder信息"); + throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); + } + if (payOrder.getPrepayId() == null) { + logger.error("payOrder信息中,prepay_id为空"); + throw new MallinkException(ErrorCode.PREPAY_ID_IS_EMPTY); + } + formId = payOrder.getPrepayId(); } -// WxMaService wxMaService = MaUtil.getWeappService(appInfo); + if(StringUtils.isBlank(formId)) { + logger.error("formId为空"); + throw new MallinkException(ErrorCode.TEMPLATE_FORMID_NOT_FOUND); + } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String couponDetail = ""; @@ -575,15 +541,100 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { couponDetail = "满" + coupon.getUsePriceStr() + "减" + coupon.getPriceStr(); } - SmartAppMsg smartAppMsg; + boolean bUsed = false; + String gotopage = "pages/index/index"; + String notes = ""; if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { - String gotopage = "pages/index/index"; - String notes = ""; if (hadSentCoupon) { gotopage = "pages/couponorder/index/index"; notes = "您有新的券"; } - //mq发送小程序消息 + bUsed = true; + } + + // 7. 公众号消息 + if(StringUtils.isNotBlank(user.getMpAppId()) && + StringUtils.isNotBlank(user.getMpOpenId()) && + user.getMpSubscribe().equals(EnumUserIsSubscribe.YES.getCode())) { + // 已关注公众号 + /** + * 卡券核销通知 + * {{first.DATA}} + * 卡券类型:{{keyword1.DATA}} + * 卡券号码:{{keyword2.DATA}} + * 核销时间:{{keyword3.DATA}} + * {{remark.DATA}} + */ + MpAppMsg mpAppMsg = new MpAppMsg(); + mpAppMsg.setMsgType(EnumMsgRecordType.PUBLIC.getCode()); + mpAppMsg.setAppId(user.getMpAppId()); + mpAppMsg.setTo(user.getMpOpenId()); + mpAppMsg.setMiniAppId(user.getAppId()); + mpAppMsg.setMiniPagePath(gotopage); + mpAppMsg.setTenantId(couponOrder.getTenantId()); + mpAppMsg.setTemplateType(EnumTemplateType.VERIFY_RESULT.getCode()); + mpAppMsg.setTemplateDataList(Lists.newArrayList( + new WxMpTemplateData("first", "商家"+merchant.getName()+"的券被核销", "#173177"), + new WxMpTemplateData("keyword1", EnumCouponType.getEnum(coupon.getType()).getMessage(), "#173177"), + new WxMpTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), + new WxMpTemplateData("keyword3", dateFormat.format(new Date()), "#173177"), + new WxMpTemplateData("remark", "更多优惠等您来!", "#173177") + )); + + try { + mqBaseProducer.sendMessage(mpAppMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + } catch (Exception e) { + logger.error("核销-公众号-模板消息发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.MP_TEMPLATE_SEND_FAILED); + } + return; + } else { + // 可能未关注公众号, 用户可能收不到 + // 8. 微信小程序-统一消息 + // 获取小程序关联的服务号 + WxAuthorizerInfo authQ = new WxAuthorizerInfo(); + authQ.setAuthorizerAppid(user.getAppId()); + authQ.setTenantId(user.getTenantId()); + WxAuthorizerInfo weappInfo = authorizerInfoMapper.findMp(authQ); + if(weappInfo != null) { + AppUniformMsg appUniformMsg = new AppUniformMsg(); + appUniformMsg.setMsgType(EnumMsgRecordType.SMART_APP_UNIFORM.getCode()); + appUniformMsg.setAppId(user.getAppId()); + appUniformMsg.setTo(user.getOpenId()); + appUniformMsg.setTemplateType(EnumTemplateType.VERIFY_RESULT.getCode()); + appUniformMsg.setPagePath(gotopage); + appUniformMsg.setUrl("http://iformall.com"); + appUniformMsg.setMpAppId(weappInfo.getAuthorizerAppid()); + appUniformMsg.setTemplateDataList(Lists.newArrayList( + new WxMaTemplateData("first", "商家"+merchant.getName()+"的券被核销", "#173177"), + new WxMaTemplateData("keyword1", EnumCouponType.getEnum(coupon.getType()).getMessage(), "#173177"), + new WxMaTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), + new WxMaTemplateData("keyword3", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateData("remark", "更多优惠等您来!", "#173177") + )); + try { + mqBaseProducer.sendMessage(appUniformMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + } catch (Exception e) { + logger.error("核销-公众号-模板消息发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.UNIFORM_SEND_FAILED); + } + } + } + + // 9. 微信小程序-模板消息 + SmartAppMsg smartAppMsg; + if (bUsed) { + //mq发送小程序消息 - 核销成功消息 + /** + * 核销成功消息 + * 核销金额 {{keyword1.DATA}} + * 商家名称 {{keyword2.DATA}} + * 商品 {{keyword3.DATA}} + * 商品描述 {{keyword4.DATA}} + * 订单金额 {{keyword5.DATA}} + * 核销时间 {{keyword6.DATA}} + * 温馨提示 {{keyword7.DATA}} + */ smartAppMsg = new SmartAppMsg(); smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); smartAppMsg.setAppId(user.getAppId()); @@ -591,7 +642,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_SUCCESS.getCode()); smartAppMsg.setGotopage(gotopage); smartAppMsg.setTo(user.getOpenId()); - smartAppMsg.setFrom(payOrder.getPrepayId()); + smartAppMsg.setFormId(formId); smartAppMsg.setTemplateDataList(Lists.newArrayList( new WxMaTemplateData("keyword1", coupon.getPriceStr() + "元", "#173177"), new WxMaTemplateData("keyword2", merchant.getName(), "#173177"), @@ -602,16 +653,23 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { new WxMaTemplateData("keyword7", notes, "#173177"))); smartAppMsg.setEmphasisKeyword("keyword1.DATA"); } else { - //mq发送小程序消息 + // mq发送小程序消息 - 核销失败消息 + /** + * 核销失败消息 + * 商品名称 {{keyword1.DATA}} + * 核销时间 {{keyword2.DATA}} + * 失败原因 {{keyword3.DATA}} + * 备注 {{keyword4.DATA}} + */ smartAppMsg = new SmartAppMsg(); smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); smartAppMsg.setAppId(user.getAppId()); smartAppMsg.setTenantId(couponOrder.getTenantId()); smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_FAIL.getCode()); - smartAppMsg.setGotopage("pages/index/index"); + smartAppMsg.setGotopage(gotopage); smartAppMsg.setTo(user.getOpenId()); smartAppMsg.setReceiver(user.getOpenId()); - smartAppMsg.setFrom(payOrder.getPrepayId()); + smartAppMsg.setFormId(formId); smartAppMsg.setTemplateDataList(Lists.newArrayList( new WxMaTemplateData("keyword1", coupon.getTitle(), "#173177"), new WxMaTemplateData("keyword2", dateFormat.format(new Date()), "#173177"), @@ -635,10 +693,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } @Override - public int queryPriceTotal(String tenantId, Date startTime, Date endTime) { - return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime); + public int queryPriceTotal(WxCouponOrder wxCouponOrder) { + return wxCouponOrderMapper.queryPriceTotal(wxCouponOrder); } + @Override public ResultData listCardVoAsPage(WxCardCVo record, Integer pageIndex, Integer pageSize) { return new ResultData(PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findCardListOfCUser(record))); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java index a3974c5f4..fd73e7917 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java @@ -5,13 +5,12 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCouponOrderMapper; -import com.iformall.mapper.WxCouponSendConfigMapper; -import com.iformall.mapper.WxCouponSendMapper; -import com.iformall.mapper.WxMerchantBUserMapper; +import com.iformall.mapper.*; +import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; import com.iformall.utils.DateUtils; import org.slf4j.Logger; @@ -22,7 +21,9 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service public class WxCouponSendServiceImpl implements WxCouponSendService { @@ -46,7 +47,12 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { WxMerchantBUserMapper wxMerchantBUserMapper; @Autowired PushLimitService pushLimitService; - + @Autowired + private MqBaseProducer mqBaseProducer; + @Autowired + WxCUserMapper wxCUserMapper; + @Autowired + WxAppinfoService wxAppinfoService; @Override public PageInfo listAsPage(WxCouponSend record, Integer pageIndex, Integer pageSize) { @@ -224,6 +230,34 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } catch (Exception e) { logger.error(e.getMessage()); } + // 发送短信 + if (send.getSendSms().equals(EnumCouponSendSms.YES.getCode())) { + logger.info("》》》》》》》》》》》"); + logger.info("场景投放发送短信开始"); + logger.info("》》》》》》》》》》》"); + //券名 + String title = send.getTitle(); + //找出用户手机号 + WxCUser user = wxCUserMapper.selectByPrimaryKey(cUserId); + String phone = user.getPhone(); + //小程序名称 + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantId); + String appName = appInfo.getName(); + Map msgReplaceMap = new HashMap(); + msgReplaceMap.put("title", title); + msgReplaceMap.put("app", appName); + + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.COUPON_SEND.getCode()); + wxMsgRecord.setReceiver(phone); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + logger.info("》》》》》》》》》》》"); + logger.info("场景投放发送短信结束"); + logger.info("》》》》》》》》》》》"); + } } return bRet; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index 24757fb7a..c49362471 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -1,22 +1,21 @@ package com.iformall.service.impl; -import java.util.*; -import java.util.stream.Collectors; - import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; import com.iformall.common.ResultData; +import com.iformall.domain.dto.WxCouponMerchantDto; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxCouponMerchant; -import com.iformall.domain.po.WxScreenAd; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponStatisVo; import com.iformall.domain.vo.WxMerchantVo; import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponMapper; import com.iformall.mapper.WxCouponMerchantMapper; @@ -27,7 +26,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.iformall.common.IdWorker; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +37,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; + @Service public class WxCouponServiceImpl implements WxCouponService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -157,9 +156,34 @@ public class WxCouponServiceImpl implements WxCouponService { return merchantParam.getString("parameter"); } private Integer parseBusiness(JSONObject merchantParam){ - return Integer.valueOf(merchantParam.getString("businessId")); + String businessIdStr = merchantParam.getString("businessId"); + return Integer.valueOf(businessIdStr); + + } + private Integer parseSubBusiness(JSONObject merchantParam){ + String subBusinessIdStr = merchantParam.getString("subBusinessId"); + if (subBusinessIdStr != null) + return Integer.valueOf(subBusinessIdStr); + return null; } + private WxCouponMerchantDto parseMerchantParam(JSONObject merchantParam){ + WxCouponMerchantDto wxCouponMerchantDto = new WxCouponMerchantDto(); + try { + wxCouponMerchantDto.setMerchantId(parseMerchantId(merchantParam)); + wxCouponMerchantDto.setParameter(parseParameter(merchantParam)); + wxCouponMerchantDto.setBusiness(parseBusiness(merchantParam)); + wxCouponMerchantDto.setSubBusiness(parseSubBusiness(merchantParam)); + }catch (Exception e) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); + } + if (wxCouponMerchantDto.getBusiness()==null || wxCouponMerchantDto.getMerchantId()==null) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); + } + return wxCouponMerchantDto; + } + + @Override @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) public ResultData saveOrUpdate(WxCoupon record) { @@ -189,57 +213,58 @@ public class WxCouponServiceImpl implements WxCouponService { } final IdWorker idWorker = IdWorker.get(); - + List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); if (record.getId() == null) { // check 卡券补贴设置 - if(record.getType().equals(EnumCouponType.COUPON_MULTIMCH.getCode()) || - record.getType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { - Integer subsidyType = record.getSubsidyType(); - Integer subsidyNum = record.getSubsidyNum(); - if(subsidyType == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请填写补贴类型"); - } - if(subsidyNum == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请填写补贴金额"); - } - if(subsidyType.equals(EnumCouponSubsidyType.WECHAT_COUPON.getCode())) { + Integer subsidyType = record.getSubsidyType(); + Integer subsidyNum = record.getSubsidyNum(); + if(subsidyType != null && subsidyNum != null) { + if (subsidyType.equals(EnumCouponSubsidyType.WECHAT_COUPON.getCode())) { // 微信 立减 - if(subsidyNum > record.getSalePrice()) { + if (subsidyNum > record.getSalePrice()) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); } - } else if(subsidyType.equals(EnumCouponSubsidyType.OFFLINE_SUBSIDY.getCode())) { + } else if (subsidyType.equals(EnumCouponSubsidyType.OFFLINE_SUBSIDY.getCode())) { // 线下补贴 int subsidy_num = record.getPrice() - record.getSalePrice(); - if(subsidyNum > subsidy_num) { + if (subsidyNum > subsidy_num) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); } - } else if(subsidyType.equals(EnumCouponSubsidyType.WECHAT_MCHPAY.getCode())) { + } else if (subsidyType.equals(EnumCouponSubsidyType.WECHAT_MCHPAY.getCode())) { // TODO 微信转账到银行卡 } + } else if ((subsidyType == null && subsidyNum != null) + || (subsidyType != null && subsidyNum == null)){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } record.setId(idWorker.nextId()); - if (record.getMerchantParams() != null) { - List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); - List businessList= new ArrayList<>(); + + if (merchantParamList != null && merchantParamList.size() > 0) { + List wxCouponMerchantDtoList = new ArrayList<>(); merchantParamList.forEach(merchantParam -> { WxCouponMerchant cm = new WxCouponMerchant(); + WxCouponMerchantDto wxCouponMerchantDto = parseMerchantParam(merchantParam); cm.setId(idWorker.nextId()); - cm.setMerchantId(parseMerchantId(merchantParam)); - cm.setParameter(parseParameter(merchantParam)); + cm.setMerchantId(wxCouponMerchantDto.getMerchantId()); + cm.setParameter(wxCouponMerchantDto.getParameter()); cm.setProductId(record.getId()); cm.setCreateDate(new Date()); cm.setUpdateDate(new Date()); cm.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - businessList.add(parseBusiness(merchantParam)); + wxCouponMerchantDtoList.add(wxCouponMerchantDto); wxCouponMerchantMapper.insertSelective(cm); }); - if (businessList.stream().distinct().count() > 1) { + if (wxCouponMerchantDtoList.stream() + .mapToInt(WxCouponMerchantDto::getBusiness).distinct().count() > 1) { record.setBusiness(EnumBusiness.BUSINESS_ID6.getCode()); + } else if (wxCouponMerchantDtoList.size() > 1){ + record.setBusiness(wxCouponMerchantDtoList.get(0).getBusiness()); } else { - record.setBusiness(businessList.get(0)); + record.setBusiness(wxCouponMerchantDtoList.get(0).getBusiness()); + record.setSubBusiness(wxCouponMerchantDtoList.get(0).getSubBusiness()); } } else{ @@ -251,36 +276,34 @@ public class WxCouponServiceImpl implements WxCouponService { wxCouponMapper.insertSelective(record); } else { - if (record.getMerchantParams() != null) { - List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); - + if (merchantParamList != null && merchantParamList.size() > 0) { WxCouponMerchant cmParam = new WxCouponMerchant(); cmParam.setProductId(record.getId()); List oldList = wxCouponMerchantMapper.findList(cmParam); - List businessList= new ArrayList<>(); + List wxCouponMerchantDtoList = new ArrayList<>(); merchantParamList.stream().forEach(merchantParam -> { WxCouponMerchant cm = new WxCouponMerchant(); - cm.setMerchantId(parseMerchantId(merchantParam)); + WxCouponMerchantDto wxCouponMerchantDto = parseMerchantParam(merchantParam); + cm.setMerchantId(wxCouponMerchantDto.getMerchantId()); cm.setProductId(record.getId()); WxCouponMerchant rcm = wxCouponMerchantMapper.selectOne(cm); if (rcm != null) { - rcm.setMerchantId(Long.valueOf(parseMerchantId(merchantParam))); - rcm.setParameter(parseParameter(merchantParam)); + rcm.setParameter(wxCouponMerchantDto.getParameter()); rcm.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); rcm.setUpdateDate(new Date()); wxCouponMerchantMapper.updateByPrimaryKeySelective(rcm); }else { cm.setId(idWorker.nextId()); cm.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - cm.setParameter(parseParameter(merchantParam)); + cm.setParameter(wxCouponMerchantDto.getParameter()); cm.setCreateDate(new Date()); cm.setUpdateDate(new Date()); wxCouponMerchantMapper.insertSelective(cm); } - businessList.add(Integer.valueOf(parseBusiness(merchantParam))); + wxCouponMerchantDtoList.add(wxCouponMerchantDto); oldList.removeIf( old->old.getProductId().equals(record.getId()) && - old.getMerchantId().equals(Long.valueOf(parseMerchantId(merchantParam)))); + old.getMerchantId().equals(wxCouponMerchantDto.getMerchantId())); }); oldList.stream().forEach(old->{ @@ -289,10 +312,14 @@ public class WxCouponServiceImpl implements WxCouponService { wxCouponMerchantMapper.updateByPrimaryKeySelective(old); }); - if (businessList.stream().distinct().count() > 1) { + if (wxCouponMerchantDtoList.stream() + .mapToInt(WxCouponMerchantDto::getBusiness).distinct().count() > 1) { record.setBusiness(EnumBusiness.BUSINESS_ID6.getCode()); + } else if (wxCouponMerchantDtoList.size() > 1){ + record.setBusiness(wxCouponMerchantDtoList.get(0).getBusiness()); } else { - record.setBusiness(businessList.get(0)); + record.setBusiness(wxCouponMerchantDtoList.get(0).getBusiness()); + record.setSubBusiness(wxCouponMerchantDtoList.get(0).getSubBusiness()); } } @@ -302,6 +329,7 @@ public class WxCouponServiceImpl implements WxCouponService { //下架所有投放频道 wxCouponChannelService .updateStatusByCouponId(record.getId(), record.getTenantId(), EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()); + //下架所有场景投放 wxCouponSendService .updateStatusByCouponId(record.getId(), record.getTenantId(), EnumCouponSendStatus.INVALID.getCode()); //下架所有已砍价券 @@ -310,6 +338,7 @@ public class WxCouponServiceImpl implements WxCouponService { wxScreenAdService.updateStatusByCouponId(record.getId(), record.getTenantId(), EnumScreenAdStatus.INVALID.getCode()); //下架拼团券 wxOrderService.updateOrderGroupStatusByCouponId(record.getId(), record.getTenantId(), EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); + } record.setUpdateDate(new Date()); wxCouponMapper.updateByPrimaryKeySelective(record); @@ -429,4 +458,15 @@ public class WxCouponServiceImpl implements WxCouponService { Long count = wxCouponMapper.sumJoin(wxCoupon); return (count==null)?0l:count; } + + @Override + public Long priceCouponCancelCount(WxCoupon wxCoupon) { + Long count = wxCouponMapper.priceCouponCancelCount(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public List findSaleCardCountHistory(WxCoupon wxCoupon) { + return wxCouponMapper.findSaleCardCountHistory(wxCoupon); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java new file mode 100644 index 000000000..8f21e031b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java @@ -0,0 +1,396 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCreditHistoryVo; +import com.iformall.enums.EnumBusiness; +import com.iformall.enums.EnumScoreRules; +import com.iformall.enums.EnumScoreType; +import com.iformall.enums.EnumUserType; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.*; +import com.iformall.service.WxCreditHistoryService; +import com.iformall.service.WxScoreRulesService; +import com.iformall.utils.RedisLock; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { + + @Autowired + WxCreditHistoryMapper wxCreditHistoryMapper; + + @Autowired + WxCUserMapper wxCUserMapper; + + @Autowired + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + + @Autowired + WxMerchantBUserMapper wxMerchantBUserMapper; + + @Autowired + MallUserInfoMapper mallUserInfoMapper; + + @Autowired + WxScoreRulesService wxScoreRulesService; + + @Autowired + WxMerchantMapper wxMerchantMapper; + + @Autowired + WxCouponMapper wxCouponMapper; + + @Autowired + RedisLock redisLock; + + @Override + public void clearCreditByYear() { + WxScoreRules wxScoreRules = new WxScoreRules(); + wxScoreRules.setType(EnumScoreRules.CREDIT.getCode()); + List wxScoreRulesList = wxScoreRulesService.findList(wxScoreRules); + List tenantIds = wxScoreRulesList.stream().map(WxScoreRules::getTenantId).distinct().collect(Collectors.toList()); + + } + + @Override + public PageInfo listAsPage(WxCreditHistory record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCreditHistoryMapper.findList(record)); + } + + @Override + public PageInfo listAsPageMore(WxCreditHistory record, Integer pageIndex, Integer pageSize) { + PageHelper.startPage(pageIndex, pageSize); + List wxCreditHistoryVoList = wxCreditHistoryMapper.findListMore(record); + if (wxCreditHistoryVoList == null || wxCreditHistoryVoList.size() == 0) { + return new PageInfo<>(wxCreditHistoryVoList); + } + List cUserIds = wxCreditHistoryVoList.stream().filter(a -> a.getOperatorType().equals(EnumUserType.CUSER.getCode())).map(WxCreditHistoryVo::getOperatorId).collect(Collectors.toList()); + List cUserBasicIds = wxCreditHistoryVoList.stream().filter(a -> a.getOperatorType().equals(EnumUserType.CUSERBASIC.getCode())).map(WxCreditHistoryVo::getOperatorId).collect(Collectors.toList()); + List bUserIds = wxCreditHistoryVoList.stream().filter(a -> a.getOperatorType().equals(EnumUserType.BUSER.getCode())).map(WxCreditHistoryVo::getOperatorId).collect(Collectors.toList()); + List mallUserIds = wxCreditHistoryVoList.stream().filter(a -> a.getOperatorType().equals(EnumUserType.MALLUSER.getCode())).map(WxCreditHistoryVo::getOperatorId).collect(Collectors.toList()); + List wxCUserList = Lists.newArrayList(); + List wxCUserBasicInfoList = Lists.newArrayList(); + List wxMerchantBUserList = Lists.newArrayList(); + List mallUserInfoList = Lists.newArrayList(); + if (cUserIds != null && cUserIds.size() > 0) { + WxCUser wxUser = new WxCUser(); + wxUser.setIds(cUserIds); + wxCUserList = wxCUserMapper.findList(wxUser); + } + if (cUserBasicIds != null && cUserBasicIds.size() > 0) { + WxCUserBasicInfo wxCUserBasicInfo = new WxCUserBasicInfo(); + wxCUserBasicInfo.setIds(cUserBasicIds); + wxCUserBasicInfoList = wxCUserBasicInfoMapper.findList(wxCUserBasicInfo); + } + if (bUserIds != null && bUserIds.size() > 0) { + WxMerchantBUser wxMerchantBUser = new WxMerchantBUser(); + wxMerchantBUser.setIds(bUserIds); + wxMerchantBUserList = wxMerchantBUserMapper.findList(wxMerchantBUser); + } + if (mallUserIds != null && mallUserIds.size() > 0) { + MallUserInfo mallUserInfo = new MallUserInfo(); + mallUserInfo.setIds(mallUserIds); + mallUserInfoList = mallUserInfoMapper.findList(mallUserInfo); + } + for (WxCreditHistoryVo credit : wxCreditHistoryVoList) { + if (wxCUserList != null && wxCUserList.size() > 0) { + wxCUserList.stream().forEach(cUser -> { + if (cUser.getId().longValue() == credit.getOperatorId().longValue()) { + credit.setOperator(cUser.getNickName()); + } + }); + } + if (wxCUserBasicInfoList != null && wxCUserBasicInfoList.size() > 0) { + wxCUserBasicInfoList.stream().forEach(cUserBasicInfo -> { + if (cUserBasicInfo.getId().longValue() == credit.getOperatorId().longValue()) { + credit.setOperator(cUserBasicInfo.getNickName()); + } + }); + } + if (wxMerchantBUserList != null && wxMerchantBUserList.size() > 0) { + wxMerchantBUserList.stream().forEach(bUser -> { + if (bUser.getId().longValue() == credit.getOperatorId().longValue()) { + credit.setOperator(bUser.getName()); + } + }); + } + if (mallUserInfoList != null && mallUserInfoList.size() > 0) { + mallUserInfoList.stream().forEach(mallUser -> { + if (mallUser.getId().longValue() == credit.getOperatorId().longValue()) { + credit.setOperator(mallUser.getName()); + } + }); + } + } + return new PageInfo<>(wxCreditHistoryVoList); + } + + @Override + public WxCreditHistory getById(Long id) { + return wxCreditHistoryMapper.selectByPrimaryKey(id); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCreditHistory saveOrUpdate(WxCreditHistory record) { + WxCUser wxCUser = wxCUserMapper.selectByPrimaryKey(record.getCUserId()); + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectByPrimaryKey(record.getCUserId()); + if (wxCUser == null && wxCUserBasicInfo == null) { + //验证此用户是否存在 + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + if (StringUtils.isNotEmpty(record.getSpendStr())) { + record.setSpend(new BigDecimal(record.getSpendStr()).multiply(new BigDecimal(100)).intValue()); + } + int currentCreditAmount = 0; + //获取当前用户总积分规则:优先获取wxCUser中数据 若不存在 再获取wxCUserBasicInfo表中数据 + if (wxCUser != null && wxCUser.getCredit() != null && wxCUser.getCredit() > 0) { + currentCreditAmount = wxCUser.getCredit(); + } else if (wxCUserBasicInfo != null && wxCUserBasicInfo.getCredit() != null && wxCUserBasicInfo.getCredit() > 0) { + currentCreditAmount = wxCUserBasicInfo.getCredit(); + } + + //计算出需要新增或减少的积分 + int creditChangeNum = creditIncrement(record); + if (creditChangeNum != 0) { + Long total = Long.valueOf(currentCreditAmount) + Long.valueOf(creditChangeNum); + if (total > Integer.MAX_VALUE) { + throw new MallinkException(ErrorCode.OUT_OF_CREDIT); + } + if (total < 0) { + throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); + } + //如果为导入的会员 则直接覆盖总积分和操作积分明细 + if (record.getCreditType() != EnumScoreType.MEM_IMPORT.getCode()) { + record.setCreditNum(creditChangeNum); + record.setCreditAmount(currentCreditAmount + creditChangeNum); + } + if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateDate(new Date()); + wxCreditHistoryMapper.insertSelective(record); + //将计算出来新的总积分 更新到两张用户表里 + if (wxCUser != null) { + WxCUser wxCUserNew = new WxCUser(); + wxCUserNew.setId(wxCUser.getId()); + wxCUserNew.setCredit(record.getCreditAmount()); + wxCUserMapper.updateByPrimaryKeySelective(wxCUserNew); + } + if (wxCUserBasicInfo != null) { + WxCUserBasicInfo wxCUserBasicInfoNew = new WxCUserBasicInfo(); + wxCUserBasicInfoNew.setId(wxCUserBasicInfo.getId()); + wxCUserBasicInfoNew.setCredit(record.getCreditAmount()); + wxCUserBasicInfoMapper.updateByPrimaryKeySelective(wxCUserBasicInfoNew); + } + } else { + //wxCreditHistoryMapper.updateByPrimaryKeySelective(record); + } + } + return record; + } + + @Override + public void deleteById(Long id) { + wxCreditHistoryMapper.deleteByPrimaryKey(id); + } + + @Override + public Map findByMerchantIdAndSpend(Long merchantId, String spendStr, String tenantId) { + WxMerchant wxMerchant = wxMerchantMapper.selectByPrimaryKey(merchantId); + Map creditMap = Maps.newHashMap(); + if (wxMerchant != null && wxMerchant.getBusinessId() != null) { + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setBusinessId(Long.valueOf(wxMerchant.getBusinessId())); + wxCreditHistory.setTenantId(tenantId); + if (StringUtils.isNotEmpty(spendStr)) { + wxCreditHistory.setSpend(new BigDecimal(spendStr).multiply(new BigDecimal(100)).intValue()); + } + int credit = payAddCredit(wxCreditHistory); + creditMap.put("credit", credit); + } + return creditMap; + } + + + //根据积分类型计算"增加积分" + private int creditIncrement(WxCreditHistory record) { + if (record.getCreditType() == EnumScoreType.LOGIN.getCode()) { + return loginAddCredit(record); + } + if (record.getCreditType() == EnumScoreType.BIND_CAR.getCode()) { + return bindCarAddCredit(record); + } + if (record.getCreditType() == EnumScoreType.WIFI_CONNECTION.getCode()) { + return wifiAddCredit(); + } + if (record.getCreditType() == EnumScoreType.WECHAT_PERSION.getCode()) { + return personAddCredit(record); + } + if (record.getCreditType() == EnumScoreType.WECHAT_PHONE.getCode()) { + return phoneAddCredit(record); + } + if (record.getCreditType() == EnumScoreType.COMPLETE_INFO.getCode()) { + return infoAddCredit(record); + } + if (record.getCreditType() == EnumScoreType.SPEND_CREDIT.getCode()) { + return spendCredit(record); + } + if (record.getCreditType() == EnumScoreType.CHANGE_CREDIT.getCode()) { + return changeCredit(record); + } + if (record.getCreditType() == EnumScoreType.CONSUMPTION.getCode()) { + return payAddCredit(record); + } + if (record.getCreditType() == EnumScoreType.REDUCE_CREDIT.getCode()) { + return reduceCredit(record); + } + if (record.getCreditType() == EnumScoreType.MEM_IMPORT.getCode()) { + return record.getCreditNum(); + } + + return 0; + } + + private int reduceCredit(WxCreditHistory record) { + int reduceCredit = record.getCreditNum(); + return -reduceCredit; + } + + private int loginAddCredit(WxCreditHistory record) { + //如果当天已经登录过则跳过 + if (wxCreditHistoryMapper.loginCount(record) > 0) { + return 0; + } + // 1. 获取当前租户下积分的增加规则 + WxScoreRules wxScoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); + // 2. 增长的积分 + return wxScoreRules.getRule(EnumScoreType.LOGIN, WxScoreRules.SCORE); + } + + private int bindCarAddCredit(WxCreditHistory record) { + // 1. 获取score rules + WxScoreRules wxScoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); + // 2. 增长的积分 + return wxScoreRules.getRule(EnumScoreType.BIND_CAR, WxScoreRules.SCORE); + } + + private int wifiAddCredit() { + int addCreditNumber = 0; + return addCreditNumber; + } + + private int personAddCredit(WxCreditHistory record) { + // 1. 获取score rules + WxScoreRules wxScoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); + // 2. 增长的积分 + return wxScoreRules.getRule(EnumScoreType.WECHAT_PERSION, WxScoreRules.SCORE); + } + + private int phoneAddCredit(WxCreditHistory record) { + // 1. 获取score rules + WxScoreRules wxScoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); + // 2. 获取成长值 + return wxScoreRules.getRule(EnumScoreType.WECHAT_PERSION, WxScoreRules.SCORE); + } + + private int checkCompleteInfoScoreCount(WxCUser cUser) { + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setTenantId(cUser.getTenantId()); + wxCreditHistory.setCUserId(cUser.getId()); + wxCreditHistory.setCreditType(EnumScoreType.COMPLETE_INFO.getCode()); + return wxCreditHistoryMapper.countList(wxCreditHistory); + } + + private int infoAddCredit(WxCreditHistory record) { + WxCUser user = wxCUserMapper.selectByPrimaryKey(record.getCUserId()); + if (user == null || checkCompleteInfoScoreCount(user) > 0) + return 0; + // 1. 获取score rules + WxScoreRules scoreRules = wxScoreRulesService.getCreditRules(user.getTenantId()); + // 2. 获取成长值 + return scoreRules.getRule(EnumScoreType.COMPLETE_INFO, WxScoreRules.SCORE); + } + + private int spendCredit(WxCreditHistory record) { + WxMerchant wxMerchant = new WxMerchant(); + wxMerchant.setStatus(1); + wxMerchant.setId(record.getMerchantId()); + List wxMerchantList = wxMerchantMapper.findList(wxMerchant); + if (wxMerchantList == null || wxMerchantList.size() == 0) { + throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); + } + //根据商户id和花费金额计算需要新增的积分 + Map map = findByMerchantIdAndSpend(record.getMerchantId(), record.getSpendStr(), record.getTenantId()); + return map.get("credit"); + } + + private int changeCredit(WxCreditHistory record) { + int changeCredit = record.getCreditNum(); + return -changeCredit; + } + + private int payAddCredit(WxCreditHistory record) { + int addCreditNumber = 0; + // 订单金额为0时不计入 + if (record.getCreditNum() != null && record.getCreditNum() == 0) + return 0; + // 1. 获取score rules + WxScoreRules scoreRules = wxScoreRulesService.getCreditRules(record.getTenantId()); + + // 2. 获取成长值 by id + JSONObject payRule = scoreRules.getRuleObj(EnumScoreType.CONSUMPTION); + // 3. 获取成长值 by 业态 + JSONObject busRule = null; + JSONObject busRuleOther = null; + JSONArray busRules = payRule.getJSONArray("childs"); + if (busRules != null) { + for (int i = 0; i < busRules.size(); i++) { + JSONObject bus = (JSONObject) busRules.get(i); + Integer businessId1 = bus.getInteger("businessId"); + if (record.getBusinessId().equals(Long.valueOf(businessId1))) { + busRule = bus; + } + if (businessId1.equals(EnumBusiness.BUSINESS_ID6.getCode())) { + busRuleOther = bus; + } + } + if (busRule == null) { + busRule = busRuleOther; + } + } + if (busRule == null) { + busRule = payRule; + } + Double priceCondition = busRule.getDouble(WxScoreRules.STEP) * 100; // 元->分 + int baseScore = busRule.getInteger(WxScoreRules.SCORE); // 消费增长积分 + + // 4. 计算积分 + Double dScoreT = Math.floor(record.getSpend() * 1.0D / priceCondition * baseScore); + addCreditNumber = dScoreT.intValue(); + log.info("CREDIT:" + busRule.toJSONString() + "\nAddCredit: " + addCreditNumber); + + return addCreditNumber; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java index 27ad4e78f..c300b1bf2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java @@ -7,6 +7,8 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.MailMsg; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; @@ -16,6 +18,7 @@ import com.iformall.utils.Constant; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.HashedMap; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.flowable.bpmn.model.BpmnModel; import org.flowable.engine.*; import org.flowable.engine.runtime.Execution; @@ -33,6 +36,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -72,6 +77,18 @@ public class WxFlowServiceImpl implements WxFlowService { private WxMerchantService wxMerchantService; @Autowired private MqBaseProducer mqBaseProducer; + @Autowired + private WxBillActionService wxBillActionService; + @Autowired + private WxBillPropertyDepositMapper wxBillPropertyDepositMapper; + @Autowired + private WxBillDepositMapper wxBillDepositMapper; + @Autowired + private WxBillDailyMapper wxBillDailyMapper; + @Autowired + private WxBillOtherMapper wxBillOtherMapper; + @Autowired + private WxBillOtherDepositMapper wxBillOtherDepositMapper; /** * 获取流程key,1合同 2账单 @@ -177,17 +194,156 @@ public class WxFlowServiceImpl implements WxFlowService { } wxPropertyContractMapper.updateApplyStatus(wxPropertyContract); } + } else if (2 == flowType) { + if(EnumRentContractAppStatus.FINISH.getCode().intValue() == applyStatus.intValue()) { + //账单审批 + Integer billType = (Integer) getVariableByKey(variables, "billType"); + Integer oldPrice = (Integer) getVariableByKey(variables, "oldPrice"); + Integer newPrice = (Integer) getVariableByKey(variables, "newPrice"); + Date updateDate = new Date(); + MallUserInfo mallUserInfo = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute("userSession"); + if (billType.equals(EnumBillTypeParam.RENT.getCode())) { + WxBillRent dbBill = wxBillRentMapper.selectByPrimaryKey(businessId); + //租赁账单更新 + WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setId(businessId); + wxBillRent.setReceivePay(newPrice); + wxBillRent.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillRent.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillRent.setUpdatetime(updateDate); + wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.RENT_DEPOSIT.getCode())) { + WxBillDeposit dbBill = wxBillDepositMapper.selectByPrimaryKey(businessId); + //租赁押金账单更新 + WxBillDeposit wxBillDeposit = new WxBillDeposit(); + wxBillDeposit.setId(businessId); + wxBillDeposit.setReceivePay(newPrice); + wxBillDeposit.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillDeposit.setUpdatetime(updateDate); + wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.PROPERTY.getCode())) { + WxBillProperty dbBill = wxBillPropertyMapper.selectByPrimaryKey(businessId); + //物业账单更新 + WxBillProperty wxBillProperty = new WxBillProperty(); + wxBillProperty.setId(businessId); + wxBillProperty.setReceivePay(newPrice); + wxBillProperty.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillProperty.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillProperty.setUpdatetime(updateDate); + wxBillPropertyMapper.updateByPrimaryKeySelective(wxBillProperty); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode())) { + WxBillPropertyDeposit dbBill = wxBillPropertyDepositMapper.selectByPrimaryKey(businessId); + //物业押金账单更新 + WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); + wxBillPropertyDeposit.setId(businessId); + wxBillPropertyDeposit.setReceivePay(newPrice); + wxBillPropertyDeposit.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillPropertyDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillPropertyDeposit.setUpdatetime(updateDate); + wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillPropertyDeposit); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.WATER.getCode())) { + //水费账单更新 + updateDailyBill(businessId, newPrice, updateDate); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.POWER.getCode())) { + //电费账单更新 + updateDailyBill(businessId, newPrice, updateDate); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.AIR_CONDITIONING.getCode())) { + //空调费账单更新 + updateDailyBill(businessId, newPrice, updateDate); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.ROUTINE.getCode())) { + WxBillOther dbBill = wxBillOtherMapper.selectByPrimaryKey(businessId); + //其他费用账单更新 + WxBillOther wxBillOther = new WxBillOther(); + wxBillOther.setId(businessId); + wxBillOther.setReceivePay(newPrice); + wxBillOther.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillOther.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillOther.setUpdatetime(updateDate); + wxBillOtherMapper.updateByPrimaryKeySelective(wxBillOther); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else if (billType.equals(EnumBillTypeParam.ATHER_DEPOSIT.getCode())) { + WxBillOtherDeposit dbBill = wxBillOtherDepositMapper.selectByPrimaryKey(businessId); + //其他押金账单更新 + WxBillOtherDeposit wxBillOtherDeposit = new WxBillOtherDeposit(); + wxBillOtherDeposit.setId(businessId); + wxBillOtherDeposit.setReceivePay(newPrice); + wxBillOtherDeposit.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillOtherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillOtherDeposit.setUpdatetime(updateDate); + wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillOtherDeposit); + //账单日志 + addBillAction(businessId, oldPrice, newPrice, mallUserInfo); + } else { + logger.info("未找到账单类型"); + } + } } } + public void updateDailyBill(Long businessId, Integer newPrice, Date updateDate) { + WxBillDaily dbBill = wxBillDailyMapper.selectByPrimaryKey(businessId); + WxBillDaily wxBillDaily = new WxBillDaily(); + wxBillDaily.setId(businessId); + wxBillDaily.setReceivePay(newPrice); + wxBillDaily.setOwe(newPrice - dbBill.getPay()); + if (newPrice.equals(dbBill.getPay())) { + wxBillDaily.setStatus(EnumBillRentStatus.PAID.getCode()); + } + wxBillDaily.setUpdatetime(updateDate); + wxBillDailyMapper.updateByPrimaryKeySelective(wxBillDaily); + } + + public void addBillAction(Long billId, Integer oldPrice, Integer newPrice, MallUserInfo mallUserInfo) { + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(billId); + wxBillAction.setOldPrice(oldPrice); + wxBillAction.setNewPrice(newPrice); + wxBillActionService.modifyBill(wxBillAction, mallUserInfo); + } + public Map mallUserInfoToMap(MallUserInfo userInfo){ - Map map = new HashedMap(); - if(userInfo != null){ - map.put("name",userInfo.getName()); - map.put("id",userInfo.getId()); - map.put("phone",userInfo.getPhone()); + try { + Map map = new HashMap<>(); + Class clazz = userInfo.getClass(); + for (Field field : clazz.getDeclaredFields()) { + field.setAccessible(true); + String fieldName = field.getName(); + Object value = field.get(userInfo); + map.put(fieldName, value); + } + return map; + }catch (IllegalAccessException e){ + logger.error("mallUserInfoToMap error",e); } - return map; + return new HashMap<>(); } @Override @@ -206,9 +362,11 @@ public class WxFlowServiceImpl implements WxFlowService { map.put(taskAssigneeMap.get("taskKey"), taskAssigneeMap.get("assignee")); } // map info,设置发起人等信息 + Date startDate = new Date(); MallUserInfo starterInfo = this.mallUserInfoService.getById(userId); map.put("starter", mallUserInfoToMap(starterInfo)); - map.put("startTime",new Date().getTime()); + map.put("startTime", startDate.getTime()); + map.put("startDate", startDate); map.put("businessId",businessId+""); map.put("flowType",flowType); map.put("taskAssignee",taskAssignee); @@ -233,26 +391,95 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setTaskName("发起"); wxFlowRecord.setCurrStatus(EnumRentContractAppStatus.APPLYING.getCode()); wxFlowRecord.setVariables(variablesToJson(variables)); + wxFlowRecord.setStartDate(startDate); wxFlowRecordService.saveOrUpdate(wxFlowRecord); // 给审批人发送代办通知短信 List mallUserInfoList = getUserByProcessInstanceId(processInstance.getId()); for (MallUserInfo mallUserInfo:mallUserInfoList) { - Map content = new HashedMap(); - content.put("userName",starterInfo.getName()); - content.put("page", Constant.adminPage); - - WxMsgRecord wxMsgRecord = new WxMsgRecord(); - wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); - wxMsgRecord.setModelType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); - wxMsgRecord.setReceiver(mallUserInfo.getPhone()); - wxMsgRecord.setTenantId(tenantId); - wxMsgRecord.setDynamicContentMap(content); - mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + sendAssigneeMsgAndEmail(tenantId,mallUserInfo.getPhone(),mallUserInfo.getEmail(),starterInfo.getName(),businessId); } return new ResultData(); } + public void sendAssigneeMsgAndEmail(String tenantId,String phone,String email,String userName,Long businessId){ + Map dynamicContentMap = new HashMap<>(); + dynamicContentMap.put("userName",userName); + dynamicContentMap.put("page", Constant.adminPage); + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); + wxMsgRecord.setReceiver(phone); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(dynamicContentMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + + //发邮件 + Map msgReplaceMap = new HashedMap(); + msgReplaceMap.put("page", Constant.adminPage); + msgReplaceMap.put("applyTime", new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date())); + msgReplaceMap.put("name",userName); + msgReplaceMap.put("linkName",userName); + msgReplaceMap.put("linkPhone",phone); + ResultData resultData = getTaskStatusList(businessId, tenantId); + List flowRecordList = (List) resultData.data; + String taskListHtml = ""; + for (int i = flowRecordList.size() -1; i>=0; i--) { + WxFlowRecord record = flowRecordList.get(i); + String remark = record.getRemark()==null?"":record.getRemark(); + if (record.getStatus().equals(EnumFlowRecordStatus.NEW.getCode())) { + taskListHtml += "
"; + taskListHtml += "
"; + taskListHtml += "
"; + taskListHtml += "
发起申请
"; + taskListHtml += "
"+record.getUserName()+"
"; + taskListHtml += "
"; + if(i == 0){ + taskListHtml += "
"+remark+"
"; + }else{ + taskListHtml += "
"+remark+"
"; + } + taskListHtml += "
"; + } else if (record.getStatus().equals(EnumFlowRecordStatus.ASSIGNEE.getCode())) { + taskListHtml += "
"; + taskListHtml += "
"; + taskListHtml += "
"; + taskListHtml += "
待审批
"; + taskListHtml += "
"+record.getUserName()+"
"; + taskListHtml += "
"; + if(i == 0){ + taskListHtml += "
"+remark+"
"; + }else{ + taskListHtml += "
"+remark+"
"; + } + taskListHtml += "
"; + } else { + taskListHtml += "
"; + taskListHtml += "
"; + taskListHtml += "
"; + taskListHtml += "
审批通过
"; + taskListHtml += "
"+record.getUserName()+"
"; + taskListHtml += "
"; + if(i == 0){ + taskListHtml += "
"+remark+"
"; + }else{ + taskListHtml += "
"+remark+"
"; + } + taskListHtml += "
"; + } + } + msgReplaceMap.put("taskList", taskListHtml); + MailMsg mailMsg = new MailMsg(); + mailMsg.setSubject("待办通知"); + mailMsg.setHtml(true); + mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode()); + mailMsg.setModelId(EnumMailMsgModel.MAIL_ASSIGNEE_NODIFY.getCode()); + mailMsg.setTo(new String[]{email}); + mailMsg.setTenantId(tenantId); + mailMsg.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } + public String variablesToJson(List> variables){ HashMap map = new HashMap<>(); for (Map mapInfo:variables) { @@ -299,11 +526,15 @@ public class WxFlowServiceImpl implements WxFlowService { taskInfoMap.put("businessId",mapInfo.get("businessId")); taskInfoMap.put("businessType",mapInfo.get("flowType")); List> variables = (List)mapInfo.get("variables"); //定制variables,回传 + Map variablesMap = new HashedMap(); if(CollectionUtils.isNotEmpty(variables)){ for (Map m:variables) { taskInfoMap.put((String)m.get("key"),m.get("value")); + variablesMap.put((String)m.get("key"),m.get("value")); } } + taskInfoMap.put("businessType",mapInfo.get("flowType")); + taskInfoMap.put("variables",JSONUtils.toJSONString(variablesMap)); result.add(taskInfoMap); } } @@ -422,11 +653,10 @@ public class WxFlowServiceImpl implements WxFlowService { Map mapInfo = taskService.getVariables(task.getId()); Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); Integer flowType = (Integer)mapInfo.get("flowType"); + List> variables = (List)mapInfo.get("variables"); + Date startDate = (Date)mapInfo.get("startDate"); taskService.complete(taskId); - // 判断流程是否结束,并发送短信通知 - boolean end = isEndAndSendMsg(mapInfo,taskKey,processInstanceId,tenantId,userName); - //保存wx_flow_record表审批记录 WxFlowRecord wxFlowRecord = new WxFlowRecord(); wxFlowRecord.setTaskId(taskId); @@ -439,8 +669,13 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setUserName(userName); wxFlowRecord.setTaskName(taskName); wxFlowRecord.setTaskKey(taskKey); + wxFlowRecord.setVariables(variablesToJson(variables)); + wxFlowRecord.setStartDate(startDate); wxFlowRecordService.saveOrUpdate(wxFlowRecord); + // 判断流程是否结束,并发送短信通知 + boolean end = isEndAndSendMsg(mapInfo,taskKey,processInstanceId,tenantId,userName); + //修改记录表当前状态 if(end){ wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.FINISH.getCode())); @@ -458,12 +693,15 @@ public class WxFlowServiceImpl implements WxFlowService { */ public boolean isEndAndSendMsg(Map mapInfo,String taskKey,String processInstanceId,String tenantId,String userName){ // 发送短信 - Map msgReplaceMap = new HashedMap(); + Map msgReplaceMap; WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setTenantId(tenantId); Map userMap = (Map)mapInfo.get("starter"); List> taskAssigneeList = (List)mapInfo.get("taskAssignee"); Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); + String email = (String)userMap.get("email"); + List> variables = (List)mapInfo.get("variables"); + Integer flowType = (Integer)mapInfo.get("flowType"); // 判断下个节点是否有设置审批人,没有,直接通过,有,发短信通知 if(!isEnded(processInstanceId)){ @@ -472,23 +710,14 @@ public class WxFlowServiceImpl implements WxFlowService { String assignee = ""; List mallUserInfoList = getUserByProcessInstanceId(processInstanceId); for (MallUserInfo mallUserInfo:mallUserInfoList) { - msgReplaceMap.put("userName",userName); - msgReplaceMap.put("page",Constant.adminPage); - - WxMsgRecord wxMsgRecord = new WxMsgRecord(); - wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); - wxMsgRecord.setModelType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); - wxMsgRecord.setReceiver(mallUserInfo.getPhone()); - wxMsgRecord.setTenantId(tenantId); - wxMsgRecord.setDynamicContentMap(msgReplaceMap); - mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + sendAssigneeMsgAndEmail(tenantId,mallUserInfo.getPhone(),mallUserInfo.getEmail(),userName,businessId); } // 给发起人发送短信 msgReplaceMap = new HashedMap(); msgReplaceMap.put("userName",userName); msgReplaceMap.put("page",Constant.adminPage); - msgReplaceMap.put("contract",businessId+""); + msgReplaceMap.put("contract", (String)getVariableByKey(variables,"contractNumber")); msgReplaceMap.put("toUserName",assignee.trim()); WxMsgRecord wxMsgRecord = new WxMsgRecord(); @@ -498,6 +727,25 @@ public class WxFlowServiceImpl implements WxFlowService { wxMsgRecord.setTenantId(tenantId); wxMsgRecord.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + + //发邮件 + if(StringUtils.isNotBlank(email)){ + MailMsg mailMsg = new MailMsg(); + mailMsg.setSubject("审批通知"); + mailMsg.setHtml(true); + mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode()); + mailMsg.setModelId(EnumMailMsgModel.MAIL_APPLY_NODIFY.getCode()); + mailMsg.setTo(new String[]{email}); + mailMsg.setTenantId(tenantId); + if(1 == flowType.intValue() || 3 == flowType.intValue()){ + msgReplaceMap.put("bustype","合同"); + }else if(2 == flowType.intValue()){ + msgReplaceMap.put("bustype","账单"); + msgReplaceMap.put("contract", businessId.toString()); + } + mailMsg.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } return false; }else{ //继续递归判断 @@ -508,7 +756,7 @@ public class WxFlowServiceImpl implements WxFlowService { // 给发起人发送审批通过消息 msgReplaceMap = new HashedMap(); - msgReplaceMap.put("contract",businessId+""); + msgReplaceMap.put("contract",(String)getVariableByKey(variables,"contractNumber")); msgReplaceMap.put("page",Constant.adminPage); WxMsgRecord wxMsgRecord = new WxMsgRecord(); @@ -518,6 +766,25 @@ public class WxFlowServiceImpl implements WxFlowService { wxMsgRecord.setTenantId(tenantId); wxMsgRecord.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + + //发邮件 + if(StringUtils.isNotBlank(email)){ + MailMsg mailMsg = new MailMsg(); + mailMsg.setSubject("审批通过通知"); + mailMsg.setHtml(true); + mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode()); + mailMsg.setModelId(EnumMailMsgModel.MAIL_PASS_NODIFY.getCode()); + mailMsg.setTo(new String[]{email}); + mailMsg.setTenantId(tenantId); + if(1 == flowType.intValue() || 3 == flowType.intValue()){ + msgReplaceMap.put("bustype","合同"); + }else if(2 == flowType.intValue()){ + msgReplaceMap.put("bustype","账单"); + msgReplaceMap.put("contract", businessId.toString()); + } + mailMsg.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } return true; } } @@ -549,7 +816,7 @@ public class WxFlowServiceImpl implements WxFlowService { @Override @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class}) - public ResultData reject(Map params,Long userId,String userName,String tenantId) { + public ResultData reject(Map params,Long userId,String userName,String userPhone,String tenantId) { String processInstanceId = (String)params.get("processInstanceId"); String remark = (String)params.get("remark"); @@ -558,6 +825,9 @@ public class WxFlowServiceImpl implements WxFlowService { Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); Integer flowType = (Integer)mapInfo.get("flowType"); Map userMap = (Map)mapInfo.get("starter"); + String email = (String) userMap.get("email"); + List> variables = (List)mapInfo.get("variables"); + Date startDate = (Date)mapInfo.get("startDate"); String taskName; String taskKey; @@ -585,17 +855,18 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setUserName(userName); wxFlowRecord.setTaskKey(taskKey); wxFlowRecord.setTaskName(taskName); + wxFlowRecord.setVariables(variablesToJson(variables)); + wxFlowRecord.setStartDate(startDate); wxFlowRecordService.saveOrUpdate(wxFlowRecord); //修改记录表当前状态 wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.REJECT.getCode())); - // 给发起人发送驳回消息 + //给发起人发送驳回消息 Map msgReplaceMap = new HashedMap(); WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setTenantId(tenantId); - msgReplaceMap.put("contract",businessId+""); + msgReplaceMap.put("contract",(String)getVariableByKey(variables,"contractNumber")); msgReplaceMap.put("page",Constant.adminPage); - WxMsgRecord wxMsgRecord = new WxMsgRecord(); wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); wxMsgRecord.setModelType(EnumMsgModel.FLOW_REJECT_NODIFY.getCode()); @@ -603,6 +874,26 @@ public class WxFlowServiceImpl implements WxFlowService { wxMsgRecord.setTenantId(tenantId); wxMsgRecord.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + + //发送邮件 + if(StringUtils.isNotBlank(email)) { + msgReplaceMap = new HashedMap(); + msgReplaceMap.put("contract",(String)getVariableByKey(variables,"contractNumber")); + msgReplaceMap.put("page", Constant.adminPage); + msgReplaceMap.put("name",userName); + msgReplaceMap.put("remark",remark==null?"":remark); + msgReplaceMap.put("linkName",userName); + msgReplaceMap.put("linkPhone",userPhone==null?"":userPhone); + MailMsg mailMsg = new MailMsg(); + mailMsg.setSubject("驳回通知"); + mailMsg.setHtml(true); + mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode()); + mailMsg.setModelId(EnumMailMsgModel.MAIL_REJECT_NODIFY.getCode()); + mailMsg.setTo(new String[]{email}); + mailMsg.setTenantId(tenantId); + mailMsg.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } return new ResultData(); } @@ -616,6 +907,8 @@ public class WxFlowServiceImpl implements WxFlowService { Map mapInfo = taskService.getVariables(task.getId()); Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); Integer flowType = (Integer)mapInfo.get("flowType"); + List> variables = (List)mapInfo.get("variables"); + Date startDate = (Date)mapInfo.get("startDate"); String taskName; String taskKey; @@ -643,6 +936,8 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setUserName(userName); wxFlowRecord.setTaskKey(taskKey); wxFlowRecord.setTaskName(taskName); + wxFlowRecord.setVariables(variablesToJson(variables)); + wxFlowRecord.setStartDate(startDate); wxFlowRecordService.saveOrUpdate(wxFlowRecord); //修改记录表当前状态 wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.SETBACK.getCode())); @@ -718,6 +1013,11 @@ public class WxFlowServiceImpl implements WxFlowService { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxFlowRecordMapper.findList(record)); } + @Override + public PageInfo myHandelList(WxFlowRecord record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxFlowRecordMapper.myHandelList(record)); + } + @Override public void genProcessDiagram(HttpServletResponse httpServletResponse,String businessId) throws Exception { List result = wxFlowRecordService.findList(new WxFlowRecord(Long.parseLong(businessId))); @@ -782,5 +1082,4 @@ public class WxFlowServiceImpl implements WxFlowService { } - } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java index 93e448dcd..ec1d9c54d 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java @@ -84,6 +84,21 @@ public class WxGameServiceImpl implements WxGameService { return record; } + @Override + public WxGame getOneGame(WxGame wxGame) { + try { + WxGame record = wxGameMapper.selectOne(wxGame); + if (record != null) { + record.setGameTemplate(wxGameTemplateService.getById(record.getGameId())); + record.setCouponIdsList(getParams(record)); + } + return record; + } catch (Exception e) { + logger.error("find game error: " + e.getMessage()); + } + return null; + } + @Override public ResultData addActionLog(Long userId, Long gameId, Long orderId) { @@ -285,6 +300,7 @@ public class WxGameServiceImpl implements WxGameService { wxCouponChannel.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_GAME.getCode()); wxCouponChannel.setTenantId(wxCoupon.getTenantId()); wxCouponChannel.setBusiness(wxCoupon.getBusiness()); + wxCouponChannel.setSubBusiness(wxCoupon.getSubBusiness()); wxCouponChannel.setTitle(wxCoupon.getTitle()); wxCouponChannel.setSubTargetId(record.getId()); final IdWorker idWorker = IdWorker.get(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java index 7b535873a..918b8ad07 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java @@ -164,7 +164,6 @@ public class WxLevelConfigServiceImpl implements WxLevelConfigService { return jo.getLong(CAPABILITY_SEND_CAR_COUPON); } - @Override public void deleteById(Long id) { wxLevelConfigMapper.deleteByPrimaryKey(id); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java index d424e5c4c..c9f70f001 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java @@ -1,6 +1,5 @@ package com.iformall.service.impl; -import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -8,6 +7,7 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.*; import com.iformall.mapper.WxMallApplyMapper; import com.iformall.mapper.WxMsgConfigMapper; @@ -15,7 +15,6 @@ import com.iformall.mapper.WxMsgValidationcodeMapper; import com.iformall.mapper.WxMsgValidationcodeModelMapper; import com.iformall.mq.MqBaseProducer; import com.iformall.service.WxMallApplyService; -import com.iformall.utils.*; import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 96fce619f..f2f517a05 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -7,11 +7,13 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxMerchantSimpleVo; import com.iformall.domain.vo.WxMerchantVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; +import com.iformall.utils.BeanMapping; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -81,12 +83,9 @@ public class WxMerchantServiceImpl implements WxMerchantService { @Override public PageInfo listAsPage(WxMerchant record, Integer pageIndex, Integer pageSize) { - - WxRentContract wxRentContract = new WxRentContract(); wxRentContract.setTenantId(record.getTenantId()); List list = wxRentContractMapper.findList(wxRentContract); - PageHelper.startPage(pageIndex, pageSize); List merchants = wxMerchantMapper.findList(record); for (WxMerchant merchant : merchants) { @@ -98,8 +97,23 @@ public class WxMerchantServiceImpl implements WxMerchantService { merchant.setRentalStartDate(collect.get(0).getRentalStartDate()); merchant.setRentalEndDate(collect.get(0).getRentalEndDate()); } + if (record.getRentShopType() != null) { + List> shops = new ArrayList<>(); + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setMerchantId(merchant.getId()); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List wxMerchantShopList = wxMerchantShopMapper.findList(wxMerchantShop); + for (WxMerchantShop merchantShop : wxMerchantShopList) { + WxShop shop = new WxShop(); + shop.setId(merchantShop.getShopId()); + List> shoplist = wxShopMapper.findListMap(shop); + if (shoplist.size() > 0) { + shops.add(shoplist.get(0)); + } + } + merchant.setShoplist(shops); + } } - PageInfo pageInfo = new PageInfo<>(merchants); return pageInfo; } @@ -121,6 +135,15 @@ public class WxMerchantServiceImpl implements WxMerchantService { return wxMerchantMapper.findList(record); } + @Override + public List findList(String tenantId) { + WxMerchant wxMerchant = new WxMerchant(); + wxMerchant.setTenantId(tenantId); + wxMerchant.setStatus(1); + List wxMerchantList = wxMerchantMapper.findList(wxMerchant); + return BeanMapping.mapList(wxMerchantList,WxMerchantSimpleVo.class,(s, t)->t.setMerchantName(s.getName())); + } + @Override public WxMerchant getById(Long id) { WxMerchant wxMerchant = wxMerchantMapper.selectByPrimaryKey(id); @@ -269,37 +292,34 @@ public class WxMerchantServiceImpl implements WxMerchantService { long merchantId = idWorker.nextId(); //保存商户商铺的关联 List shopidlist = wxMerchant.getShopids(); - if(null!=shopidlist && !shopidlist.isEmpty()){ - Long shopid = shopidlist.get(0); - WxMerchantShop wxMerchantShop = new WxMerchantShop(); - wxMerchantShop.setTenantId(wxMerchant.getTenantId()); - wxMerchantShop.setShopId(shopid); - wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); - long count = wxMerchantShopMapper.findList(wxMerchantShop).size(); - if(count>0){ - return new ResultData(ErrorCode.SHOP_IS_RENT); - } - //更新商铺状态 - WxShop wxShop = new WxShop(); - wxShop.setTenantId(wxMerchant.getTenantId()); - wxShop.setId(shopid); - //已出租 + if (shopidlist.isEmpty()) { + return new ResultData(ErrorCode.SHOP_NOT_SELECTED); + } + //先检查是否存在已出租的商铺 + for (long shopid : shopidlist) { WxShop shop = wxShopMapper.selectByPrimaryKey(shopid); - if (shop == null) { - return new ResultData(ErrorCode.SHOP_IS_NOT_FOUND); - } if (shop.getStatus().equals(EnumShopStatus.RENT.getCode())) { - return new ResultData(ErrorCode.SHOP_IS_RENT); + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + shop.getShopNumber() + " 已出租"); } + } + //更新商铺 + for (long shopid : shopidlist) { + //更新商铺状态 + WxShop shop = new WxShop(); + shop.setId(shopid); + shop.setStatus(EnumShopStatus.RENT.getCode()); + wxShopMapper.updateByPrimaryKeySelective(shop); + //关联表插入 + WxMerchantShop wxMerchantShop = new WxMerchantShop(); wxMerchantShop.setId(idWorker.nextId()); wxMerchantShop.setMerchantId(merchantId); wxMerchantShop.setTenantId(wxMerchant.getTenantId()); + wxMerchantShop.setShopId(shopid); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); Date shopdate = new Date(); wxMerchantShop.setUpdateDate(shopdate); wxMerchantShop.setCreateDate(shopdate); wxMerchantShopMapper.insertSelective(wxMerchantShop); - wxShop.setStatus(EnumShopStatus.RENT.getCode()); - wxShopMapper.updateByPrimaryKeySelective(wxShop); } wxMerchant.setId(merchantId); @@ -334,6 +354,8 @@ public class WxMerchantServiceImpl implements WxMerchantService { //wxRentContractService.buildRent(wxMerchant, userId,null,EnumIsPreview.NO.getCode()); //创建押金 wxRentContractService.buildDeposit(wxMerchant, userId,wxMerchant.getRentContractId()); + //作废合同 + wxRentContractService.updateInvalidContract(wxMerchant.getRentContractId()); } return new ResultData(Result.SUCCESS, "商户创建成功", merchantId); } catch (Exception e) { @@ -351,17 +373,6 @@ public class WxMerchantServiceImpl implements WxMerchantService { if (wxMerchant.getId() == null) { return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); } - - //更新商户商铺关联表 - WxMerchantShop wxMerchantShopQuery = new WxMerchantShop(); - wxMerchantShopQuery.setTenantId(wxMerchant.getTenantId()); - wxMerchantShopQuery.setMerchantId(wxMerchant.getId()); - wxMerchantShopQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); - List wxMerchantShopList = wxMerchantShopMapper.findList(wxMerchantShopQuery); - WxMerchantShop wxMerchantShop = wxMerchantShopList.get(0); - wxMerchantShop.setUpdateDate(new Date()); - wxMerchantShopMapper.updateByPrimaryKeySelective(wxMerchantShop); - //更新商户 Date date = new Date(); wxMerchant.setUpdateDate(date); @@ -541,4 +552,12 @@ public class WxMerchantServiceImpl implements WxMerchantService { } return new ResultData(Result.SUCCESS, "操作成功"); } + + @Override + public WxMerchantVo findMerchantById(Long id) { + WxMerchantVo merchant = new WxMerchantVo(); + merchant.setId(id); + List listCVo = wxMerchantMapper.findListCVo(merchant); + return listCVo.isEmpty() ? new WxMerchantVo() : listCVo.get(0); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantSubsidyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantSubsidyServiceImpl.java index 51aff49b5..89a172fee 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantSubsidyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantSubsidyServiceImpl.java @@ -7,17 +7,13 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxMerchantSubsidy; import com.iformall.domain.vo.WxMerchantSubsidyVo; -import com.iformall.enums.EnumMerchantSubsidyStatus; -import com.iformall.enums.EnumOrderType; + import com.iformall.mapper.WxMerchantSubsidyMapper; +import com.iformall.service.ExcelService; import com.iformall.service.WxMerchantSubsidyService; -import com.iformall.utils.Constant; -import org.apache.commons.io.FileUtils; + import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iformall.common.IdWorker; @@ -25,11 +21,10 @@ import com.iformall.common.IdWorker; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.text.DecimalFormat; -import java.text.SimpleDateFormat; + import java.util.List; import java.util.Map; -import java.util.UUID; + @Service public class WxMerchantSubsidyServiceImpl implements WxMerchantSubsidyService { @@ -37,12 +32,14 @@ public class WxMerchantSubsidyServiceImpl implements WxMerchantSubsidyService { @Autowired WxMerchantSubsidyMapper wxMerchantSubsidyMapper; + @Autowired + ExcelService excelService; + @Override public Map sumForSubsidy(WxMerchantSubsidy record) { return wxMerchantSubsidyMapper.sumVoList(record); } - @Override public PageInfo listAsPage(WxMerchantSubsidy record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMerchantSubsidyMapper.findVoList(record)); @@ -82,117 +79,11 @@ public class WxMerchantSubsidyServiceImpl implements WxMerchantSubsidyService { wxMerchantSubsidyMapper.deleteByPrimaryKey(id); } - @Override + @Override public void exportData(WxMerchantSubsidy wxMerchantSubsidy, HttpServletRequest request, HttpServletResponse response) { - List subsidyVoList = wxMerchantSubsidyMapper.findVoList(wxMerchantSubsidy); - - XSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - DecimalFormat df = new DecimalFormat("0.00"); - - try { - File file = new File(filepath); - workbook = new XSSFWorkbook(); - XSSFSheet sheetTwo = workbook.createSheet("补贴记录"); - Row rowtwo = sheetTwo.createRow(0); - Cell idCellTwo = rowtwo.createCell(0); - Cell merchantNameCellTwo = rowtwo.createCell(1); - Cell createDateCellTwo = rowtwo.createCell(2); - Cell orderPaymentCellTwo = rowtwo.createCell(3); - Cell receiverPaymentCellTwo = rowtwo.createCell(4); - Cell subsidyCellTwo = rowtwo.createCell(5); - Cell statusCellTwo = rowtwo.createCell(6); - - idCellTwo.setCellValue("交易单号"); - merchantNameCellTwo.setCellValue("消费商户"); - createDateCellTwo.setCellValue("交易时间"); - orderPaymentCellTwo.setCellValue("本次消费(元)"); - receiverPaymentCellTwo.setCellValue("商户应收(元)"); - subsidyCellTwo.setCellValue("补贴(元)"); - statusCellTwo.setCellValue("补贴状态"); - - for (int i = 0; i < subsidyVoList.size(); i++) { - rowtwo = sheetTwo.createRow(i + 1); - idCellTwo = rowtwo.createCell(0); - merchantNameCellTwo = rowtwo.createCell(1); - createDateCellTwo = rowtwo.createCell(2); - orderPaymentCellTwo = rowtwo.createCell(3); - receiverPaymentCellTwo = rowtwo.createCell(4); - subsidyCellTwo = rowtwo.createCell(5); - statusCellTwo = rowtwo.createCell(6); - - WxMerchantSubsidyVo entity = subsidyVoList.get(i); - - idCellTwo.setCellValue(String.valueOf(entity.getOrderId())); - merchantNameCellTwo.setCellValue(entity.getMerchantName()); - if (entity.getCreateDate() != null) - createDateCellTwo.setCellValue(sdf.format(entity.getCreateDate())); - String dStr = df.format((float)entity.getOrderPayment()/100); - orderPaymentCellTwo.setCellValue(dStr); - dStr = df.format((float)entity.getReceiverPayment()/100); - receiverPaymentCellTwo.setCellValue(dStr); - dStr = df.format((float)entity.getSubsidy()/100); - subsidyCellTwo.setCellValue(dStr); - String statusStr = "未补贴"; - if (entity.getStatus().equals(EnumMerchantSubsidyStatus.NOT_SUBSIDY.getCode())) { - statusStr = "未补贴"; - } else if (entity.getStatus().equals(EnumMerchantSubsidyStatus.AUTO_SUBSIDIED.getCode())) { - statusStr = "已自动补贴"; - } else if (entity.getStatus().equals(EnumMerchantSubsidyStatus.MANUAL_SUBSIDIED.getCode())) { - statusStr = "已手工补贴"; - } - statusCellTwo.setCellValue(statusStr); - } - - - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - downFile(filepath, filename,"补贴记录.xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - e.printStackTrace(); - } + List list = wxMerchantSubsidyMapper.findVoList(wxMerchantSubsidy); + excelService.exportExcel(list,null,"补贴记录",WxMerchantSubsidyVo.class,"补贴记录.xls",response); } - public void downFile(String filePath, String filename, String exportFileName, - HttpServletResponse response, HttpServletRequest req) throws IOException { - try { - response.reset(); - response.setContentType("bin"); - String agent = req.getHeader("user-agent"); - if (agent.contains("Firefox")) { - response.setHeader("Content-disposition", - "attachment; filename=" - + new String(exportFileName.getBytes("GB2312"), - "ISO-8859-1")); - } else { - response - .setHeader("Content-disposition", - "attachment; filename=" - + java.net.URLEncoder.encode(exportFileName, - "UTF-8")); - } - // 循环取出流中的数据 - byte[] b = new byte[1024]; - int len; - InputStream inStream = new FileInputStream(filePath); - while ((len = inStream.read(b)) > 0) - response.getOutputStream().write(b, 0, len); - inStream.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java index c54b6a123..714ff5b00 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java @@ -1,7 +1,7 @@ package com.iformall.service.impl; import com.iformall.common.IdWorker; -import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.*; import com.iformall.enums.EnumMsgRecordStatus; import com.iformall.mapper.*; import com.iformall.service.WxMsgRecordService; @@ -22,12 +22,7 @@ public class WxMsgRecordServiceImpl implements WxMsgRecordService { @Override public void save(BaseMsg data){ final IdWorker idWorker = IdWorker.get(); - WxMsgRecord msgRecord = new WxMsgRecord(); - msgRecord.setId(idWorker.nextId()); - msgRecord.setUuid(data.getUuid()); - msgRecord.setMsgJson(JsonUtil.obj2Json(data)); - msgRecord.setMsgStatus(EnumMsgRecordStatus.DEFAULT.getCode()); if(data instanceof WxMsgRecord){ msgRecord = (WxMsgRecord)data; @@ -47,6 +42,11 @@ public class WxMsgRecordServiceImpl implements WxMsgRecordService { msgRecord.setMsgType(wxMsg.getMsgType()); msgRecord.setReceiver(wxMsg.getTo()); } + + msgRecord.setUuid(data.getUuid()); + msgRecord.setId(idWorker.nextId()); + msgRecord.setMsgJson(JsonUtil.obj2Json(data)); + msgRecord.setMsgStatus(EnumMsgRecordStatus.DEFAULT.getCode()); wxMsgRecordMapper.save(msgRecord); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java index 34f294f17..3dbc2881f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java @@ -1,16 +1,24 @@ package com.iformall.service.impl; +import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsg; import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; +import com.iformall.service.PushLimitService; +import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxMsgService; +import com.iformall.utils.DateUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.*; +import java.util.stream.Collectors; /** @@ -48,6 +57,12 @@ public class WxMsgServiceImpl implements WxMsgService { @Autowired MqBaseProducer mqBaseProducer; + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + PushLimitService pushLimitService; + @Override public PageInfo listAsPage(WxMsg record, Integer pageIndex, Integer pageSize) { PageHelper.startPage(pageIndex, pageSize); @@ -85,8 +100,7 @@ public class WxMsgServiceImpl implements WxMsgService { } @Async - @Override - public ResultData saveOrUpdate(WxMsg wxMsg, WxMsgConfig wxMsgConfig) { + private ResultData saveOrUpdate(WxMsg wxMsg, WxMsgConfig wxMsgConfig) { //新增记录 if (wxMsg.getId() == null) { @@ -159,6 +173,84 @@ public class WxMsgServiceImpl implements WxMsgService { wxMsgMapper.deleteByPrimaryKey(id); } + @Override + public ResultData add(WxMsg wxMsg){ + //不是草稿检验疲劳度 + if (!wxMsg.getStatus().equals(EnumMsgStatus.MSG_STATUS_DRAFT.getCode())) { + if (wxMsg.getIsright().equals(EnumMsgSend.MSG_SEND_IMMEDIATELY.getCode())) { + try { + pushLimitService.checkSendTime(wxMsg.getTenantId()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } + } else { + PushLimit pushLimit = pushLimitService.getPushLimit(wxMsg.getTenantId()); + String sendtime = wxMsg.getSendtime(); + Date date = DateUtils.stringToDate(sendtime, "yyyy-MM-dd HH:mm:ss"); + boolean isInDate = DateUtils.isInDate(date, pushLimit.getTimeStart(), pushLimit.getTimeEnd()); + if (!isInDate) { + return new ResultData(ErrorCode.PUSH_LIMIT_NOT_INRANG); + } + } + + if(wxMsg.getId()!=null){ + //如果不是草稿必然之前状态是草稿,删除 + deleteById(wxMsg.getId()); + wxMsg.setId(null); + } + + } + + //1、手机多条以逗号分隔,直接通过实体得到wxmsg.getphones + //2、通过标签 + String phones = wxMsg.getPhones(); + List filter = wxMsg.getFilterList(); + if (!phones.isEmpty() && !filter.isEmpty()) {//两种方式只能选其一 + return new ResultData(ErrorCode.MSG_SEND_WAY_CHOOSE_ERROR); + } + if (phones.isEmpty() && filter.isEmpty()) {//两种方式必须选其一 + return new ResultData(ErrorCode.MSG_SEND_WAY_CHOOSE_ERROR); + } + + if (phones.isEmpty()) {//没有手工输入手机号时解析标签,有,继续流转 + List list = + wxCUserBasicInfoService.listByFilterList(wxMsg.getTenantId(),wxMsg.getFilterList()); + wxMsg.setExpectSendNumber(list.size());//预计发送数量 + phones = list.stream().map(u -> u.getPhone()).collect(Collectors.joining(",")); + if (phones==null || phones.isEmpty()) {//解析之后手机号依然不存在时返回 + return new ResultData(ErrorCode.MSG_NO_VALID_PHONE); + } + wxMsg.setPhones(StringUtils.join(phones)); + wxMsg.setTags(JSON.toJSONString(wxMsg.getFilterList())); + } else { + String[] phoneSplit = phones.split(","); + Set phoneSet = new HashSet<>(Arrays.asList(phoneSplit)); + wxMsg.setExpectSendNumber(phoneSet.size());//预计发送数量 + wxMsg.setPhones(StringUtils.join(phoneSet,",")); + } + + //从短信配置中查询密钥 bid 等信息 + WxMsgConfig wxMsgConfig = new WxMsgConfig(); + wxMsgConfig.setTenantId(wxMsg.getTenantId()); + List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); + if (wxMsgConfigs.size() == 0) return new ResultData(ErrorCode.MSG_SERVER_NOT_FIND, "您还未接入短信运营商,请联系平台管理员"); + wxMsgConfig = wxMsgConfigs.get(0); + + if (wxMsgConfig.getRemains() == 0) { + logger.info("短信数量为0"); + return new ResultData(ErrorCode.MSG_SUM_ZERO); + } + + if (wxMsgConfig.getRemains() < wxMsg.getExpectSendNumber()) { + logger.info("短信数量不足"); + return new ResultData(ErrorCode.MSG_SUM_INSUFFICENT); + } + saveOrUpdate(wxMsg, wxMsgConfig); + return new ResultData(); + } + + @Async @Override public void sendMsgFromCouponInject(WxMsg wxmsg, WxMsgConfig wxMsgConfig, WxCouponInject couponInject) { @@ -179,7 +271,6 @@ public class WxMsgServiceImpl implements WxMsgService { String phones = StringUtils.join(phoneList, ","); wxMsg.setPhones(phones); wxMsg.setExpectSendNumber(extra); - //sendmsg(wxMsg, wxMsgConfig, couponInject); wxMsg.setWxMsgConfig(wxMsgConfig); wxMsg.setCouponInject(couponInject); wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); @@ -190,7 +281,6 @@ public class WxMsgServiceImpl implements WxMsgService { String phones = StringUtils.join(phoneList, ","); wxMsg.setExpectSendNumber(1000); wxMsg.setPhones(phones); - //sendmsg(wxMsg, wxMsgConfig, couponInject); wxMsg.setWxMsgConfig(wxMsgConfig); wxMsg.setCouponInject(couponInject); wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); @@ -200,74 +290,6 @@ public class WxMsgServiceImpl implements WxMsgService { } } -// @Deprecated -// public ResultData sendmsg(WxMsg record, WxMsgConfig wxMsgConfig, WxCouponInject couponInject) { -// logger.info("发送短信开始..."); -// logger.info("couponInject:" + couponInject); -// String secret = wxMsgConfig.getSecret(); -// String bid = wxMsgConfig.getBid(); -// String publickey = wxMsgConfig.getPublickey(); -// -// String phone = record.getPhones(); -// String signature = record.getSignature(); -// String msg = record.getMsg(); -// String notifyUrl = wxMsgConfig.getNotifyurl(); -// WxMsgModel wxMsgModel = wxMsgModelMapper.selectByPrimaryKey(record.getModelId()); -// Integer modelId = null; -// if (wxMsgModel != null) { -// modelId = wxMsgModel.getModelId(); -// } -// logger.info("=============迈外迪API开始调用"); -// String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); -// logger.info("=============迈外迪API返回结果:" + result); -// JSONObject jsonObjectResult = JSONObject.parseObject(result); -// String ret = jsonObjectResult.get("ret").toString(); -// String batchNo = jsonObjectResult.get("data").toString(); -// String resultMsg = jsonObjectResult.get("msg").toString(); -// record.setReturnResult(jsonObjectResult.toJSONString()); -// -// -// if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { -// record.setSendstatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); -// } else { -// record.setSendstatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); -// } -// -// final IdWorker idWorker = IdWorker.get(); -// long id = idWorker.nextId(); -// WxMsg wxMsg = new WxMsg(); -// wxMsg.setTenantId(record.getTenantId()); -// wxMsg.setModelId(record.getModelId()); -// wxMsg.setMsg(record.getMsg()); -// wxMsg.setExpectSendNumber(record.getExpectSendNumber()); -// wxMsg.setPhones(record.getPhones()); -// wxMsg.setSignature(record.getSignature()); -// wxMsg.setIsright(record.getIsright()); -// wxMsg.setName(record.getName()); -// wxMsg.setSendstatus(record.getSendstatus()); -// wxMsg.setLabel(record.getLabel()); -// wxMsg.setStatus(record.getStatus()); -// wxMsg.setWay(record.getWay()); -// wxMsg.setId(id); -// String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); -// wxMsg.setSendtime(systemTime); -// wxMsg.setCreatetime(DateUtils.stringToDate(systemTime, "yyyy-MM-dd HH:mm:ss")); -// //精准投放 -// if (couponInject != null) { -// wxMsg.setCouponInjectId(couponInject.getId()); -// } -// wxMsgMapper.insertSelective(wxMsg); -// -// logger.info("发送短信结束..."); -// if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { -// addMsgCallback(wxMsg, batchNo); -// return new ResultData(Result.SUCCESS, "短信发送中,您可在短信明细中查看发送状态", id); -// } else { -// return new ResultData(ErrorCode.MSG_SEND_INTERFACE_ERROR.getCode(), -// ErrorCode.MSG_SEND_INTERFACE_ERROR.getMessage() + ":" + resultMsg); -// } -// -// } @Override public void addMsgCallback(WxMsg wxmsg, String batchNo) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 050578020..872be219e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -102,6 +102,12 @@ public class WxOrderServiceImpl implements WxOrderService { @Autowired WxOrderGroupMapper wxOrderGroupMapper; + @Autowired + WxCreditHistoryService wxCreditHistoryService; + + @Autowired + WxCouponChannelMapper wxCouponChannelMapper; + @Override public PageInfo listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.findList(record)); @@ -221,7 +227,7 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrderQ.setcUserId(user.getId()); if (counpon.getSendType().equals(EnumCouponSendType.PASSIVE)) couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); - countCouponOrder = wxCouponOrderMapper.countList(couponOrderQ); + countCouponOrder = wxCouponOrderMapper.findCount(couponOrderQ); } catch (Exception e) { logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.ORDER_IS_FAIL); @@ -337,7 +343,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress, Long orderGroupId) { + public WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress, Long orderGroupId, String formId) { // 检查用户 if (user == null) { logger.error("用户不存在"); @@ -419,15 +425,46 @@ public class WxOrderServiceImpl implements WxOrderService { record.setOrderNumber(orderNumber); record.setCouponChannelId(couponChannelId); record.setProductId(couponId); - record.setType(EnumOrderType.COUPON.getCode()); + //当salePrice为0 并且为积分券或者积分停车券时 则进行积分支付 + if (coupon.getCreditPrice() != null && coupon.getSalePrice() != null && coupon.getSalePrice() == 0 + && (coupon.getType() == EnumCouponType.COUPON_CREDIT.getCode() || coupon.getType() == EnumCouponType.COUPON_CREDIT_PARK.getCode())) { + //若用户剩余积分比积分售价低则不能支付 + if (user.getCredit() == null || user.getCredit() < coupon.getSalePrice()) { + throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); + } + //扣减积分操作记录 + WxCreditHistory creditHistory = new WxCreditHistory(); + //记录操作人类型 操作人id + if (user.getOperatorType() == EnumUserType.MALLUSER.getCode()) { + creditHistory.setOperatorType(EnumUserType.MALLUSER.getCode()); + creditHistory.setOperatorId(user.getOperatorId()); + } else { + creditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + creditHistory.setOperatorId(user.getId()); + } + creditHistory.setCreditNum(coupon.getCreditPrice()); + creditHistory.setCUserId(user.getId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(user.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CHANGE_CREDIT.getCode()); + creditHistory.setCouponId(couponId); + wxCreditHistoryService.saveOrUpdate(creditHistory); + record.setType(EnumOrderType.CREDIT.getCode()); + //积分支付时 变更订单状态为已支付 + record.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); + } else { + record.setType(EnumOrderType.COUPON.getCode()); + record.setOrderStatus(orderStatus); + } record.setcUserId(user.getId()); record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); record.setPayment(payment); - record.setOrderStatus(orderStatus); + //record.setOrderStatus(orderStatus); record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); record.setOrderGroupId(orderGroupId); + record.setFormId(formId); if (isPress) { // 初始砍价信息 @@ -688,7 +725,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveFreeCouponOrder(Long userId, Long couponChannelId, Long couponId) { + public WxOrder saveFreeCouponOrder(Long userId, Long couponChannelId, Long couponId, String formId) { // check 用户状态 WxCUser user = null; try { @@ -750,6 +787,7 @@ public class WxOrderServiceImpl implements WxOrderService { record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); + record.setFormId(formId); // 保存订单 try { @@ -916,6 +954,25 @@ public class WxOrderServiceImpl implements WxOrderService { } catch (Exception e) { logger.error("成长值:" + e.getMessage()); } + + // 积分 计算 + try { + //扣减积分操作记录 + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + creditHistory.setOperatorId(user.getId()); + creditHistory.setCUserId(user.getId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(user.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setCouponId(coupon.getId()); + creditHistory.setBusinessId(Long.valueOf(coupon.getBusiness())); + creditHistory.setSpend(updateOrder.getPayment()); + //creditHistory.setMerchantId(wxMerchant.getId()); + wxCreditHistoryService.saveOrUpdate(creditHistory); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } return ret; } @@ -959,6 +1016,27 @@ public class WxOrderServiceImpl implements WxOrderService { } catch (Exception e) { logger.error("成长值:" + e.getMessage()); } + // 积分 计算 + try { + //扣减积分操作记录 + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + creditHistory.setOperatorId(user.getId()); + creditHistory.setCUserId(user.getId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(user.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + if (updateOrder.getCouponChannelId() != null) { + WxCouponChannel wxCouponChannel = wxCouponChannelMapper.selectByPrimaryKey(updateOrder.getCouponChannelId()); + creditHistory.setCouponId(wxCouponChannel.getCouponId()); + } + creditHistory.setBusinessId(Long.valueOf(wxMerchant.getBusinessId())); + creditHistory.setSpend(updateOrder.getPayment()); + creditHistory.setMerchantId(wxMerchant.getId()); + wxCreditHistoryService.saveOrUpdate(creditHistory); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } return ret; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayAccountBillServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayAccountBillServiceImpl.java new file mode 100644 index 000000000..0e9f4d71e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayAccountBillServiceImpl.java @@ -0,0 +1,63 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxPayAccountBill; +import com.iformall.mapper.WxPayAccountBillMapper; +import com.iformall.service.WxPayAccountBillService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class WxPayAccountBillServiceImpl implements WxPayAccountBillService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxPayAccountBillMapper wxPayAccountBillMapper; + + + @Override + public PageInfo listAsPage(WxPayAccountBill record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPayAccountBillMapper.findList(record)); + } + + @Override + public WxPayAccountBill getById(Long id) { + return wxPayAccountBillMapper.selectByPrimaryKey(id); + } + + @Override + public WxPayAccountBill getByTenantId(String tenantId) { + WxPayAccountBill payAccountBillQ = new WxPayAccountBill(); + payAccountBillQ.setTenantId(tenantId); + return wxPayAccountBillMapper.selectOne(payAccountBillQ); + } + + @Override + public void saveOrUpdate(WxPayAccountBill record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + wxPayAccountBillMapper.insertSelective(record); + } else { + wxPayAccountBillMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + wxPayAccountBillMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java index 71cffae48..79a93b3b5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java @@ -669,6 +669,7 @@ public class WxPayBillServiceImpl implements WxPayBillService { List> bills = wxBillAllMapper.listData(wxBillAll); if (bills.size() > 0) { Map bill = bills.get(0); + bill.put("userId", record.getbUserId()); wxBillAllService.updateBill(bill); } } catch (Exception e) { @@ -686,7 +687,7 @@ public class WxPayBillServiceImpl implements WxPayBillService { } Map bill; bill = bills.get(0); - + bill.put("userId", record.getbUserId()); // 修改支付订单状态 WxPayBill updateBill = new WxPayBill(); updateBill.setId(record.getId()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java index ebcb677fc..63c70ef8e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java @@ -1,6 +1,7 @@ package com.iformall.service.impl; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -15,6 +16,7 @@ import com.iformall.service.WxFlowRecordService; import com.iformall.service.WxFlowService; import com.iformall.service.WxPropertyContractService; import com.iformall.utils.Constant; +import com.iformall.utils.DateUtils; import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +31,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.net.HttpURLConnection; import java.net.URL; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -114,6 +118,13 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService result.put("propertyOweCount",wxPropertyContractMapper.queryOweCount(propertyContract)); //押金欠缴 result.put("depositOweCount",wxBillPropertyDepositMapper.queryOweCount(propertyContract)); + //押金状态 + WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); + wxBillPropertyDeposit.setPropertyContractId(id); + List select = wxBillPropertyDepositMapper.select(wxBillPropertyDeposit); + if (!select.isEmpty()) { + result.put("depositStatus", select.get(0).getStatus()); + } //发起人备注 WxFlowRecord wxFlowRecord = new WxFlowRecord(); wxFlowRecord.setBusinessId(id); @@ -136,7 +147,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService wxBillRent.setSortColumns(WxBillProperty.Field.Period_ASC); wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); List resultList = wxBillPropertyMapper.findList(wxBillRent); - wxPropertyContract.setPreviewBillRentList(resultList); + result.put("previewBillRentList",resultList); return new ResultData(Result.SUCCESS, "查询成功", result); } @@ -151,7 +162,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService } } - if (null == record.getShopId()) { + if (record.getRentShopType().equals(EnumRentShopType.POINT.getCode()) && null == record.getShopId()) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "shopId不能为空"); } @@ -284,6 +295,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService ||!wxPropertyContract.getPrice().equals(record.getPrice()) ||!wxPropertyContract.getDeposit().equals(record.getDeposit()) ||!wxPropertyContract.getAdjustPeriod().equals(record.getAdjustPeriod()) + || !DateUtils.date2String(wxPropertyContract.getRentalStartDate(),"yyyy-MM-dd").equals(DateUtils.date2String(record.getRentalStartDate(),"yyyy-MM-dd")) )){ wxBillPropertyMapper.deletePreviewBill(record); //重新生成 @@ -390,6 +402,16 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService wxBillDeposit.setUpdatetime(date); wxBillDeposit.setIsDel(EnumDelStatus.NOT_DEL.getCode()); wxBillDeposit.setRentShopType(wxPropertyContract.getRentShopType()); + String rentInfo = wxPropertyContract.getRentInfo(); + Map shopInfo = new HashMap<>(); + if (rentInfo != null) { + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + for (int i = 0, size = rentInfoArray.size(); i < size; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + shopInfo.put(rentInfoObject.getString("shopNumber"), rentInfoObject.get("buildArea")); + } + } + wxBillDeposit.setShopInfo(JSONObject.toJSONString(shopInfo)); try { wxBillPropertyDepositMapper.insertSelective(wxBillDeposit); } catch (Exception e) { @@ -401,6 +423,15 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService public List buildRentMonth(WxMerchant wxMerchant, Long userId, WxPropertyContract wxPropertyContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price,Integer isPreview) { String adjustRatio = wxPropertyContract.getAdjustRatio(); + String rentInfo = wxPropertyContract.getRentInfo(); + Map shopInfo = new HashMap<>(); + if (rentInfo != null) { + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + for (int i = 0, size = rentInfoArray.size(); i < size; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + shopInfo.put(rentInfoObject.getString("shopNumber"), rentInfoObject.get("buildArea")); + } + } List integers = JSONArray.parseArray(adjustRatio, Integer.class); integers.add(0, 0); int size = integers.size(); @@ -426,10 +457,22 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService List resultList = new ArrayList<>(); for (int i = 0; i < size; i++) { Calendar instance = Calendar.getInstance(); - instance.setTime(rentalStartDate); - //开始时间 - instance.add(Calendar.MONTH, month * i); - Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArr[i], instance.getTime(), Calendar.MONTH, wxPropertyContract, userId, wxMerchant, billcount,isPreview); + Date startDate; + //自然月 + if(wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + if(i == 0){ //第一期 + startDate = rentalStartDate; + }else{ + instance.setTime(rentalStartDate); + instance.add(Calendar.MONTH, month * i); + startDate = DateUtils.getFirstDayForCurrMonth(instance.getTime()); + } + }else{ + instance.setTime(rentalStartDate); + instance.add(Calendar.MONTH, month * i); + startDate = instance.getTime(); + } + Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArr[i], startDate, Calendar.MONTH, wxPropertyContract, userId, wxMerchant, billcount, isPreview, shopInfo,i==size-1?true:false); List billRentList = (List)resultMap.get("billList"); billcount = (Integer)resultMap.get("billcount"); resultList.addAll(billRentList); @@ -437,7 +480,15 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService return resultList; } - public Map buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxPropertyContract wxPropertyContract, Long userId, WxMerchant wxMerchant, int billcount,Integer isPreview) { + public boolean isFirstDay(Date date){ + int dateInt = Integer.parseInt(new SimpleDateFormat("d").format(date)); + if(dateInt == 1){ + return true; + } + return false; + } + + public Map buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxPropertyContract wxPropertyContract, Long userId, WxMerchant wxMerchant, int billcount, Integer isPreview, Map shopInfo,boolean isLastYesr) { Map resultMap = new HashedMap(); List resultList = new ArrayList<>(); int extralease = lease % receivePeriod; @@ -445,85 +496,196 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService int paycount = lease / receivePeriod + extracount; int index = paycount - 1; final IdWorker idWorker = IdWorker.get(); - for (int i = 0; i < paycount; i++) { - WxBillProperty wxBillRent = new WxBillProperty(); - wxBillRent.setIsPreview(isPreview); - - wxBillRent.setId(idWorker.nextId()); - wxBillRent.setPropertyContractId(wxPropertyContract.getId()); - wxBillRent.setPay(0); + //自然月,而且残月,周期整除,n+1,最后一个周期作为残月 + if(wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode()) + && !isFirstDay(wxPropertyContract.getRentalStartDate()) + && (wxPropertyContract.getLease() % wxPropertyContract.getReceivePeriod() == 0) + && isLastYesr + ){ + paycount ++; + } + for(int i = 0; i < paycount; i++){ + WxBillProperty wxBillProperty = new WxBillProperty(); + wxBillProperty.setIsPreview(isPreview); + + wxBillProperty.setId(idWorker.nextId()); + wxBillProperty.setPropertyContractId(wxPropertyContract.getId()); + wxBillProperty.setPay(0); int needpay = price * receivePeriod; Date date = new Date(); Calendar instance = Calendar.getInstance(); instance.setTime(startdate); instance.add(dayType, receivePeriod * i); - instance.add(Calendar.DAY_OF_MONTH, -1); + if(!wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { + instance.add(Calendar.DAY_OF_MONTH, -1); + } Date time = instance.getTime(); - wxBillRent.setReceiveDate(time); + wxBillProperty.setReceiveDate(time); //账单开始时间 instance.clear(); - instance.setTime(wxBillRent.getReceiveDate()); - instance.add(Calendar.DAY_OF_MONTH, 1); - wxBillRent.setStarttime(instance.getTime()); + instance.setTime(wxBillProperty.getReceiveDate()); + if(!wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { + instance.add(Calendar.DAY_OF_MONTH, 1); + } + wxBillProperty.setStarttime(instance.getTime()); //账单结束时间 instance.clear(); - instance.setTime(wxBillRent.getStarttime()); + instance.setTime(wxBillProperty.getStarttime()); instance.add(dayType, receivePeriod); instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillRent.setEndtime(instance.getTime()); + wxBillProperty.setEndtime(instance.getTime()); if (extracount > 0 && i == index) { //账单开始时间 instance.clear(); - instance.setTime(wxBillRent.getReceiveDate()); - instance.add(Calendar.DAY_OF_MONTH, 1); - wxBillRent.setStarttime(instance.getTime()); + instance.setTime(wxBillProperty.getReceiveDate()); + if(!wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { + instance.add(Calendar.DAY_OF_MONTH, 1); + } + wxBillProperty.setStarttime(instance.getTime()); //账单结束时间 instance.clear(); - instance.setTime(wxBillRent.getStarttime()); + instance.setTime(wxBillProperty.getStarttime()); instance.add(dayType, extralease); instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillRent.setEndtime(instance.getTime()); + wxBillProperty.setEndtime(instance.getTime()); needpay = price * extralease; } - wxBillRent.setNeedPay(needpay); - wxBillRent.setOwe(needpay); - wxBillRent.setReceivePay(needpay); + + //自然月,开始日期、缴款日,结束日期 + if(wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + int rentStartDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxPropertyContract.getRentalStartDate())); + int startDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxBillProperty.getStarttime())); + int endDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxPropertyContract.getRentalEndDate())); + + if(i == 0){//第一周期 + double oneDayProce = (double) price / DateUtils.getMonthDayCount(wxBillProperty.getStarttime()); + double needPayDouble; + + if(receivePeriod <= 1) {//周期为一个月 + wxBillProperty.setEndtime(DateUtils.getLastDayForMonth(wxBillProperty.getStarttime())); + needPayDouble = oneDayProce * (DateUtils.getMonthDayCount(wxBillProperty.getStarttime())-startDateInt+1); + }else{ //周期大于一个月 + Date firstDay = DateUtils.getFirstDayForCurrMonth(wxBillProperty.getStarttime()); + instance.clear(); + instance.setTime(firstDay); + //最后一个期有余,加上残月,不整除时,最后一个月有余,否则为0 + if(extralease > 0 && (i == paycount - 1)){ + instance.add(dayType, extralease); + instance.add(Calendar.DAY_OF_MONTH, rentStartDateInt-1); + }else{ + instance.add(dayType, receivePeriod); + } + instance.add(Calendar.DAY_OF_MONTH, -1); + + wxBillProperty.setEndtime(instance.getTime()); + if(isLastYesr && (i == paycount - 1)){ //最后一年 最后一期 + needPayDouble = 0; + oneDayProce = (double) price/DateUtils.getMonthDayCount(wxBillProperty.getEndtime()); + if(receivePeriod > 1) { + needPayDouble += price * extralease; + } + needPayDouble += oneDayProce * endDateInt; + }else{ + //[A/31 *(31-12+1)]+A+A + needPayDouble = oneDayProce * (DateUtils.getMonthDayCount(wxBillProperty.getStarttime())-startDateInt+1); + needPayDouble += price * (receivePeriod - 1); + } + } + DecimalFormat format = new DecimalFormat("0"); + needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入 + }else if(i < paycount - 1){//中间周期 + Date receiveDate = DateUtils.getFirstDayOfNextMonth(startdate,receivePeriod * i); + wxBillProperty.setReceiveDate(receiveDate); + wxBillProperty.setStarttime(receiveDate); + wxBillProperty.setEndtime(DateUtils.getLastDayForMonth(receiveDate,receivePeriod * i)); + + instance.clear(); + instance.setTime(receiveDate); + instance.add(dayType, receivePeriod); + instance.add(Calendar.DAY_OF_MONTH, -1); + wxBillProperty.setEndtime(instance.getTime()); + }else if(i == paycount - 1) {//最后周期 + Date receiveDate = DateUtils.getFirstDayOfNextMonth(startdate,receivePeriod * i); + wxBillProperty.setReceiveDate(receiveDate); + wxBillProperty.setStarttime(receiveDate); + + Date firstDay = DateUtils.getFirstDayForCurrMonth(wxBillProperty.getStarttime()); + instance.clear(); + instance.setTime(firstDay); + //最后一期有余,加上残月,(不整除时,最后一个月有余,否则为0) + if(receivePeriod > 1) { + if(isLastYesr) { + instance.add(dayType, extralease); + }else{ + instance.add(dayType, receivePeriod); + } + } + if(isLastYesr) { + instance.add(Calendar.DAY_OF_MONTH, rentStartDateInt - 1); + } + instance.add(Calendar.DAY_OF_MONTH, -1); + wxBillProperty.setEndtime(instance.getTime()); + + //逻辑同计算endtime + double needPayDouble = 0; + double oneDayProce = (double) price/DateUtils.getMonthDayCount(wxBillProperty.getEndtime()); + if(receivePeriod > 1) { + if(isLastYesr) { + needPayDouble += price * extralease; + }else{ + needPayDouble += price * receivePeriod; + } + } + if(isLastYesr) { + needPayDouble += oneDayProce * endDateInt; + } + DecimalFormat format = new DecimalFormat("0"); + needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入 + } + } + + wxBillProperty.setNeedPay(needpay); + wxBillProperty.setOwe(needpay); + wxBillProperty.setReceivePay(needpay); //截止收租日在当前时间之前 - if (wxBillRent.getReceiveDate().before(date)) { + if (wxBillProperty.getReceiveDate().before(date)) { long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); - wxBillRent.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); - wxBillRent.setExpiredDay(day); + wxBillProperty.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); + wxBillProperty.setExpiredDay(day); } else {//截止收租日在当前时间之后 Calendar now = Calendar.getInstance(); now.add(dayType, receivePeriod); Date currenttime = now.getTime(); //当前日期加上周期后小于截止收租日就是没有到期,否则当前待缴 - if (currenttime.before(wxBillRent.getReceiveDate())) { - wxBillRent.setStatus(EnumBillRentStatus.NOT_EXPIRED.getCode()); - wxBillRent.setExpiredDay(0L); + if (currenttime.before(wxBillProperty.getReceiveDate())) { + wxBillProperty.setStatus(EnumBillRentStatus.NOT_EXPIRED.getCode()); + wxBillProperty.setExpiredDay(0L); } else { - wxBillRent.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); - wxBillRent.setExpiredDay(0L); + wxBillProperty.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + wxBillProperty.setExpiredDay(0L); } } - wxBillRent.setTenantId(wxMerchant.getTenantId()); - wxBillRent.setIsDel(0); - wxBillRent.setMerchantId(wxMerchant.getId()); - wxBillRent.setUserId(userId); - wxBillRent.setShopId(wxPropertyContract.getShopId()); - wxBillRent.setCreatetime(date); - wxBillRent.setUpdatetime(date); - wxBillRent.setIsDel(EnumDelStatus.NOT_DEL.getCode()); - wxBillRent.setRentShopType(wxPropertyContract.getRentShopType()); - wxBillRent.setPeriod(++billcount); + wxBillProperty.setTenantId(wxMerchant.getTenantId()); + wxBillProperty.setIsDel(0); + wxBillProperty.setMerchantId(wxMerchant.getId()); + wxBillProperty.setUserId(userId); + wxBillProperty.setShopId(wxPropertyContract.getShopId()); + wxBillProperty.setCreatetime(date); + wxBillProperty.setUpdatetime(date); + wxBillProperty.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + wxBillProperty.setRentShopType(wxPropertyContract.getRentShopType()); + wxBillProperty.setPeriod(++billcount); + if (shopInfo != null) { + wxBillProperty.setShopInfo(JSONObject.toJSONString(shopInfo)); + } try { - wxBillPropertyMapper.insertSelective(wxBillRent); - resultList.add(wxBillRent); + wxBillPropertyMapper.insertSelective(wxBillProperty); + resultList.add(wxBillProperty); } catch (Exception e) { logger.error("添加租赁账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); @@ -564,11 +726,12 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService Integer price = propertyContract.getPrice(); //按月计租 - if (propertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode())) { + if (propertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode()) + ||propertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { result = buildRentMonth(wxMerchant, userId, propertyContract, receivePeriod, lease, rentalStartDate, price,isPreview); } else { //按日计租 - Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, propertyContract, userId, wxMerchant, 0,isPreview); + Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, propertyContract, userId, wxMerchant, 0, isPreview, null,false); result = (List)resultMap.get("billList"); } } @@ -661,7 +824,12 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService Map params = new HashMap<>(); params.put("tenantId", record.getTenantId()); params.put("rentShopType", record.getRentShopType()); - List contractList = wxPropertyContractMapper.getRentContractList(params); + List contractList; + if (record.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + contractList = wxPropertyContractMapper.getRentContractListByShop(params); + } else { + contractList = wxPropertyContractMapper.getRentContractListByPoint(params); + } return contractList; } @@ -695,7 +863,11 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService if (wxRentContract != null) { WxPropertyContract wxPropertyContract = new WxPropertyContract(); wxPropertyContract.setTenantId(wxRentContract.getTenantId()); - wxPropertyContract.setShopId(wxRentContract.getShopId()); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + wxPropertyContract.setMerchantId(wxRentContract.getMerchantId()); + } else { + wxPropertyContract.setShopId(wxRentContract.getShopId()); + } List select = wxPropertyContractMapper.select(wxPropertyContract); if (select.size() > 0) { long count = select.stream().filter(propertyContract -> propertyContract.getStatus().equals(EnumRentContractStatus.SIGNED_RENT_UNPAID.getCode()) || diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index b480c7505..e756dc3a8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2,6 +2,7 @@ package com.iformall.service.impl; import cn.afterturn.easypoi.word.WordExportUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -12,7 +13,10 @@ import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; -import com.iformall.service.*; +import com.iformall.service.WxFlowRecordService; +import com.iformall.service.WxFlowService; +import com.iformall.service.WxMerchantService; +import com.iformall.service.WxRentContractService; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; import org.apache.commons.collections.map.HashedMap; @@ -29,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -36,6 +41,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.net.HttpURLConnection; import java.net.URL; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -88,6 +95,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { @Autowired private WxFlowService wxFlowService; + @Autowired + WxMerchantShopMapper wxMerchantShopMapper; + @Override public Map listAsPage(WxRentContract record, Integer pageIndex, Integer pageSize) { Object rentContractStatusInfo = getRentContractStatusInfo(record); @@ -107,7 +117,13 @@ public class WxRentContractServiceImpl implements WxRentContractService { if (wxRentContract == null) { return new ResultData(ErrorCode.RENT_CONTRACT_IS_NOT_FOUND); } - + //商场信息 + WxMall wxMall = new WxMall(); + wxMall.setTenantId(wxRentContract.getTenantId()); + List mallList = wxMallMapper.findList(wxMall); + if (!mallList.isEmpty()) { + result.put("mall", mallList.get(0)); + } wxRentContract.setPrice(wxRentContract.getPrice() != null ? wxRentContract.getPrice() : 0); wxRentContract.setDeposit(wxRentContract.getDeposit() != null ? wxRentContract.getDeposit() : 0); result.put("wxRentContract", wxRentContract); @@ -138,6 +154,13 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("propertyOweCount",wxPropertyContractMapper.queryOweCount(propertyContract)); //押金欠缴 result.put("depositOweCount",wxBillDepositMapper.queryOweCount(wxRentContract)); + //押金状态 + WxBillDeposit wxBillDeposit = new WxBillDeposit(); + wxBillDeposit.setRentContractId(id); + List select = wxBillDepositMapper.select(wxBillDeposit); + if (!select.isEmpty()) { + result.put("depositStatus", select.get(0).getStatus()); + } //发起人备注 WxFlowRecord wxFlowRecord = new WxFlowRecord(); wxFlowRecord.setBusinessId(id); @@ -153,7 +176,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setSortColumns(WxBillRent.Field.Period_ASC); wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); List resultList = wxBillRentMapper.findList(wxBillRent); - wxRentContract.setPreviewBillRentList(resultList); + result.put("previewBillRentList",resultList); return new ResultData(Result.SUCCESS, "查询成功", result); } @@ -191,26 +214,73 @@ public class WxRentContractServiceImpl implements WxRentContractService { BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000)); BigDecimal price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); record.setPrice(price.multiply(hundred).intValue()); + } else { + if (StringUtils.isNotEmpty(record.getPriceStr())) { + record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).intValue()); + } else { + record.setPrice(0); + } + } + if (StringUtils.isNotEmpty(record.getDepositStr())) { + record.setDeposit(new BigDecimal(record.getDepositStr()).multiply(new BigDecimal(100)).intValue()); + } else { + record.setDeposit(0); } - record.setPrice(record.getPrice() == null ? 0 : record.getPrice()); - record.setDeposit(record.getDeposit() == null ? 0 : record.getDeposit()); Date date = new Date(); record.setCreatetime(date); record.setUpdatetime(date); - try { + + if (record.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + String rentInfo = record.getRentInfo(); + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + int size = rentInfoArray.size(); + if (size == 0) { + return new ResultData(ErrorCode.SHOP_NOT_SELECTED); + } + //查询rent_info 包括 shopId + for (int i = 0; i < size; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + WxRentContract wxRentContract = new WxRentContract(); + wxRentContract.setTenantId(record.getTenantId()); + Long shopId = rentInfoObject.getLong("shopId"); + wxRentContract.setShopId(shopId); + int count = wxRentContractMapper.selectRentContractCountByShopId(wxRentContract); + String shopNumber = rentInfoObject.getString("shopNumber"); + if (count > 0) { + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + shopNumber + " 已出租"); + } + if (record.getMerchantId() != null) { + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setShopId(shopId); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List wxMerchantShopList = wxMerchantShopMapper.findList(wxMerchantShop); + long total = wxMerchantShopList.parallelStream(). + filter(ms -> !ms.getMerchantId().equals(record.getMerchantId())).count(); + if (total > 0) { + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + shopNumber + " 已出租"); + } + } else { + WxShop wxShop = wxShopMapper.selectByPrimaryKey(shopId); + if (wxShop.getStatus().equals(EnumShopStatus.RENT.getCode())) { + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + wxShop.getShopNumber() + " 已出租"); + } + } + } + } else { WxRentContract wxRentContract = new WxRentContract(); wxRentContract.setTenantId(record.getTenantId()); wxRentContract.setShopId(record.getShopId()); long count = wxRentContractMapper.queryRentContractData(wxRentContract).stream(). - filter(rc -> !rc.get("status").equals(EnumRentContractStatus.CONTRACT_TERMINATE.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.WAIT_SIGN.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.INVALID.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.CONTRACT_END.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.INTENTION.getCode())).count(); + filter(rc -> rc.get("status").equals(EnumRentContractStatus.SIGNED_RENT_UNPAID.getCode()) + || rc.get("status").equals(EnumRentContractStatus.RENT_PAID.getCode()) + || rc.get("status").equals(EnumRentContractStatus.CONTRACT_END_SOON.getCode())).count(); if (count > 0) { return new ResultData(ErrorCode.RENT_CONTRACT_WITH_SHOP_IS_FOUND); } + } + + try { record.setApplyStatus(EnumRentContractAppStatus.DEFAULT.getCode()); wxRentContractMapper.insertSelective(record); } catch (Exception e) { @@ -235,7 +305,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //生成预览账单(补录第二步,第三步走编辑) - if(record.getReceivePeriod() != null && record.getLease()!=null && record.getPrice()!= null){ + if (record.getReceivePeriod() != null && record.getLease() != null && record.getPrice() != null + && !record.getReceivePeriod().equals(0) && !record.getLease().equals(0) && !record.getPrice().equals(0)) { wxBillRentMapper.deletePreviewBill(record); //重新生成 List resultList = buildRent(new WxMerchant(), null, record, EnumIsPreview.YES.getCode()); @@ -257,19 +328,28 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); List resultList = wxBillRentMapper.findList(wxBillRent); - boolean change = false; - if(CollectionUtils.isEmpty(resultList)){ - change = true; - }else if(record.getAdjustPeriod().intValue() != dbRent.getAdjustPeriod().intValue()){ - change = true; - }else{ - if(record.getReceivePeriod() != null && record.getLease()!=null && record.getPrice()!= null) { + //更新 + ResultData resultData = getResultDataForUpdate(record, userId); + if (resultData.code != Result.SUCCESS) { + return resultData; + } + + //有改变,删除预账单,重新生成 + if (record.getReceivePeriod() != null && record.getLease() != null && record.getPrice() != null + && !record.getReceivePeriod().equals(0) && !record.getLease().equals(0) && !record.getPrice().equals(0)) { + boolean change = false; + if (CollectionUtils.isEmpty(resultList)) { + change = true; + } else if (record.getAdjustPeriod().intValue() != dbRent.getAdjustPeriod().intValue()) { + change = true; + } else { if (record.getType().equals(EnumRentContractType.RENT_BY_AREA.getCode())) { if (!record.getReceivePeriod().equals(dbRent.getReceivePeriod()) || !record.getLease().equals(dbRent.getLease()) || !record.getType().equals(dbRent.getType()) || !record.getPrice().equals(dbRent.getPrice()) - || !record.getAdjustRatio().replaceAll("\\s*","").equals(dbRent.getAdjustRatio().replaceAll("\\s*","")) + || !record.getAdjustRatio().replaceAll("\\s*", "").equals(dbRent.getAdjustRatio().replaceAll("\\s*", "")) + || !DateUtils.date2String(record.getRentalStartDate(),"yyyy-MM-dd").equals(DateUtils.date2String(dbRent.getRentalStartDate(),"yyyy-MM-dd")) ) { change = true; } @@ -279,6 +359,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { || !record.getType().equals(dbRent.getType()) || !record.getRevenue().equals(dbRent.getRevenue()) || !record.getPayRatio().equals(dbRent.getPayRatio()) + || !DateUtils.date2String(record.getRentalStartDate(),"yyyy-MM-dd").equals(DateUtils.date2String(dbRent.getRentalStartDate(),"yyyy-MM-dd")) ) { change = true; } @@ -288,20 +369,16 @@ public class WxRentContractServiceImpl implements WxRentContractService { || !record.getType().equals(dbRent.getType()) || !record.getPrice().equals(dbRent.getPrice()) || !record.getPayRatio().equals(dbRent.getPayRatio()) + || !DateUtils.date2String(record.getRentalStartDate(),"yyyy-MM-dd").equals(DateUtils.date2String(dbRent.getRentalStartDate(),"yyyy-MM-dd")) ) { change = true; } } } - } - - // 更新 - ResultData resultData = getResultDataForUpdate(record, userId); - - //有改变,删除预账单,重新生成 - if(change) { - wxBillRentMapper.deletePreviewBill(record); - resultList = buildRent(new WxMerchant(), null, record, EnumIsPreview.YES.getCode()); + if (change) { + wxBillRentMapper.deletePreviewBill(record); + resultList = buildRent(new WxMerchant(), null, record, EnumIsPreview.YES.getCode()); + } } //启动审批流 @@ -361,25 +438,72 @@ public class WxRentContractServiceImpl implements WxRentContractService { BigDecimal payRatio = new BigDecimal(record.getPayRatio() == null ? 0 : record.getPayRatio()).divide(new BigDecimal(10000)); BigDecimal price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); record.setPrice(price.multiply(hundred).intValue()); + } else { + if (StringUtils.isNotEmpty(record.getPriceStr())) { + record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).intValue()); + } else { + record.setPrice(0); + } + } + + if (StringUtils.isNotEmpty(record.getDepositStr())) { + record.setDeposit(new BigDecimal(record.getDepositStr()).multiply(new BigDecimal(100)).intValue()); + } else { + record.setDeposit(0); } - record.setPrice(record.getPrice() == null ? 0 : record.getPrice()); - record.setDeposit(record.getDeposit() == null ? 0 : record.getDeposit()); record.setUpdatetime(new Date()); - try { - WxRentContract wxRentContractParams = new WxRentContract(); - wxRentContractParams.setTenantId(record.getTenantId()); - wxRentContractParams.setShopId(record.getShopId()); - long count = wxRentContractMapper.queryRentContractData(wxRentContractParams).stream(). - filter(rc -> !rc.get("status").equals(EnumRentContractStatus.CONTRACT_TERMINATE.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.WAIT_SIGN.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.INVALID.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.CONTRACT_END.getCode()) - && !rc.get("status").equals(EnumRentContractStatus.INTENTION.getCode()) - && !rc.get("id").equals(wxRentContract.getId())).count(); + + if (record.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + String rentInfo = record.getRentInfo(); + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + int size = rentInfoArray.size(); + if (size == 0) { + return new ResultData(ErrorCode.SHOP_NOT_SELECTED); + } + //查询rent_info 包括 shopId + for (int i = 0; i < size; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + WxRentContract wxRentContractQuery = new WxRentContract(); + wxRentContractQuery.setTenantId(record.getTenantId()); + Long shopId = rentInfoObject.getLong("shopId"); + wxRentContractQuery.setShopId(shopId); + int count = wxRentContractMapper.selectRentContractCountByShopId(wxRentContractQuery); + String shopNumber = rentInfoObject.getString("shopNumber"); + if (count > 0) { + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + shopNumber + " 已出租"); + } + if (record.getMerchantId() != null) { + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setShopId(shopId); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List wxMerchantShopList = wxMerchantShopMapper.findList(wxMerchantShop); + long total = wxMerchantShopList.parallelStream(). + filter(ms -> !ms.getMerchantId().equals(record.getMerchantId())).count(); + if (total > 0) { + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + shopNumber + " 已出租"); + } + } else { + WxShop wxShop = wxShopMapper.selectByPrimaryKey(shopId); + if (wxShop.getStatus().equals(EnumShopStatus.RENT.getCode())) { + return new ResultData(ErrorCode.SHOP_IS_RENT.getCode(), "店铺 " + wxShop.getShopNumber() + " 已出租"); + } + } + } + } else { + WxRentContract wxRentContractQuery = new WxRentContract(); + wxRentContractQuery.setTenantId(record.getTenantId()); + wxRentContractQuery.setShopId(record.getShopId()); + long count = wxRentContractMapper.queryRentContractData(wxRentContract).stream(). + filter(rc -> rc.get("status").equals(EnumRentContractStatus.SIGNED_RENT_UNPAID.getCode()) + || rc.get("status").equals(EnumRentContractStatus.RENT_PAID.getCode()) + || rc.get("status").equals(EnumRentContractStatus.CONTRACT_END_SOON.getCode())).count(); if (count > 0) { return new ResultData(ErrorCode.RENT_CONTRACT_WITH_SHOP_IS_FOUND); } + } + + try { wxRentContractMapper.updateByPrimaryKeySelective(record); } catch (Exception e) { logger.error("更新租赁合同信息失败,e:" + e.getMessage()); @@ -435,6 +559,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillDeposit.setUpdatetime(date); wxBillDeposit.setIsDel(EnumDelStatus.NOT_DEL.getCode()); wxBillDeposit.setRentShopType(wxRentContract.getRentShopType()); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + String rentInfo = wxRentContract.getRentInfo(); + if (rentInfo != null) { + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + Map shopInfo = new HashMap<>(); + for (int i = 0, size = rentInfoArray.size(); i < size; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + shopInfo.put(rentInfoObject.getString("shopNumber"), rentInfoObject.get("deposit")); + } + wxBillDeposit.setShopInfo(JSONObject.toJSONString(shopInfo)); + } + } try { wxBillDepositMapper.insertSelective(wxBillDeposit); } catch (Exception e) { @@ -444,6 +580,76 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } + @Override + public Object getMerchants(WxRentContract wxRentContract) { + List rentContractList = wxRentContractMapper.getMerchants(wxRentContract); + return rentContractList; + } + + @Override + public void updateInvalidContract(Long rentContractId) { + WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(rentContractId); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + String rentInfo = wxRentContract.getRentInfo(); + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + WxRentContract record = new WxRentContract(); + for (int i = 0, size = rentInfoArray.size(); i < size; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + Long shopId = rentInfoObject.getLong("shopId"); + record.setShopId(shopId); + record.setTenantId(wxRentContract.getTenantId()); + record.setStatus(EnumRentContractStatus.INVALID.getCode()); + wxRentContractMapper.updateInvalidContract(record); + } + } else { + WxRentContract record = new WxRentContract(); + record.setTenantId(wxRentContract.getTenantId()); + record.setRentShopType(wxRentContract.getRentShopType()); + record.setStatus(EnumRentContractStatus.INVALID.getCode()); + wxRentContractMapper.updateRentInvalidStatus(record); + } + updateInvalidStatus(wxRentContract); + } + + public void updateInvalidStatus(WxRentContract wxRentContract) { + WxRentContract record = new WxRentContract(); + record.setTenantId(wxRentContract.getTenantId()); + record.setStatus(EnumRentContractStatus.INVALID.getCode()); + //审核流程中止 + List collect = wxRentContractMapper.select(record).stream() + .map(r -> r.getId()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(collect)) { + for (Long id : collect) { + try { + logger.info("合同id:{},开始停止...", id); + //结束审批流 by luozukai + List tasks = taskService.createTaskQuery().processDefinitionKey(WxFlowServiceImpl.getFlowKeyByType(1)) + .processVariableValueEquals("businessId", id).list(); + if (!CollectionUtils.isEmpty(tasks)) { + for (Task task : tasks) { + logger.info("合同id:{},taskid:{}", id, task.getId()); + runtimeService.deleteProcessInstance(task.getProcessInstanceId(), "合同作废"); + } + } + // 修改合同审核状态 + WxRentContract rentContract = record; + rentContract.setId(id); + rentContract.setApplyStatus(EnumRentContractAppStatus.CANCLE.getCode()); + updateApplyStatus(rentContract); + + // 保存审批历史入 + WxFlowRecord updateRecord = new WxFlowRecord(); + updateRecord.setBusinessId(id); + updateRecord.setStatus(EnumFlowRecordStatus.CANCLE.getCode()); + updateRecord.setBusinessType(1); + wxFlowRecordService.saveOrUpdate(updateRecord); + } catch (Exception e) { + logger.error("deleteProcessInstance error", e); + } + } + } + } + @Override @Transactional(rollbackFor = {Exception.class}) public List buildRent(WxMerchant wxMerchant, Long userId,WxRentContract rentContract,Integer isPreview) { @@ -466,11 +672,12 @@ public class WxRentContractServiceImpl implements WxRentContractService { Date rentalStartDate = wxRentContract.getRentalStartDate(); Integer price = wxRentContract.getPrice(); //按月计租 - if (wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode())) { + if (wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode()) + ||wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { rentList = buildRentMonth(wxMerchant, userId, wxRentContract, receivePeriod, lease, rentalStartDate, price,isPreview); } else { //按日计租 - Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant, 0,isPreview); + Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant, 0, isPreview, null,false); rentList = ( List)resultMap.get("billList"); } } @@ -480,18 +687,82 @@ public class WxRentContractServiceImpl implements WxRentContractService { return rentList; } + //计算租金,每年-每个店铺租金 + public List computePrice(String rentInfo) { + + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + int arraySize = rentInfoArray.size(); + List priceList = new ArrayList<>(); + //第一年 + int[] priceArr = new int[arraySize]; + for (int i = 0; i < arraySize; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + priceArr[i] = new BigDecimal(rentInfoObject.getString("price")).multiply(new BigDecimal(100)).intValue(); + } + priceList.add(priceArr); + //大于一年 + JSONObject rentInfoObject = rentInfoArray.getJSONObject(0); + JSONArray adjustRatio = rentInfoObject.getJSONArray("adjustRatio"); + int adjustRatioSize = adjustRatio.size(); + + for (int i = 0; i < adjustRatioSize; i++) { + int[] priceArrs = new int[arraySize]; + for (int j = 0; j < arraySize; j++) { + rentInfoObject = rentInfoArray.getJSONObject(j); + adjustRatio = rentInfoObject.getJSONArray("adjustRatio"); + BigDecimal multiply = new BigDecimal(priceList.get(i)[j]).multiply(new BigDecimal(adjustRatio.getString(i)).divide(new BigDecimal(100))); + BigDecimal price = new BigDecimal(priceList.get(i)[j]).add(multiply); + priceArrs[j] = price.setScale(0, RoundingMode.HALF_EVEN).intValue(); + } + priceList.add(priceArrs); + } + return priceList; + } + public List buildRentMonth(WxMerchant wxMerchant, Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price,Integer isPreview) { - String adjustRatio = wxRentContract.getAdjustRatio(); - List integers = JSONArray.parseArray(adjustRatio, Integer.class); - integers.add(0, 0); - int size = integers.size(); - int[] priceArr = new int[size]; - priceArr[0] = price; - double priceD = price; - for (int i = 1; i < size; i++) { - priceD = priceD + priceD * integers.get(i) / 10000.0; - priceArr[i] = new BigDecimal(priceD).setScale(0, RoundingMode.HALF_EVEN).intValue(); + int size = 0; + int[] priceArrs = null; + List> shopInfos = new ArrayList<>(); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode()) && + !wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + String rentInfo = wxRentContract.getRentInfo(); + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + List priceList = computePrice(rentInfo); + size = priceList.size(); + priceArrs = new int[size]; + for (int i = 0; i < size; i++) { + int[] priceInt = priceList.get(i); + int sum = 0; + for (int p : priceInt) { + sum += p; + } + priceArrs[i] = sum; + } + + for (int i = 0; i < size; i++) { + Map shopInfo = new HashMap<>(); + int[] ints = priceList.get(i); + for (int j = 0; j < ints.length; j++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(j); + String s = new BigDecimal(ints[j]).divide(new BigDecimal(100)).toPlainString(); + shopInfo.put(rentInfoObject.getString("shopNumber"), s); + } + shopInfos.add(shopInfo); + } + } else { + String adjustRatio = wxRentContract.getAdjustRatio(); + List integers = JSONArray.parseArray(adjustRatio, Integer.class); + integers.add(0, 0); + size = integers.size(); + priceArrs = new int[size]; + priceArrs[0] = price; + double priceD = price; + for (int i = 1; i < size; i++) { + priceD = priceD + priceD * integers.get(i) / 10000.0; + priceArrs[i] = new BigDecimal(priceD).setScale(0, RoundingMode.HALF_EVEN).intValue(); + } } + int month = 12; int divide = lease / month; int mod = lease % month; @@ -507,10 +778,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { List resultList = new ArrayList<>(); for (int i = 0; i < size; i++) { Calendar instance = Calendar.getInstance(); - instance.setTime(rentalStartDate); - //开始时间 - instance.add(Calendar.MONTH, month * i); - Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArr[i], instance.getTime(), Calendar.MONTH, wxRentContract, userId, wxMerchant, billcount,isPreview); + Date startDate; + //自然月 + if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + if(i == 0){ //第一期 + startDate = rentalStartDate; + }else{ + instance.setTime(rentalStartDate); + instance.add(Calendar.MONTH, month * i); + startDate = DateUtils.getFirstDayForCurrMonth(instance.getTime()); + } + }else{ + instance.setTime(rentalStartDate); + instance.add(Calendar.MONTH, month * i); + startDate = instance.getTime(); + } + Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArrs[i], startDate, Calendar.MONTH, wxRentContract, userId, wxMerchant, billcount, isPreview, shopInfos.isEmpty() ? null : shopInfos.get(i),i==size-1?true:false); List billRentList = (List)resultMap.get("billList"); billcount = (Integer)resultMap.get("billcount"); resultList.addAll(billRentList); @@ -518,38 +801,77 @@ public class WxRentContractServiceImpl implements WxRentContractService { return resultList; } - public Map buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant, int billcount,Integer isPreview) { + public boolean isFirstDay(Date date){ + int dateInt = Integer.parseInt(new SimpleDateFormat("d").format(date)); + if(dateInt == 1){ + return true; + } + return false; + } + + public Map buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant, int billcount, Integer isPreview, Map shopInfo,boolean isLastYesr) { + System.out.println("------lease:"+lease+"receivePeriod:"+receivePeriod+"price:"+price+"start:"+DateUtils.date2String(startdate,"yyyy-MM-dd") + +"dayType:"+dayType+"billcount:"+billcount); + + String shopInfoStr = null; + if (shopInfo != null) { + shopInfoStr = JSONObject.toJSONString(shopInfo); + } else { + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode()) && + wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + String rentInfo = wxRentContract.getRentInfo(); + JSONArray rentInfoArray = JSONArray.parseArray(rentInfo); + int rentSize = rentInfoArray.size(); + Map shopInfoMap = new HashMap<>(); + for (int i = 0; i < rentSize; i++) { + JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); + shopInfoMap.put(rentInfoObject.getString("shopNumber"), 0); + } + shopInfoStr = JSONObject.toJSONString(shopInfoMap); + } + } + Map resultMap = new HashedMap(); List resultList = new ArrayList<>(); - int extralease = lease % receivePeriod; + int extralease = lease % receivePeriod; //余 int extracount = extralease > 0 ? 1 : 0; int paycount = lease / receivePeriod + extracount; int index = paycount - 1; final IdWorker idWorker = IdWorker.get(); - for (int i = 0; i < paycount; i++) { + //自然月,而且残月,周期整除,n+1,最后一个周期作为残月 + if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode()) + && !isFirstDay(wxRentContract.getRentalStartDate()) + && (wxRentContract.getLease() % wxRentContract.getReceivePeriod() == 0) + && isLastYesr + ){ + paycount ++; + } + for(int i = 0; i < paycount; i++){ WxBillRent wxBillRent = new WxBillRent(); wxBillRent.setIsPreview(isPreview); wxBillRent.setId(idWorker.nextId()); wxBillRent.setRentContractId(wxRentContract.getId()); wxBillRent.setPay(0); - System.out.println("-----------price:"+price+",receivePeriod:"+receivePeriod); + //System.out.println("-----------price:"+price+",receivePeriod:"+receivePeriod); int needpay = price * receivePeriod; - System.out.println("--------needpay:"+needpay); - + //System.out.println("--------needpay:"+needpay); - Date date = new Date(); Calendar instance = Calendar.getInstance(); + Date date = new Date(); instance.setTime(startdate); instance.add(dayType, receivePeriod * i); - instance.add(Calendar.DAY_OF_MONTH, -1); + if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + instance.add(Calendar.DAY_OF_MONTH, -1); + } Date time = instance.getTime(); wxBillRent.setReceiveDate(time); - //账单开始时间 instance.clear(); instance.setTime(wxBillRent.getReceiveDate()); - instance.add(Calendar.DAY_OF_MONTH, 1); + if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + instance.add(Calendar.DAY_OF_MONTH, 1); + } wxBillRent.setStarttime(instance.getTime()); //账单结束时间 instance.clear(); @@ -558,11 +880,14 @@ public class WxRentContractServiceImpl implements WxRentContractService { instance.add(Calendar.DAY_OF_MONTH, -1); wxBillRent.setEndtime(instance.getTime()); + //最后一个周期 if (extracount > 0 && i == index) { //账单开始时间 instance.clear(); instance.setTime(wxBillRent.getReceiveDate()); - instance.add(Calendar.DAY_OF_MONTH, 1); + if(!wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + instance.add(Calendar.DAY_OF_MONTH, 1); + } wxBillRent.setStarttime(instance.getTime()); //账单结束时间 instance.clear(); @@ -572,6 +897,100 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setEndtime(instance.getTime()); needpay = price * extralease; } + + //自然月,开始日期、缴款日,结束日期 + if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ + int rentStartDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxRentContract.getRentalStartDate())); + int startDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxBillRent.getStarttime())); + int endDateInt = Integer.parseInt(new SimpleDateFormat("d").format(wxRentContract.getRentalEndDate())); + + if(i == 0){//第一周期 + double oneDayProce = (double) price / DateUtils.getMonthDayCount(wxBillRent.getStarttime()); + double needPayDouble; + + if(receivePeriod <= 1) {//周期为一个月 + wxBillRent.setEndtime(DateUtils.getLastDayForMonth(wxBillRent.getStarttime())); + needPayDouble = oneDayProce * (DateUtils.getMonthDayCount(wxBillRent.getStarttime())-startDateInt+1); + }else{ //周期大于一个月 + Date firstDay = DateUtils.getFirstDayForCurrMonth(wxBillRent.getStarttime()); + instance.clear(); + instance.setTime(firstDay); + //最后一个期有余,加上残月,不整除时,最后一个月有余,否则为0 + if(extralease > 0 && (i == paycount - 1)){ + instance.add(dayType, extralease); + instance.add(Calendar.DAY_OF_MONTH, rentStartDateInt-1); + }else{ + instance.add(dayType, receivePeriod); + } + instance.add(Calendar.DAY_OF_MONTH, -1); + + wxBillRent.setEndtime(instance.getTime()); + if(isLastYesr && (i == paycount - 1)){ //最后一年 最后一期 + needPayDouble = 0; + oneDayProce = (double) price/DateUtils.getMonthDayCount(wxBillRent.getEndtime()); + if(receivePeriod > 1) { + needPayDouble += price * extralease; + } + needPayDouble += oneDayProce * endDateInt; + }else{ + //[A/31 *(31-12+1)]+A+A + needPayDouble = oneDayProce * (DateUtils.getMonthDayCount(wxBillRent.getStarttime())-startDateInt+1); + needPayDouble += price * (receivePeriod - 1); + } + } + DecimalFormat format = new DecimalFormat("0"); + needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入 + }else if(i < paycount - 1){//中间周期 + Date receiveDate = DateUtils.getFirstDayOfNextMonth(startdate,receivePeriod * i); + wxBillRent.setReceiveDate(receiveDate); + wxBillRent.setStarttime(receiveDate); + wxBillRent.setEndtime(DateUtils.getLastDayForMonth(receiveDate,receivePeriod * i)); + + instance.clear(); + instance.setTime(receiveDate); + instance.add(dayType, receivePeriod); + instance.add(Calendar.DAY_OF_MONTH, -1); + wxBillRent.setEndtime(instance.getTime()); + }else if(i == paycount - 1) {//最后周期 + Date receiveDate = DateUtils.getFirstDayOfNextMonth(startdate,receivePeriod * i); + wxBillRent.setReceiveDate(receiveDate); + wxBillRent.setStarttime(receiveDate); + + Date firstDay = DateUtils.getFirstDayForCurrMonth(wxBillRent.getStarttime()); + instance.clear(); + instance.setTime(firstDay); + //最后一期有余,加上残月,(不整除时,最后一个月有余,否则为0) + if(receivePeriod > 1) { + if(isLastYesr) { + instance.add(dayType, extralease); + }else{ + instance.add(dayType, receivePeriod); + } + } + if(isLastYesr) { + instance.add(Calendar.DAY_OF_MONTH, rentStartDateInt - 1); + } + instance.add(Calendar.DAY_OF_MONTH, -1); + wxBillRent.setEndtime(instance.getTime()); + + //逻辑同计算endtime + double needPayDouble = 0; + double oneDayProce = (double) price/DateUtils.getMonthDayCount(wxBillRent.getEndtime()); + if(receivePeriod > 1) { + if(isLastYesr) { + needPayDouble += price * extralease; + }else{ + needPayDouble += price * receivePeriod; + } + } + if(isLastYesr) { + needPayDouble += oneDayProce * endDateInt; + } + DecimalFormat format = new DecimalFormat("0"); + needpay = Integer.parseInt(format.format(needPayDouble)); //分做四舍五入 + } + } + wxBillRent.setNeedPay(needpay); wxBillRent.setOwe(needpay); wxBillRent.setReceivePay(needpay); @@ -605,6 +1024,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setIsDel(EnumDelStatus.NOT_DEL.getCode()); wxBillRent.setRentShopType(wxRentContract.getRentShopType()); wxBillRent.setPeriod(++billcount); + wxBillRent.setShopInfo(shopInfoStr); try { wxBillRentMapper.insertSelective(wxBillRent); resultList.add(wxBillRent); @@ -780,16 +1200,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } - //把状态为意见而商户未关联的数据改为待签约状态 - //wxRentContractMapper.updateStatusForUnsign(wxRentContract); - - //作废合同 - wxRentContract.setStatus(EnumRentContractStatus.INVALID.getCode()); - wxRentContractMapper.updateRentInvalidStatus(wxRentContract); - //待签约 wxRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); - //wxRentContractMapper.updateRentWaitSignStatus(wxRentContract); int waitSignCount = wxRentContractMapper.queryRentContractWaitSignStatus(wxRentContract); resultData.put("waitSignCount", waitSignCount); @@ -941,6 +1353,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } ResultData resultData = getResultDataForUpdate(record, userId); + if (resultData.code != Result.SUCCESS) { + return resultData; + } // 启动审批流 if(record.getFlowParams() != null){ record.getFlowParams().put("businessId",record.getId().toString()); @@ -998,16 +1413,46 @@ public class WxRentContractServiceImpl implements WxRentContractService { buildDeposit(wxMerchant, null,id); // } } + //作废合同 + updateInvalidContract(id); return new ResultData(Result.SUCCESS, "操作成功"); } public Map getRentAndPropertyInfo(Long id) { logger.info("获取租赁物业合同数据>>>>>>id:" + id); - WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(id); - WxShop record = new WxShop(); - record.setId(wxRentContract.getShopId()); - Map wxShop = wxShopMapper.findListMap(record).get(0); Map result = new HashMap<>(); + WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(id); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + JSONArray jsonArray = JSONArray.parseArray(wxRentContract.getRentInfo()); + StringBuffer shopNumberStr = new StringBuffer(); + StringBuffer floorNameStr = new StringBuffer(); + StringBuffer buildingNameStr = new StringBuffer(); + StringBuffer buildAreaStr = new StringBuffer(); + StringBuffer operationAreaStr = new StringBuffer(); + for (int i = 0, size = jsonArray.size(); i < size; i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + shopNumberStr.append("[").append(jsonObject.getString("shopNumber")).append("]"); + floorNameStr.append("[").append(jsonObject.getString("floor")).append("]"); + buildingNameStr.append("[").append(jsonObject.getString("building")).append("]"); + buildAreaStr.append("[").append(jsonObject.getString("buildArea")).append("]"); + operationAreaStr.append("[").append(jsonObject.getString("operationArea")).append("]"); + } + result.put("shopNumber", shopNumberStr); + result.put("floorName", floorNameStr); + result.put("buildingName", buildingNameStr); + result.put("buildArea", buildAreaStr); + result.put("operationArea", operationAreaStr); + } else { + WxShop record = new WxShop(); + record.setId(wxRentContract.getShopId()); + Map wxShop = wxShopMapper.findListMap(record).get(0); + //店铺信息 + result.put("shopNumber", wxShop.get("shopNumber")); + result.put("floorName", wxShop.get("floor")); + result.put("buildingName", wxShop.get("building")); + result.put("buildArea", wxShop.get("buildArea")); + result.put("operationArea", wxShop.get("operationArea")); + } //MALL信息 WxMall wxMall = new WxMall(); wxMall.setTenantId(wxRentContract.getTenantId()); @@ -1018,12 +1463,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { //经营业态 WxBusiness wxBusiness = wxBusinessMapper.selectByPrimaryKey(wxRentContract.getBusinessId()); result.put("business", wxBusiness.getTitle()); - //店铺信息 - result.put("shopNumber", wxShop.get("shopNumber")); - result.put("floorName", wxShop.get("floor")); - result.put("buildingName", wxShop.get("building")); - result.put("buildArea", wxShop.get("buildArea")); - result.put("operationArea", wxShop.get("operationArea")); + //商户信息 WxMerchant merchant = wxMerchantService.getById(wxRentContract.getMerchantId()); if (merchant != null) { @@ -1107,15 +1547,20 @@ public class WxRentContractServiceImpl implements WxRentContractService { int index = 10 - paycount; int count = paycount - 1; BigDecimal rentPrice = new BigDecimal(priceRent); - if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_AREA.getCode())) { - areaWay(wxRentContract, result, lease, 0, extralease, extracount, paycount, index, count, rentPrice); - } else { - //保底 + //保底 + if (wxRentContract.getRevenue() != null) { double revenue = new BigDecimal(wxRentContract.getRevenue()) .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); result.put("revenue", revenue); result.put("revenueUpper", digitUppercase(revenue)); - ratioWay(wxRentContract, result, lease, 0, extralease, extracount, paycount, index, count, rentPrice); + } else { + result.put("revenue", 0); + result.put("revenueUpper", digitUppercase(0)); + } + if (!wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + areaWay(wxRentContract, result, lease, extralease, extracount, paycount, index, count, rentPrice); + } else { + ratioWay(wxRentContract, result, lease, extralease, extracount, paycount, index, count, rentPrice); } //物业合同信息 WxPropertyContract propertyContract = new WxPropertyContract(); @@ -1208,9 +1653,10 @@ public class WxRentContractServiceImpl implements WxRentContractService { return result; } - public void ratioWay(WxRentContract wxRentContract, Map result, Integer lease, double adjustRatio, int extralease, int extracount, int paycount, int index, int count, BigDecimal rentPrice) { - - double payRatio = wxRentContract.getPayRatio() != null ? wxRentContract.getPayRatio() / 100.0 : 0; + public void ratioWay(WxRentContract wxRentContract, Map result, Integer lease, int extralease, int extracount, int paycount, int index, int count, BigDecimal rentPrice) { + String adjustRatio = wxRentContract.getAdjustRatio(); + List integers = JSONArray.parseArray(adjustRatio, Integer.class); + integers.add(0, 0); //常规租期 for (int i = 0; i <= count; i++) { //开始时间 @@ -1234,9 +1680,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateYear" + i, enddate.substring(0, 4)); result.put("rentalEndDateMonth" + i, enddate.substring(5, 7)); result.put("rentalEndDateDay" + i, enddate.substring(8)); - result.put("adjustRatio" + i, wxRentContract.getAdjustRatio()); + String ratio = new BigDecimal(integers.get(i)).divide(new BigDecimal(100)).toPlainString(); + result.put("adjustRatio" + i, ratio); result.put("adjustPeriod" + i, wxRentContract.getAdjustPeriod()); - result.put("payRatio" + i, wxRentContract.getPayRatio()); + String payRatio = new BigDecimal(wxRentContract.getPayRatio()).divide(new BigDecimal(100)).toPlainString(); + result.put("payRatio" + i, payRatio); } if (extracount > 0) { @@ -1264,11 +1712,12 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateDay" + count, enddate.substring(8)); result.put("adjustRatio" + count, wxRentContract.getAdjustRatio()); result.put("adjustPeriod" + count, wxRentContract.getAdjustPeriod()); - result.put("payRatio" + count, wxRentContract.getPayRatio()); + String payRatio = new BigDecimal(wxRentContract.getPayRatio()).divide(new BigDecimal(100)).toPlainString(); + result.put("payRatio" + count, payRatio); } //无数据租期 - for (int i = paycount; i <= index; i++) { + for (int i = paycount; i <= 10; i++) { result.put("rentalStartDate" + i, "/"); result.put("rentalStartDateYear" + i, "/"); result.put("rentalStartDateMonth" + i, "/"); @@ -1283,7 +1732,50 @@ public class WxRentContractServiceImpl implements WxRentContractService { } } - public void areaWay(WxRentContract wxRentContract, Map result, Integer lease, double adjustRatio, int extralease, int extracount, int paycount, int index, int count, BigDecimal rentPrice) { + public void areaWay(WxRentContract wxRentContract, Map result, Integer lease, int extralease, int extracount, int paycount, int index, int count, BigDecimal rentPrice) { + + int[] priceArrs = new int[]{}; + List adjustRatioList = new ArrayList<>(); + adjustRatioList.add(0, "0"); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + String rentInfo = wxRentContract.getRentInfo(); + JSONArray objects = JSONArray.parseArray(rentInfo); + JSONObject jsonObject = objects.getJSONObject(0); + JSONArray adjustRatio = jsonObject.getJSONArray("adjustRatio"); + for (int i = 0, size = adjustRatio.size(); i < size; i++) { + StringBuffer adjustRatioStr = new StringBuffer(); + for (int j = 0, shopSize = objects.size(); j < shopSize; j++) { + JSONObject shopObject = objects.getJSONObject(j); + JSONArray adjustRatioArr = shopObject.getJSONArray("adjustRatio"); + String shopNumber = shopObject.getString("shopNumber"); + double ratioStr = new BigDecimal(adjustRatioArr.getIntValue(i)).divide(new BigDecimal(100)).doubleValue(); + adjustRatioStr.append(shopNumber).append("[").append(ratioStr).append("]"); + } + adjustRatioList.add(adjustRatioStr.toString()); + } + List priceList = computePrice(rentInfo); + int size = priceList.size(); + priceArrs = new int[size]; + for (int i = 0; i < size; i++) { + int[] priceInt = priceList.get(i); + int sum = 0; + for (int p : priceInt) { + sum += p; + } + priceArrs[i] = sum; + } + } else { + String adjustRatio = wxRentContract.getAdjustRatio(); + List integers = JSONArray.parseArray(adjustRatio, Integer.class); + for (int i = 0, size = integers.size(); i < size; i++) { + double ratioStr = new BigDecimal(integers.get(i)).divide(new BigDecimal(100)).doubleValue(); + adjustRatioList.add(String.valueOf(ratioStr)); + } + } + String payRatioStr = "0"; + if (wxRentContract.getPayRatio() != null) { + payRatioStr = new BigDecimal(wxRentContract.getPayRatio()).divide(new BigDecimal(100)).toPlainString(); + } //常规租期 for (int i = 0; i <= count; i++) { //开始时间 @@ -1307,13 +1799,21 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateYear" + i, enddate.substring(0, 4)); result.put("rentalEndDateMonth" + i, enddate.substring(5, 7)); result.put("rentalEndDateDay" + i, enddate.substring(8)); - if (i > 0) { - rentPrice = rentPrice.multiply(new BigDecimal(adjustRatio)) + + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + rentPrice = new BigDecimal(priceArrs[i]).divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + result.put("priceRentUpper" + i, digitUppercase(rentPrice.doubleValue())); + result.put("priceRent" + i, rentPrice.doubleValue()); + result.put("adjustRatio" + i, adjustRatioList.get(i)); + } else { + rentPrice = rentPrice.multiply(new BigDecimal(adjustRatioList.get(i))) .add(rentPrice).setScale(2, RoundingMode.HALF_EVEN); result.put("priceRentUpper" + i, digitUppercase(rentPrice.doubleValue())); result.put("priceRent" + i, rentPrice.doubleValue()); + result.put("adjustRatio" + i, adjustRatioList.get(i)); } - result.put("adjustRatio" + i, wxRentContract.getAdjustRatio()); + result.put("payRatio" + i, payRatioStr); + result.put("adjustPeriod" + i, wxRentContract.getAdjustPeriod()); } if (extracount > 0) { //额外租期 @@ -1339,15 +1839,20 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateMonth" + count, enddate.substring(5, 7)); result.put("rentalEndDateDay" + count, enddate.substring(8)); - rentPrice = rentPrice.multiply(new BigDecimal(adjustRatio)) - .add(rentPrice).setScale(2, RoundingMode.HALF_EVEN); - result.put("priceRentUpper" + count, digitUppercase(rentPrice.doubleValue())); - result.put("priceRent" + count, rentPrice.doubleValue()); - result.put("adjustRatio" + count, wxRentContract.getAdjustRatio()); + if (wxRentContract.getRentShopType().equals(EnumRentShopType.SHOP.getCode())) { + rentPrice = new BigDecimal(priceArrs[count]).divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + result.put("priceRentUpper" + count, digitUppercase(rentPrice.doubleValue())); + result.put("priceRent" + count, rentPrice.doubleValue()); + } else { + rentPrice = rentPrice.multiply(new BigDecimal(adjustRatioList.get(count))) + .add(rentPrice).setScale(2, RoundingMode.HALF_EVEN); + result.put("priceRentUpper" + count, digitUppercase(rentPrice.doubleValue())); + result.put("priceRent" + count, rentPrice.doubleValue()); + } } //无数据租期 - for (int i = paycount; i <= index; i++) { + for (int i = paycount; i <= 10; i++) { result.put("rentalStartDate" + i, "/"); result.put("rentalStartDateYear" + i, "/"); result.put("rentalStartDateMonth" + i, "/"); @@ -1359,6 +1864,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("priceRentUpper" + i, "/"); result.put("priceRent" + i, "/"); result.put("adjustRatio" + i, "/"); + result.put("payRatio" + i, "/"); + result.put("adjustPeriod" + i, "/"); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java index 9f1e0524e..fc62cf0ec 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; import com.iformall.enums.EnumBusiness; +import com.iformall.enums.EnumScoreRules; import com.iformall.enums.EnumScoreType; import com.iformall.mapper.WxCUserBasicInfoMapper; import com.iformall.mapper.WxCUserMapper; @@ -26,7 +27,9 @@ import java.util.List; public class WxScoreRulesServiceImpl implements WxScoreRulesService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private String keyPrev = "setting:scorerules:"; + private String keyPrev = "setting:scorerules1:"; + + private String creditKeyPrev = "setting:creditrules1:"; @Autowired WxScoreRulesMapper wxScoreRulesMapper; @@ -57,18 +60,20 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { WxScoreRules scoreRules = new WxScoreRules(); scoreRules.setTenantId(tenantId); + scoreRules.setType(EnumScoreRules.SCORE.getCode()); List list = wxScoreRulesMapper.findList(scoreRules); if (list.size() > 0) { scoreRules = list.get(0); + scoreRules.setRules(getScoreRulesNew(scoreRules.getRules(),EnumScoreRules.SCORE)); + } else { // 如果成长值规则不存在,启用默认值 final IdWorker idWorker = IdWorker.get(); scoreRules.setId(idWorker.nextId()); - scoreRules.setRules(WxScoreRules.getDefaultRules()); + scoreRules.setRules(WxScoreRules.getScoreDefaultRules()); wxScoreRulesMapper.insertSelective(scoreRules); } - // 插入缓存 scoreRulesRedisTemplate.opsForValue().set(key, scoreRules); logger.info("WxScoreRulesServiceImpl.getScoreRules() : 成长值设置插入缓存 >> " + scoreRules.toString()); @@ -76,6 +81,80 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { return scoreRules; } + //当成长值或积分规则新增时,将新增的数据一并返回给接口调用端 + private String getScoreRulesNew(String scoreRules,EnumScoreRules enumScoreRules){ + //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"); + if (jsonArrayOld.size() < jsonArrayDefault.size()) { + JSONArray childsJsonArray = new JSONArray(); + JSONObject otherJSONObject = new JSONObject(); + //组装新的childs + for (int i = 0; i < jsonArrayDefault.size(); i++) { + JSONObject defaultJSONObject = jsonArrayDefault.getJSONObject(i); + if (i < jsonArrayOld.size()) { + JSONObject oldJSONObject = jsonArrayOld.getJSONObject(i); + if (defaultJSONObject.getString("businessId").equals(oldJSONObject.getString("businessId"))) { + childsJsonArray.add(oldJSONObject); + }else { + childsJsonArray.add(defaultJSONObject); + otherJSONObject = oldJSONObject; + } + } else { + childsJsonArray.add(defaultJSONObject); + } + } + //businessId为6的是其它需要放到最后 + childsJsonArray.remove(childsJsonArray.size()-1); + childsJsonArray.add(otherJSONObject); + //将变更后的childs替换 + JSONArray originalJSONArray = JSONArray.parseArray(scoreRules); + JSONObject newJSONObject = new JSONObject(); + newJSONObject.put("id",EnumScoreType.CONSUMPTION.getCode()); + newJSONObject.put("childs",childsJsonArray); + //移除下标为1的JSONArray 即:EnumScoreType.CONSUMPTION(2, "消费") + originalJSONArray.remove(1); + originalJSONArray.add(1,newJSONObject); + return originalJSONArray.toJSONString(); + } + return scoreRules; + } + + @Override + public WxScoreRules getCreditRules(String tenantId) { + // get pushLime from cache + String key = creditKeyPrev + tenantId; + + // 缓存存在 + if (scoreRulesRedisTemplate.hasKey(key)) { + WxScoreRules wScoreRules = scoreRulesRedisTemplate.opsForValue().get(key); + logger.info("WxScoreRulesServiceImpl.getScoreRules() : 从缓存中获取了积分值设置 >> " + wScoreRules.toString()); + return wScoreRules; + } + + WxScoreRules scoreRules = new WxScoreRules(); + scoreRules.setTenantId(tenantId); + scoreRules.setType(EnumScoreRules.CREDIT.getCode()); + List list = wxScoreRulesMapper.findList(scoreRules); + if (list.size() > 0) { + scoreRules = list.get(0); + scoreRules.setRules(getScoreRulesNew(scoreRules.getRules(),EnumScoreRules.CREDIT)); + } else { + // 如果积分规则不存在,启用默认值 + final IdWorker idWorker = IdWorker.get(); + scoreRules.setId(idWorker.nextId()); + scoreRules.setRules(WxScoreRules.getCreditDefaultRules()); + + wxScoreRulesMapper.insertSelective(scoreRules); + } + + // 插入缓存 + scoreRulesRedisTemplate.opsForValue().set(key, scoreRules); + logger.info("WxScoreRulesServiceImpl.getScoreRules() : 积分设置插入缓存 >> " + scoreRules.toString()); + + return scoreRules; + } @Override @@ -89,12 +168,23 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { wxScoreRulesMapper.updateByPrimaryKeySelective(record); } - // 缓存存在,删除缓存 - String key = keyPrev + record.getTenantId(); - boolean hasKey = scoreRulesRedisTemplate.hasKey(key); - if (hasKey) { - scoreRulesRedisTemplate.delete(key); - logger.info("WxScoreRulesServiceImpl.saveOrUpdate() : 从缓存中删除成长值设置 >> " + record.toString()); + if (record != null && record.getType() == EnumScoreRules.SCORE.getCode()) { + // 缓存存在,删除缓存 + String key = keyPrev + record.getTenantId(); + boolean hasKey = scoreRulesRedisTemplate.hasKey(key); + if (hasKey) { + scoreRulesRedisTemplate.delete(key); + logger.info("WxScoreRulesServiceImpl.saveOrUpdate() : 从缓存中删除成长值设置 >> " + record.toString()); + } + } + if (record != null && record.getType() == EnumScoreRules.CREDIT.getCode()) { + // 缓存存在,删除缓存 + String key = creditKeyPrev + record.getTenantId(); + boolean hasKey = scoreRulesRedisTemplate.hasKey(key); + if (hasKey) { + scoreRulesRedisTemplate.delete(key); + logger.info("WxScoreRulesServiceImpl.saveOrUpdate() : 从缓存中删除积分设置 >> " + record.toString()); + } } } @@ -123,6 +213,8 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { } } + + private void resetBasicUserScore(Long userId, int scoreNumber) { // 1. basicUser WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectByPrimaryKey(userId); @@ -481,4 +573,9 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { } return 0; } + + @Override + public List findList(WxScoreRules wxScoreRules) { + return wxScoreRulesMapper.findList(wxScoreRules); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java index dda1a7aa3..c70dd7076 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java @@ -13,13 +13,13 @@ import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxScreenAd; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.enums.EnumCouponChannelType; -import com.iformall.enums.EnumCouponType; import com.iformall.enums.EnumScreenAdType; import com.iformall.mapper.WxCampaignMapper; import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxScreenAdMapper; import com.iformall.service.WxAppinfoService; import com.iformall.service.WxScreenAdService; +import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.MaUtil; import me.chanjar.weixin.common.error.WxErrorException; import org.slf4j.Logger; @@ -33,6 +33,9 @@ import java.util.List; @Service public class WxScreenAdServiceImpl implements WxScreenAdService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private boolean isFmOpen; @Autowired WxScreenAdMapper wxScreenAdMapper; @@ -40,6 +43,9 @@ public class WxScreenAdServiceImpl implements WxScreenAdService { @Autowired WxAppinfoService wxAppinfoService; + @Autowired + private FmOpenService openService; + @Autowired WxCouponChannelMapper wxCouponChannelMapper; @@ -162,12 +168,18 @@ public class WxScreenAdServiceImpl implements WxScreenAdService { private static String QRCODE_JUMP_CMD_COUPON = "JC"; private static String QRCODE_JUMP_CMD_GROUP = "JG"; private static String QRCODE_JUMP_CMD_CAMPGIN = "JB"; + private byte[] getQrcode(Long id, int type, int subType, WxAppinfo appInfo) throws Exception { if(appInfo == null) { logger.error("QRCODE get error: appinfo is null"); return null; } - WxMaService wxMaService = MaUtil.getWeappService(appInfo); + WxMaService wxMaService = null; + if(isFmOpen) { + wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appInfo.getAppId()); + } else { + wxMaService = MaUtil.getWeappService(appInfo); + } String scene = ""; if (EnumScreenAdType.COUPON.getCode().equals(type)) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java index 3466c954c..58d47e903 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java @@ -1,29 +1,33 @@ package com.iformall.service.impl; -import java.io.*; -import java.util.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxMerchantShop; import com.iformall.domain.po.WxShop; -import com.iformall.enums.*; +import com.iformall.domain.vo.WxNotRentShopVo; +import com.iformall.domain.vo.WxShopVo; +import com.iformall.enums.EnumDelStatus; +import com.iformall.enums.EnumRentShopType; +import com.iformall.enums.EnumShopStatus; +import com.iformall.enums.EnumUserAdmin; +import com.iformall.mapper.WxMerchantShopMapper; import com.iformall.mapper.WxShopMapper; +import com.iformall.service.ExcelService; import com.iformall.service.WxShopService; -import com.iformall.utils.Constant; -import com.iformall.utils.DownFileUtil; -import org.apache.commons.io.FileUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.xssf.streaming.SXSSFSheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.iformall.common.IdWorker; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.*; @Service public class WxShopServiceImpl implements WxShopService { @@ -32,6 +36,12 @@ public class WxShopServiceImpl implements WxShopService { @Autowired WxShopMapper wxShopMapper; + @Autowired + WxMerchantShopMapper wxMerchantShopMapper; + + @Autowired + ExcelService excelService; + @Override public PageInfo listAsPage(WxShop record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxShopMapper.findList(record)); @@ -59,6 +69,10 @@ public class WxShopServiceImpl implements WxShopService { Date date = new Date(); record.setUpdateDate(date); record.setCreateDate(date); + //若计租面积无值 则采用建筑面积 + if (StringUtils.isBlank(record.getOperationArea()) || "0".equals(record.getOperationArea())) { + record.setOperationArea(record.getBuildArea()); + } wxShopMapper.insertSelective(record); return new ResultData(Result.SUCCESS,"添加成功"); } else { @@ -69,8 +83,39 @@ public class WxShopServiceImpl implements WxShopService { } @Override - public void deleteById(Long id) { - wxShopMapper.deleteByPrimaryKey(id); + public ResultData deleteById(Long id, Integer isAdmin) { + //1、已出租不让删除 + WxShop wxShop = wxShopMapper.selectByPrimaryKey(id); + if (wxShop == null) { + return new ResultData(ErrorCode.SHOP_IS_NOT_FOUND); + } + if (wxShop.getStatus().equals(EnumShopStatus.RENT.getCode())) { + return new ResultData(ErrorCode.SHOP_BAN_DELETED); + } + //2、是否关联过商户 + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setShopId(wxShop.getId()); + List wxMerchantShops = wxMerchantShopMapper.select(wxMerchantShop); + //有关联过商户必须是管理员才能删除 + int count = wxMerchantShops.size(); + if (count > 0) { + if (!isAdmin.equals(EnumUserAdmin.ADMIN.getCode())) { + return new ResultData(ErrorCode.SHOP_DELETED_BY_ADMIN); + } + //更新标记 + wxShop.setIsDel(EnumDelStatus.DEL.getCode()); + wxShopMapper.updateByPrimaryKeySelective(wxShop); + //关联表 + for (int i = 0; i < count; i++) { + WxMerchantShop updateMerchantShop = wxMerchantShops.get(i); + updateMerchantShop.setIsDel(EnumDelStatus.DEL.getCode()); + wxMerchantShopMapper.updateByPrimaryKeySelective(updateMerchantShop); + } + } else { + //无关联商铺直接删除 + wxShopMapper.deleteByPrimaryKey(id); + } + return new ResultData(Result.SUCCESS, "删除成功"); } @Override @@ -110,132 +155,22 @@ public class WxShopServiceImpl implements WxShopService { return pageInfo; } - @Override public void exportShop(WxShop wxShop, HttpServletRequest request, HttpServletResponse response) { - List> shopList = wxShopMapper.findListWithMerchantMap(wxShop); - - SXSSFWorkbook workbook; - String filepath = Constant.fileDirectory; - File savefile = new File(filepath); - if (!savefile.exists()) { - savefile.mkdirs(); - } - String filename = UUID.randomUUID() + ".xlsx"; - filepath = filepath + filename; - - try { - File file = new File(filepath); - workbook = new SXSSFWorkbook(100); - String sheetName = EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"店铺列表":"多经点位列表"; - SXSSFSheet sheetTwo = workbook.createSheet(sheetName); - Row rowtwo = sheetTwo.createRow(0); - - Cell cell1,cell2,cell3,cell4,cell5,cell6,cell7,cell8,cell9,cell10,cell11; - if(EnumRentShopType.POINT.getCode().equals(wxShop.getType())){ - Cell cell0 = rowtwo.createCell(0); - cell0.setCellValue("多经点位类型"); - cell1 = rowtwo.createCell(1); - cell2 = rowtwo.createCell(2); - cell3 = rowtwo.createCell(3); - cell4 = rowtwo.createCell(4); - cell5 = rowtwo.createCell(5); - cell6 = rowtwo.createCell(6); - cell7 = rowtwo.createCell(7); - cell8 = rowtwo.createCell(8); - cell9 = rowtwo.createCell(9); - cell10 = rowtwo.createCell(10); - cell11 = rowtwo.createCell(11); - }else{ - cell1 = rowtwo.createCell(0); - cell2 = rowtwo.createCell(1); - cell3 = rowtwo.createCell(2); - cell4 = rowtwo.createCell(3); - cell5 = rowtwo.createCell(4); - cell6 = rowtwo.createCell(5); - cell7 = rowtwo.createCell(6); - cell8 = rowtwo.createCell(7); - cell9 = rowtwo.createCell(8); - cell10 = rowtwo.createCell(9); - cell11 = rowtwo.createCell(10); - } - - cell1.setCellValue(EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"商铺号":"多经点位号"); - cell2.setCellValue("租赁商户"); - cell3.setCellValue("楼层"); - cell4.setCellValue("楼座"); - cell5.setCellValue("建筑面积(㎡)"); - cell6.setCellValue("计租面积(㎡)"); - cell7.setCellValue(EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"商铺状态":"多经点位状态"); - // 商户信息 - cell8.setCellValue("经营业态"); - cell9.setCellValue("品牌"); - cell10.setCellValue("负责人"); - cell11.setCellValue("负责人电话"); - - for (int i = 0; i < shopList.size(); i++) { - rowtwo = sheetTwo.createRow(i + 1); - Map entity = shopList.get(i); - - if(EnumRentShopType.POINT.getCode().equals(wxShop.getType())){ - Cell cell0 = rowtwo.createCell(0); - if (entity.get("pointType") != null) { - cell0.setCellValue(EnumPointType.getEnum((Integer) entity.get("pointType")).getMessage()); - } - cell1 = rowtwo.createCell(1); - cell2 = rowtwo.createCell(2); - cell3 = rowtwo.createCell(3); - cell4 = rowtwo.createCell(4); - cell5 = rowtwo.createCell(5); - cell6 = rowtwo.createCell(6); - cell7 = rowtwo.createCell(7); - cell8 = rowtwo.createCell(8); - cell9 = rowtwo.createCell(9); - cell10 = rowtwo.createCell(10); - cell11 = rowtwo.createCell(11); - }else{ - cell1 = rowtwo.createCell(0); - cell2 = rowtwo.createCell(1); - cell3 = rowtwo.createCell(2); - cell4 = rowtwo.createCell(3); - cell5 = rowtwo.createCell(4); - cell6 = rowtwo.createCell(5); - cell7 = rowtwo.createCell(6); - cell8 = rowtwo.createCell(7); - cell9 = rowtwo.createCell(8); - cell10 = rowtwo.createCell(9); - cell11 = rowtwo.createCell(10); - } - cell1.setCellValue((String)entity.get("shopNumber")); - cell2.setCellValue((String)entity.get("merchantName")); - cell3.setCellValue((String)entity.get("floor")); - cell4.setCellValue((String)entity.get("building")); - cell5.setCellValue((String)entity.get("buildArea")); - cell6.setCellValue((String)entity.get("operationArea")); - if(entity.get("status") != null) { - if(EnumShopStatus.RENT.getCode().equals(entity.get("status"))) { - cell7.setCellValue("已出租"); - // 查询商户信息 - cell8.setCellValue((String)entity.get("title")); - cell9.setCellValue((String)entity.get("brand")); - cell10.setCellValue((String)entity.get("link_person")); - cell11.setCellValue((String)entity.get("link_phone")); - }else{ - cell7.setCellValue("未出租"); - } - } - } + List list = wxShopMapper.findListWithMerchantMap(wxShop); + String name = EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"店铺列表":"多经点位列表"; + excelService.exportExcel(list,null, name, WxShopVo.class,name+".xls",response); + } - FileOutputStream fileOut = new FileOutputStream(file); - workbook.write(fileOut); - fileOut.close(); - workbook.close(); - String name = EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"店铺列表":"多经点位列表"; - DownFileUtil.downFile(filepath,name+".xlsx",response, request); - FileUtils.forceDelete(file); - } catch (Exception e) { - e.printStackTrace(); + @Override + public void exportNotRentShop(WxShop wxShop, HttpServletRequest request, HttpServletResponse response) { + List list = wxShopMapper.findList(wxShop); + List notRentShopVoList = new ArrayList<>(); + for (WxShop ws:list) { + WxNotRentShopVo notRentShopVo = new WxNotRentShopVo(); + BeanUtils.copyProperties(ws, notRentShopVo); + notRentShopVoList.add(notRentShopVo); } + String name = "未出租商铺列表"; + excelService.exportExcel(notRentShopVoList,null, name, WxNotRentShopVo.class,name+".xls",response); } - - } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxSubBusinessServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxSubBusinessServiceImpl.java new file mode 100644 index 000000000..53f3d1d0b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxSubBusinessServiceImpl.java @@ -0,0 +1,47 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxBusiness; +import com.iformall.domain.po.WxSubBusiness; +import com.iformall.mapper.WxBusinessMapper; +import com.iformall.mapper.WxSubBusinessMapper; +import com.iformall.service.WxBusinessService; +import com.iformall.service.WxSubBusinessService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class WxSubBusinessServiceImpl implements WxSubBusinessService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxSubBusinessMapper wxSubBusinessMapper; + + @Override + public PageInfo listAsPage(WxSubBusiness record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxSubBusinessMapper.findList(record)); + } + + @Override + public List findList(WxSubBusiness record) { + return wxSubBusinessMapper.findList(record); + } + + @Override + public List findListAll() { + return wxSubBusinessMapper.findListAll(); + } + + + @Override + public WxSubBusiness getById(Integer id) { + return wxSubBusinessMapper.selectByPrimaryKey(id); + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxTagsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxTagsServiceImpl.java index 68b3189a5..8f35a67cd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxTagsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxTagsServiceImpl.java @@ -4,8 +4,14 @@ import java.util.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxTags; +import com.iformall.domain.po.WxTagsGroup; +import com.iformall.domain.po.WxTagsType; +import com.iformall.domain.vo.WxTagsGroupVo; +import com.iformall.domain.vo.WxTagsTypeVo; import com.iformall.mapper.WxTagsMapper; +import com.iformall.service.WxTagsGroupService; import com.iformall.service.WxTagsService; +import com.iformall.service.WxTagsTypeService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +25,12 @@ public class WxTagsServiceImpl implements WxTagsService { @Autowired WxTagsMapper wxTagsMapper; + @Autowired + private WxTagsTypeService wxTagsTypeService; + + @Autowired + private WxTagsGroupService wxTagsGroupService; + @Override public PageInfo listAsPage(WxTags record, Integer pageIndex, Integer pageSize) { @@ -51,4 +63,35 @@ public class WxTagsServiceImpl implements WxTagsService { public List findList(WxTags wxTags) { return wxTagsMapper.findList(wxTags); } + + @Override + public List listAllVo() { + List groupVos = new ArrayList<>(); + List groups = wxTagsGroupService.findList(null); + for (WxTagsGroup tg : groups) { + WxTagsGroupVo tgvo = new WxTagsGroupVo(); + tgvo.setId(tg.getId()); + tgvo.setName(tg.getName()); + + WxTagsType type = new WxTagsType(); + type.setGroupId(tg.getId()); + List typeVos = new ArrayList<>(); + List types = wxTagsTypeService.findList(type); + for (WxTagsType tt : types) { + WxTagsTypeVo ttvo = new WxTagsTypeVo(); + ttvo.setId(tt.getId()); + ttvo.setName(tt.getName()); + ttvo.setFlag(tt.getFlag()); + + WxTags t = new WxTags(); + t.setTypeId(tt.getId()); + ttvo.setTags(findList(t)); + typeVos.add(ttvo); + } + tgvo.setTypes(typeVos); + groupVos.add(tgvo); + } + return groupVos; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxTopicServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxTopicServiceImpl.java new file mode 100644 index 000000000..3b8d3fa27 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxTopicServiceImpl.java @@ -0,0 +1,128 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.common.Result; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxTopic; +import com.iformall.enums.EnumCouponChannelType; +import com.iformall.enums.EnumWxTopicStatus; +import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxCouponMapper; +import com.iformall.mapper.WxTopicMapper; +import com.iformall.service.WxTopicService; +import com.iformall.utils.DateUtils; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import com.iformall.common.ResultData; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author luozukai ^_^ + * @date 2019/3/28 17:02 + */ +@Service +public class WxTopicServiceImpl implements WxTopicService { + @Autowired + private WxTopicMapper wxTopicMapper; + @Autowired + private WxCouponMapper wxCouponMapper; + @Autowired + private WxCouponChannelMapper wxCouponChannelMapper; + + @Override + public PageInfo listAsPage(WxTopic record, Integer pageIndex, Integer pageSize) { + wxTopicMapper.updateStatus(record); + if(StringUtils.isNotBlank(record.getStatusStr())){ + String[] array = record.getStatusStr().split(","); + List integerList = new ArrayList<>(); + for (String status:array) { + integerList.add(Integer.parseInt(status)); + } + record.setStatusList(integerList); + } + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxTopicMapper.findList(record)); + } + + @Override + public WxTopic show(WxTopic record) { + WxTopic wxTopic = wxTopicMapper.show(record); + if(wxTopic != null) { + wxTopic.setCouponList(wxCouponMapper.findCouponByTopic(record)); + } + return wxTopic; + } + + @Override + public ResultData saveOrUpdate(WxTopic record) { + //验证是否存在已发放的专题 + if(record.getStatus().equals(EnumWxTopicStatus.VAILD.getCode())) { + WxTopic query = new WxTopic(); + query.setTenantId(record.getTenantId()); + if(record.getId() != null && record.getBeginTime() == null){ + WxTopic wt = wxTopicMapper.selectByPrimaryKey(record.getId()); + query.setBeginTime(wt.getBeginTime()); + query.setEndTime(wt.getEndTime()); + }else{ + query.setBeginTime(record.getBeginTime()); + query.setEndTime(record.getEndTime()); + } + List topicList = wxTopicMapper.findExist(query); + if (CollectionUtils.isNotEmpty(topicList)) { + return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION.getCode(), "["+topicList.get(0).getName()+"]正在活动中,截止至"+ DateUtils.date2String(topicList.get(0).getEndTime(),"yyyy-MM-dd")); + } + } + if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + wxTopicMapper.insertSelective(record); + + if(StringUtils.isNotBlank(record.getCouponIds())) { + addCouponTopic(record); + } + return new ResultData(Result.SUCCESS,"添加成功"); + } else { + record.setUpdatetime(new Date()); + wxTopicMapper.updateByPrimaryKeySelective(record); + if(StringUtils.isNotBlank(record.getCouponIds())) { + wxCouponChannelMapper.delByTopic(record); + addCouponTopic(record); + } + return new ResultData(Result.SUCCESS,"更新成功"); + } + } + + public void addCouponTopic(WxTopic record){ + for (String couponId:JSONArray.parseArray(record.getCouponIds(), String.class)) { + final IdWorker idWorker = IdWorker.get(); + String[] couponArray = couponId.split("-"); + //保存coupon_channel + WxCoupon wxCoupon = wxCouponMapper.selectByPrimaryKey(Long.parseLong(couponArray[1])); + WxCouponChannel wxCouponChannel = new WxCouponChannel(); + wxCouponChannel.setId(idWorker.nextId()); + wxCouponChannel.setBeginTime(record.getBeginTime()); + wxCouponChannel.setEndTime(record.getEndTime()); + wxCouponChannel.setCouponId(Long.parseLong(couponArray[1])); + wxCouponChannel.setSubTargetId(record.getId()); + wxCouponChannel.setTenantId(record.getTenantId()); + wxCouponChannel.setTitle(wxCoupon.getTitle()); + wxCouponChannel.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_TOPIC.getCode()); + wxCouponChannelMapper.insertSelective(wxCouponChannel); + } + } + + @Override + public WxTopic findById(WxTopic record) { + WxTopic wxTopic = wxTopicMapper.selectByPrimaryKey(record.getId()); + wxTopic.setCouponList(wxCouponMapper.findCouponByTopic(record)); + return wxTopic; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/MsgSendService.java b/mallinkService/src/main/java/com/iformall/service/msg/MsgSendService.java similarity index 58% rename from mallinkService/src/main/java/com/iformall/service/MsgSendService.java rename to mallinkService/src/main/java/com/iformall/service/msg/MsgSendService.java index 264ef6088..52b1143dc 100644 --- a/mallinkService/src/main/java/com/iformall/service/MsgSendService.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/MsgSendService.java @@ -1,6 +1,6 @@ -package com.iformall.service; +package com.iformall.service.msg; -import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.msg.BaseMsg; /** * 发送消息 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendCallBackSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java similarity index 94% rename from mallinkService/src/main/java/com/iformall/service/impl/SendCallBackSmsServiceImpl.java rename to mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java index ccc37620c..cd4f9f9f6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/SendCallBackSmsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java @@ -1,15 +1,17 @@ -package com.iformall.service.impl; +package com.iformall.service.msg.impl; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.WxMsg; import com.iformall.enums.EnumMsgSendStatus; import com.iformall.enums.EnumMsgStatus; import com.iformall.enums.EnumVerifyCode; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; -import com.iformall.service.MsgSendService; +import com.iformall.service.msg.MsgSendService; import com.iformall.service.WxMsgService; import com.iformall.service.WxMsgValidationcodeService; import com.iformall.utils.DateUtils; @@ -61,6 +63,9 @@ public class SendCallBackSmsServiceImpl implements MsgSendService { if (wxMsgConfig.getRemains() < record.getExpectSendNumber()) { throw new MallinkException(ErrorCode.MSG_SUM_INSUFFICENT); } + if(wxMsgConfig.getTotal() <=0l){ + throw new MallinkException(ErrorCode.MSG_CONFIG_ACCOUNT); + } } WxCouponInject couponInject = record.getCouponInject(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendEmailServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java similarity index 95% rename from mallinkService/src/main/java/com/iformall/service/impl/SendEmailServiceImpl.java rename to mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java index ec688ce68..a9669d416 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/SendEmailServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java @@ -1,10 +1,10 @@ -package com.iformall.service.impl; +package com.iformall.service.msg.impl; -import com.iformall.domain.po.BaseMsg; -import com.iformall.domain.po.MailMsg; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.MailMsg; import com.iformall.domain.po.WxMsgModel; import com.iformall.mapper.WxMsgModelMapper; -import com.iformall.service.MsgSendService; +import com.iformall.service.msg.MsgSendService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendMpMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendMpMsgServiceImpl.java new file mode 100644 index 000000000..b11bccdfc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendMpMsgServiceImpl.java @@ -0,0 +1,66 @@ +package com.iformall.service.msg.impl; + +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.MpAppMsg; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxTemplateMsgMapper; +import com.iformall.service.msg.MsgSendService; +import com.iformall.service.wechat.FmOpenService; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 发送微信公众号模板消息 + * @author Stormeye + * @date 2019/4/9 13:51 + */ +@Service +public class SendMpMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxTemplateMsgMapper wxTemplateMsgMapper; + + @Autowired + private FmOpenService openService; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + MpAppMsg mpAppMsg = (MpAppMsg)baseMsg; + WxTemplateMsg msg = null; + + WxMpService wxMpService = openService.getWxOpenComponentService().getWxMpServiceByAppid(mpAppMsg.getAppId()); + + // 查询信息模板 + WxTemplateMsg msgQ = new WxTemplateMsg(); + msgQ.setTenantId(mpAppMsg.getTenantId()); + msgQ.setType(mpAppMsg.getTemplateType()); + try { + msg = wxTemplateMsgMapper.selectOne(msgQ); + } catch (Exception e) { + logger.error("公众号消息模板错误: " + e.getMessage()); + } + if (msg == null) { + logger.error("找不到模板Id"); + throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); + } + + WxMpTemplateMessage.MiniProgram miniprogram = new WxMpTemplateMessage.MiniProgram(); + miniprogram.setAppid(mpAppMsg.getMiniAppId()); + miniprogram.setPagePath(mpAppMsg.getMiniPagePath()); + + WxMpTemplateMessage mpTemplateMessage = WxMpTemplateMessage.builder() + .toUser(mpAppMsg.getTo()) + .templateId(msg.getTemplateId()) + .miniProgram(miniprogram) + .data(mpAppMsg.getTemplateDataList()) + .build(); + String retStr = wxMpService.getTemplateMsgService().sendTemplateMsg(mpTemplateMessage); + logger.info(retStr); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmartAppMsgServiceImpl.java similarity index 74% rename from mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java rename to mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmartAppMsgServiceImpl.java index 6c22ef120..a64ce8a01 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmartAppMsgServiceImpl.java @@ -1,13 +1,16 @@ -package com.iformall.service.impl; +package com.iformall.service.msg.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; import com.iformall.common.ErrorCode; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.SmartAppMsg; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxTemplateMsgMapper; -import com.iformall.service.MsgSendService; +import com.iformall.service.msg.MsgSendService; import com.iformall.service.WxAppinfoService; +import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.MaUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,18 +27,28 @@ import java.util.List; public class SendSmartAppMsgServiceImpl implements MsgSendService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired + private boolean isFmOpen; + @Autowired private WxTemplateMsgMapper wxTemplateMsgMapper; @Autowired private WxAppinfoService wxAppinfoService; + @Autowired + private FmOpenService openService; + @Override public void send(BaseMsg baseMsg) throws Exception{ SmartAppMsg smartAppMsg = (SmartAppMsg)baseMsg; WxTemplateMsg msg = null; WxMaTemplateMessage templateMessage; - WxAppinfo appInfo = wxAppinfoService.getByAppId(smartAppMsg.getAppId()); - WxMaService wxMaService = MaUtil.getWeappService(appInfo); + WxMaService wxMaService = null; + if(isFmOpen) { + wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(smartAppMsg.getAppId()); + } else { + WxAppinfo appInfo = wxAppinfoService.getByAppId(smartAppMsg.getAppId()); + wxMaService = MaUtil.getWeappService(appInfo); + } //查询信息模板 WxTemplateMsg msgQ = new WxTemplateMsg(); @@ -58,7 +71,7 @@ public class SendSmartAppMsgServiceImpl implements MsgSendService { */ templateMessage = WxMaTemplateMessage.builder() .toUser(smartAppMsg.getTo()) - .formId(smartAppMsg.getFrom()) // 微信支付的formId是prepayId + .formId(smartAppMsg.getFormId()) // 微信支付的formId是prepayId .page(smartAppMsg.getGotopage()) .data(smartAppMsg.getTemplateDataList()) .templateId(msg.getTemplateId()) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java similarity index 93% rename from mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java rename to mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java index 6b681dd52..5a6fa9e9b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java @@ -1,15 +1,17 @@ -package com.iformall.service.impl; +package com.iformall.service.msg.impl; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.EnumVerifyCode; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgValidationcodeMapper; import com.iformall.mapper.WxMsgValidationcodeModelMapper; -import com.iformall.service.MsgSendService; +import com.iformall.service.msg.MsgSendService; import com.iformall.service.WxMsgValidationcodeService; import com.iformall.utils.WiwideUtil; import org.apache.commons.collections.CollectionUtils; @@ -52,8 +54,10 @@ public class SendSmsServiceImpl implements MsgSendService { if(CollectionUtils.isEmpty(wxMsgConfigs)){ throw new MallinkException(ErrorCode.MSG_CONFIG_NOT_FOUND); } - wxMsgConfig = wxMsgConfigs.get(0); + if(wxMsgConfig.getTotal() <=0l){ + throw new MallinkException(ErrorCode.MSG_CONFIG_ACCOUNT); + } WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); wxMsgValidationcodeModel.setTenantId(record.getTenantId()); diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java new file mode 100644 index 000000000..73ef38802 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendWeappUniformMsgServiceImpl.java @@ -0,0 +1,72 @@ +package com.iformall.service.msg.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.msg.AppUniformMsg; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.MpAppMsg; +import com.iformall.domain.po.WxTemplateMsg; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxTemplateMsgMapper; +import com.iformall.service.msg.MsgSendService; +import com.iformall.service.wechat.FmOpenService; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 发送微信小程序-统一消息 + * @author Stormeye + * @date 2019/4/9 13:51 + */ +@Service +public class SendWeappUniformMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxTemplateMsgMapper wxTemplateMsgMapper; + + @Autowired + private FmOpenService openService; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + AppUniformMsg appUniformMsg = (AppUniformMsg)baseMsg; + WxTemplateMsg msg = null; + + WxMaService wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appUniformMsg.getAppId()); + + // 查询信息模板 + WxTemplateMsg msgQ = new WxTemplateMsg(); + msgQ.setTenantId(appUniformMsg.getTenantId()); + msgQ.setType(appUniformMsg.getTemplateType()); + try { + msg = wxTemplateMsgMapper.selectOne(msgQ); + } catch (Exception e) { + logger.error("公众号消息模板错误: " + e.getMessage()); + } + if (msg == null) { + logger.error("找不到模板Id"); + throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); + } + + WxMaUniformMessage.MiniProgram miniprogram = new WxMaUniformMessage.MiniProgram(); + miniprogram.setAppid(appUniformMsg.getAppId()); + miniprogram.setPagePath(appUniformMsg.getPagePath()); + + WxMaUniformMessage uniformMessage = WxMaUniformMessage.builder() + .isMpTemplateMsg(true) + .toUser(appUniformMsg.getTo()) + .appid(appUniformMsg.getMpAppId()) + .templateId(msg.getTemplateId()) + .url(appUniformMsg.getUrl()) + .miniProgram(miniprogram) + .formId(appUniformMsg.getFormId()) + .data(appUniformMsg.getTemplateDataList()) + .build(); + wxMaService.getMsgService().sendUniformMsg(uniformMessage); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java new file mode 100644 index 000000000..eb5228cc1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java @@ -0,0 +1,253 @@ +package com.iformall.service.wechat; + +import com.iformall.common.FmHttpClientBuilder; +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.domain.po.WxComponentVerifyTicket; +import com.iformall.mapper.WxAuthorizerInfoMapper; +import com.iformall.mapper.WxComponentVerifyTicketMapper; +import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; +import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage; +import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.util.Pool; + +import java.util.Date; + +public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { + private final static String COMPONENT_VERIFY_TICKET_KEY = "wechat_component_verify_ticket:"; + private final static String COMPONENT_ACCESS_TOKEN_KEY = "wechat_component_access_token:"; + + private final static String AUTHORIZER_REFRESH_TOKEN_KEY = "wechat_authorizer_refresh_token:"; + private final static String AUTHORIZER_ACCESS_TOKEN_KEY = "wechat_authorizer_access_token:"; + private final static String JSAPI_TICKET_KEY = "wechat_jsapi_ticket:"; + private final static String CARD_API_TICKET_KEY = "wechat_card_api_ticket:"; + + protected final Pool jedisPool; + private WxComponentVerifyTicketMapper wxComponentVerifyTicketMapper; + private WxAuthorizerInfoMapper wxAuthorizerInfoMapper; + + + /** + * redis 存储的 key 的前缀,可为空 + */ + private String keyPrefix; + private String componentVerifyTicketKey; + private String componentAccessTokenKey; + private String authorizerRefreshTokenKey; + private String authorizerAccessTokenKey; + private String jsapiTicketKey; + private String cardApiTicket; + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + public FmOpenInRedisDBConfigStorage(Pool jedisPool) { + this.jedisPool = jedisPool; + } + + public FmOpenInRedisDBConfigStorage(Pool jedisPool, String keyPrefix) { + this.jedisPool = jedisPool; + this.keyPrefix = keyPrefix; + } + + public FmOpenInRedisDBConfigStorage(JedisPool jedisPool, WxComponentVerifyTicketMapper componentVerifyTicketMapper, WxAuthorizerInfoMapper authorizerInfoMapper) { + this.jedisPool = jedisPool; + this.wxComponentVerifyTicketMapper = componentVerifyTicketMapper; + this.wxAuthorizerInfoMapper = authorizerInfoMapper; + } + + @Override + public void setComponentAppId(String componentAppId) { + super.setComponentAppId(componentAppId); + String prefix = StringUtils.isBlank(keyPrefix) ? "" : + (StringUtils.endsWith(keyPrefix, ":") ? keyPrefix : (keyPrefix + ":")); + componentVerifyTicketKey = prefix + COMPONENT_VERIFY_TICKET_KEY.concat(componentAppId); + componentAccessTokenKey = prefix + COMPONENT_ACCESS_TOKEN_KEY.concat(componentAppId); + authorizerRefreshTokenKey = prefix + AUTHORIZER_REFRESH_TOKEN_KEY.concat(componentAppId); + authorizerAccessTokenKey = prefix + AUTHORIZER_ACCESS_TOKEN_KEY.concat(componentAppId); + this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(componentAppId); + this.cardApiTicket = CARD_API_TICKET_KEY.concat(componentAppId); + } + + @Override + public String getComponentVerifyTicket() { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.componentVerifyTicketKey); + } + } + + @Override + public void setComponentVerifyTicket(String componentVerifyTicket) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.set(this.componentVerifyTicketKey, componentVerifyTicket); + } + } + + @Override + public String getComponentAccessToken() { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.componentAccessTokenKey); + } + } + + @Override + public boolean isComponentAccessTokenExpired() { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(this.componentAccessTokenKey) < 2; + } + } + + @Override + public void expireComponentAccessToken(){ + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(this.componentAccessTokenKey, 0); + } + } + + @Override + public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(this.componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken); + + WxComponentVerifyTicket ticket = new WxComponentVerifyTicket(); + ticket.setComponentAppid(getComponentAppId()); + ticket.setAccessToken(componentAccessToken); + ticket.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (expiresInSeconds * 1000)))); + int num = wxComponentVerifyTicketMapper.updateAccessToken(ticket); + logger.info("updateComponentVerifyTicketAccessToken rows: " + num); + } + } + + private String getKey(String prefix, String appId) { + return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId); + } + + @Override + public String getAuthorizerRefreshToken(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.getKey(this.authorizerRefreshTokenKey, appId)); + } + } + + @Override + public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.set(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken); + + WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); + authorizerInfo.setAuthorizerAppid(appId); + authorizerInfo.setRefreshToken(authorizerRefreshToken); + int num = wxAuthorizerInfoMapper.updateRefreshToken(authorizerInfo); + logger.info("setAuthorizerRefreshToken " + appId + " rows: " + num); + } + } + + @Override + public String getAuthorizerAccessToken(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.getKey(this.authorizerAccessTokenKey, appId)); + } + } + + @Override + public boolean isAuthorizerAccessTokenExpired(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(this.getKey(this.authorizerAccessTokenKey, appId)) < 2; + } + } + + @Override + public void expireAuthorizerAccessToken(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0); + } + } + + @Override + public void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { + this.updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), authorizerAccessToken.getExpiresIn()); + + WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); + authorizerInfo.setAuthorizerAppid(appId); + authorizerInfo.setAccessToken(authorizerAccessToken.getAuthorizerAccessToken()); + authorizerInfo.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (authorizerAccessToken.getExpiresIn() * 1000)))); + int num = wxAuthorizerInfoMapper.updateAccessToken(authorizerInfo); + logger.info("updateAuthorizerAccessToken " + appId + " rows: " + num); + } + + @Override + public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(this.getKey(this.authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken); + } + } + + @Override + public String getJsapiTicket(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.getKey(this.jsapiTicketKey, appId)); + } + } + + @Override + public boolean isJsapiTicketExpired(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(this.getKey(this.jsapiTicketKey, appId)) < 2; + } + } + + @Override + public void expireJsapiTicket(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(this.getKey(this.jsapiTicketKey, appId), 0); + } + } + + @Override + public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(this.getKey(this.jsapiTicketKey, appId), expiresInSeconds - 200, jsapiTicket); + } + + // TODO update to DB + } + + @Override + public String getCardApiTicket(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(this.getKey(this.cardApiTicket, appId)); + } + } + + @Override + public boolean isCardApiTicketExpired(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(this.getKey(this.cardApiTicket, appId)) < 2; + } + } + + @Override + public void expireCardApiTicket(String appId) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(this.getKey(this.cardApiTicket, appId), 0); + } + } + + @Override + public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) { + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(this.getKey(this.cardApiTicket, appId), expiresInSeconds - 200, cardApiTicket); + } + + // TODO update to DB + } + + @Override + public ApacheHttpClientBuilder getApacheHttpClientBuilder() { + return FmHttpClientBuilder.get(); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java new file mode 100644 index 000000000..d267024a1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java @@ -0,0 +1,73 @@ +package com.iformall.service.wechat; + +import com.iformall.config.WechatOpenProperties; +import com.iformall.config.WechatRedisProperies; +import com.iformall.mapper.WxAuthorizerInfoMapper; +import com.iformall.mapper.WxComponentVerifyTicketMapper; +import me.chanjar.weixin.open.api.impl.WxOpenMessageRouter; +import me.chanjar.weixin.open.api.impl.WxOpenServiceImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.stereotype.Service; +import redis.clients.jedis.JedisPool; + +import javax.annotation.PostConstruct; + +/** + * Stormeye WU + */ +@Service +@EnableConfigurationProperties({WechatOpenProperties.class, WechatRedisProperies.class}) +public class FmOpenService extends WxOpenServiceImpl { + private Logger logger = LoggerFactory.getLogger(getClass()); + @Autowired + private WechatOpenProperties wechatProperties; + @Autowired + private WechatRedisProperies redisProperies; + + @Autowired + private WxComponentVerifyTicketMapper componentVerifyTicketMapper; + + @Autowired + private WxAuthorizerInfoMapper authorizerInfoMapper; + + private static JedisPool pool; + private WxOpenMessageRouter wxOpenMessageRouter; + + @PostConstruct + public void init() { + FmOpenInRedisDBConfigStorage configStorage = new FmOpenInRedisDBConfigStorage(getJedisPool(), componentVerifyTicketMapper, authorizerInfoMapper); + configStorage.setComponentAppId(wechatProperties.getComponentAppId()); + configStorage.setComponentAppSecret(wechatProperties.getComponentSecret()); + configStorage.setComponentToken(wechatProperties.getComponentToken()); + configStorage.setComponentAesKey(wechatProperties.getComponentAesKey()); + setWxOpenConfigStorage(configStorage); + wxOpenMessageRouter = new WxOpenMessageRouter(this); + wxOpenMessageRouter.rule().handler((wxMpXmlMessage, map, wxMpService, wxSessionManager) -> { + logger.info("\n接收到 {} 公众号请求消息,内容:{}", wxMpService.getWxMpConfigStorage().getAppId(), wxMpXmlMessage); + return null; + }).next(); + } + + public WxOpenMessageRouter getWxOpenMessageRouter() { + return wxOpenMessageRouter; + } + + private JedisPool getJedisPool() { + if (pool == null) { + synchronized (FmOpenService.class) { + if (pool == null) { + pool = new JedisPool(redisProperies, redisProperies.getHost(), + redisProperies.getPort(), redisProperies.getConnectionTimeout(), + redisProperies.getSoTimeout(), redisProperies.getPassword(), + redisProperies.getDatabase(), redisProperies.getClientName(), + redisProperies.isSsl(), redisProperies.getSslSocketFactory(), + redisProperies.getSslParameters(), redisProperies.getHostnameVerifier()); + } + } + } + return pool; + } +} diff --git a/mallinkService/src/main/java/com/iformall/utils/BeanMapping.java b/mallinkService/src/main/java/com/iformall/utils/BeanMapping.java new file mode 100644 index 000000000..a8f458554 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/BeanMapping.java @@ -0,0 +1,139 @@ +package com.iformall.utils; + +import com.iformall.exception.BeanMappingException; +import lombok.extern.slf4j.Slf4j; +import org.dozer.DozerBeanMapper; +import org.dozer.Mapper; +import org.dozer.MappingException; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.function.BiConsumer; + +/** + * 不同类型的bean对象属性映射转化 + * 基于Dozer封装, 对使用者透明 + */ +@Slf4j +public class BeanMapping { + + private static Mapper __instance__; + + private static Lock lock = new ReentrantLock(); + + private BeanMapping() { + + } + + private static Mapper getInstance() { + // TODO 支持XML配置或者传入映射关系 + + if (__instance__ == null) { + lock.lock(); + if (__instance__ == null) { + __instance__ = new DozerBeanMapper(); + } + lock.unlock(); + } + return __instance__; + } + + /** + * 源对象 {@code source} 转换成目标bean对象 {@code D}; 将名称一致的属性进行转换 + * @param source 源Bean + * @param dstClass 目标Bean的class + * @param 原Bean的泛型定义 + * @param 目标Bean的泛型定义 + * @return 目标Bean对象 + */ + public static D map(S source, Class dstClass) throws BeanMappingException { + return map(source, dstClass, null); + } + + /** + * 源对象 {@code source} 转换成目标bean对象 {@code D}; 将名称一致的属性进行转换; 转换完成后进行回调后续处理 + * @param source 源Bean + * @param dstClass 目标Bean的class + * @param biConsumer 目标Bean转换完成后的回调操作 + * @param 原Bean的泛型定义 + * @param 目标Bean的泛型定义 + * @return 目标Bean对象 + * @throws BeanMappingException + */ + public static D map(S source, Class dstClass, BiConsumer biConsumer) throws BeanMappingException { + if (source == null) { + return null; + } + try { + D dstObject = getInstance().map(source, dstClass); + if (dstObject != null && biConsumer != null) { + biConsumer.accept(source, dstObject); + } + return dstObject; + } catch (MappingException e) { + log.error("对象映射出错, 原对象类型: {}, 目标对象类型: {}", source.getClass(), dstClass); + throw new BeanMappingException(e); + } + } + + /** + * 源对象集合 {@code source} 转换成目标bean对象后添加到传入的集合中 {@code D}; 将名称一致的属性进行转换 + * @param source 源对象集合 + * @param destination 目标对象集合 + * @param dstClass 目标Bean的class + * @param 原Bean的泛型定义 + * @param 目标Bean的泛型定义 + * @throws BeanMappingException + */ + public static void map(Collection source, Collection destination, Class dstClass) throws BeanMappingException { + map(source, destination, dstClass, null); + } + + /** + * 源对象集合 {@code source} 转换成目标bean对象后添加到传入的集合中 {@code D}; 将名称一致的属性进行转换 + * @param source 源对象集合 + * @param destination 目标对象集合 + * @param dstClass 目标Bean的class + * @param biConsumer 目标Bean转换完成后的回调操作 + * @param 原Bean的泛型定义 + * @param 目标Bean的泛型定义 + * @throws BeanMappingException + */ + public static void map(Collection source, Collection destination, Class dstClass, BiConsumer biConsumer) throws BeanMappingException { + for (S s : source) { + destination.add(map(s, dstClass, biConsumer)); + } + } + + /** + * 源对象集合 {@code source} 转换成目标bean对象 {@code D}; 将名称一致的属性进行转换 + * @param source 源对象集合 + * @param dstClass 目标Bean的class + * @param 原Bean的泛型定义 + * @param 目标Bean的泛型定义 + * @return 映射完的List集合, 默认返回ArrayList + * @throws BeanMappingException + */ + public static List mapList(Collection source, Class dstClass) throws BeanMappingException { + return mapList(source, dstClass, null); + } + + /** + * 源对象集合 {@code source} 转换成目标bean对象 {@code D}; 将名称一致的属性进行转换 + * @param source 源对象集合 + * @param dstClass 目标Bean的class + * @param biConsumer 目标Bean转换完成后的回调操作 + * @param 原Bean的泛型定义 + * @param 目标Bean的泛型定义 + * @return 映射完的List集合, 默认返回ArrayList + * @throws BeanMappingException + */ + public static List mapList(Collection source, Class dstClass, BiConsumer biConsumer) throws BeanMappingException { + List result = new ArrayList<>(); + map(source, result, dstClass, biConsumer); + return result; + } +} diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index d5fb7b84c..95e58b57b 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -3,10 +3,10 @@ package com.iformall.utils; public class Constant { // 1小时过期, - public final static int C_EXPIRE = 3600000; + public final static int H_EXPIRE = 3600000; // TOKEN过期时间, 24小时后过期 - public final static int EXPIRE = 3600 * 24; + public final static int EXPIRE = H_EXPIRE * 24; // C端token public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY"; @@ -14,5 +14,5 @@ public class Constant { public static final String fileDirectory = "./uploads/"; public static final String importMemPrev = "importmem/"; - public static final String adminPage = "http://admin.malls.iformall.com"; + public static final String adminPage = "https://admin.malls.iformall.com"; } diff --git a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java index dd24f899d..a3ce3a0a4 100755 --- a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java @@ -938,4 +938,126 @@ public class DateUtils { return false; } } + + /** + * 获取当前月的第一天 + * @return + */ + public static Date getFirstDayForCurrMonth(){ + Calendar cale = Calendar.getInstance(); + cale.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 + return cale.getTime(); + } + /** + * 获取当前月的第一天 + * @return + */ + public static Date getFirstDayForCurrMonth(Date date){ + Calendar cale = Calendar.getInstance(); + cale.setTime(date); + cale.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 + return cale.getTime(); + } + + /** + * 获取指定月的最后一天 + * @return + */ + public static Date getLastDayForMonth(Date date){ + Calendar ca = Calendar.getInstance(); + ca.setTime(date); + ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); + return DateUtils.getDateFromString(DateUtils.date2String(ca.getTime(),"yyyy-MM-dd")+" 23:59:59","yyyy-MM-dd HH:mm:ss").getTime(); + } + + /** + * 获取指定月的最后一天 + * @return + */ + public static Date getLastDayForMonth(String date){ + try { + Calendar ca = Calendar.getInstance(); + ca.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(date)); + ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); + return ca.getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 获取指定日期n个月后的最后一天 + * @return + */ + public static Date getLastDayForMonth(Date date, int amount){ + Calendar ca = Calendar.getInstance(); + ca.setTime(date); + ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); + ca.add(Calendar.MONTH, amount); + return ca.getTime(); + } + + /** + * 取得指定月的天数 + * */ + public static int getMonthDayCount(Date date) { + Calendar a = Calendar.getInstance(); + a.setTime(date); + a.set(Calendar.DATE, 1);//把日期设置为当月第一天 + a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天 + int maxDate = a.get(Calendar.DATE); + return maxDate; + } + + /** + * 计算两个日期相隔多少天 + * @param smdate + * @param bdate + * @return + * @throws ParseException + */ + public static int daysBetween(Date smdate,Date bdate) { + try { + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); + smdate=sdf.parse(sdf.format(smdate)); + bdate=sdf.parse(sdf.format(bdate)); + Calendar cal = Calendar.getInstance(); + cal.setTime(smdate); + long time1 = cal.getTimeInMillis(); + cal.setTime(bdate); + long time2 = cal.getTimeInMillis(); + long between_days=(time2-time1)/(1000*3600*24); + return Integer.parseInt(String.valueOf(between_days)); + }catch (Exception e){ + e.printStackTrace(); + } + return 0; + } + + /** + * 获取指定日期n个月后的第一天 + * @return + */ + public static Date getFirstDayOfNextMonth(Date date,int amount){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH,1); + calendar.add(Calendar.MONTH, amount); + return calendar.getTime(); + } + + /** + * 获取指定日期n个月后的最后一天 + * @return + */ + public static Date getLastDayOfNextMonth(Date date,int amount){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH,1); + calendar.add(Calendar.MONTH, amount); + Date d = calendar.getTime(); + return getFirstDayForCurrMonth(d); + } + } diff --git a/mallinkService/src/main/java/com/iformall/utils/ETCPUtil.java b/mallinkService/src/main/java/com/iformall/utils/ETCPUtil.java index ace4ab489..a6a3c52a4 100755 --- a/mallinkService/src/main/java/com/iformall/utils/ETCPUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/ETCPUtil.java @@ -3,6 +3,8 @@ package com.iformall.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.exception.MallinkException; import okhttp3.*; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -306,7 +308,7 @@ public class ETCPUtil { * } */ public String userSignin(String baseUrl, String appId, String merchantNo, String merchantKey, String version, - String mobilePhone) { + String mobilePhone) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("appId", appId); jsonObject.put("mobilePhone", mobilePhone); @@ -315,8 +317,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + userSigninUrl.replaceAll("\\{version}", version), data, sign, + String respStr = doPost(baseUrl + userSigninUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -333,7 +339,7 @@ public class ETCPUtil { */ public String bindCar(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, - String plateNumber, String plateColor) { + String plateNumber, String plateColor) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("plateNumber", plateNumber); @@ -346,8 +352,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + bindCarUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + bindCarUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -363,7 +373,7 @@ public class ETCPUtil { */ public String unbindCar(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, - String plateNumber) { + String plateNumber) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("plateNumber", plateNumber); @@ -372,8 +382,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + unbindCarUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + unbindCarUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -392,7 +406,7 @@ public class ETCPUtil { public String carAuth(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, String carFrameNum, String plateNumber, String carEngineNum - ) { + ) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("carFrameNum", carFrameNum); @@ -403,8 +417,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + carAuthUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + carAuthUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -423,7 +441,7 @@ public class ETCPUtil { */ public String carRetrieve(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, - String carFrameNum, String plateNumber, String carEngineNum, String plateColor ) { + String carFrameNum, String plateNumber, String carEngineNum, String plateColor ) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("carFrameNum", carFrameNum); @@ -436,8 +454,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + carRetrieveUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + carRetrieveUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -458,7 +480,7 @@ public class ETCPUtil { * } */ public String carNum(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken) { + String etcpToken) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); @@ -466,8 +488,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doGet(baseUrl + carNumUrl.replaceAll("\\{version}", version), + String respStr = doGet(baseUrl + carNumUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -481,7 +507,7 @@ public class ETCPUtil { public String orderUnpay(String baseUrl, String appId, String merchantNo, String merchantKey, String version, String etcpToken, - String plateNumber) { + String plateNumber) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("plateNumber", plateNumber); @@ -493,8 +519,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doGet(baseUrl + orderUnpayUrl.replaceAll("\\{version}", version), + String respStr = doGet(baseUrl + orderUnpayUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -508,7 +538,7 @@ public class ETCPUtil { public String couponList(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, - String lastCode, String pageSize) { + String lastCode, String pageSize) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); if (!StringUtils.isBlank(lastCode)) @@ -519,8 +549,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doGet(baseUrl + couponListUrl.replaceAll("\\{version}", version), + String respStr = doGet(baseUrl + couponListUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -531,7 +565,7 @@ public class ETCPUtil { */ public String orderHistory(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken) { + String etcpToken) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); @@ -539,8 +573,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doGet(baseUrl + orderHistoryUrl.replaceAll("\\{version}", version), + String respStr = doGet(baseUrl + orderHistoryUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -555,7 +593,7 @@ public class ETCPUtil { public String orderPay(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, String orderId, - String returnUrl, String couponCode) { + String returnUrl, String couponCode) throws MallinkException { // payType 支付方式(1 微信公众号内支付 2 支付宝 H5 支付 3 微信二维码 4 支付宝二维码 5 微信 H5)(非空) int payType = 1; JSONObject jsonObject = new JSONObject(); @@ -571,8 +609,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + orderpayUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + orderpayUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -591,7 +633,7 @@ public class ETCPUtil { String appId, String merchantNo, String merchantKey, String version, String etcpToken, String orderId, String externalOrderId, - BigDecimal payment, String payTime, String verificationInfo) { + BigDecimal payment, String payTime, String verificationInfo) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("orderId", orderId); @@ -607,8 +649,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + orderPaidUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + orderPaidUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -619,7 +665,7 @@ public class ETCPUtil { */ public String parkingInfo(String baseUrl, String merchantNo, String merchantKey, String version, - String lat, String lon, String radius) { + String lat, String lon, String radius) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("lat", lat); jsonObject.put("lon", lon); @@ -630,8 +676,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + parkingInfoUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + parkingInfoUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -642,7 +692,7 @@ public class ETCPUtil { */ public String parkingStatus(String baseUrl, String merchantNo, String merchantKey, String version, - String parkingId) { + String parkingId) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("parkingId", parkingId); @@ -650,8 +700,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -662,7 +716,7 @@ public class ETCPUtil { */ public String getDebt(String baseUrl, String appId, String merchantNo, String merchantKey, String version, - String etcpToken, String carNumber) { + String etcpToken, String carNumber) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("appId", appId); @@ -672,8 +726,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -686,7 +744,7 @@ public class ETCPUtil { */ public String repayDebt(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken, String returnUrl) { + String etcpToken, String returnUrl) throws MallinkException { // payType(1:支付宝 2:微信H5) int payType = 2; JSONObject jsonObject = new JSONObject(); @@ -698,8 +756,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -709,7 +771,7 @@ public class ETCPUtil { */ public String getBCouponList(String baseUrl, String merchantNo, String merchantKey, String version, - String parkId, String businessId) { + String parkId, String businessId) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("parkId", parkId); jsonObject.put("businessId", businessId); @@ -718,8 +780,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + bCouponListUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + bCouponListUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -731,7 +797,7 @@ public class ETCPUtil { public String bCouponRecord(String baseUrl, String merchantNo, String merchantKey, String version, String etcpToken, - String parkId, String businessId, String carNumber, String couponFreeId) { + String parkId, String businessId, String carNumber, String couponFreeId) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("token", etcpToken); jsonObject.put("parkId", parkId); @@ -743,8 +809,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + bCouponRecordUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + bCouponRecordUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } /** @@ -755,7 +825,7 @@ public class ETCPUtil { */ public String carSimulation(String baseUrl, String appId, String merchantNo, String merchantKey, String version, - String plateNumber) { + String plateNumber) throws MallinkException { JSONObject jsonObject = new JSONObject(); jsonObject.put("appId", appId); jsonObject.put("plateNumber", plateNumber); @@ -764,8 +834,12 @@ public class ETCPUtil { String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); String sign = genSign(data, merchantKey, timeStamp); - return doPost(baseUrl + bCarSimulationUrl.replaceAll("\\{version}", version), + String respStr = doPost(baseUrl + bCarSimulationUrl.replaceAll("\\{version}", version), data, sign, timeStamp, merchantNo); + if(respStr.startsWith("")) { + throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); + } + return respStr; } private String doPost(String url, String data, String sign, String timeStamp, String merchantNo) { diff --git a/mallinkService/src/main/java/com/iformall/utils/MaUtil.java b/mallinkService/src/main/java/com/iformall/utils/MaUtil.java index 21bbd8ab5..83e813084 100644 --- a/mallinkService/src/main/java/com/iformall/utils/MaUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/MaUtil.java @@ -3,6 +3,7 @@ package com.iformall.utils; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; +import com.iformall.common.FmHttpClientBuilder; import com.iformall.domain.po.WxAppinfo; import org.apache.commons.lang3.StringUtils; @@ -19,6 +20,7 @@ public class MaUtil { config.setAccessToken(appinfo.getAccessToken()); config.setExpiresTime(appinfo.getLastTokenTime().getTime()+appinfo.getExpiresIn()*1000); } + config.setApacheHttpClientBuilder(FmHttpClientBuilder.get()); WxMaService service = new WxMaServiceImpl(); service.setWxMaConfig(config); return service; diff --git a/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml b/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml index bf30fd4b9..d25fb9382 100644 --- a/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml @@ -16,15 +16,16 @@ + - `id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`flow_permission`,`web_open_id` + `id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`flow_permission`,`web_open_id`,email `id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`flow_permission`, - `bopen_id`,`web_open_id` + `bopen_id`,`web_open_id`,email @@ -80,6 +81,10 @@ and JSON_CONTAINS(flow_permission->'$[*]', #{flowPermission}, '$') + + and `email` = #{email} + + and id in @@ -168,6 +173,21 @@ + + update mall_user_info + set `web_open_id` = null, `bopen_id` = null + where 1=1 + + and `tenant_id`=#{tenantId} + + + and username=#{username} + + + and `id` = #{id} + + + - + select count(*) from mall_user_info where status = 1 and username=#{username} @@ -220,6 +240,7 @@ + @@ -229,13 +250,13 @@ u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`flow_permission`, - m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h` + m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`,email u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`flow_permission`, u.`bopen_id`,u.`web_open_id`, - m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h` + m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`,email diff --git a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml index 95ac1376b..9f98496e0 100644 --- a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml @@ -1,64 +1,76 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - `id`,`authorizer_appid`,`head_img`,`alias`,`qrcode_url`,`create_time`,`authorization_status`,`auth_time`, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`type`,`authorizer_appid`,`head_img`,`alias`,`qrcode_url`,`create_time`,`authorization_status`,`auth_time`, `base_status`, `base_time`, `domain_status`, `domain_time`, `webdomain_status`, `webdomain_time`, `template_status`, `template_time`, `current_version`,`current_desc`,`release_time`, - `open_appid`,`bind_open_time` + `open_appid`,`bind_open_time`,`refresh_token`, + `access_token`,`access_token_expire` - - where 1 = 1 - - and `id` = #{id} - - - and `authorizer_appid` = #{authorizerAppid} - - - and `head_img` like concat('%', #{headImg},'%') - - - and `alias` like concat('%', #{alias},'%') - - - and `qrcode_url` like concat('%', #{qrcodeUrl},'%') - - - and `create_time` = #{createTime} - + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `type` = #{type} + + + and `authorizer_appid` = #{authorizerAppid} + + + and `head_img` like concat('%', #{headImg},'%') + + + and `alias` like concat('%', #{alias},'%') + + + and `qrcode_url` like concat('%', #{qrcodeUrl},'%') + + + and `create_time` = #{createTime} + and `update_time` = #{updateTime} - - and `authorization_status` = #{authorizationStatus} - + + and `authorization_status` = #{authorizationStatus} + and `auth_time` = #{authTime} @@ -90,7 +102,7 @@ and `current_version` = #{currentVersion} - and `current_desc` like concat('%', #{currentDesc},'%') + and `current_desc` like concat('%', #{currentDesc},'%') and `release_time` = #{releaseTime} @@ -101,55 +113,78 @@ and `bind_open_time` = #{bindOpenTime} - - and id in - - #{idItem} - - - order by ${sortColumns} - - - + + and id in + + #{idItem} + + + order by ${sortColumns} + + + - + update wx_authorizer_info set `current_version` = #{currentVersion}, `current_desc` = #{currentDesc}, `release_time` = #{releaseTime}, `update_time` = #{updateTime} where `authorizer_appid` = #{authorizerAppid} + + update wx_authorizer_info + set `refresh_token` = #{refreshToken} + where `authorizer_appid` = #{authorizerAppid} + + + + update wx_authorizer_info + set `access_token` = #{accessToken}, `access_token_expire` = #{accessTokenExpire} + where `authorizer_appid` = #{authorizerAppid} + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - ai.`id`,ai.`authorizer_appid`,ai.`head_img`,ai.`alias`,ai.`qrcode_url`,ai.`create_time`,ai.`update_time`, + ai.`id`,ai.`tenant_id`,ai.`type`,ai.`authorizer_appid`,ai.`head_img`,ai.`alias`,ai.`qrcode_url`,ai.`create_time`,ai.`update_time`, ai.`authorization_status`,ai.`auth_time`, ai.`base_status`,ai.`base_time`, ai.`domain_status`,ai.`domain_time`, @@ -157,7 +192,7 @@ ai.`template_status`,ai.`template_time`, ai.`current_version`,ai.`current_desc`,ai.`release_time`, ai.`open_appid`,ai.`bind_open_time`, - a.`type`,a.`name` + a.`name` @@ -168,8 +203,11 @@ and a.`name` like concat('%', #{name},'%') + + and ai.`tenant_id` = #{tenantId} + - and a.`type` = #{type} + and ai.`type` = #{type} and ai.`authorizer_appid` = #{authorizerAppid} @@ -216,19 +254,40 @@ #{idItem} - order by ${sortColumns} + order by ${sortColumns} - - - - - - + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillActionMapper.xml b/mallinkService/src/main/resources/mapper/WxBillActionMapper.xml new file mode 100644 index 000000000..85d39ce31 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxBillActionMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`bill_id`,`user_id`,`user_name`,`phone`,`action`,`details`,`createtime`,`updatetime` + + + + where 1=1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and `action` = #{action} + + + + and `bill_id` = #{billId} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml index 094b1129d..76095e9fa 100644 --- a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml @@ -1,43 +1,90 @@ - - + select + bill.id,bill.tenant_id tenantId,bill.merchant_id merchantId,bill.shop_id shopId, + bill.bill_type_value billTypeValue,bill.bill_type billType,bill.need_pay needPay, + bill.receive_pay receivePay,bill.pay,bill.owe,bill.receive_date receiveDate, + bill.pay_date payDate,DATEDIFF(now(),bill.receive_date) expiredDay,bill.status,bill.starttime, + bill.endtime,bill.name,bill.rent_shop_type rentShopType,m.name merchantName, + s.shop_number shopNumber, s.manager, s.manager_phone managerPhone,bill.shop_info shopInfo + from ( select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent where is_preview = 0 + endtime,rent_shop_type,case when shop_info is null then '[]' else shop_info end shop_info + from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent_deposit + endtime,rent_shop_type,shop_info from wx_bill_rent_deposit union select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property where is_preview = 0 + endtime,rent_shop_type,case when shop_info is null then '[]' else shop_info end shop_info + from wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property_deposit + endtime,rent_shop_type,shop_info from wx_bill_property_deposit union select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, + rent_shop_type,'[]' shop_info from wx_bill_daily where type=1 union select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, + rent_shop_type,'[]' shop_info from wx_bill_daily where type=2 union + select id,merchant_id,shop_id,tenant_id,'空调费' name,9 bill_type_value,'空调费' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, + rent_shop_type,'[]' shop_info + from wx_bill_daily where type=3 + union select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, + rent_shop_type,'[]' shop_info from wx_bill_other union select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, + rent_shop_type,'[]' shop_info from wx_bill_other_deposit ) bill left join wx_merchant m on bill.merchant_id=m.id @@ -86,6 +133,10 @@ need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_daily where type=2 union + select id,merchant_id,shop_id,tenant_id,9 bill_type_value,'空调费' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_daily where + type=3 + union select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_other union @@ -130,6 +181,10 @@ need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_daily where type=2 union + select id,merchant_id,shop_id,tenant_id,9 bill_type_value,'空调费' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_daily where + type=3 + union select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_other union @@ -151,7 +206,7 @@ - select bill.tenant_id tenantId,bill.merchant_id merchantId,bill.receive_date receiveDate, - bill.need_pay needPay,m.link_phone linkPhone,app.appname from ( -select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) need_pay from ( - select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' - bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent where is_preview = 0 - union - select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' - bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent_deposit - union - select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' - bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property where is_preview = 0 - union - select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' - bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property_deposit - union - select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type,0 as - need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type - from wx_bill_daily where type=1 - union - select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,0 as - need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type - from wx_bill_daily where type=2 - union - select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as - need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type - from wx_bill_other - union - select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as - need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type - from wx_bill_other_deposit - ) bill - where DATEDIFF(bill.receive_date,now())=3 and bill.status not in(3,5,6) - group by bill.tenant_id,bill.merchant_id,bill.receive_date) bill - left join wx_merchant m on bill.merchant_id=m.id - left join (select tenant_id,`name` appname from wx_appinfo app where type=1) app on bill.tenant_id=app.tenant_id - where m.status=1 + bill.need_pay needPay,m.link_phone linkPhone,app.appname,m.email,bill.bill_type billType from ( + select bill.bill_type,bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) need_pay from ( + select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' + bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' + endtime,rent_shop_type from wx_bill_rent where is_preview = 0 + union + select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' + bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' + endtime,rent_shop_type from wx_bill_rent_deposit + union + select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' + bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' + endtime,rent_shop_type from wx_bill_property where is_preview = 0 + union + select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' + bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' + endtime,rent_shop_type from wx_bill_property_deposit + union + select id,merchant_id,shop_id,tenant_id,'水费' name,5 bill_type_value,'水费' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_daily where type=1 + union + select id,merchant_id,shop_id,tenant_id,'电费' name,6 bill_type_value,'电费' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_daily where type=2 + union + select id,merchant_id,shop_id,tenant_id,'空调费' name,9 bill_type_value,'空调费' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_daily where type=3 + union + select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_other_deposit + ) bill + where bill.status not in(3,5,6) + group by bill.tenant_id,bill.merchant_id,bill.receive_date) bill + left join wx_merchant m on bill.merchant_id=m.id + left join (select tenant_id,`name` appname from wx_appinfo app where type=1) app on bill.tenant_id=app.tenant_id + where m.status=1 and DATEDIFF(bill.receive_date,now())=m.bill_setting @@ -304,6 +366,10 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type from wx_bill_daily where type=2 union + select id,merchant_id,shop_id,tenant_id,'空调费' name,9 bill_type_value,'空调费' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_daily where type=3 + union select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type from wx_bill_other @@ -319,4 +385,166 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) where m.status=1 + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml b/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml index 0ecc8c059..0c1dfbcd9 100644 --- a/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml @@ -19,13 +19,15 @@ + + `id`,`receive_pay`,`pay`,`receive_date`,`pay_date`,`createtime`,`expired_day`, `tenant_id`,`owe`,`status`,`is_del`,`merchant_id`,`user_id`,`shop_id`,`updatetime`,`type`, - `rent_shop_type` + `rent_shop_type`,`pay_way`,`price_detail` @@ -47,7 +49,7 @@ and `updatetime` = #{updatetime} and `type` = #{type} and `rent_shop_type` = #{rentShopType} - + and `pay_way` = #{payWay} and id in @@ -65,8 +67,8 @@ - + + + + + update wx_bill_rent_deposit set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) where tenant_id=#{tenantId} and status!=#{paid} and status!=5 and DATEDIFF(now(),receive_date)>0 diff --git a/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml b/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml index 0a2f36aa7..859077ff1 100644 --- a/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml @@ -21,13 +21,14 @@ + `id`,`receive_pay`,`pay`,`receive_date`,`pay_date`,`createtime`,`expired_day`, `tenant_id`,`owe`,`status`,`is_del`,`merchant_id`,`user_id`,`shop_id`,`updatetime`,`name`,`comments`, - `rent_shop_type`,`return_price` + `rent_shop_type`,`return_price`,`pay_way` @@ -49,6 +50,7 @@ and `updatetime` = #{updatetime} and `name` = #{name} and `rent_shop_type` = #{rentShopType} + and `pay_way` = #{payWay} and id in @@ -70,7 +72,8 @@ select br.`id`,br.`receive_pay` receivePay,br.`pay`,br.`receive_date` receiveDate, br.`pay_date` payDate,br.`createtime`,br.`expired_day` expiredDay,br.`owe`,br.`status`, m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`,br.`return_price` returnPrice, - br.`merchant_id` merchantId,br.shop_id shopId,br.name,br.comments,br.`rent_shop_type` rentShopType + br.`merchant_id` merchantId,br.shop_id shopId,br.name,br.comments,br.`rent_shop_type` rentShopType, + br.pay_way payWay from wx_bill_other_deposit br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id @@ -83,6 +86,7 @@ and br.`is_del` = #{isDel} and br.`name` = #{name} and br.`rent_shop_type` = #{rentShopType} + and br.`pay_way` = #{payWay} order by id desc diff --git a/mallinkService/src/main/resources/mapper/WxBillOtherMapper.xml b/mallinkService/src/main/resources/mapper/WxBillOtherMapper.xml index d0355b255..56097a2ac 100644 --- a/mallinkService/src/main/resources/mapper/WxBillOtherMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillOtherMapper.xml @@ -20,13 +20,14 @@ + `id`,`receive_pay`,`pay`,`receive_date`,`pay_date`,`createtime`,`expired_day`, `tenant_id`,`owe`,`status`,`is_del`,`merchant_id`,`user_id`,`shop_id`,`updatetime`,`name`,`comments`, - `rent_shop_type` + `rent_shop_type`,`pay_way` @@ -48,6 +49,7 @@ and `updatetime` = #{updatetime} and `name` = #{name} and `rent_shop_type` = #{rentShopType} + and `pay_way` = #{payWay} and id in @@ -66,8 +68,8 @@ + select IFNULL(sum(receive_pay),0) receivepay,IFNULL(sum(pay),0) pay,tenant_id from wx_bill_other + where tenant_id=#{tenantId} and date_format(receive_date,'%Y-%m')=#{receiveDate} + group by tenant_id + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillPropertyDepositMapper.xml b/mallinkService/src/main/resources/mapper/WxBillPropertyDepositMapper.xml index 1885f39a5..036c9d9c7 100644 --- a/mallinkService/src/main/resources/mapper/WxBillPropertyDepositMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillPropertyDepositMapper.xml @@ -21,13 +21,15 @@ + + `id`,`property_contract_id`,`receive_pay`,`pay`,`receive_date`, `pay_date`,`createtime`,`expired_day`,`tenant_id`,`owe`,`status`,`is_del`,`need_pay`, - `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type`,`return_price` + `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type`,`return_price`,`shop_info`,`pay_way` @@ -50,6 +52,7 @@ and `shop_id` = #{shopId} and `updatetime` = #{updatetime} and `rent_shop_type` = #{rentShopType} + and `pay_way` = #{payWay} and id in @@ -69,7 +72,8 @@ select br.`id`,br.`receive_pay` receivePay,br.`pay`,br.`receive_date` receiveDate, br.`pay_date` payDate,br.`createtime`,br.`expired_day` expiredDay,br.`owe`,br.`status`, br.`need_pay` needPay,m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`, - br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,br.`return_price` returnPrice + br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,br.`return_price` returnPrice,br.`shop_info` + shopInfo,br.pay_way payWay,br.pay_way payWay from wx_bill_property_deposit br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id @@ -81,6 +85,8 @@ and br.`is_del` = #{isDel} and br.`rent_shop_type` = #{rentShopType} and br.`property_contract_id` = #{propertyContractId} + and br.`pay_way` = #{payWay} + order by id desc diff --git a/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml b/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml index 01deb3916..5410dd626 100644 --- a/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml @@ -26,6 +26,9 @@ + + + @@ -33,8 +36,8 @@ `id`,`property_contract_id`,`receive_pay`,`pay`,`receive_date`,`pay_date`, `createtime`,`expired_day`,`tenant_id`,`owe`,`status`,`is_del`,`need_pay`, `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type`, - `revenue`,`late_pay_ratio`,`late_pay_time`,`late_pay_price`,`period`,`is_preview` - + `revenue`,`late_pay_ratio`,`late_pay_time`,`late_pay_price`,`period`,`is_preview`,`shop_info`, + `pay_way`,`late_pay_status` @@ -59,6 +62,8 @@ and `rent_shop_type` = #{rentShopType} and is_preview = 0 and is_preview = #{isPreview} + and `pay_way` = #{payWay} + and `late_pay_status` = #{latePayStatus} and id in @@ -80,11 +85,12 @@ br.`need_pay` needPay,m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`, br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,br.`period`, br.`revenue`,br.`late_pay_ratio` latePayRatio,br.`late_pay_time` latePayTime, - br.`property_contract_id` propertyContractId,d.receive_pay deposit,case when br.late_pay_time is null then 0 - else - FLOOR(DATEDIFF(now(),br.late_pay_time)*br.late_pay_ratio/10000*br.owe) end latePayPrice, + br.`property_contract_id` propertyContractId,d.receive_pay deposit,case when br.late_pay_status=2 + then (case when br.late_pay_time is null then 0 + else FLOOR(DATEDIFF(now(),br.late_pay_time)*br.late_pay_ratio/10000*br.owe)end) + else br.late_pay_price end latePayPrice, (select max(period) from wx_bill_property where property_contract_id=br.property_contract_id) - allPeriod,d.`status` depositStatus + allPeriod,d.`status` depositStatus,br.`shop_info` shopInfo,br.pay_way payWay,br.late_pay_status latePayStatus from wx_bill_property br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id left join wx_bill_property_deposit d on br.property_contract_id=d.property_contract_id @@ -99,6 +105,9 @@ and br.`receive_date` between #{starttime} and #{endtime} and br.`rent_shop_type` = #{rentShopType} and br.`property_contract_id` = #{propertyContractId} + and br.`pay_way` = #{payWay} + and br.`late_pay_status` = #{latePayStatus} + order by br.${sortColumns} @@ -108,6 +117,12 @@ where tenant_id=#{tenantId} and date_format(receive_date,'%Y-%m')=#{receiveDate} and is_preview = 0 group by tenant_id + + update wx_bill_property set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) diff --git a/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml b/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml index e7a026ab6..8843a1d27 100644 --- a/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml @@ -26,14 +26,18 @@ - + + + + `id`,`rent_contract_id`,`receive_pay`,`pay`,`receive_date`,`pay_date`, `createtime`,`expired_day`,`tenant_id`,`owe`,`status`,`is_del`,`need_pay`, `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type`, - `revenue`,`late_pay_ratio`,`late_pay_time`,`late_pay_price`,`period`,`is_preview` + `revenue`,`late_pay_ratio`,`late_pay_time`,`late_pay_price`,`period`,`is_preview`,`shop_info`, + `pay_way`,`late_pay_status` @@ -58,6 +62,8 @@ and `rent_shop_type` = #{rentShopType} and is_preview = 0 and is_preview = #{isPreview} + and `pay_way` = #{payWay} + and `late_pay_status` = #{latePayStatus} and id in @@ -82,10 +88,12 @@ br.`need_pay` needPay,m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`, br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,r.type rentType,r.pay_ratio payRatio, br.`revenue`,br.`late_pay_ratio` latePayRatio,br.`late_pay_time` latePayTime,br.`period`, - br.`rent_contract_id` rentContractId,d.receive_pay deposit,case when br.late_pay_time is null then 0 else - FLOOR(DATEDIFF(now(),br.late_pay_time)*br.late_pay_ratio/10000*br.owe) end latePayPrice, + br.`rent_contract_id` rentContractId,d.receive_pay deposit,case when br.late_pay_status=2 + then (case when br.late_pay_time is null then 0 + else FLOOR(DATEDIFF(now(),br.late_pay_time)*br.late_pay_ratio/10000*br.owe)end) + else br.late_pay_price end latePayPrice, (select max(period) from wx_bill_rent where rent_contract_id=br.rent_contract_id) allPeriod,d.`status` - depositStatus + depositStatus,br.shop_info shopInfo,br.pay_way payWay,br.late_pay_status latePayStatus from wx_bill_rent br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id left join wx_rent_contract r on br.rent_contract_id=r.id @@ -101,6 +109,9 @@ and br.`receive_date` between #{starttime} and #{endtime} and br.`rent_shop_type` = #{rentShopType} and br.`rent_contract_id` = #{rentContractId} + and br.`pay_way` = #{payWay} + and br.`late_pay_status` = #{latePayStatus} + order by br.${sortColumns} @@ -110,6 +121,12 @@ where tenant_id=#{tenantId} and receive_date between #{startdate} and #{enddate} and is_preview = 0 group by tenant_id + + update wx_bill_rent set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) @@ -150,4 +167,6 @@ and br.status = 1 and c.id = #{contractId} + + diff --git a/mallinkService/src/main/resources/mapper/WxBusinessMapper.xml b/mallinkService/src/main/resources/mapper/WxBusinessMapper.xml index 174f55950..d599e0233 100644 --- a/mallinkService/src/main/resources/mapper/WxBusinessMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBusinessMapper.xml @@ -48,7 +48,11 @@ select from wx_business - + + diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 44d09b1e0..2c12d5d04 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -17,11 +17,12 @@ + `id`,`phone`,`birthdate`,`education`,`sex`,`email`,`address`,`poins`,`tag_id`, - `create_date`,`update_date`,`tenant_id`,`name`,`level`,`nick_name` + `create_date`,`update_date`,`tenant_id`,`name`,`level`,`nick_name`,`credit` @@ -63,6 +64,10 @@ and `poins` = #{poins} + + and `credit` = #{credit} + + and `tag_id` = #{tagId} @@ -240,14 +245,14 @@ - + cu.`id`,cu.`phone`,cu.`birthdate`,cu.`education`,cu.`sex`,cu.`email`,cu.`address`,cu.`poins`,cu.`tag_id`, cu.`create_date`,cu.`update_date`,cu.`tenant_id`,cu.`name`,cu.`level`,cu.`nick_name`, - cut.`tags` + cut.`tags`,cu.`credit` @@ -332,4 +337,75 @@ + + + cu.`id`,cu.`phone`,cu.`email` + + + + where 1=1 + + and cu.tenant_id =#{tenantId} + + + + and cu.create_date >= #{startTime} + + + + and cu.create_date <= #{endTime} + + + + and cu.birthdate >= #{birthStartTime} + + + + and cu.birthdate < #{birthEndTime} + + + + and cu.phone in (${phones}) + + + + and cu.poins >= #{levelStartScore} + + and cu.poins < #{levelEndScore} + + + + + and (cu.poins is null or + (cu.poins >= #{levelStartScore} + + and cu.poins < #{levelEndScore} + + )) + + + + and JSON_CONTAINS(JSON_ARRAY(cut.tags),JSON_ARRAY + + #{idItem} + + ) + + order by ${sortColumns} + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml index 08026b173..59729143b 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml @@ -31,7 +31,19 @@ - + + + + + + + + + + + + + @@ -39,7 +51,10 @@ `city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`, `qrcode_source`,`scene`,`scene_address`,`session_key`,`score`, `update_date`,`create_date`,`app_id`,`token`,`expire_time`,`latitude`, `longitude`, - `login_count`, `extra_info`, `is_subscribe` + `login_count`, `extra_info`, `is_subscribe`, + `open_app_id`, + `mp_open_id`,`mp_app_id`,`mp_subscribe`,`mp_subscribe_time`,`mp_subscribe_scene`, + `subs_open_id`,`subs_app_id`,`subs_subscribe`,`subs_subscribe_time`,`subs_subscribe_scene`,`credit` @@ -165,6 +180,30 @@ and `is_subscribe` = #{isSubscribe} + + and `open_app_id` = #{openAppId} + + + + and `mp_open_id` = #{mpOpenId} + + + + and `mp_app_id` = #{mpAppId} + + + + and `subs_open_id` = #{subsOpenId} + + + + and `subs_app_id` = #{subsAppId} + + + + and `credit` = #{credit} + + and id in @@ -186,6 +225,12 @@ where `app_id` = #{appId} and `open_id` = #{openId} + + + - - - - - - - - - update wx_c_user_tags set user_id=#{newUserId} diff --git a/mallinkService/src/main/resources/mapper/WxCardSpendMapper.xml b/mallinkService/src/main/resources/mapper/WxCardSpendMapper.xml index ec0d54f8e..b81a472c0 100644 --- a/mallinkService/src/main/resources/mapper/WxCardSpendMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCardSpendMapper.xml @@ -227,6 +227,12 @@ + + - select from wx_component_verify_ticket - - - - - - - - + + where 1 = 1 + + and `id` = #{id} + + + and `component_appid` = #{componentAppid} + + + and `component_verify_ticket` like concat('%', #{componentVerifyTicket},'%') + + + and `create_time` = #{createTime} + + + and `deadline` = #{deadline} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + update wx_component_verify_ticket + set `access_token` = #{accessToken}, `access_token_expire` = #{accessTokenExpire} + where component_appid = #{componentAppid} + + + diff --git a/mallinkService/src/main/resources/mapper/WxCouponCarMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponCarMapper.xml index a06bdb561..b2c57fbc8 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponCarMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponCarMapper.xml @@ -107,6 +107,7 @@ + @@ -114,7 +115,7 @@ c.id,c.tenant_id,c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.use_limit_quantity,c.send_type,c.valid_type,c.valid_start_date,c.valid_end_date,c.valid_days,c.detail,c.price,c.unit,c.remain_inventory,c.inventory,c.remark,c.status,c.create_date,c.update_date,c.business, - car.vendor_type, car.vendor_params + car.vendor_type, car.vendor_params,c.credit_price + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCouponMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMerchantMapper.xml index 947e5ed01..7be8f398d 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMerchantMapper.xml @@ -63,10 +63,7 @@ - m.id, - m.img_url,m.name,m.link_phone,m.status,m.business_id, - s.addr,s.shop_number,s.baidu_poi, - mb.building_name,mf.floor_name, + m.id,m.img_url,m.name,m.link_phone,m.status,m.business_id,m.sub_business_id, cm.parameter @@ -77,24 +74,22 @@ + - - - - - - + + + + - + @@ -105,7 +100,7 @@ m.id, - m.img_url,m.name,m.link_phone,m.status,m.business_id, + m.img_url,m.name,m.link_phone,m.status,m.business_id,m.sub_business_id, cm.parameter diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index a952b36f4..561c0aca8 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -95,19 +95,6 @@ - - - - - - - - + SELECT IFNULL(SUM(coupon_price),0) from wx_coupon_order + where 1=1 + + and tenant_id = #{tenantId} + + + and coupon_order_status = #{couponOrderStatus} + + + and c_user_id = #{cUserId} + + + and coupon_id = #{couponId} + + + and coupon_type = #{couponType} + + and create_date >= #{startTime} + + and create_date <= #{endTime} + - - - select COUNT(*) FROM wx_coupon_order - where tenant_id = #{tenantId} + where 1=1 + + and tenant_id = #{tenantId} + + + and coupon_order_status = #{couponOrderStatus} + + + and c_user_id = #{cUserId} + + + and coupon_id = #{couponId} + + + and coupon_type = #{couponType} + + and create_date >= #{startTime} + + and create_date <= #{endTime} + + - + select from wx_credit_history + + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml index 643cdc5bf..88ea8d92f 100644 --- a/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml @@ -20,16 +20,18 @@ + - `id`,`business_id`,`business_type`,`user_id`,`remark`,`status`,`task_id`,`process_instance_id`,`create_date`,`update_date`,`tenant_id`,`user_name`,task_key,task_name,curr_status, + `id`,`business_id`,`business_type`,`user_id`,`remark`,`status`,`task_id`,`process_instance_id`,`create_date`,`update_date`,`tenant_id`,`user_name`,task_key,task_name,curr_status,variables, REPLACE (JSON_EXTRACT(variables,'$.contractType'),'"','') contractType, REPLACE (JSON_EXTRACT(variables,'$.endProperty'),'"','') endProperty, - REPLACE (JSON_EXTRACT(variables,'$.contractNumber'),'"','') contractNumber + REPLACE (JSON_EXTRACT(variables,'$.contractNumber'),'"','') contractNumber, + start_date @@ -63,6 +65,11 @@ + update wx_flow_record set curr_status=#{currStatus} where process_instance_id=#{processInstanceId} diff --git a/mallinkService/src/main/resources/mapper/WxMallMapper.xml b/mallinkService/src/main/resources/mapper/WxMallMapper.xml index 0100d79bb..4bb4916b2 100644 --- a/mallinkService/src/main/resources/mapper/WxMallMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMallMapper.xml @@ -20,12 +20,15 @@ + + `id`,`tenant_id`,`name`,`group`,`country`,`province`,`city`,`addr`, `total_area`,`operating_area`,`park_area`,`park_place_number`,`service_phone`, - `img_url`,`img_url_h`, `weap_note`, `img_qrcode_weapp`, `img_qrcode_wemp` + `img_url`,`img_url_h`, `weap_note`, `img_qrcode_weapp`, `img_qrcode_wemp`, + `weapp_share_title`,`weapp_share_cover_img` diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index a7e9c6949..eb31155b5 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -14,16 +14,22 @@ + + + + + + `id`,`tenant_id`,`img_url`,`name`,`link_phone`,`create_date`,`update_date`,`car_vendor_type`,`car_params`,`status`,`link_person`, - `business_id`,`shop_type`,`brand`,`type`,`is_public` + `business_id`,`sub_business_id`,`shop_type`,`brand`,`type`,`is_public`,email,`title`,`cover_picture`,`is_admin`,`bill_setting` @@ -65,6 +71,10 @@ and `business_id` = #{businessId} + + and `sub_business_id` = #{subBusinessId} + + and `car_params` like concat('%', #{carParams},'%') @@ -80,6 +90,18 @@ and `is_public` = #{isPublic} + + and `email` = #{email} + + + and `is_admin` = #{isAdmin} + + + and id not in( + select merchant_id from wx_rent_contract where tenant_id=#{tenantId} and rent_shop_type=1 and merchant_id is + not null and status in(1,2,3,4) + ) + and id in @@ -97,37 +119,19 @@ - m.id, - m.img_url,m.name,m.link_phone,m.status,m.business_id, - s.addr,s.shop_number,s.baidu_poi, - mb.building_name,mf.floor_name,m.is_public + m.id,m.img_url,m.name,m.link_phone,m.status,m.business_id,m.sub_business_id, + m.is_public,m.email,m.title,m.cover_picture,b.name as brand_name,b.logo as brand_img, + m.shop_type,bu.title as business_name,b.summary - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxMsgMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgMapper.xml index 3d8ce43ae..5c61fa1ac 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgMapper.xml @@ -1,7 +1,7 @@ - + @@ -19,13 +19,14 @@ + - `id`,`tenant_id`,`model_id`,`msg`,`sendtime`,`createtime`,`expect_send_number`,`success_number`,`error_number`,`return_result`,`phones`,`signature`,`isright`,`name`,`sendstatus`,`excelpath`,`label`,`status`,`way`,`coupon_inject_id` + `id`,`tenant_id`,`model_id`,`msg`,`sendtime`,`createtime`,`expect_send_number`,`success_number`,`error_number`,`return_result`,`phones`,`signature`,`isright`,`name`,`sendstatus`,`excelpath`,`label`,`tags`,`status`,`way`,`coupon_inject_id` @@ -125,14 +126,10 @@ order by ${sortColumns} - select from wx_msg - - - - - + diff --git a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml index 8cb067a8d..988a00c7f 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml @@ -1,7 +1,7 @@ - + @@ -54,7 +54,7 @@ order by createtime desc - + update wx_msg_record set updatetime = now() ,msg_status = #{msgStatus} ,status_message = #{statusMessage} @@ -63,12 +63,12 @@ - select from wx_msg_record - + INSERT INTO wx_msg_record( id,tenant_id,`uuid`, `msg_type`, `domain`, `msg`, `send_time`, `model_id`, `model_type`, `signature`, `sender`, `sender_user_id`, `sender_user_name`, diff --git a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml index e0ba294bc..b8eee9103 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml @@ -165,6 +165,20 @@ + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml index bd91adeed..df0cc8c25 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml @@ -20,12 +20,13 @@ + `id`,`order_number`,`tenant_id`,`c_user_id`,`coupon_channel_id`,`product_id`,`type`,`payment_type`,`payment`,`payment_time`,`order_status`,`create_date`,`update_date`,`detail`, - `press_end_date`,`press_current_num`,`press_current_value`,`order_group_id` + `press_end_date`,`press_current_num`,`press_current_value`,`order_group_id`,`form_id` @@ -102,6 +103,10 @@ and `order_group_id` = #{orderGroupId} + + + and `form_id` = #{formId} + and `order_status` in @@ -541,6 +546,13 @@ and o.`merchant_name` like concat('%',#{merchantName},'%') + + and o.`payment` = 0 + + + and o.`payment` > 0 + + and o.create_date between #{startdate} and #{enddate} diff --git a/mallinkService/src/main/resources/mapper/WxPayAccountBillMapper.xml b/mallinkService/src/main/resources/mapper/WxPayAccountBillMapper.xml new file mode 100644 index 000000000..5f051ee07 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxPayAccountBillMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + `id`,`mch_id`,`sub_mch_id`,`api_key`,`notify_url`,`cert_path`,`type`,`share`,`rate` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `mch_id` = #{mchId} + + + + and `sub_mch_id` = #{subMchId} + + + + and `api_key` like concat('%', #{apiKey},'%') + + + + and `notify_url` like concat('%', #{notifyUrl},'%') + + + + and `cert_path` like concat('%', #{certPath},'%') + + + and `type` = #{type} + + + and `share` = #{share} + + + and `rate` = #{rate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxPayAccountMapper.xml b/mallinkService/src/main/resources/mapper/WxPayAccountMapper.xml index 301d78a17..1bd9d5c16 100644 --- a/mallinkService/src/main/resources/mapper/WxPayAccountMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPayAccountMapper.xml @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - `id`,`mch_id`,`parent_mch_id`,`api_key`,`notify_url`,`cert_path`,`type`,`share`,`rate` + `id`,`mch_id`,`sub_mch_id`,`api_key`,`notify_url`,`cert_path`,`type`,`share`,`rate` @@ -25,11 +25,11 @@ - and `mch_id` like concat('%', #{mchId},'%') + and `mch_id` = #{mchId} - - and `parent_mch_id` like concat('%', #{parentMchId},'%') + + and `sub_mch_id` = #{subMchId} diff --git a/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml index 5f03e8259..5a9a85398 100644 --- a/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml @@ -141,7 +141,7 @@ and pso.id =#{id} - + and m.`name` like concat('%',#{merchantName},'%') diff --git a/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml b/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml index 95765b823..047b72128 100644 --- a/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml @@ -36,6 +36,8 @@ + + @@ -45,7 +47,7 @@ `deposit`,`pay_date`,`is_del`,`merchant_name`,`brand`,`business_id`, `shop_type`,`shop_id`,`updatetime`,`createtime`,`rent_area`, `link_person`,`link_phone`,`pay_account`,`filename`,`lease`,`rent_contract_id`, - `start_date`,`end_date`,`apply_status`,`adjust_period`,`business_type`,adjust_ratio + `start_date`,`end_date`,`apply_status`,`adjust_period`,`business_type`,adjust_ratio,`rent_info`, `file_names` @@ -104,7 +106,8 @@ f.floor_name floorName,b.building_name buildingName,receive_period receivePeriod, rc.lease,rc.filepath,rc.filename,rc.pay_account payAccount,rc.sign_date signDate, start_date startDate,end_date endDate,rc.rent_contract_id rentContractId,br.`name` brandName, - s.addr,rc.apply_status applyStatus,rc.adjust_period adjustPeriod,rc.business_type businessType,rc.adjust_ratio adjustRatio + s.addr,rc.apply_status applyStatus,rc.adjust_period adjustPeriod,rc.business_type businessType, + rc.adjust_ratio adjustRatio,rc.rent_info rentInfo, rc.file_names fileNames from wx_property_contract rc left join wx_shop s on rc.shop_id=s.id left join wx_mall_floor f on s.floor=f.id @@ -116,7 +119,11 @@ and rc.`merchant_name` like concat('%',#{merchantName},'%') - and s.`shop_number` like concat('%',#{shopNumber},'%') + + and json_extract(rc.rent_info,'$[*].shopNumber') like concat('%',#{shopNumber},'%') + + + and s.`shop_number` like concat('%',#{shopNumber},'%') and rc.`status` = #{status} and rc.`rent_contract_id` = #{rentContractId} @@ -172,15 +179,26 @@ )s) and merchant_id is null and tenant_id=#{tenantId} - + select rc.* from wx_rent_contract rc where rc.status not in(0,1,5,6,7) and rc.tenant_id=#{tenantId} and rc.id not in (select pc.rent_contract_id from ( select rent_contract_id from wx_property_contract where status not in(5,6,7) and tenant_id=#{tenantId} ) pc) and rent_shop_type = #{rentShopType} - + + + + update wx_property_contract set apply_status=#{applyStatus} ,business_type=#{businessType} diff --git a/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml b/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml index 906a41873..d29a9c7b0 100644 --- a/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml @@ -42,6 +42,8 @@ + + @@ -49,7 +51,10 @@ `tenant_id`,`filepath`,`status`,`contract_number`,`deposit`,`pay_date`,`is_del`,`merchant_name`, `brand`,`business_id`,`shop_type`,`shop_id`,`updatetime`,`createtime`,`link_person`,`link_phone`, `pay_account`,`filename`,`lease`,`type`,`revenue`,`adjust_ratio`,`adjust_period`,`pay_ratio`, - `start_date`,`end_date`,`apply_status`,`bank_name`,`rent_shop_type`,fix_start_date,fix_end_date,business_type + `start_date`,`end_date`, + `apply_status`,`bank_name`,`rent_shop_type`,`fix_start_date`,`fix_end_date`, + `business_type`,`rent_info`, `file_names` + @@ -107,8 +112,8 @@ rc.price,rc.contract_number contractNumber,s.shop_number shopNumber,f.floor_name floorName,b.building_name buildingName, rc.lease,rc.filepath,rc.filename,rc.pay_account payAccount,rc.sign_date signDate,rc.merchant_id merchantId,rc.type, rc.start_date startDate,rc.end_date endDate,br.`name` brandName,rc.apply_status applyStatus,rc.bank_name - bankName,rc.merchant_id merchantId,rc.rent_shop_type rentShopType,rc.fix_start_date fixStartDate,rc.fix_end_date fixEndDate - ,rc.business_type businessType,rc.adjust_period adjustPeriod + bankName,rc.rent_shop_type rentShopType,rc.fix_start_date fixStartDate,rc.fix_end_date fixEndDate + ,rc.business_type businessType,rc.adjust_period adjustPeriod,rc.rent_info rentInfo, rc.file_names fileNames from wx_rent_contract rc left join wx_shop s on rc.shop_id=s.id left join wx_mall_floor f on s.floor=f.id @@ -117,9 +122,14 @@ rc.tenant_id=#{tenantId} and rc.`merchant_name` like concat('%',#{merchantName},'%') - and s.`shop_number` like concat('%',#{shopNumber},'%') + + and json_extract(rc.rent_info,'$[*].shopNumber') like concat('%',#{shopNumber},'%') + + + and s.`shop_number` like concat('%',#{shopNumber},'%') + and rc.`status` = #{status} - and rc.`shop_id` = #{shopId} + and rc.`shop_id` = #{shopId} and rc.`type` = #{type} and rc.`rent_shop_type` = #{rentShopType} @@ -181,19 +191,21 @@ update wx_rent_contract set status=#{status} where shop_id in ( select s.shop_id from (SELECT shop_id FROM wx_rent_contract WHERE tenant_id = #{tenantId} and status in(2,3,4) - )s) and status=1 and status!=7 and tenant_id=#{tenantId} + )s) and status in(0,1) and status!=7 and tenant_id=#{tenantId} and rent_shop_type=2 - + + + + + + + update wx_rent_contract set status=#{status} where tenant_id=#{tenantId} and id in(select r.id from ( + select id from wx_rent_contract where json_contains(json_extract(rent_info,'$[*].shopId'),concat('"',${shopId},'"')) + and rent_shop_type=1 and status in(0,1) and status!=7)r) + diff --git a/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml b/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml index b6b25712f..375ae8ae7 100644 --- a/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml @@ -7,10 +7,12 @@ + + - `id`,`tenant_id`,`rules`,`create_date`,`update_date` + `id`,`tenant_id`,`rules`,`create_date`,`update_date`,`type`,`clear_year` @@ -29,6 +31,12 @@ and `update_date` = #{updateDate} + + and `type` = #{type} + + + and `clear_year` = #{clearYear} + and id in diff --git a/mallinkService/src/main/resources/mapper/WxShopMapper.xml b/mallinkService/src/main/resources/mapper/WxShopMapper.xml index ab7ebc0f2..55509cb75 100644 --- a/mallinkService/src/main/resources/mapper/WxShopMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxShopMapper.xml @@ -24,17 +24,19 @@ + + `id`,`tenant_id`,`shop_number`,`build_area`,`operation_area`,`building`, `floor`,`status`,`x`,`y`,`addr`,`baidu_poi`,`longitude`,`latitude`,`create_date`, - `update_date`,`img_url`,`manager`,`manager_phone`,`type`,`point_type`,`comments` + `update_date`,`img_url`,`manager`,`manager_phone`,`type`,`point_type`,`comments`,`is_del`,DATEDIFF(now(),create_date) freeDay - where 1 = 1 + where is_del=0 and `id` = #{id} @@ -129,7 +131,7 @@ and `point_type` = #{pointType} - + and id in @@ -152,12 +154,12 @@ s.img_url imgUrl,s.operation_area operationArea, s.status,b.building_name building,f.floor_name floor,m.`name` merchantName,m.id merchantId, m.link_person linkPerson,m.link_phone linkPhone,s.manager,s.manager_phone managerPhone, - s.type,s.point_type pointType,s.addr + s.type,s.point_type pointType,s.addr,DATEDIFF(now(),s.create_date) freeDay from wx_shop s left join wx_merchant_shop ms on ms.shop_id=s.id and ms.is_del=0 left join wx_merchant m on ms.merchant_id=m.id left join wx_mall_building b on s.building=b.id left join wx_mall_floor f on s.floor=f.id - where 1 = 1 + where s.is_del=0 and s.`id` = #{id} @@ -247,7 +249,6 @@ and s.`type` = #{type} - and s.`point_type` = #{pointType} @@ -261,20 +262,60 @@ - + select + s.id,s.shop_number,s.build_area,s.img_url,s.operation_area,s.status,s.manager,s.manager_phone,s.addr,s.type,s.point_type, + b.building_name,f.floor_name, + m.id merchantId,m.name merchantName,m.link_person,m.link_phone, + brand.name brandName, + bus.title business from wx_shop s left join wx_merchant_shop ms on ms.shop_id=s.id and ms.is_del=0 left join wx_merchant m on ms.merchant_id=m.id left join wx_mall_building b on s.building=b.id left join wx_mall_floor f on s.floor=f.id left join wx_business bus on m.business_id = bus.id left join wx_brand brand on m.brand = brand.id - where 1 = 1 + where s.is_del=0 and s.`id` = #{id} @@ -364,7 +405,6 @@ and s.`type` = #{type} - and s.`point_type` = #{pointType} @@ -382,7 +422,7 @@ - select count(*) from wx_shop where tenant_id=#{tenantId} and shop_number=#{shopNumber} and `type`=#{type} + select count(*) from wx_shop where tenant_id=#{tenantId} and shop_number=#{shopNumber} and `type`=#{type} and + is_del=0 and id != #{id} + + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxSubBusinessMapper.xml b/mallinkService/src/main/resources/mapper/WxSubBusinessMapper.xml new file mode 100644 index 000000000..fbcfb05a2 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxSubBusinessMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + `id`,`title`,`business_id`,`business_title`,`create_date`,`update_date` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `title` like concat('%', #{title},'%') + + + + and `business_id` = #{businessId} + + + + and `business_title` like concat('%', #{businessTitle},'%') + + + + and `create_date` = #{createDate} + + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxTagsMapper.xml b/mallinkService/src/main/resources/mapper/WxTagsMapper.xml index a920fdc2a..986c26e86 100644 --- a/mallinkService/src/main/resources/mapper/WxTagsMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxTagsMapper.xml @@ -14,6 +14,10 @@ `id`,`name`,`group_id`,`group_name`,`type_id`,`type_name` + + `id`,`name` + + where 1 = 1 @@ -52,16 +56,14 @@ - + select + + from wx_tags diff --git a/mallinkService/src/main/resources/mapper/WxTemplateMsgMapper.xml b/mallinkService/src/main/resources/mapper/WxTemplateMsgMapper.xml index 35266adc9..a41090437 100644 --- a/mallinkService/src/main/resources/mapper/WxTemplateMsgMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxTemplateMsgMapper.xml @@ -1,68 +1,60 @@ - - - - - - - - - - + + + + + + + + + + `id`,`tenant_id`,`template_id`,`type`,`create_date`,`update_date` - - where 1 = 1 - - - and `id` = #{id} - - - - - and `tenant_id` = #{tenantId} - - - - - and `template_id` like concat('%', #{templateId},'%') - - - - - and `type` = #{type} - - - - - and `create_date` = #{createDate} - - - - - and `update_date` = #{updateDate} - - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - - - - - - - + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and `template_id` = #{templateId} + + + + and `type` = #{type} + + + + and `create_date` = #{createDate} + + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxTopicMapper.xml b/mallinkService/src/main/resources/mapper/WxTopicMapper.xml new file mode 100644 index 000000000..a2e711a13 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxTopicMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`name`,`title`,content,cover,advert,begin_time,end_time,createtime,updatetime,bg_color + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `begin_time` >= #{beginTime} + + + and `end_time` <= #{endTime} + + + and `status` = #{status} + + + and `name` like concat('%',#{name},'%') + + + and status in + + #{statusItem} + + + order by begin_time desc,status asc + + + + + + + + + + update wx_topic set status = 3 where now() >= end_time and tenant_id = #{tenantId} + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappAuditStatusMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappAuditStatusMapper.xml index 5c7ad98a0..3a1787619 100644 --- a/mallinkService/src/main/resources/mapper/WxWeappAuditStatusMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxWeappAuditStatusMapper.xml @@ -1,33 +1,37 @@ - - - - - - - - - - - - - - `id`,`app_id`,`type`,`user_version`,`version_desc`, `audit_status`,`audit_err_code`,`audit_time` + + + + + + + + + + + + + + + `id`,`tenant_id`,`app_id`,`type`,`user_version`,`version_desc`, `audit_status`,`audit_err_code`,`audit_time` - - where 1 = 1 - - and `id` = #{id} - - - and `app_id` = #{appId} - - - and `type` = #{type} - + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `app_id` = #{appId} + + + and `type` = #{type} + and `user_version` = #{userVersion} @@ -37,32 +41,33 @@ and `audit_status` = #{auditStatus} - - and `audit_time` = #{auditTime} - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - + + and `audit_time` = #{auditTime} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + - + update wx_weapp_audit_status set `user_version` = #{userVersion}, `version_desc` = #{versionDesc}, `audit_status` = #{auditStatus}, `audit_err_code` = #{auditErrCode}, `audit_time` = #{auditTime} where `app_id` = #{appId} and `type` = #{type} - select user_version as version from wx_weapp_audit_status where 1=1 @@ -76,19 +81,20 @@ - - - - - - - - - + + + + + + + + + + - c.`id`,c.`app_id`,c.`type`,c.`user_version`,`version_desc`, + c.`id`,c.`tenant_id`,c.`app_id`,c.`type`,c.`user_version`,`version_desc`, c.`audit_status`,c.`audit_err_code`,c.`audit_time`, a.`name` @@ -98,6 +104,9 @@ and c.`id` = #{id} + + and c.`tenant_id` = #{tenantId} + and c.`app_id` = #{appId} @@ -122,14 +131,15 @@ #{idItem} - order by ${sortColumns} + order by ${sortColumns} - + diff --git a/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml index 50b757ae1..fdaf5d380 100644 --- a/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml @@ -1,55 +1,53 @@ - - - - - - - - - - - - + + + + + + + + + + + + `id`,`type`,`domain_url`,`version`,`template_info`,`create_date`,`update_date` - - where 1 = 1 - - and `id` = #{id} - - - and `type` = #{type} - + + where 1 = 1 + + and `id` = #{id} + + + and `type` = #{type} + and `deploy` = #{deploy} - - and `create_date` = #{createDate} - - - and `update_date` = #{updateDate} - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - - - - - - - + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml index 6612bad85..bcd8f1f71 100644 --- a/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml @@ -1,63 +1,69 @@ - - - - - - - - - - - - - `id`,`app_id`,`type`,`user_version`,`version_desc`,`code_status`,`code_err_code`,`code_time` + + + + + + + + + + + + + + `id`,`tenant_id`,`app_id`,`type`,`user_version`,`version_desc`,`code_status`,`code_err_code`,`code_time` - - where 1 = 1 - - and `id` = #{id} - - - and `app_id` = #{appId} - - - and `type` = #{type} - + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `app_id` = #{appId} + + + and `type` = #{type} + and `user_version` = #{userVersion} and `code_status` = #{codeStatus} - - and `code_time` = #{codeTime} - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - + + and `code_time` = #{codeTime} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + - + update wx_weapp_code_status set `user_version` = #{userVersion}, `version_desc`= #{versionDesc}, `code_status` = #{codeStatus}, `code_err_code` = #{codeErrCode}, `code_time` = #{codeTime} where `app_id` = #{appId} and `type` = #{type} - select user_version as version from wx_weapp_code_status where 1=1 @@ -68,19 +74,20 @@ - - - - - - - - - + + + + + + + + + + - c.`id`,c.`app_id`,c.`type`,c.`user_version`,c.`version_desc`,c.`code_status`,c.`code_err_code`,c.`code_time`, a.`name` + c.`id`,c.`tenant_id`,c.`app_id`,c.`type`,c.`user_version`,c.`version_desc`,c.`code_status`,c.`code_err_code`,c.`code_time`, a.`name` @@ -88,6 +95,9 @@ and c.`id` = #{id} + + and c.`tenant_id` = #{tenantId} + and c.`app_id` = #{appId} @@ -109,13 +119,14 @@ #{idItem} - order by ${sortColumns} + order by ${sortColumns} diff --git a/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml index 71de37b6a..700b10a6a 100644 --- a/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml @@ -1,54 +1,52 @@ - - - - - - - - - - - + + + + + + + + + + + `id`,`app_id`,`type`,`ext_json`,`release_json`,`create_date`,`update_date` - - where 1 = 1 - - and `id` = #{id} - - - and `app_id` = #{appId} - - - and `type` = #{type} - - - and `create_date` = #{createDate} - - - and `update_date` = #{updateDate} - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - - - - - - - + + where 1 = 1 + + and `id` = #{id} + + + and `app_id` = #{appId} + + + and `type` = #{type} + + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml index f615331aa..35a407192 100644 --- a/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml @@ -1,63 +1,69 @@ - - - - - - - - - - - - - `id`,`app_id`,`type`,`user_version`,`version_desc`,`release_status`,`release_err_code`,`release_time` + + + + + + + + + + + + + + `id`,`tenant_id`,`app_id`,`type`,`user_version`,`version_desc`,`release_status`,`release_err_code`,`release_time` - - where 1 = 1 - - and `id` = #{id} - - - and `app_id` = #{appId} - - - and `type` = #{type} - + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `app_id` = #{appId} + + + and `type` = #{type} + and `user_version` = #{userVersion} and `release_status` = #{releaseStatus} - - and `release_time` = #{releaseTime} - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - + + and `release_time` = #{releaseTime} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + - + update wx_weapp_release_status set `user_version` = #{userVersion}, `version_desc` = #{versionDesc}, `release_status` = #{releaseStatus}, `release_err_code` = #{releaseErrCode}, `release_time` = #{releaseTime} where `app_id` = #{appId} and `type` = #{type} - select user_version as version from wx_weapp_release_status where 1 = 1 @@ -68,19 +74,20 @@ - - - - - - - - - + + + + + + + + + + - c.`id`,c.`app_id`,c.`type`,c.`user_version`,c.`version_desc`, + c.`id`,c.`tenant_id`,c.`app_id`,c.`type`,c.`user_version`,c.`version_desc`, c.`release_status`,c.`release_err_code`,c.`release_time`, a.`name` @@ -90,6 +97,9 @@ and c.`id` = #{id} + + and `tenant_id` = #{tenantId} + and c.`app_id` = #{appId} @@ -114,14 +124,15 @@ #{idItem} - order by ${sortColumns} + order by ${sortColumns} - + diff --git a/mallinkWebSocketServer/pom.xml b/mallinkWebSocketServer/pom.xml new file mode 100644 index 000000000..bf3cd9aaa --- /dev/null +++ b/mallinkWebSocketServer/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + + mallink + com.iformall + 1.0 + + + mallinkWebSocketServer + + + + com.iformall + mallinkService + 1.0 + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-reactor-netty + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/SocketServerApplication.java b/mallinkWebSocketServer/src/main/java/com/iformall/SocketServerApplication.java new file mode 100644 index 000000000..556e11c8c --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/SocketServerApplication.java @@ -0,0 +1,42 @@ +package com.iformall; + +import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; +import org.rocketmq.starter.annotation.EnableRocketMQ; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +import tk.mybatis.spring.annotation.MapperScan; + +/** + * @author Stormeye + * @date 2019/03/20 + */ +@SpringBootApplication +@MapperScan(basePackages = {"com.iformall.mapper"}) +@EnableSwagger2 +@EnableEncryptableProperties +public class SocketServerApplication { + + @Value("${fm.exception}") + private boolean fmException; + + @Value("${fm.open}") + private boolean fmOpen; + + @Bean + public boolean isFmException() { + return fmException; + } + + @Bean + public boolean isFmOpen() { + return fmOpen; + } + + + public static void main(String[] args) { + SpringApplication.run(SocketServerApplication.class, args); + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/SubscribeEventListener.java b/mallinkWebSocketServer/src/main/java/com/iformall/SubscribeEventListener.java new file mode 100644 index 000000000..8296daac2 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/SubscribeEventListener.java @@ -0,0 +1,29 @@ +package com.iformall; + +/** + * @author Stormeye + * @version 2019/03/20 + */ + +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.messaging.SessionSubscribeEvent; + +/** + * 订阅监听 + */ +@Component +public class SubscribeEventListener implements ApplicationListener { + + + @Override + public void onApplicationEvent(ApplicationEvent event) { + if (event instanceof SessionSubscribeEvent) { + SessionSubscribeEvent sessionSubscribeEvent = (SessionSubscribeEvent) event; + StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(sessionSubscribeEvent.getMessage()); + } + + } +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/AwsProperty.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/AwsProperty.java new file mode 100644 index 000000000..0329f1d6d --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/AwsProperty.java @@ -0,0 +1,52 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Stormeye + */ +@Component +@ConfigurationProperties(prefix = "aws") +public class AwsProperty { + // AWS ACCESS KEY + private String access; + + private String secret; + + private String clientRegion; + + private String bucketName; + + public String getAccess() { + return access; + } + + public void setAccess(String access) { + this.access = access; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getClientRegion() { + return clientRegion; + } + + public void setClientRegion(String clientRegion) { + this.clientRegion = clientRegion; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/PayProperty.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/PayProperty.java new file mode 100644 index 000000000..5cb7f4915 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/PayProperty.java @@ -0,0 +1,24 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Stormeye + */ +@Component +@ConfigurationProperties(prefix = "pay") +public class PayProperty { + /** + * 真实支付 + */ + private boolean real; + + public boolean isReal() { + return real; + } + + public void setReal(boolean real) { + this.real = real; + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/RabbitMqProperty.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/RabbitMqProperty.java new file mode 100644 index 000000000..5e9730430 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/RabbitMqProperty.java @@ -0,0 +1,20 @@ +package com.iformall.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix="spring.rabbitmq") +public class RabbitMqProperty { + private String host; + + private int port; + + private String username; + + private String password; + + private String virtualHost; +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/RedisConfig.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/RedisConfig.java new file mode 100644 index 000000000..66d012d3f --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/RedisConfig.java @@ -0,0 +1,129 @@ +package com.iformall.config; + +import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.WxScoreRules; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.Duration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Created by Stormeye on 2018/10/1. + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + //缓存管理器 + @Bean + public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { + /* + //user信息缓存配置 + RedisCacheConfiguration userCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)).disableCachingNullValues().prefixKeysWith("user"); + Map redisCacheConfigurationMap = new HashMap<>(); + redisCacheConfigurationMap.put("user", userCacheConfiguration); + //初始化一个RedisCacheWriter + RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); + // 设置CacheManager的值序列化方式为JdkSerializationRedisSerializer,但其实RedisCacheConfiguration默认就是使用StringRedisSerializer序列化key,JdkSerializationRedisSerializer序列化value,所以以下注释代码为默认实现 + // ClassLoader loader = this.getClass().getClassLoader(); + // JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader); + // RedisSerializationContext.SerializationPair pair = RedisSerializationContext.SerializationPair.fromSerializer(jdkSerializer); + // RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair); + RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig(); + //设置默认超过期时间是30秒 + defaultCacheConfig.entryTtl(Duration.ofSeconds(30)); + //初始化RedisCacheManager + RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig, redisCacheConfigurationMap); + return cacheManager; + */ + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一个默认配置,通过config对象即可对缓存进行自定义配置 + config = config.entryTtl(Duration.ofMinutes(1)) // 设置缓存的默认过期时间,也是使用Duration设置 + .disableCachingNullValues(); // 不缓存空值 + + // 设置一个初始化的缓存空间set集合 + Set cacheNames = new HashSet<>(); + cacheNames.add("my-redis-cache1"); + cacheNames.add("my-redis-cache2"); + + // 对每个缓存空间应用不同的配置 + Map configMap = new HashMap<>(); + configMap.put("my-redis-cache1", config); + configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120))); + + RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory) // 使用自定义的缓存配置初始化一个cacheManager + .initialCacheNames(cacheNames) // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置 + .withInitialCacheConfigurations(configMap) + .build(); + return cacheManager; + } + + @Bean("pushLimitRedisTemplate") + public RedisTemplate getPushLimitRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(PushLimit.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + + @Bean("scoreRuleRedisTemplate") + public RedisTemplate getScoreRuleRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxScoreRules.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + + @Bean("cuserTokenRedisTemplate") + public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/RestFilter.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/RestFilter.java new file mode 100644 index 000000000..429c56b57 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/RestFilter.java @@ -0,0 +1,52 @@ +package com.iformall.config; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Optional; + +/** + * 前后端分离RESTful接口过滤器 + * + * @author xuguoqin + * + */ +public class RestFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest req = null; + if (request instanceof HttpServletRequest) { + req = (HttpServletRequest) request; + } + HttpServletResponse res = null; + if (response instanceof HttpServletResponse) { + res = (HttpServletResponse) response; + } + if (req != null && res != null) { + //设置允许传递的参数 + res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization"); + //设置允许带上cookie + res.setHeader("Access-Control-Allow-Credentials", "true"); + String origin = Optional.ofNullable(req.getHeader("Origin")).orElse(req.getHeader("Referer")); + //设置允许的请求来源 + res.setHeader("Access-Control-Allow-Origin", origin); + //设置允许的请求方法 + res.setHeader("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS"); + } + chain.doFilter(request, response); + } + + @Override + public void destroy() { + + } + +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/RestTemplateConfig.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/RestTemplateConfig.java new file mode 100644 index 000000000..560a77cb5 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/RestTemplateConfig.java @@ -0,0 +1,24 @@ +package com.iformall.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate(ClientHttpRequestFactory factory) { + return new RestTemplate(factory); + } + + @Bean + public ClientHttpRequestFactory simpleClientHttpRequestFactory() { + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setReadTimeout(5000);//ms + factory.setConnectTimeout(10000);//ms + return factory; + } +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/WebConfig.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/WebConfig.java new file mode 100644 index 000000000..48708f36e --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/WebConfig.java @@ -0,0 +1,79 @@ +package com.iformall.config; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationConfig; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.List; + +@Configuration +@EnableWebMvc +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + //registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/"); + + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowCredentials(true) + .allowedMethods("GET", "POST", "DELETE", "PUT") + .maxAge(3600); + } + + @Override + public void configureMessageConverters(List> converters) { + MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); + //ObjectMapper 是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然 + ObjectMapper objectMapper = new ObjectMapper(); + SimpleModule simpleModule = new SimpleModule(); + + //不显示为null的字段 + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + DeserializationConfig dc = objectMapper.getDeserializationConfig(); + // 设置反序列化日期格式、忽略不存在get、set的属性 + objectMapper.setConfig( + dc.with(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")) + .without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + ); + + //序列化将Long转String类型 + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + SimpleModule bigIntegerModule = new SimpleModule(); + //序列化将BigInteger转String类型 + bigIntegerModule.addSerializer(BigInteger.class, ToStringSerializer.instance); + SimpleModule bigDecimalModule = new SimpleModule(); + //序列化将BigDecimal转String类型 + bigDecimalModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); + objectMapper.registerModule(simpleModule); + objectMapper.registerModule(bigDecimalModule); + objectMapper.registerModule(bigIntegerModule); + jackson2HttpMessageConverter.setObjectMapper(objectMapper); + converters.add(jackson2HttpMessageConverter); + } + + +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/WebSocketConfig.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/WebSocketConfig.java new file mode 100644 index 000000000..1ef071f94 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/WebSocketConfig.java @@ -0,0 +1,161 @@ +package com.iformall.config; + +import com.iformall.interceptor.AuthHandshakeInterceptor; +import com.iformall.model.User; +import com.iformall.service.UserService; +import com.iformall.util.Constance; +import lombok.Data; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; +import org.springframework.messaging.simp.config.ChannelRegistration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.messaging.simp.stomp.StompCommand; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.messaging.support.ChannelInterceptor; +import org.springframework.messaging.support.MessageHeaderAccessor; +import org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.server.support.DefaultHandshakeHandler; + +import java.security.Principal; +import java.util.LinkedList; +import java.util.Map; + +/** + * websocket 配置 + * https://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/websocket.html + * https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html + * https://stackoverflow.com/questions/48903044/how-to-secure-websocket-application-spring-boot-stomp + * + * @author Stormeye + * @version 2018/03/20 + */ +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private RabbitMqProperty property; + + @Autowired + private AuthHandshakeInterceptor authHandshakeInterceptor; + + @Autowired + private UserService userService; + + @Autowired + private RabbitAdmin rabbitAdmin; + + /** + * 配置了一个简单的消息代理, + * 如果不重载,默认情况下回自动配置一个简单的内存消息代理,用来处理以"/topic"为前缀的消息。这里重载configureMessageBroker()方法, + * 消息代理将会处理前缀为"/topic"和"/queue"的消息。 + */ + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + // 这句话表示在topic和user这两个域上可以向客户端发消息。 + /*registry.enableSimpleBroker("/topic", "/user") + .setHeartbeatValue(new long[]{10000L, 10000L}) + .setTaskScheduler(new DefaultManagedTaskScheduler());*/ + registry.enableStompBrokerRelay("/topic", "/queue") + .setRelayHost(property.getHost()) // rabbitmq-host服务器地址 + .setRelayPort(61613) // rabbitmq-stomp 服务器服务端口 + .setClientLogin(property.getUsername()) // 登陆账户 + .setClientPasscode(property.getPassword()); // 登陆密码 + // 这句话表示客户单向服务器端发送时的主题上面需要加"/app"作为前缀。/app/xxx + registry.setApplicationDestinationPrefixes("/app"); + // 这句话表示给指定用户发送一对一的主题前缀是"/user"。 /user/xxx + registry.setUserDestinationPrefix("/user"); + } + + /** + * 连接站点配置 + * 将"/gs-guide-websocket"路径注册为STOMP端点,这个路径与发送和接收消息的目的路径有所不同,这是一个端点,客户端在订阅或发布消息到目的地址前,要连接该端点, + * 即用户发送请求url="/gs-guide-websocket"与STOMP server进行连接。之后再转发到订阅url; + * PS:端点的作用——客户端在订阅或发布消息到目的地址前,要连接该端点。 + */ + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + /* + * 在网页上可以通过"/gs-guide-websocket"来和服务器的WebSocket连接 + * 这个和客户端创建连接时的url有关,其中setAllowedOrigins()方法表示允许连接的域名,withSockJS()方法表示支持以SockJS方式连接服务器。 + */ + registry.addEndpoint("/ws") + .setAllowedOrigins("*") + ;//.addInterceptors(authHandshakeInterceptor); + } + + /** + * 输入通道配置 + * + * @param registration + */ + @Override + public void configureClientInboundChannel(ChannelRegistration registration) { + registration.interceptors(new ChannelInterceptor() { + @Override + public Message preSend(Message message, MessageChannel channel) { + + StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); + + logger.info("interceptors-> "+accessor.getCommand()+"-"+accessor); + + if (StompCommand.CONNECT.equals(accessor.getCommand())) {// 创建连接 + Object raw = message.getHeaders().get(SimpMessageHeaderAccessor.NATIVE_HEADERS); + if (raw instanceof Map) { + Object name = ((Map) raw).get("login"); + if (name instanceof LinkedList) { + // 设置当前访问器的认证用户 + String userName = ((LinkedList) name).get(0).toString(); + System.out.println("regist userName:"+userName); + accessor.setUser(new User(userName)); + userService.addUser(userName, accessor.getSessionId()); + } + } + } + + if (StompCommand.DISCONNECT.equals(accessor.getCommand())) {// 断开连接 + String userName = accessor.getUser().getName(); + rabbitAdmin.deleteQueue(Constance.queue_pre+userService.getSessionId(userName)); + userService.deleteUser(userName); + } + return message; + } + }); + } + + /** + * 消息传输参数配置 + * + * @param registration + */ + /* + @Override + public void configureWebSocketTransport(WebSocketTransportRegistration registration) { + registration.setSendTimeLimit(15 * 1000) // 超时时间 + .setSendBufferSizeLimit(512 * 1024) // 缓存空间 + .setMessageSizeLimit(128 * 1024); // 消息大小 + } + */ + + @Bean + public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + return rabbitAdmin; + } + +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java b/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java new file mode 100644 index 000000000..edb551fb7 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java @@ -0,0 +1,161 @@ +package com.iformall.controller; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.exception.MallinkException; +import com.iformall.interceptor.AuthHandshakeInterceptor; +import com.iformall.service.WxAppinfoService; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCUserService; +import com.iformall.service.wechat.FmOpenService; +import com.iformall.utils.IPUtil; +import com.iformall.utils.MaUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.beans.PropertyEditorSupport; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +@RestController +public class BaseController { + @Autowired + private boolean isFmOpen; + + @Autowired + private WxCUserService wxCUserService; + + @Autowired + private WxAppinfoService wxAppinfoService; + + @Autowired + private FmOpenService openService; + + @Autowired + private WxCUserBasicInfoService wxCUserBasicInfoService; + + @InitBinder + public void InitBinder(WebDataBinder dataBinder) { + dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + public void setAsText(String value) { + try { + setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value)); + } catch (ParseException e) { + try { + setValue(new SimpleDateFormat("yyyy-MM-dd ").parse(value)); + } catch (ParseException e1) { + setValue(null); + } + } + } + + public String getAsText() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) getValue()); + } + + }); + } + + public Long getUserId() { + ServletRequestAttributes ll = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = ll.getRequest(); + Long cUserId = (Long) request.getAttribute(AuthHandshakeInterceptor.LOGIN_USER_KEY); + return cUserId; + } + + public WxCUser getUser() { + Long cUserId = getUserId(); + WxCUser user = wxCUserService.getById(cUserId); + if (user == null) + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + return user; + } + + public String getTenantId() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String tenantId = (String) request.getAttribute(AuthHandshakeInterceptor.TENANT_ID); + return tenantId; + } + + public WxAppinfo getAppInfo(String appId) { + return wxAppinfoService.getByAppId(appId); + } + + public WxMaService getWeappService(String appId) { + if(isFmOpen) { + return openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); + } else { + WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); + if (appinfo == null) { + return null; + } + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } + } + + public WxMaService getWeappServiceByAppInfo(WxAppinfo appinfo) { + if(!isFmOpen) { + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } + return null; + } + + + public void saveToBasicInfo(WxCUser user) { + String phone = user.getPhone(); + if (phone != null && phone.contains("*")) { + phone = user.getVerifyCodePhone(); + } + if (StringUtils.isBlank(phone)) + return; + + List list = wxCUserBasicInfoService.findByPhone(user.getTenantId(), phone); + if (list.size() > 0) { + WxCUserBasicInfo basicInfo = list.get(0); + // 微信名称 + if (basicInfo.getNickName() == null || basicInfo.getNickName().equals(user.getNickName())) { + basicInfo.setNickName(user.getNickName()); + } + // 性别 + if (basicInfo.getSex() == null) { + basicInfo.setSex(user.getGender()); + } + // 成长值 + if (basicInfo.getPoins() == null) { + basicInfo.setPoins(user.getScore()); + } + wxCUserBasicInfoService.updateObj(basicInfo, user.getId()); + } else { + Date cur = new Date(); + WxCUserBasicInfo basicInfo = new WxCUserBasicInfo(); + basicInfo.setId(user.getId()); + basicInfo.setTenantId(user.getTenantId()); + basicInfo.setPhone(phone); + basicInfo.setNickName(user.getNickName()); + basicInfo.setSex(user.getGender()); + basicInfo.setPoins(user.getScore()); + basicInfo.setCreateDate(cur); + basicInfo.setUpdateDate(cur); + wxCUserBasicInfoService.save(basicInfo); + } + } + + public String getIpAddr() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ipaddress = IPUtil.getIpAddr(request); + return ipaddress; + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/controller/HomeController.java b/mallinkWebSocketServer/src/main/java/com/iformall/controller/HomeController.java new file mode 100644 index 000000000..f82534eb2 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/controller/HomeController.java @@ -0,0 +1,27 @@ +package com.iformall.controller; + +import com.iformall.common.ResultData; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Api(description = "登录相关接口") +public class HomeController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Value("${version}") + private String version; + + @ApiOperation("获取后端版本号") + @GetMapping("/version") + public ResultData version() { + return new ResultData(version); + } + + +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/controller/SendController.java b/mallinkWebSocketServer/src/main/java/com/iformall/controller/SendController.java new file mode 100644 index 000000000..0bc55801c --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/controller/SendController.java @@ -0,0 +1,67 @@ + +package com.iformall.controller; + +import com.alibaba.fastjson.JSON; +import com.iformall.service.UserService; +import com.iformall.util.Constance; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.web.bind.annotation.*; + + +/** + * @author Stormeye + */ +@RestController +@RequestMapping("/websocket") +public class SendController { + + @Autowired + private AmqpTemplate amqpTemplate; + + @Autowired + private SimpMessagingTemplate messagingTemplate; + + @Autowired + private UserService userService; + + + /** + * ADMIN通知消息 + */ + @GetMapping("/noticeA/{tenantId}") + public void noticea(@PathVariable("tenantId") String tenantId, @RequestParam String message) { + messagingTemplate.convertAndSend("/topic/"+tenantId+"A", JSON.toJSONString(message)); + } + + /** + * B端通知消息 + */ + @GetMapping("/noticeB/{tenantId}") + public void noticeb(@PathVariable("tenantId") String tenantId, @RequestParam String message) { + messagingTemplate.convertAndSend("/topic/"+tenantId+"B", JSON.toJSONString(message)); + } + + /** + * 通知消息 + */ + @GetMapping("/noticeC/{tenantId}") + public void noticec(@PathVariable("tenantId") String tenantId, @RequestParam String message) { + messagingTemplate.convertAndSend("/topic/"+tenantId+"C", JSON.toJSONString(message)); + } + + /** + * 具体用户消息 + */ + @GetMapping("/user/{name}") + public void user(@PathVariable("name") String name, @RequestParam String message) { + // 方式1 + messagingTemplate.convertAndSendToUser(name, "/message", JSON.toJSONString(message)); + // 方式2 + String userId = userService.getSessionId(name); + amqpTemplate.convertAndSend("", Constance.queue_pre+userId, message); + } + + +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/controller/websocket/ReceiverController.java b/mallinkWebSocketServer/src/main/java/com/iformall/controller/websocket/ReceiverController.java new file mode 100644 index 000000000..1f4118288 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/controller/websocket/ReceiverController.java @@ -0,0 +1,98 @@ +package com.iformall.controller.websocket; + +import com.alibaba.fastjson.JSONObject; +import com.iformall.interceptor.AuthHandshakeInterceptor; +import com.iformall.model.Message; +import com.iformall.service.UserService; +import com.iformall.util.Constance; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.handler.annotation.DestinationVariable; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.web.bind.annotation.RestController; + +import java.security.Principal; +import java.util.List; + + +/** + * websocket Controller + * + * @author Stormeye + */ +@RestController +public class ReceiverController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + SimpMessageSendingOperations simpMessageSendingOperations; + + @Autowired + private AmqpTemplate amqpTemplate; + + @Autowired + private UserService userService; + + /** + * 接收客户端发来的消息 + */ + @MessageMapping("/message") + public void handleSubscribe(String msg, StompHeaderAccessor stompHeaderAccessor) { + Principal user = stompHeaderAccessor.getUser(); + String tenantId = (String) stompHeaderAccessor.getSessionAttributes().get(AuthHandshakeInterceptor.TENANT_ID); + Long userId = (Long) stompHeaderAccessor.getSessionAttributes().get(AuthHandshakeInterceptor.LOGIN_USER_KEY); + logger.info("客户端[" + stompHeaderAccessor.getSessionId() + "]发来消息:, " + msg + "\n" + stompHeaderAccessor.getSessionAttributes().toString()); + JSONObject json = JSONObject.parseObject(msg); + String to = json.getString("to"); + if (StringUtils.isNotBlank(to)) { + simpMessageSendingOperations.convertAndSendToUser(to, "/message", msg); + } else { + simpMessageSendingOperations.convertAndSendToUser("oX7SP4qpcX7LTmLjNuuFSQFXuK0M", "/message", msg); + } + } + + /** + * 接收客户端发来的群聊消息 + */ + @MessageMapping("/chat-group/{roomId}") + public void handleGroupMsg(@DestinationVariable String roomId, String msg) { + logger.info("客户端发来群组消息:" + msg); + simpMessageSendingOperations.convertAndSend("/topic/chat-group/" + roomId, msg); + } + + /** + * 个人聊天消息 + * @param message + * @param headerAccessor + */ + @MessageMapping("/p2p") + public void p2p(Message message, SimpMessageHeaderAccessor headerAccessor) { + String userId = userService.getSessionId(message.getTo()); + System.out.println(Constance.queue_pre+userId); + amqpTemplate.convertAndSend("", Constance.queue_pre+userId, message.getMessage()); + } + + /** + * 群发消息 + * @param message + * @throws Exception + */ + @MessageMapping("/sendall") + public void group(Message message) throws Exception { + List users = userService.listSessionIds(); + for(String user:users){ + System.out.println(Constance.queue_pre+user); + amqpTemplate.convertAndSend("", Constance.queue_pre+user, message.getMessage()); + } + } + + +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/interceptor/AuthHandshakeInterceptor.java b/mallinkWebSocketServer/src/main/java/com/iformall/interceptor/AuthHandshakeInterceptor.java new file mode 100644 index 000000000..b60301658 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/interceptor/AuthHandshakeInterceptor.java @@ -0,0 +1,92 @@ +package com.iformall.interceptor; + +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxCUser; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxCUserTokenService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.server.HandshakeInterceptor; + +import javax.servlet.http.HttpSession; +import java.util.Map; + +/** + * websocket 握手 + * + * @author Stormeye + * @version 2019/03/20 + */ +@Component +public class AuthHandshakeInterceptor implements HandshakeInterceptor { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxCUserTokenService userTokenService; + + public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY"; + public static final String TENANT_ID = "TENANT_ID"; + + @Override + public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { + if (request instanceof ServletServerHttpRequest) { + ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request; + + // 获取token认证 + String token = serverHttpRequest.getServletRequest().getHeader("token"); + // 如果header中不存在token,则从参数中获取token + if(StringUtils.isBlank(token)){ + token = serverHttpRequest.getServletRequest().getParameter("token"); + } + //token为空 + if(StringUtils.isBlank(token)){ + throw new MallinkException(ErrorCode.NET_TOKEN_EMPTY); + } + + // 查询token信息 + WxCUser wxCUser = userTokenService.getByToken(token); + if(wxCUser == null || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()){ + throw new MallinkException(ErrorCode.NET_TOKEN_INVALID.getCode(), "URL:" + serverHttpRequest.getServletRequest().getRequestURI() + " token失效,请重新登录"); + } + HttpSession session = serverHttpRequest.getServletRequest().getSession(); + if (session != null) { + //attributes.put("userId", session.getAttribute("userId")); + attributes.put(LOGIN_USER_KEY, wxCUser.getId()); + attributes.put(TENANT_ID, wxCUser.getTenantId()); + } + return true; + } + /* + HttpSession session = getSession(request); + if(session==null || session.getAttribute("user")==null){ + logger.error("websocket权限拒绝"); + return false; + } + attributes.put("user",session.getAttribute("user")); + */ + + return true; + } + + @Override + public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { + + } + + // 参考 HttpSessionHandshakeInterceptor + private HttpSession getSession(ServerHttpRequest request) { + if (request instanceof ServletServerHttpRequest) { + ServletServerHttpRequest serverRequest = (ServletServerHttpRequest) request; + return serverRequest.getServletRequest().getSession(false); + } + return null; + } + +} \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/model/Message.java b/mallinkWebSocketServer/src/main/java/com/iformall/model/Message.java new file mode 100644 index 000000000..fc654018e --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/model/Message.java @@ -0,0 +1,10 @@ +package com.iformall.model; + +import lombok.Data; + +@Data +public class Message { + private String from; + private String to; + private String message; +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/model/User.java b/mallinkWebSocketServer/src/main/java/com/iformall/model/User.java new file mode 100644 index 000000000..c55dfd834 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/model/User.java @@ -0,0 +1,16 @@ +package com.iformall.model; + +import java.security.Principal; + +public class User implements Principal { + private String name; + + public User(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/mq/AmqpMsgConsumer.java b/mallinkWebSocketServer/src/main/java/com/iformall/mq/AmqpMsgConsumer.java new file mode 100644 index 000000000..3acb4901a --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/mq/AmqpMsgConsumer.java @@ -0,0 +1,62 @@ +package com.iformall.mq; + +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.enums.EnumMsgRecordDomain; +import com.iformall.enums.EnumMsgRecordStatus; +import com.iformall.mapper.WxMsgRecordMapper; +import com.iformall.service.UserService; +import com.iformall.utils.JsonUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Service; + +/** + * 消息消费入口 + */ +@Service +public class AmqpMsgConsumer { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxMsgRecordMapper wxMsgRecordMapper; + @Autowired + private AmqpTemplate amqpTemplate; + @Autowired + private SimpMessagingTemplate messagingTemplate; + @Autowired + private UserService userService; + + public void doMessage(String message) { + log.info("received amqp message: {}", message); + BaseMsg baseMsg = null; + + try { + baseMsg = (BaseMsg)JsonUtil.readValue(message,BaseMsg.class); + + if(EnumMsgRecordDomain.A.getCode().equals(baseMsg.getDomain())) { + messagingTemplate.convertAndSend("/topic/" + baseMsg.getTenantId() + "A", message); + }else if(EnumMsgRecordDomain.B.getCode().equals(baseMsg.getDomain())) { + messagingTemplate.convertAndSend("/topic/" + baseMsg.getTenantId() + "B", message); + }else if(EnumMsgRecordDomain.C.getCode().equals(baseMsg.getDomain())) { + messagingTemplate.convertAndSend("/topic/" + baseMsg.getTenantId() + "C",message); + }else if(EnumMsgRecordDomain.USER.getCode().equals(baseMsg.getDomain())) { + // 方式1 + messagingTemplate.convertAndSendToUser(baseMsg.getTenantId()+baseMsg.getReceiver(), "/message", message); + // 方式2 +// String userId = userService.getSessionId(name); +// amqpTemplate.convertAndSend("", Constance.queue_pre+userId, message); + } + + baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); + wxMsgRecordMapper.update(baseMsg); + }catch (Exception e){ + log.error("consum received error: {}", e); + baseMsg.setStatusMessage(e.getMessage()); + baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_FAIL.getCode()); + wxMsgRecordMapper.update(baseMsg); + } + + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/mq/impl/RabbitMqAmqpMsgConsumer.java b/mallinkWebSocketServer/src/main/java/com/iformall/mq/impl/RabbitMqAmqpMsgConsumer.java new file mode 100644 index 000000000..b70232074 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/mq/impl/RabbitMqAmqpMsgConsumer.java @@ -0,0 +1,42 @@ +package com.iformall.mq.impl; + +import com.iformall.mq.AmqpMsgConsumer; +import com.iformall.mq.MQConfig; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +@Profile(MQConfig.Impl.RABBIT_MQ) +public class RabbitMqAmqpMsgConsumer extends AmqpMsgConsumer { + String queueName = "topic-amqp"; + + @Autowired + private AmqpAdmin amqpAdmin; + + @PostConstruct + public void init() { + DirectExchange exchange = new DirectExchange(queueName); + Queue queue = new Queue(queueName); + Binding binding = BindingBuilder.bind(queue).to(exchange).withQueueName(); + amqpAdmin.declareExchange(exchange); + amqpAdmin.declareQueue(queue); + amqpAdmin.declareBinding(binding); + } + + @Autowired + private AmqpTemplate rabbitTemplate; + + public void send(String msg) { + rabbitTemplate.convertAndSend(queueName, msg); + } + + @RabbitListener(queues = "topic-amqp") + public void onMessage(String message) { + doMessage(message); + } +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/service/UserService.java b/mallinkWebSocketServer/src/main/java/com/iformall/service/UserService.java new file mode 100644 index 000000000..9c6d09313 --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/service/UserService.java @@ -0,0 +1,43 @@ +package com.iformall.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundHashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class UserService { + private static final String WSUSERS = "wsuser"; + + @Autowired + private RedisTemplate redisTemplate; + + public void addUser(String name,String sessionId){ + BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(WSUSERS); + boundHashOperations.put(name, sessionId); + } + + public void deleteUser(String name){ + BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(WSUSERS); + boundHashOperations.delete(name); + } + + public String getSessionId(String name){ + BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(WSUSERS); + return boundHashOperations.get(name); + } + + public List listSessionIds(){ + BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(WSUSERS); + List values = new ArrayList(); + for(String key:boundHashOperations.keys()){ + System.out.println(key); + values.add(boundHashOperations.get(key)); + } + return values; + } + +} diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/util/Constance.java b/mallinkWebSocketServer/src/main/java/com/iformall/util/Constance.java new file mode 100644 index 000000000..80011c9cf --- /dev/null +++ b/mallinkWebSocketServer/src/main/java/com/iformall/util/Constance.java @@ -0,0 +1,5 @@ +package com.iformall.util; + +public class Constance { + public static final String queue_pre = "p2p-user"; +} diff --git a/mallinkWebSocketServer/src/main/resources/application-dev.yml b/mallinkWebSocketServer/src/main/resources/application-dev.yml new file mode 100644 index 000000000..4e2a1354c --- /dev/null +++ b/mallinkWebSocketServer/src/main/resources/application-dev.yml @@ -0,0 +1,111 @@ +spring: + profiles: + include: rabbitMQ + # JDBC + datasource: + url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true + username: ENC(dZ8fmrtuBMQYaRytKQgTqg==) + password: ENC(WGu0+1DPIHrqorDhrbq1+7wr7xNG53mN) + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + filters: stat + maxActive: 20 + initialSize: 1 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 28000 + minEvictableIdleTimeMillis: 28000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" + #jackson: + #date-format: yyyy-MM-dd HH:mm:ss + + # REDIS + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 3 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 50 + max-idle: 50 + max-wait: -1 + min-idle: 10 + # EMAIL + mail: + host: smtp.exmail.qq.com + username: ENC(R0bER9E9OB9/YQcpNXMyYDwofNVb8/pFl4nrApS8mi0=) + password: ENC(50YqJd0iK/2r2YnmEd5RKaki3ktU73UDapBJrVYfqmc=) # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + rabbitmq: + host: 202.165.179.86 + port: 5672 + username: fumao + password: f8l89&*%%u7f1t22 + publisher-confirms: true + virtual-host: / + +aws: + clientRegion: cn-northwest-1 + bucketName: iformall-net + access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) + secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) + +wechat: + open: + componentAppId: "wx897e4673286c915d" + componentSecret: "cdfdfda65c45689beb6766c4c427eed2" + componentToken: "formall2018" + componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 500 + max-wait: -1 + min-idle: 10 + +jasypt: + encryptor: + password: oRqdnDbK5pj3eMmB + +fm: + exception: false + deploy: 1 + open: true + +logging: + level: + tk.mybatis: debug + com.iformall.mapper: debug + path: ./logs/w diff --git a/mallinkWebSocketServer/src/main/resources/application-prod.yml b/mallinkWebSocketServer/src/main/resources/application-prod.yml new file mode 100644 index 000000000..8938643c7 --- /dev/null +++ b/mallinkWebSocketServer/src/main/resources/application-prod.yml @@ -0,0 +1,96 @@ +spring: + profiles: + include: rabbitMQ + # JDBC + datasource: + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true + username: ENC(NUzgQOdJnCbVLKT6BaX0aw==) + password: ENC(mvuoDRiu0jqYaKNRwwTuXZ6U7aoIaqsjdiPqTLgi/nY=) + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + filters: stat + maxActive: 20 + initialSize: 1 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 28000 + minEvictableIdleTimeMillis: 28000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" + # REDIS + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 3 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 8 + max-idle: 8 + max-wait: -1 + min-idle: 0 + # EMAIL + mail: + host: smtp.exmail.qq.com + username: ENC(I2YKxnRVPY7J1r/bwzwHOhQCjj3nVqCWEbVTJvBq7y0=) + password: ENC(APQMO9XQRzMKd0eap+oSSOYH9MQe/r5K0YFF9A9mizU=) # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + # RABBITMQ + rabbitmq: + host: localhost + port: 5672 + username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) + password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) + publisher-confirms: true + virtual-host: / + +aws: + clientRegion: cn-northwest-1 + bucketName: iformall-net + access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) + secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) + +wechat: + open: + componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) + componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) + componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) + componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + +fm: + exception: true + deploy: 3 + open: true + +logging: + level: + tk.mybatis: debug + com.iformall: debug + path: ./logs/w \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/resources/application-test.yml b/mallinkWebSocketServer/src/main/resources/application-test.yml new file mode 100644 index 000000000..71fe99bc8 --- /dev/null +++ b/mallinkWebSocketServer/src/main/resources/application-test.yml @@ -0,0 +1,96 @@ +spring: + profiles: + include: rabbitMQ + # JDBC + datasource: + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true + username: ENC(Uc0AjgkytxHHCwZrmDASWg==) + password: ENC(nV4Mi3bEbBx0Fj7uUyYH55eTaqsFMjKvmNzagicH4pc=) + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + filters: stat + maxActive: 20 + initialSize: 1 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 28000 + minEvictableIdleTimeMillis: 28000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" + # REDIS + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 3 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 8 + max-idle: 8 + max-wait: -1 + min-idle: 0 + # EMAIL + mail: + host: smtp.exmail.qq.com + username: ENC(HFbRXtAFVxU36Hk0yT3reyvRuLrw3RhMlbxFj9Ev/VY=) + password: ENC(pk4+/3C5n2hMYmgi+VTqI4P1m77DllW8y4KElMXXmIo=) # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + # RABBITMQ + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: ENC(aSRr6mnSryEqzHHz1hJf1g==) + password: ENC(GnjF/mdqKdvmDYC0tIIso7+20/jBALPw39tiWCYJ4iw=) + publisher-confirms: true + virtual-host: / + +aws: + clientRegion: cn-northwest-1 + bucketName: iformall-net + access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) + secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) + +wechat: + open: + componentAppId: ENC(hnH31XdNzArfMfikKgBFpqQuJUl6rVOPFFcAVyb595o=) + componentSecret: ENC(t/GUVX5L+U7LCwSvZ5WmxAnmTMrc/Uy1nljsrokuzzsBL2j6BEVnrS/n7DCdGc/G) + componentToken: ENC(gUF1m0YgCCI2IY54fX6sGLZVlCswA8tG) + componentAesKey: ENC(TYHcrIkICtfrCfGq4HW6s1b/pHf7OD2uyPN11SzJNB0acqJ/4JVX1nuljo/cAtgMG4O05TImLQc=) + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 2 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 100 + max-idle: 100 + max-wait: -1 + min-idle: 10 + +fm: + exception: true + deploy: 2 + open: true + +logging: + level: + tk.mybatis: debug + com.iformall: debug + path: ./logs/w \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/resources/application.yml b/mallinkWebSocketServer/src/main/resources/application.yml new file mode 100644 index 000000000..af5f1645a --- /dev/null +++ b/mallinkWebSocketServer/src/main/resources/application.yml @@ -0,0 +1,76 @@ + + +server: + port: 7100 + servlet: + context-path: /W + +spring: + application: + name: mallink + profiles: + active: dev + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + default-property-inclusion: non_null + servlet: + multipart: + max-file-size: 2MB + max-request-size: 2MB + cache: + type: REDIS + cache-names: redis_cache #缓存的名字(可以不指定) + redis: + time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒) + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + rabbitmq: + host: 202.165.179.86 + port: 5672 + username: guest + password: guest + publisher-confirms: true + virtual-host: / + + +# @{link} https://github.com/abel533 +#Mybatis +mybatis: + type-aliases-package: com.iformall.domain.po + mapper-locations: classpath:mapper/*Mapper.xml + configuration: + map-underscore-to-camel-case: true + cache-enabled: true + lazy-loading-enabled: true + use-generated-keys: true + default-fetch-size: 100 + default-statement-timeout: 10 + +#PageHelper +pagehelper: + helperDialect: mysql + reasonable: false + supportMethodsArguments: true + params: count=countSql + offset-as-page-num: true + page-size-zero: true + row-bounds-with-count: true + +mapper: + mappers: + - com.iformall.common.CommonMapper + +pay: + real: true + + +version: @project.version@ +debug: true \ No newline at end of file diff --git a/mallinkWebSocketServer/src/main/resources/logback-spring.xml b/mallinkWebSocketServer/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..2525413f1 --- /dev/null +++ b/mallinkWebSocketServer/src/main/resources/logback-spring.xml @@ -0,0 +1,100 @@ + + + + + + + + [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] --%mdc{client}%msg%n + + + + + ${logPath}/trace.log + + ${logPath}/daily/trace.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + + + ${logPath}/info.log + + ${logPath}/daily/info.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + INFO + ACCEPT + DENY + + + + + ${logPath}/debug.log + + ${logPath}/daily/debug.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + DEBUG + ACCEPT + DENY + + + + + + ${logPath}/warn.log + + ${logPath}/daily/warn.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + WARN + ACCEPT + DENY + + + + + + + ${logPath}/error.log + + ${logPath}/daily/error.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0d4a85a24..5a91c9ee8 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ mallinkBApi mallinkSchedule mallinkMQConsumer + mallinkWebSocketServer @@ -32,6 +33,7 @@ 3.3.0 3.3.0 3.3.0 + 3.3.0 2.3.0 @@ -72,10 +74,6 @@ true - - org.springframework.boot - spring-boot-starter-websocket - org.springframework.boot spring-boot-starter-web-services @@ -283,11 +281,18 @@ 4.0.0 + + + org.apache.httpcomponents + httpclient + 4.5.3 + + com.squareup.okhttp3 okhttp - 3.11.0 + 3.14.0 @@ -333,6 +338,12 @@ ${weixin-java-pay.version} + + com.github.binarywang + weixin-java-open + ${weixin-java-open.version} + + com.github.ulisesbocchio jasypt-spring-boot