diff --git a/.gitignore b/.gitignore index 1a2cf913b..b87b84391 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .idea/** */target/** logs/** +*/logs/** logPath_IS_UNDEFINED/** uploads/** .gitignore diff --git a/mallinkAdmin/src/main/java/com/iformall/annotation/UserDataRuleAnnotation.java b/mallinkAdmin/src/main/java/com/iformall/annotation/UserDataRuleAnnotation.java new file mode 100644 index 000000000..f59938850 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/annotation/UserDataRuleAnnotation.java @@ -0,0 +1,14 @@ +package com.iformall.annotation; + +import java.lang.annotation.*; + +/** + * @author gongbiao + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface UserDataRuleAnnotation { + + String value() default ""; +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java index fb6655b5a..b36f45f56 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java @@ -1,8 +1,10 @@ package com.iformall.controller.basic; import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.WxMallFloor; import com.iformall.service.WxMallBuildingService; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -26,5 +28,23 @@ public class WxMallBuildingController extends BaseController { return wxMallBuildingService.getbuildingfloorlist(getTenantId()); } + @ApiOperation("保存楼层楼座面积") + @PostMapping("saveFloorArea") + @SystemControllerLog(description = "商城-楼座/楼层-保存面积") + public ResultData saveFloorArea(@RequestBody WxMallFloor record) { + logger.debug("[" + getIpAddr() + "] WxMallBuildingController::addBuildingAndFloor"); + if(record == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (record.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (record.getTotalArea() == null && record.getOperatingArea() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + record.setTenantId(getTenantId()); + wxMallBuildingService.saveFloorArea(record); + return new ResultData(); + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 2cb8312a0..d412b944f 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -2,6 +2,7 @@ package com.iformall.controller.basic; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; +import com.iformall.annotation.UserDataRuleAnnotation; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; @@ -18,12 +19,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; -/** +/**w * @author gongbiao */ @RestController @@ -37,6 +39,7 @@ public class WxMerchantController extends BaseController { private QrCodeService qrCodeService; + @UserDataRuleAnnotation("merchant_list") @ApiOperation("分页列表接口") @GetMapping("listVo") @ApiImplicitParams({ @@ -57,7 +60,8 @@ public class WxMerchantController extends BaseController { @GetMapping("list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), - @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) @SystemControllerLog(description = "商户-列表") public ResultData list(@ModelAttribute WxMerchant wxMerchant, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxMerchantController::list"); @@ -208,6 +212,7 @@ public class WxMerchantController extends BaseController { return new ResultData(wxMerchant); } + @UserDataRuleAnnotation("merchant_list") @ApiOperation("商户数据导出") @GetMapping("/exportData") @SystemControllerLog(description = "商户-商户数据导出") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxPropertyContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxPropertyContractController.java index 3e9f6a5df..75e6cadca 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxPropertyContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxPropertyContractController.java @@ -1,10 +1,14 @@ package com.iformall.controller.contract; import com.iformall.annotation.SystemControllerLog; +import com.iformall.annotation.UserDataRuleAnnotation; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; -import com.iformall.domain.po.*; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxPropertyContract; import com.iformall.enums.EnumIsPreview; import com.iformall.enums.EnumRentStartType; import com.iformall.exception.MallinkException; @@ -38,7 +42,8 @@ public class WxPropertyContractController extends BaseController { private Logger logger = LoggerFactory.getLogger(WxPropertyContractController.class); - @GetMapping("list") + @UserDataRuleAnnotation("property_contract_list") + @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java index be88a5490..f15388d9f 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java @@ -1,22 +1,23 @@ package com.iformall.controller.contract; import com.iformall.annotation.SystemControllerLog; +import com.iformall.annotation.UserDataRuleAnnotation; import com.iformall.common.ErrorCode; -import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.*; -import com.iformall.enums.EnumBillAction; import com.iformall.enums.EnumFromType; import com.iformall.enums.EnumIsPreview; import com.iformall.enums.EnumRentStartType; import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxBillActionMapper; import com.iformall.mapper.WxBillPropertyMapper; import com.iformall.mapper.WxBillRentMapper; import com.iformall.mapper.WxRentContractMapper; -import com.iformall.service.*; +import com.iformall.service.WxBillRentService; +import com.iformall.service.WxMerchantService; +import com.iformall.service.WxPayAccountBillService; +import com.iformall.service.WxRentContractService; import com.iformall.utils.DateUtils; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -28,9 +29,11 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author gongbiao @@ -88,7 +91,8 @@ public class WxRentContractController extends BaseController { return new ResultData(map); } - @GetMapping("list") + @UserDataRuleAnnotation("rent_contract_list") + @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) @@ -126,7 +130,9 @@ public class WxRentContractController extends BaseController { @SystemControllerLog(description = "租赁合同-添加") public ResultData add(@RequestBody WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::add"); - + if(StringUtils.isBlank(wxRentContract.getBusDiscountRatio())){ + wxRentContract.setBusDiscountTime(new Integer(0)); + } WxMerchant wxMerchant = new WxMerchant(); wxMerchant.setName(wxRentContract.getMerchantName()); wxMerchant.setId(wxRentContract.getMerchantId()); @@ -165,6 +171,10 @@ public class WxRentContractController extends BaseController { @SystemControllerLog(description = "租赁合同-更新") public ResultData update(@RequestBody WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::update"); + + if(StringUtils.isBlank(wxRentContract.getBusDiscountRatio())){ + wxRentContract.setBusDiscountTime(new Integer(0)); + } MallUserInfo user = getUser(); wxRentContract.setTenantId(user.getTenantId()); wxRentContract.setAdjustPeriodHandle(); @@ -191,6 +201,9 @@ public class WxRentContractController extends BaseController { @SystemControllerLog(description = "租赁合同-更新金额") public ResultData updateMoney(@RequestBody WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::updateMoney"); + if(StringUtils.isBlank(wxRentContract.getBusDiscountRatio())){ + wxRentContract.setBusDiscountTime(new Integer(0)); + } MallUserInfo user = getUser(); wxRentContract.setTenantId(user.getTenantId()); wxRentContract.setAdjustPeriodHandle(); @@ -206,6 +219,9 @@ public class WxRentContractController extends BaseController { @SystemControllerLog(description = "租赁合同-更新文件") public ResultData updateFile(@RequestBody WxRentContract wxRentContract) { logger.debug("[" + getIpAddr() + "] WxRentContractController::updateFile"); + if(StringUtils.isBlank(wxRentContract.getBusDiscountRatio())){ + wxRentContract.setBusDiscountTime(new Integer(0)); + } MallUserInfo user = getUser(); wxRentContract.setTenantId(user.getTenantId()); wxRentContract.setAdjustPeriodHandle(); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentPropertyContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentPropertyContractController.java index ab9f2b1fb..e0094fd36 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentPropertyContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentPropertyContractController.java @@ -2,6 +2,7 @@ package com.iformall.controller.contract; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; +import com.iformall.annotation.UserDataRuleAnnotation; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.MallUserInfo; @@ -27,7 +28,8 @@ public class WxRentPropertyContractController extends BaseController { @Autowired private WxRentPropertyContractService wxRentPropertyContractService; - @GetMapping("list") + @UserDataRuleAnnotation("rent_property_contract_list") + @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java index 5e9a5b0c2..56a4bbd39 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java @@ -52,7 +52,7 @@ public class WxChartDataController extends BaseController { "rentOwe 租赁总额 propertyOwe物业总额 otherOwe其他总额 depositOwe押金总额 totalOwe欠缴总额"+ "--------------------------------------"+ "chart=51首页场景发卷:" + - "carStopHistory停车发卷 couponVerifyHistory核销发卷 orderHistory交易发卷 micropayHistory收银台发卷"+ + "carStopHistory停车发卷 couponVerifyHistory核销发卷 orderHistory交易发卷 micropayHistory收银台发卷 merchantHistory商户发券"+ "--------------------------------------"+ "chart=52营销数据:" + "当前”券交易数据“替换为”营销数据“:cardHistory卡营销历史 pressSendHistory砍价营销历史 groupHistory拼团营销历史 couponHistory卷营销历史," + diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxMerchantTradeDailyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxMerchantTradeDailyController.java index 75e4592ca..1faca02ad 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxMerchantTradeDailyController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxMerchantTradeDailyController.java @@ -2,6 +2,7 @@ package com.iformall.controller.datatower; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; +import com.iformall.annotation.UserDataRuleAnnotation; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; @@ -30,33 +31,22 @@ public class WxMerchantTradeDailyController extends BaseController { @Autowired private WxMerchantTradeDailyService wxMerchantTradeDailyService; - @ApiOperation("获得指定日期的解单,默认不传reportDate为当天") - @GetMapping("/getVolume") - @SystemControllerLog(description = "解单-获得指定日期的解单") - public ResultData getVolume(WxMerchantTradeDaily wxMerchantTradeDaily) { - wxMerchantTradeDaily.setTenantId(getTenantId()); - return wxMerchantTradeDailyService.getVolume(wxMerchantTradeDaily,getUser().getId()); - } - + @UserDataRuleAnnotation("merchant_trade") @ApiOperation("获得解单列表") @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 WxMerchantTradeDailyVo wxMerchantTradeDaily, Integer pageNum, Integer pageSize) { + public ResultData list(@ModelAttribute WxMerchantTradeDaily wxMerchantTradeDaily, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxMerchantTradeDailyController::listYesterday"); if (wxMerchantTradeDaily == null) - wxMerchantTradeDaily = new WxMerchantTradeDailyVo(); + wxMerchantTradeDaily = new WxMerchantTradeDaily(); wxMerchantTradeDaily.setTenantId(getTenantId()); - if (wxMerchantTradeDaily.getReportDate() == null) { - SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); - wxMerchantTradeDaily.setReportDate(fmt.format(new Date())); - } - wxMerchantTradeDaily.setSortColumns(BaseEntity.SortField.MerchantId_DESC); + wxMerchantTradeDaily.setSortColumns(BaseEntity.SortField.ReportDate_DESC,BaseEntity.SortField.MerchantId_DESC); PageInfo page = wxMerchantTradeDailyService.listAsPageVo(wxMerchantTradeDaily, pageNum, pageSize); return new ResultData(page); @@ -81,7 +71,7 @@ public class WxMerchantTradeDailyController extends BaseController { @ApiOperation("更新解单数据") @PostMapping("/update") @SystemControllerLog(description = "商户-更新解单数据") - public ResultData update(@RequestBody WxMerchantTradeDailyVo wxMerchantTradeDaily) { + public ResultData update(@RequestBody WxMerchantTradeDaily wxMerchantTradeDaily) { logger.debug("[" + getIpAddr() + "] WxMerchantTradeDailyController::updateYesterday"); if (wxMerchantTradeDaily == null || wxMerchantTradeDaily.getMerchantId() == null || @@ -98,25 +88,22 @@ public class WxMerchantTradeDailyController extends BaseController { @ApiOperation("查询解单数据") @GetMapping("/queryTradeDaily") @SystemControllerLog(description = "商户-查询解单数据") - public ResultData queryTradeDaily(@ModelAttribute WxMerchantTradeDailyVo wxMerchantTradeDaily) { + public ResultData queryTradeDaily(@ModelAttribute WxMerchantTradeDaily wxMerchantTradeDaily) { logger.debug("[" + getIpAddr() + "] WxMerchantTradeDailyController::queryTradeDaily"); wxMerchantTradeDaily.setTenantId(getTenantId()); return wxMerchantTradeDailyService.queryTradeDaily(wxMerchantTradeDaily); } + @UserDataRuleAnnotation("merchant_trade") @GetMapping("exportData") @SystemControllerLog(description = "商户解单数据-导出数据") - public void exportData(@ModelAttribute WxMerchantTradeDailyVo wxMerchantTradeDaily, HttpServletRequest request, HttpServletResponse response) { + public void exportData(@ModelAttribute WxMerchantTradeDaily wxMerchantTradeDaily, HttpServletRequest request, HttpServletResponse response) { logger.debug("[" + getIpAddr() + "] WxMerchantTradeDailyController::exportData"); if (null == wxMerchantTradeDaily) { - wxMerchantTradeDaily = new WxMerchantTradeDailyVo(); + wxMerchantTradeDaily = new WxMerchantTradeDaily(); } wxMerchantTradeDaily.setTenantId(getTenantId()); - if (wxMerchantTradeDaily.getReportDate() == null) { - SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); - wxMerchantTradeDaily.setReportDate(fmt.format(new Date())); - } - wxMerchantTradeDaily.setSortColumns(BaseEntity.SortField.MerchantId_DESC); + wxMerchantTradeDaily.setSortColumns(BaseEntity.SortField.ReportDate_DESC,BaseEntity.SortField.MerchantId_DESC); wxMerchantTradeDailyService.exportData(wxMerchantTradeDaily, request, response); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java index c7db07834..3953e2d15 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java @@ -7,11 +7,10 @@ import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.*; +import com.iformall.domain.vo.KwMeterDataVo; +import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.UserStructureVo; -import com.iformall.enums.EnumAgeInfo; -import com.iformall.enums.EnumCUserBaseInfoSex; -import com.iformall.enums.EnumScoreType; -import com.iformall.enums.EnumTag; +import com.iformall.enums.*; import com.iformall.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -261,27 +260,51 @@ public class WxUserStructureController extends BaseController { } /********************************会员数据**************************************/ + + private Date addDay(Date date , int addDayAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.DATE, addDayAmount); + Date result = c.getTime(); + return result; + } + + private Date addMonth(Date date, int addMountAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.MONTH, addMountAmount); + Date result = c.getTime(); + return result; + } + + private Date addYear(Date date, int addYearAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.YEAR, addYearAmount); + Date result = c.getTime(); + return result; + } + @ApiOperation("查询会员数量") @GetMapping("/findUserDataCount") @SystemControllerLog(description = "会员管理-查询会员数量") - public ResultData findUserCount(Date startTime, Date endTime) { - - final int daysBefore = 29; + public ResultData findUserCount(Date startTime, Date endTime, Integer reportType) { logger.debug("[" + getIpAddr() + "] WxUserStructureController::findUserCount"); + + + //昨日同比 + Map map = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); dto.setTenantId(getTenantId()); - dto.setStartTime(startTime); - dto.setEndTime(endTime); - if (endTime != null) { - Calendar c = Calendar.getInstance(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, 1); - endTime = c.getTime(); - } + dto.setEndTime(new Date()); //微信用户数据 - long wxallCount = wxCUserService.findCount(dto);//总量 - //会员数据 - Map member=getMemberData(dto); + long wxTotalCount = wxCUserService.findCount(dto);//总量 + //微信用户数据 + long memTotalCount = wxCUserBasicInfoService.findCount(dto);//总量 + + map.put("wxTotalCount",wxTotalCount); + map.put("memTotalCount",memTotalCount); Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, 0); @@ -290,46 +313,12 @@ public class WxUserStructureController extends BaseController { Date today = c.getTime(); dto.setStartTime(today); dto.setEndTime(null); - long wxtodayCount = wxCUserService.findCount(dto);//今天新增 - 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 = wxCUserService.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 = wxCUserService.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++; - } + long wxTodayCount = wxCUserService.findCount(dto);//今天新增 + long memTodayCount = wxCUserBasicInfoService.findCount(dto);//今天新增 + map.put("wxTodayCount",wxTodayCount); + map.put("memTodayCount",memTodayCount); - //昨日同比 - Map map = new HashMap<>(); //昨日同比 c.clear(); c.setTime(today); @@ -337,98 +326,136 @@ public class WxUserStructureController extends BaseController { dto.setStartTime(c.getTime()); c.add(Calendar.DAY_OF_YEAR, 1); dto.setEndTime(c.getTime()); - long yesterdayCount = wxCUserService.findCount(dto); - if(yesterdayCount>0){ - double yesterday=(double) (wxtodayCount-yesterdayCount)/yesterdayCount*100; + long wxYesterdayCount = wxCUserService.findCount(dto); + long memYesterdayCount = wxCUserBasicInfoService.findCount(dto); + if (wxYesterdayCount > 0) { + double yesterday = (double) (wxTodayCount - wxYesterdayCount) / wxYesterdayCount * 100; double zrhb = new BigDecimal(yesterday).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - map.put("wxhb",zrhb+"%"); - }else{ - map.put("wxhb","--%"); + map.put("wxhb", zrhb + "%"); + } else { + map.put("wxhb", "--%"); + } + if (memYesterdayCount > 0) { + double yesterday = (double) (wxTodayCount - memYesterdayCount) / memYesterdayCount * 100; + double zrhb = new BigDecimal(yesterday).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + map.put("memhb", zrhb + "%"); + } else { + map.put("memhb", "--%"); } - map.put("wxallCount", wxallCount);//累计会员总数 - map.put("wxtodayCount", wxtodayCount);//今日新增会员数 - map.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) - map.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) - map.putAll(member); - return new ResultData(map); - } - - private Map getMemberData(WxCUserBasicInfoDto dto) { - final int daysBefore = 29; - long allCount = wxCUserBasicInfoService.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 = wxCUserBasicInfoService.findCount(dto);//今天新增 - 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 = wxCUserBasicInfoService.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); + if (startTime == null || endTime == null) { + startTime = addMonth(new Date(), -1); + endTime = new Date(); + reportType = EnumUserCountReportType.DAY.getCode(); } - 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 = wxCUserBasicInfoService.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++; + + dto.setTenantId(getTenantId()); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + dto.setReportType(reportType); + + List wxCountList = new ArrayList<>();//每日新增会员数 + List wxCounts = wxCUserService.findCountHistory(dto);//每日新增会员数 + List memCountList = new ArrayList<>();//每日新增会员数 + List memCounts = wxCUserBasicInfoService.findCountHistory(dto);//每日新增会员数 + + SimpleDateFormat sdf; + SimpleDateFormat fsdf; + if (reportType.equals(EnumUserCountReportType.YEAR.getCode())) { + sdf = new SimpleDateFormat("yyyy"); + fsdf = new SimpleDateFormat("yyyy"); + }else if (reportType.equals(EnumUserCountReportType.MONTH.getCode())) { + sdf = new SimpleDateFormat("yyyy-MM"); + fsdf = new SimpleDateFormat("yyyy-MM"); + }else { + sdf = new SimpleDateFormat("yyyy-MM-dd"); + fsdf = new SimpleDateFormat("MM-dd"); } + Date curTime = new Date(startTime.getTime()); + do { + UserCountVo wxUc = new UserCountVo(); + UserCountVo memUc = new UserCountVo(); + wxUc.setReportTime(fsdf.format(curTime)); + memUc.setReportTime(fsdf.format(curTime)); + + final Date ct = new Date(curTime.getTime()); + + if (ct.before(new Date()) || ct.equals(new Date())) { + //用户 + Optional opWxUserCountVo = + wxCounts.stream().filter(md -> md.getReportTime().equals(sdf.format(ct))).findFirst(); + if (opWxUserCountVo.isPresent()) { + wxUc.setIncCount(opWxUserCountVo.get().getIncCount()); + wxUc.setTotalCount(opWxUserCountVo.get().getTotalCount()); + } else { + wxUc.setIncCount(0L); + wxUc.setTotalCount(0L); + } - Map map = new HashMap<>(); - //昨日同比 - c.clear(); - 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 yesterdayCount = wxCUserService.findCount(dto); - if(yesterdayCount>0){ - double yesterday=(double) (todayCount-yesterdayCount)/yesterdayCount*100; - double zrhb = new BigDecimal(yesterday).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - map.put("hb",zrhb+"%"); - }else{ - map.put("hb","--%"); - } + //会员 + Optional opMemUserCountVo = + memCounts.stream().filter(md -> md.getReportTime().equals(sdf.format(ct))).findFirst(); + if (opMemUserCountVo.isPresent()) { + memUc.setIncCount(opMemUserCountVo.get().getIncCount()); + memUc.setTotalCount(opMemUserCountVo.get().getTotalCount()); + } else { + memUc.setIncCount(0L); + memUc.setTotalCount(0L); + } + } + memCountList.add(memUc); + wxCountList.add(wxUc); + if (reportType.equals(EnumUserCountReportType.YEAR.getCode())) { + curTime = addYear(curTime, 1); + } else if (reportType.equals(EnumUserCountReportType.MONTH.getCode())) { + curTime = addMonth(curTime, 1); + } else { + curTime = addDay(curTime, 1); + } + }while (curTime.before(endTime) || curTime.equals(endTime)); - map.put("allCount", allCount);//累计会员总数 - map.put("todayCount", todayCount);//今日新增会员数 - map.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) - map.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) - return map; + if (wxCountList.size() > 0 + && wxCountList.get(0).getTotalCount() != null + && wxCountList.get(0).getTotalCount() == 0) { + WxCUserBasicInfoDto pdto = new WxCUserBasicInfoDto(); + pdto.setTenantId(getTenantId()); + pdto.setEndTime(startTime); + wxCountList.get(0).setTotalCount(wxCUserService.findCount(pdto)); + } + for (int i = 1; i < wxCountList.size(); i++){ + if (wxCountList.get(i).getTotalCount() != null && + wxCountList.get(i-1).getTotalCount() != null && + wxCountList.get(i).getTotalCount() < wxCountList.get(i-1).getTotalCount()){ + wxCountList.get(i).setTotalCount(wxCountList.get(i-1).getTotalCount()); + } + } + if (memCountList.size() > 0 + && memCountList.get(0).getTotalCount() != null + && memCountList.get(0).getTotalCount() == 0) { + WxCUserBasicInfoDto pdto = new WxCUserBasicInfoDto(); + pdto.setTenantId(getTenantId()); + pdto.setEndTime(startTime); + memCountList.get(0).setTotalCount(wxCUserBasicInfoService.findCount(pdto)); + } + for (int i = 1; i < memCountList.size(); i++){ + if ( memCountList.get(i).getTotalCount() != null && + memCountList.get(i-1).getTotalCount() != null && + memCountList.get(i).getTotalCount() < memCountList.get(i-1).getTotalCount()){ + memCountList.get(i).setTotalCount(memCountList.get(i-1).getTotalCount()); + } + } + + map.put("wxCountList", wxCountList);//累计/新增用户列表( 日期和数量list) + map.put("memCountList", memCountList);//累计/新增会员列表( 日期和数量list) + + return new ResultData(map); } + @ApiOperation("拓客分析") @GetMapping("/findUserByChannel") @ApiImplicitParams({ diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/device/KwBoxController.java b/mallinkAdmin/src/main/java/com/iformall/controller/device/KwBoxController.java index 253239a70..3cf53f5c2 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/device/KwBoxController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/device/KwBoxController.java @@ -90,7 +90,11 @@ public class KwBoxController extends BaseController { if (kwBox == null) return new ResultData(ErrorCode.DEVICE_NOT_FOUND); - kwBox.setMeters(kwBoxService.findMeters(kwBox)); + KwMeter kwMeter = new KwMeter(); + kwMeter.setBoxId(kwBox.getId()); + kwMeter.setBindStatus(EnumMeterBindStatus.BIND.getCode()); + kwMeter.setStatus(EnumMeterStatus.VALID.getCode()); + kwBox.setMeters(kwMeterService.findVoList(kwMeter)); return new ResultData(kwBox); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMerchantMeterController.java b/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMerchantMeterController.java index 621333093..246f5baa0 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMerchantMeterController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMerchantMeterController.java @@ -5,14 +5,10 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; - import com.iformall.domain.dto.KwMerchantMeterDto; -import com.iformall.domain.dto.KwMeterDataDto; import com.iformall.domain.po.KwMerchantMeter; -import com.iformall.domain.po.KwMeter; import com.iformall.domain.vo.KwMerchantMeterVo; import com.iformall.enums.EnumMerchantMeterStatus; -import com.iformall.enums.EnumMerchantStatus; import com.iformall.service.kw.KwMerchantMeterService; import com.iformall.service.kw.KwMeterDataService; import io.swagger.annotations.Api; @@ -24,8 +20,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; - @RestController @RequestMapping("kwMerchantMeter") @@ -107,4 +101,12 @@ public class KwMerchantMeterController extends BaseController { return new ResultData(); } + + @ApiOperation("商户电表列表") + @GetMapping("getMechantMeter") + @SystemControllerLog(description = "商户列表") + public ResultData getMechantMeter() { + return new ResultData(kwMerchantMeterService.getMerchantMeter(getTenantId())); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/MarkingDataReportController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/MarkingDataReportController.java index bf42d0be8..f6373dd8b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/MarkingDataReportController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/MarkingDataReportController.java @@ -17,6 +17,9 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * Created by syf on 2018/8/29. */ @@ -86,5 +89,13 @@ public class MarkingDataReportController extends BaseController { return new ResultData(markingDataReportService.getTouchUsersReportList(getTenantId(), markingCouponDataReportDto, pageNum, pageSize)); } + @ApiOperation("触达用户数数据导出") + @GetMapping("/exportTouchUsersData") + @SystemControllerLog(description = "券数据-触达用户数数据导出") + public void exportTouchUsersData(@ModelAttribute MarkingCouponDataReportDto markingCouponDataReportDto, HttpServletRequest request, HttpServletResponse response) { + markingCouponDataReportDto.setTenantId(getTenantId()); + markingDataReportService.exportTouchUsersData(request, response, markingCouponDataReportDto); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendConfigController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendConfigController.java index b3b4558a8..fd0b16605 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendConfigController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendConfigController.java @@ -6,6 +6,8 @@ import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.WxCouponSendConfig; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumValidStatus; import com.iformall.service.WxCouponSendConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -37,8 +39,13 @@ public class WxCouponSendConfigController extends BaseController { PageInfo page = wxCouponSendConfigService.listAsPage(wxCouponSendConfig, 1, 1); if (page.getSize() > 0) { return new ResultData(page.getList().get(0)); + } else { + //配置不存在,添加默认配置(停用) + wxCouponSendConfig.setRemark(EnumCouponSendSendType.getEnum(wxCouponSendConfig.getSendType()).getMessage() + "开关"); + wxCouponSendConfig.setValue(1); + wxCouponSendConfigService.saveOrUpdate(wxCouponSendConfig); + return new ResultData(wxCouponSendConfig); } - return new ResultData(); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendController.java index 8b15c6077..8e75ec650 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendController.java @@ -1,5 +1,6 @@ package com.iformall.controller.market; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ErrorCode; @@ -10,6 +11,7 @@ import com.iformall.domain.po.BaseEntity; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponSend; import com.iformall.domain.vo.WxCouponSendVo; +import com.iformall.enums.EnumCouponSendSendType; import com.iformall.enums.EnumCouponSendStatus; import com.iformall.enums.EnumCouponSendType; import com.iformall.enums.EnumCouponStatus; @@ -25,7 +27,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.validation.constraints.NotNull; import java.util.Date; +import java.util.Objects; @RestController @RequestMapping("wxCouponSend") @@ -44,22 +48,52 @@ public class WxCouponSendController extends BaseController { @GetMapping("list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), - @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "merchantName", value = "商户名,模糊查询", dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "merchantId", value = "商户Id", dataType = "String", paramType = "query"), + }) @SystemControllerLog(description = "注券-列表") public ResultData list(@ModelAttribute WxCouponSend wxCouponSend, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCouponSendController::list"); if (null == wxCouponSend) wxCouponSend = new WxCouponSend(); wxCouponSend.setTenantId(getTenantId()); - wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); - wxCouponSend.setSortColumns(BaseEntity.SortField.CreateDate_DESC); - final PageInfo page = wxCouponSendService.listAsPage(wxCouponSend, pageNum, pageSize); - - for (WxCouponSendVo cs:page.getList()) - cs.setSendCount(wxCouponActionLogService.getCountByChannelId(getTenantId(), cs.getSendType(), cs.getId())); +// if (Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSend.getSendType())) { +// if (Objects.nonNull(wxCouponSend.getStatus())) { +// valid = wxCouponSend.getStatus(); +// } else { +// wxCouponSend.setStatus(null); +// } +// } + PageInfo page = wxCouponSendService.listAsPage(wxCouponSend, pageNum, pageSize); return new ResultData(page); } + @ApiOperation("注券-添加配置") + @GetMapping("config/add") + @ApiImplicitParams({ + @ApiImplicitParam(name = "beforeDays", value = "提前n天发券", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "sendType", value = "注券类型(生日券=8)", dataType = "int", paramType = "query", required = true), + }) + @SystemControllerLog(description = "注券-添加或更新配置") + public ResultData addConfig(@NotNull Integer beforeDays, @NotNull Integer sendType) { + if(!Objects.equals(sendType,EnumCouponSendSendType.BIRTHDAY.getCode())) { + return new ResultData(ErrorCode.COUPON_VALID_NOT_SUPPORTED); + } + wxCouponSendService.saveOrUpdateConfig(beforeDays, sendType, getTenantId()); + return new ResultData(); + } + + @ApiOperation("注券-获取配置") + @GetMapping("config/get") + @ApiImplicitParams({ + @ApiImplicitParam(name = "sendType", value = "注券类型(生日券=8)", dataType = "int", paramType = "query", required = true)}) + @SystemControllerLog(description = "注券-获取配置") + public ResultData getConfig(@NotNull Integer sendType) { + WxCouponSend wxCouponSend = wxCouponSendService.getConfig(sendType, getTenantId()); + return new ResultData(Objects.isNull(wxCouponSend) ? null : wxCouponSend.getConditions()); + } + @ApiOperation("新增接口") @PostMapping("add") @SystemControllerLog(description = "注券-新增") @@ -68,18 +102,19 @@ public class WxCouponSendController extends BaseController { if (null == wxCouponSend) { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } - + WxCoupon wxCoupon = wxCouponService.getById(wxCouponSend.getCouponId()); - if (!wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode()) ){ + if (!EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode().equals(wxCoupon.getStatus())) { return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); } - if (!wxCoupon.getSendType().equals(EnumCouponSendType.PASSIVE.getCode())) { + if (!EnumCouponSendType.PASSIVE.getCode().equals(wxCoupon.getSendType())) { return new ResultData(ErrorCode.COUPON_TYPE_IS_NOT_PASSIVE); } wxCouponSend.setTenantId(wxCoupon.getTenantId()); wxCouponSend.setTitle(wxCoupon.getTitle()); + wxCouponSend.setCreateDate(new Date()); wxCouponSend.setUpdateDate(new Date()); @@ -87,28 +122,30 @@ public class WxCouponSendController extends BaseController { return new ResultData(); } - @ApiOperation("根据id更新接口") - @PostMapping("update") - @SystemControllerLog(description = "注券-更新") - public ResultData update(@RequestBody WxCouponSend wxCouponSend) { - logger.debug("[" + getIpAddr() + "] WxCouponSendController::update"); - wxCouponSend.setTenantId(getTenantId()); - wxCouponSendService.saveOrUpdate(wxCouponSend); - return new ResultData(); - } +// @ApiOperation("根据id更新接口") +// @PostMapping("update") +// @SystemControllerLog(description = "注券-更新") +// public ResultData update(@RequestBody WxCouponSend wxCouponSend) { +// logger.debug("[" + getIpAddr() + "] WxCouponSendController::update"); +// wxCouponSend.setTenantId(getTenantId()); +// wxCouponSendService.saveOrUpdate(wxCouponSend); +// return new ResultData(); +// } @ApiOperation("根据id删除接口") @GetMapping("/del") - @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "sendType", value = "注券类型(会员生日券时必传)", dataType = "int", paramType = "query") + }) @SystemControllerLog(description = "注券-删除") public ResultData delete(Long id) { logger.debug("[" + getIpAddr() + "] WxCouponSendController::delete"); WxCouponSend wxCouponSend = wxCouponSendService.getById(id); - if (wxCouponSend == null) + if (wxCouponSend == null) { return new ResultData(ErrorCode.COUPON_SEND_IS_INVALID); - wxCouponSend.setStatus(EnumCouponSendStatus.INVALID.getCode()); - wxCouponSend.setUpdateDate(new Date()); - wxCouponSendService.saveOrUpdate(wxCouponSend); + } + wxCouponSendService.updateInvalid(wxCouponSend); return new ResultData(); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxMerchantPowerBillConfigController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxMerchantPowerBillConfigController.java new file mode 100644 index 000000000..f14adea63 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxMerchantPowerBillConfigController.java @@ -0,0 +1,85 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.BaseEntity; +import com.iformall.domain.po.WxMerchantPowerBillConfig; +import com.iformall.service.WxMerchantPowerBillConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +/** + * @author gongbiao + */ +@RestController +@RequestMapping("wxMerchantPowerBillConfig") +@Api(description = "商户电费生成配置") +public class WxMerchantPowerBillConfigController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxMerchantPowerBillConfigService wxMerchantPowerBillConfigService; + + + @ApiOperation("查询数据列表") + @GetMapping("/list") + @SystemControllerLog(description = "查询数据列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findCouponDataList(@ModelAttribute WxMerchantPowerBillConfig wxMerchantPowerBillConfig, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxMerchantPowerBillConfigController::list"); + wxMerchantPowerBillConfig.setTenantId(getTenantId()); + wxMerchantPowerBillConfig.setSortColumns(BaseEntity.SortField.CreateDate_DESC); + final PageInfo page = wxMerchantPowerBillConfigService.listAsPage(wxMerchantPowerBillConfig, pageNum, pageSize); + return new ResultData(page); + } + + + @ApiOperation("新增") + @PostMapping("/add") + @SystemControllerLog(description = "新增") + public ResultData add(@RequestBody WxMerchantPowerBillConfig wxMerchantPowerBillConfig) { + logger.debug("[" + getIpAddr() + "] WxMerchantPowerBillConfigController::add"); + return wxMerchantPowerBillConfigService.saveOrUpdate(wxMerchantPowerBillConfig); + } + + @ApiOperation("更新") + @PostMapping("/update") + @SystemControllerLog(description = "更新") + public ResultData update(@RequestBody WxMerchantPowerBillConfig wxMerchantPowerBillConfig) { + logger.debug("[" + getIpAddr() + "] WxMerchantPowerBillConfigController::update"); + return wxMerchantPowerBillConfigService.saveOrUpdate(wxMerchantPowerBillConfig); + } + + @ApiOperation("删除") + @GetMapping("/del") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + @SystemControllerLog(description = "删除") + public ResultData delete(Long id) { + logger.debug("[" + getIpAddr() + "] WxMerchantPowerBillConfigController::delete"); + wxMerchantPowerBillConfigService.deleteById(id); + return new ResultData(Result.SUCCESS, "删除成功", null); + } + + @ApiOperation("根据id查询接口") + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + @SystemControllerLog(description = "id查询") + public ResultData findById(Long id) { + logger.debug("[" + getIpAddr() + "] WxMerchantPowerBillConfigController::findById"); + return new ResultData(Result.SUCCESS, "查询成功", wxMerchantPowerBillConfigService.getById(id)); + } + + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPowerBillAutoConfigController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPowerBillAutoConfigController.java new file mode 100644 index 000000000..c22742bc3 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPowerBillAutoConfigController.java @@ -0,0 +1,67 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.BaseEntity; +import com.iformall.domain.po.WxPowerBillAutoConfig; +import com.iformall.service.WxPowerBillAutoConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +/** + * @author gongbiao + */ +@RestController +@RequestMapping("wxPowerBillAutoConfig") +@Api(description = "电费自动生成配置") +public class WxPowerBillAutoConfigController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxPowerBillAutoConfigService wxPowerBillAutoConfigService; + + + @ApiOperation("查询数据列表") + @GetMapping("/list") + @SystemControllerLog(description = "查询数据列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findCouponDataList(@ModelAttribute WxPowerBillAutoConfig wxPowerBillAutoConfig, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxPowerBillAutoConfigController::list"); + wxPowerBillAutoConfig.setTenantId(getTenantId()); + wxPowerBillAutoConfig.setSortColumns(BaseEntity.SortField.CreateDate_DESC); + final PageInfo page = wxPowerBillAutoConfigService.listAsPage(wxPowerBillAutoConfig, pageNum, pageSize); + return new ResultData(page); + } + + + @ApiOperation("修改") + @PostMapping("/modify") + @SystemControllerLog(description = "修改") + public ResultData add(@RequestBody WxPowerBillAutoConfig wxPowerBillAutoConfig) { + logger.debug("[" + getIpAddr() + "] WxPowerBillAutoConfigController::modify"); + return wxPowerBillAutoConfigService.modify(wxPowerBillAutoConfig); + } + + + @ApiOperation("得到配置信息") + @GetMapping("/getConfig") + @SystemControllerLog(description = "id查询") + public ResultData getConfig() { + logger.debug("[" + getIpAddr() + "] WxPowerBillAutoConfigController::getConfig"); + return new ResultData(Result.SUCCESS, "查询成功", wxPowerBillAutoConfigService.getConfig(getTenantId())); + } + + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java index 06fd1dcf7..b14de9bab 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java @@ -26,6 +26,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.io.File; +import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -153,7 +154,7 @@ public class ImportTemplateTask { public void importBillDataOther(File file, MallUserInfo user, String importKey, String tenantId) { ImportParams params = new ImportParams(); // 需要验证 - params.setImportFields(new String[]{"商户名*", "费用类型*", "费用名称*", "费用所属期-开始时间*", "费用所属期-结束时间*", "实际应收金额(元)*", "收款金额(元)*", "收款日期*", "截止缴款日*", "收款方式"}); + params.setImportFields(new String[]{"商户名*", "费用类型*", "费用名称*", "费用所属期-开始时间*", "费用所属期-结束时间*", "实际应收金额(元)*", "收款金额(元)*", "收款日期", "截止缴款日*", "收款方式"}); params.setNeedVerify(true); ExcelImportResult datalist = null; @@ -199,19 +200,24 @@ public class ImportTemplateTask { //3 计失败条数 List billSuccessList = new ArrayList<>(); successList.parallelStream().forEach(s -> { - if (StringUtils.isNotEmpty(s.getMerchantName()) && null != s.getBillType() + boolean flag = StringUtils.isNotEmpty(s.getMerchantName()) && null != s.getBillType() && StringUtils.isNotEmpty(s.getBillAttr()) && null != s.getStarttime() && null != s.getEndtime() && StringUtils.isNotEmpty(s.getPayStr()) - && null != s.getPayDate() && null != s.getReceiveDate() - && StringUtils.isNotEmpty(s.getReceivePayStr())) { - WxMerchant wxMerchant = merchantMap.get(s.getMerchantName()); - if (wxMerchant != null) { - Long merchantId = wxMerchant.getId(); - if (merchantId != null) { - s.setMerchantId(merchantId); - Integer type = wxMerchant.getType(); - s.setMerchantType(type); - billSuccessList.add(s); + && null != s.getReceiveDate() && StringUtils.isNotEmpty(s.getReceivePayStr()); + if (flag) { + double pay = new BigDecimal(s.getPayStr()).doubleValue(); + //付款大于0且付款日期不为空说明是更新账单 或者 付款为0且付款日期为空是新增账单 满足其一即可继续 + flag = (pay > 0 && null != s.getPayDate()) || (pay == 0 && null == s.getPayDate()); + if (flag) { + WxMerchant wxMerchant = merchantMap.get(s.getMerchantName()); + if (wxMerchant != null) { + Long merchantId = wxMerchant.getId(); + if (merchantId != null) { + s.setMerchantId(merchantId); + Integer type = wxMerchant.getType(); + s.setMerchantType(type); + billSuccessList.add(s); + } } } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCreditHistoryController.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCreditHistoryController.java index 4d64a734c..c8fbf0f5e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCreditHistoryController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCreditHistoryController.java @@ -46,11 +46,12 @@ public class WxCreditHistoryController extends BaseController { @GetMapping("findByMerchantIdAndSpend") @ApiImplicitParams({ @ApiImplicitParam(name = "merchantId", value = "商户ID", dataType = "long", paramType = "query", required = true), - @ApiImplicitParam(name = "spend", value = "消费金额", dataType = "int", paramType = "query", required = true)}) + @ApiImplicitParam(name = "spend", value = "消费金额", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "userId", value = "会员Id", dataType = "long", paramType = "query", required = true)}) @SystemControllerLog(description = "积分历史-根据商户ID和消费金额获取所增加积分") - public ResultData findByMerchantIdAndSpend(@RequestParam Long merchantId, @RequestParam String spendStr) { + public ResultData findByMerchantIdAndSpend(@RequestParam Long merchantId, @RequestParam String spendStr,@RequestParam Long userId) { logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::findByMerchantIdAndSpend"); - return new ResultData(wxCreditHistoryService.findByMerchantIdAndSpend(merchantId, spendStr, getTenantId())); + return new ResultData(wxCreditHistoryService.findByMerchantIdAndSpend(merchantId, spendStr, userId,getTenantId())); } @ApiOperation("新增接口") @@ -97,4 +98,13 @@ public class WxCreditHistoryController extends BaseController { wxCreditHistoryService.exportData(request, response, wxCreditHistory); } + @ApiOperation("积分统计概览") + @GetMapping("getCreditSummary") + @SystemControllerLog(description = "积分历史-积分统计概览") + public ResultData getCreditSummary(@ModelAttribute WxCreditHistory wxCreditHistory) { + logger.debug("[" + getIpAddr() + "] WxCreditHistoryController::getCreditSummary"); + wxCreditHistory.setTenantId(getTenantId()); + return wxCreditHistoryService.getCreditSummary(wxCreditHistory); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java index a9269d4ac..bdf437eed 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillAllController.java @@ -1,5 +1,6 @@ package com.iformall.controller.rent; +import com.alibaba.fastjson.JSONArray; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; @@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.Map; /** @@ -51,10 +53,37 @@ public class WxBillAllController extends BaseController { wxBillAll = new WxBillAll(); } wxBillAll.setTenantId(getTenantId()); + if(StringUtils.isNotBlank(wxBillAll.getStatusListStr())){ + wxBillAll.setStatusList(new ArrayList<>()); + JSONArray jsonArray = JSONArray.parseArray(wxBillAll.getStatusListStr()); + for (int i = 0; i ()); + JSONArray jsonArray = JSONArray.parseArray(wxBillAll.getTypeListStr()); + for (int i = 0; i result = wxBillAllService.listAsPage(wxBillAll, pageNum, pageSize); return new ResultData(result); } + @GetMapping("allDepositList") + @SystemControllerLog(description = "账单总览-所有押金列表") + public ResultData allDepositList(@ModelAttribute WxBillAll wxBillAll) { + logger.debug("[" + getIpAddr() + "] WxBillAllController::allDepositList"); + if (null == wxBillAll) { + wxBillAll = new WxBillAll(); + } + wxBillAll.setTenantId(getTenantId()); + return new ResultData(wxBillAllService.allDepositList(wxBillAll)); + } + @GetMapping("exportBill") @SystemControllerLog(description = "账单总览-导出") public void exportBill(@ModelAttribute WxBillAll wxBillAll, HttpServletRequest request, HttpServletResponse response) { @@ -97,6 +126,46 @@ public class WxBillAllController extends BaseController { return new ResultData(result); } + /** + * 应收、承付商户列表 + * @param wxBillAll + * @param pageNum + * @param pageSize + * @return + */ + @GetMapping("receiveAndPayMerchantlist") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + @SystemControllerLog(description = "账单管理-应收、承付商户列表") + @ApiOperation("应收、承付商户列表") + public ResultData receiveAndPayMerchantlist(@ModelAttribute WxBillAll wxBillAll, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxBillAllController::receiveAndPayMerchantlist"); + if (null == wxBillAll) { + wxBillAll = new WxBillAll(); + } + wxBillAll.setTenantId(getTenantId()); + Map result = wxBillAllService.getReceiveAndPayBillAsPage(wxBillAll, pageNum, pageSize); + return new ResultData(result); + } + + /** + * 导出应收、承付商户列表 + * @param wxBillAll + * @return + */ + @GetMapping("exportReceiveAndPayMerchantlist") + @SystemControllerLog(description = "账单管理-导出应收、承付商户列表") + @ApiOperation("导出应收、承付商户列表") + public void exportReceiveAndPayMerchantlist(@ModelAttribute WxBillAll wxBillAll,HttpServletRequest request, HttpServletResponse response) { + logger.debug("[" + getIpAddr() + "] WxBillAllController::exportReceiveAndPayMerchantlist"); + if (null == wxBillAll) { + wxBillAll = new WxBillAll(); + } + wxBillAll.setTenantId(getTenantId()); + wxBillAllService.exportReceiveAndPayBillAsPage(wxBillAll, request,response); + } + @ApiOperation("导出欠缴商户列表") @GetMapping("/exportOweMerchantlist") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillDailyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillDailyController.java index 5237b8269..43212161b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillDailyController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillDailyController.java @@ -10,6 +10,7 @@ import com.iformall.controller.base.BaseController; import com.iformall.controller.mem.BillDailyAsyncTask; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillDaily; +import com.iformall.enums.EnumBillDailyBuildWay; import com.iformall.exception.MallinkException; import com.iformall.service.WxBillDailyService; import com.iformall.utils.Constant; @@ -75,6 +76,7 @@ public class WxBillDailyController extends BaseController { MallUserInfo user = getUser(); wxBillDaily.setTenantId(user.getTenantId()); wxBillDaily.setUserId(user.getId()); + wxBillDaily.setBuildWay(EnumBillDailyBuildWay.HAND.getCode()); return wxBillDailyService.saveOrUpdate(wxBillDaily, user); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillSettleController.java b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillSettleController.java new file mode 100644 index 000000000..2db15df6c --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxBillSettleController.java @@ -0,0 +1,96 @@ +package com.iformall.controller.rent; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.BaseEntity; +import com.iformall.domain.po.WxBillSettle; +import com.iformall.domain.po.WxBillSettleRecord; +import com.iformall.service.WxBillAllService; +import com.iformall.service.WxBillSettleRecordService; +import com.iformall.service.WxBillSettleService; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author luozukai + */ +@RestController +@RequestMapping("wxBillSettle") +public class WxBillSettleController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxBillSettleService wxBillSettleService; + @Autowired + private WxBillSettleRecordService wxBillSettleRecordService; + @Autowired + private WxBillAllService wxBillAllService; + + @GetMapping("list") + @ApiOperation("账单管理-结算对冲列表") + @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 WxBillSettle wxBillSettle, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxBillSettleController::list"); + if (null == wxBillSettle) { + wxBillSettle = new WxBillSettle(); + } + wxBillSettle.setTenantId(getTenantId()); + wxBillSettle.setSortColumns(BaseEntity.SortField.Createtime_DESC,BaseEntity.SortField.Id_DESC); + final PageInfo page = wxBillSettleService.listAsPage(wxBillSettle, pageNum, pageSize); + return new ResultData(page); + } + + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + @ApiOperation("账单管理-结算单-id查找") + @SystemControllerLog(description = "账单管理-结算单-id查找") + public ResultData findById(Long id) { + logger.debug("[" + getIpAddr() + "] WxBillSettleController::findById"); + return new ResultData(Result.SUCCESS, "查询成功", wxBillSettleService.getById(id)); + } + + @PostMapping("addOrUpdate") + @ApiOperation("账单管理-结算单-新增或编辑") + @SystemControllerLog(description = "账单管理-结算单-新增或编辑") + public ResultData addOrUpdate(@RequestBody WxBillSettle wxBillSettle) { + logger.debug("[" + getIpAddr() + "] WxBillSettleController::addOrUpdate"); + wxBillSettle.setTenantId(getTenantId()); + return wxBillSettleService.saveOrUpdate(wxBillSettle,getUser()); + } + + @PostMapping("settle") + @ApiOperation("账单管理-结算单-结算") + @SystemControllerLog(description = "账单管理-结算单-结算") + public ResultData settle(@RequestBody WxBillSettleRecord wxBillSettleRecord) { + logger.debug("[" + getIpAddr() + "] WxBillSettleController::settle"); + wxBillSettleRecord.setTenantId(getTenantId()); + return wxBillSettleRecordService.saveOrUpdate(wxBillSettleRecord,getUser(),null); + } + + @GetMapping("exportSettle") + @SystemControllerLog(description = "账单管理-结算单-导出") + public void exportBill(@ModelAttribute WxBillSettle wxBillSettle, HttpServletRequest request, HttpServletResponse response) { + wxBillSettle.setTenantId(getTenantId()); + wxBillSettleService.exportBill(request, response, wxBillSettle); + } + + @GetMapping("downloadSettle") + @SystemControllerLog(description = "账单管理-结算单-下载") + public void downloadSettle(@ModelAttribute WxBillSettle wxBillSettle, HttpServletRequest request, HttpServletResponse response) { + wxBillSettle.setTenantId(getTenantId()); + wxBillAllService.exportSettleBill(wxBillSettle,request,response); + } +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/sys/WxDataRuleTargetController.java b/mallinkAdmin/src/main/java/com/iformall/controller/sys/WxDataRuleTargetController.java new file mode 100644 index 000000000..16a328d96 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/sys/WxDataRuleTargetController.java @@ -0,0 +1,57 @@ +package com.iformall.controller.sys; + + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.WxDataRuleTarget; +import com.iformall.service.WxDataRuleTargetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author gongbiao + */ +@RestController +@RequestMapping("wxDataRuleTarget") +@Api(description = "数据权限目标") +public class WxDataRuleTargetController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxDataRuleTargetService wxDataRuleTargetService; + + @ApiOperation("列表接口") + @GetMapping("list") + @SystemControllerLog(description = "数据权限目标-列表接口") + @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 WxDataRuleTarget wxDataRuleTarget, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] wxDataRuleTarget::list"); + final PageInfo page = wxDataRuleTargetService.listAsPage(wxDataRuleTarget, pageNum, pageSize); + return new ResultData(page); + } + + + @ApiOperation("获取全部") + @GetMapping("getList") + @SystemControllerLog(description = "数据权限目标-获取全部") + public ResultData getList() { + logger.debug("[" + getIpAddr() + "] wxDataRuleTarget::getList"); + List datalist = wxDataRuleTargetService.getList(); + return new ResultData(datalist); + } +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/sys/WxUserDataRuleController.java b/mallinkAdmin/src/main/java/com/iformall/controller/sys/WxUserDataRuleController.java new file mode 100644 index 000000000..eee9ec850 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/sys/WxUserDataRuleController.java @@ -0,0 +1,56 @@ +package com.iformall.controller.sys; + + +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxUserDataRule; +import com.iformall.enums.EnumUserAdmin; +import com.iformall.service.WxUserDataRuleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +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.*; + +/** + * @author gongbiao + */ +@RestController +@RequestMapping("wxUserDataRule") +@Api(description = "用户数据权限") +public class WxUserDataRuleController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxUserDataRuleService wxUserDataRuleService; + + @ApiOperation("编辑") + @PostMapping("/modify") + @SystemControllerLog(description = "用户数据权限-新增") + public ResultData modify(@RequestBody WxUserDataRule wxUserDataRule) { + logger.debug("[" + getIpAddr() + "] wxDataRuleTarget::modify"); + MallUserInfo currentUser = getUser(); + // 系统管理员才能修改信息 + if (!currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) { + return new ResultData(ErrorCode.USER_NO_PERMISSION.getCode(), "系统管理员才能修改信息"); + } + wxUserDataRuleService.modify(wxUserDataRule); + return new ResultData(); + } + + @ApiOperation("根据用户ID查看") + @GetMapping("/findByUserId") + @ApiImplicitParam(name = "userId", value = "userId", dataType = "Long", paramType = "query", required = true) + @SystemControllerLog(description = "用户数据权限-根据用户ID查看") + public ResultData findByUserId(Long userId) { + logger.debug("[" + getIpAddr() + "] wxDataRuleTarget::modify"); + WxUserDataRule wxUserDataRule = wxUserDataRuleService.findByUserId(userId); + return new ResultData(wxUserDataRule); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/log/UserDataRuleAspect.java b/mallinkAdmin/src/main/java/com/iformall/log/UserDataRuleAspect.java new file mode 100644 index 000000000..971ac5e76 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/log/UserDataRuleAspect.java @@ -0,0 +1,108 @@ +package com.iformall.log; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.annotation.UserDataRuleAnnotation; +import com.iformall.domain.po.BaseEntity; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxUserDataRule; +import com.iformall.mapper.WxRentContractMapper; +import com.iformall.service.WxUserDataRuleService; +import com.iformall.shiro.UserSession; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.HashSet; + +/** + * @author gongbiao + */ +@Aspect +@Component +public class UserDataRuleAspect { + private static final Logger logger = LoggerFactory.getLogger(UserDataRuleAspect.class); + + @Autowired + private WxUserDataRuleService wxUserDataRuleService; + + @Autowired + private WxRentContractMapper wxRentContractMapper; + + @Pointcut("@annotation(com.iformall.annotation.UserDataRuleAnnotation)") + public void userDataRulePointcut() { + } + + @Before("userDataRulePointcut()") + public void doBefore(JoinPoint joinPoint) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + MallUserInfo user = (MallUserInfo) request.getSession().getAttribute(UserSession.userInfo); + if (user == null) { + logger.error("session 获取 user 失败"); + return; + } + + //得到用户的数据权限 + WxUserDataRule byUserId = wxUserDataRuleService.findByUserId(user.getId()); + if (byUserId == null) { + logger.info("用户的数据权限未配置"); + return; + } + String buildingFloor = byUserId.getBuildingFloor(); + if (StringUtils.isNotEmpty(buildingFloor)) { + Object[] data = JSONArray.parseArray(buildingFloor).toArray(); + buildingFloor = StringUtils.join(data, ","); + } + + String businessForRule = byUserId.getBusiness(); + if (StringUtils.isNotEmpty(businessForRule)) { + Object[] data = JSONArray.parseArray(businessForRule).toArray(); + businessForRule = StringUtils.join(data, ","); + } + + HashSet targetSet = new HashSet(); + String target = byUserId.getTarget(); + if (StringUtils.isNotEmpty(target)) { + JSONArray objects = JSONArray.parseArray(target); + for (int i = 0; i < objects.size(); i++) { + JSONObject jsonObject = objects.getJSONObject(i); + targetSet.add(jsonObject.getString("tag")); + } + } + + //得到注释的名称 + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + //判断tag是否在用户权限中 如果存在加入参数查询 + Method method = signature.getMethod(); + String value = method.getAnnotation(UserDataRuleAnnotation.class).value(); + if (targetSet.contains(value)) { + //得到方法的参数 + Object[] args = joinPoint.getArgs(); + if (args[0] instanceof BaseEntity) { + BaseEntity baseEntity = (BaseEntity) args[0]; + baseEntity.setFloorForRule(buildingFloor); + baseEntity.setBusinessForRule(businessForRule); + String contract = "contract"; + if (StringUtils.isNotEmpty(buildingFloor) && value.contains(contract)) { + int count = wxRentContractMapper.getShopCountMax(); + String[] tempShop = new String[count]; + baseEntity.setTempShop(tempShop); + } + } + + } + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/shiro/PasswordHelper.java b/mallinkAdmin/src/main/java/com/iformall/shiro/PasswordHelper.java index 155fca778..f9e7a6476 100644 --- a/mallinkAdmin/src/main/java/com/iformall/shiro/PasswordHelper.java +++ b/mallinkAdmin/src/main/java/com/iformall/shiro/PasswordHelper.java @@ -20,14 +20,16 @@ public class PasswordHelper { } + /* public static void main(String[] args) { MallUserInfo user = new MallUserInfo(); - user.setUsername("fmkjadmin"); - user.setPassword("fmkjadmin790"); + user.setUsername("admin"); + user.setPassword("admin123"); PasswordHelper passwordHelper = new PasswordHelper(); passwordHelper.encryptPassword(user); System.out.println(user); System.out.println(user.getPassword()); } + */ } diff --git a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java index 57ecf5da7..a15f3115c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -75,6 +75,9 @@ public class TenantInfoImpl implements TenantInfo { if ("wx_msg_record".equals(tableName)) { return true; } + if ("wx_data_rule_target".equals(tableName)) { + return true; + } return false; } @@ -126,6 +129,7 @@ public class TenantInfoImpl implements TenantInfo { return true; if ("com.iformall.mapper.WxBillPropertyMapper.insertBillAction".equals(ms.getId())) return true; + return false; } } diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151125__G_ALTER_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151125__G_ALTER_SHOP.sql deleted file mode 100644 index 604ffe739..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151125__G_ALTER_SHOP.sql +++ /dev/null @@ -1,3 +0,0 @@ -alter table `wx_shop` -add column business int(11) default 0 COMMENT '预置业态', -add column rent bigint(12) default 0 COMMENT '参与租金'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151402__G_ALTER_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151402__G_ALTER_SHOP.sql deleted file mode 100644 index 8c8140a9b..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151402__G_ALTER_SHOP.sql +++ /dev/null @@ -1 +0,0 @@ -alter table wx_shop add index b_f(building,floor); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151441__G_ALTER_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151441__G_ALTER_SHOP.sql deleted file mode 100644 index 6f9726f4c..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151441__G_ALTER_SHOP.sql +++ /dev/null @@ -1 +0,0 @@ -alter table wx_shop add index t_i_t_s_b_f_c(tenant_id,is_del,type,status,building,floor,create_date); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151540__G_ALTER_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151540__G_ALTER_SHOP.sql deleted file mode 100644 index 814c3b945..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151540__G_ALTER_SHOP.sql +++ /dev/null @@ -1 +0,0 @@ -alter table wx_shop add column `rent_unit` TINYINT(4) DEFAULT '1' COMMENT '租金单位1日2月3年'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151610__G_ALTER_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151610__G_ALTER_SHOP.sql deleted file mode 100644 index 8112cfe8c..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151610__G_ALTER_SHOP.sql +++ /dev/null @@ -1 +0,0 @@ -alter table wx_shop change column `business` business_id int(11) default 0 COMMENT '预置业态'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151635__L_FLOW_CONFIG_DATA.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151635__L_FLOW_CONFIG_DATA.sql deleted file mode 100644 index 11cfd9b4a..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151635__L_FLOW_CONFIG_DATA.sql +++ /dev/null @@ -1,20 +0,0 @@ -update wx_flow_config set name = '商铺租金合同签约' where name = '商铺合同签约'; -update wx_flow_config set name = '多经点位租金合同签约' where name = '多径点位合同签约'; -update wx_flow_config set name = '商铺租金合同终止' where name = '商铺合同终止'; -update wx_flow_config set name = '多经点位租金合同终止' where name = '多经点位合同终止'; - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151638__L_FLOW_CONFIG_DATA.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151638__L_FLOW_CONFIG_DATA.sql deleted file mode 100644 index a23cd0d3a..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151638__L_FLOW_CONFIG_DATA.sql +++ /dev/null @@ -1,97 +0,0 @@ -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '商铺物业合同签约', 13, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 5), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '商铺物业合同终止', 14, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 6), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '多经点位物业合同签约', 15, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 7), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '多经点位物业合同终止', 16, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 8); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907151748__L_FLOW_CONFIG_DATA.sql b/mallinkAdmin/src/main/resources/db/migration/V201907151748__L_FLOW_CONFIG_DATA.sql deleted file mode 100644 index d379e906e..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907151748__L_FLOW_CONFIG_DATA.sql +++ /dev/null @@ -1,104 +0,0 @@ -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '456', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '789', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '790', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1001', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1002', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1003', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1004', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1005', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1006', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1007', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1008', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1009', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1010', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1011', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); - -INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `create_date`, `update_date`, `sort`) -VALUES - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '商铺租赁合同签约', 17, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 9), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '商铺租赁合同终止', 18, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 10), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '多经点位商铺租赁合同签约', 19, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 11), - ((select unix_timestamp(now()) + CEILING(RAND()*90000+10000)), 1561009249, '1012', '多经点位商铺租赁合同终止', 20, 0, '2019-06-11 14:02:42', '2019-07-11 21:06:31', 12); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907171930__CAR_DATA.sql b/mallinkAdmin/src/main/resources/db/migration/V201907171930__CAR_DATA.sql deleted file mode 100644 index c702df1d8..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907171930__CAR_DATA.sql +++ /dev/null @@ -1,7 +0,0 @@ -ALTER TABLE `wx_car_pay_record` add unique(`syn_id`); - -alter table wx_car_cmd_log -add column syn_id VARCHAR(50) GENERATED ALWAYS AS (`cmd_json` ->> '$.synId') NULL; - -alter table wx_car_cmd_log -add column order_id VARCHAR(50) GENERATED ALWAYS AS (`cmd_json` ->> '$.orderId') NULL; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907191230__CAR_DATA.sql b/mallinkAdmin/src/main/resources/db/migration/V201907191230__CAR_DATA.sql deleted file mode 100644 index 2f8de6dfb..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907191230__CAR_DATA.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table wx_car_cmd_log -add column fee_time VARCHAR(50) GENERATED ALWAYS AS (`cmd_json` ->> '$.time') NULL; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907201448__ALTER_MSG.sql b/mallinkAdmin/src/main/resources/db/migration/V201907201448__ALTER_MSG.sql deleted file mode 100644 index 72e5a3747..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907201448__ALTER_MSG.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table wx_msg_validationcode_model -add column open SMALLINT(1) default 0 COMMENT '发送开关 0开1关'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907221045__CHANGE_PUSH_LIMIT.sql b/mallinkAdmin/src/main/resources/db/migration/V201907221045__CHANGE_PUSH_LIMIT.sql deleted file mode 100644 index d67cb029a..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907221045__CHANGE_PUSH_LIMIT.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `push_limit` -ADD COLUMN `time_enable` TINYINT(2) NULL DEFAULT 0 COMMENT '是否启用,0:Enable,1:Disable' after `coupon_day`; - -Update `push_limit` set `time_enable` = 0; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907241543__G_ALTER_SHOP.sql b/mallinkAdmin/src/main/resources/db/migration/V201907241543__G_ALTER_SHOP.sql deleted file mode 100644 index c24a0102d..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907241543__G_ALTER_SHOP.sql +++ /dev/null @@ -1 +0,0 @@ -alter table wx_shop modify `rent` varchar(20) DEFAULT '' COMMENT '参与租金'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907261815__L_ALTER_BILL.sql b/mallinkAdmin/src/main/resources/db/migration/V201907261815__L_ALTER_BILL.sql deleted file mode 100644 index fe4beb1e2..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907261815__L_ALTER_BILL.sql +++ /dev/null @@ -1,11 +0,0 @@ -ALTER TABLE `wx_rent_contract` -ADD COLUMN `late_pay_ratio` INT(10) NULL DEFAULT 0 COMMENT '滞纳金费率'; - -ALTER TABLE `wx_rent_contract` -ADD COLUMN `late_pay_day` INT(10) NULL DEFAULT NULL COMMENT 'n天后开始计算滞纳金'; - -ALTER TABLE `wx_property_contract` -ADD COLUMN `late_pay_ratio` INT(10) NULL DEFAULT 0 COMMENT '滞纳金费率'; - -ALTER TABLE `wx_property_contract` -ADD COLUMN `late_pay_day` INT(10) NULL DEFAULT NULL COMMENT 'n天后开始计算滞纳金'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907291107__G_ALTER_BUSINESS.sql b/mallinkAdmin/src/main/resources/db/migration/V201907291107__G_ALTER_BUSINESS.sql deleted file mode 100644 index e4430165e..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907291107__G_ALTER_BUSINESS.sql +++ /dev/null @@ -1,9 +0,0 @@ -#父级业态 -insert into `wx_business` ( `id`, `title`, `type`, `create_date`, `update_date`) values ( '11', '数码家电', '1', now(), now()); -#子级业态 -insert into `wx_sub_business` ( `id`, `title`, `business_id`, `business_title`, `create_date`, `update_date`) values -( '59', '家用电器', '11', '数码家电', now(), now()), -( '60', '数码产品', '11', '数码家电', now(), now()), -( '61', '手机通信', '11', '数码家电', now(), now()), -( '62', '电脑办公', '11', '数码家电', now(), now()), -( '63', '影音娱乐', '11', '数码家电', now(), now()); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907291134__G_ALTER_TAG.sql b/mallinkAdmin/src/main/resources/db/migration/V201907291134__G_ALTER_TAG.sql deleted file mode 100644 index f06f80ae0..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907291134__G_ALTER_TAG.sql +++ /dev/null @@ -1 +0,0 @@ -insert into `wx_tags` ( `id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) values ( '145', '数码家电', '3', '消费偏好', '14', '消费类别'); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907291231__G_ALTER_TAG.sql b/mallinkAdmin/src/main/resources/db/migration/V201907291231__G_ALTER_TAG.sql deleted file mode 100644 index 6577b98c3..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907291231__G_ALTER_TAG.sql +++ /dev/null @@ -1,2 +0,0 @@ -insert into `wx_tags` ( `id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) values ( '146', '手机通信', '3', '消费偏好', '16', '品牌偏好'); -update wx_tags set name ='数码产品' where id=86; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907291409__RENAME_POWER_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201907291409__RENAME_POWER_MENU.sql deleted file mode 100644 index 3500f91be..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907291409__RENAME_POWER_MENU.sql +++ /dev/null @@ -1,3 +0,0 @@ -UPDATE `mall_permission` SET `name` = '采集设备' WHERE (`id` = '966'); -UPDATE `mall_permission` SET `name` = '电能采集' WHERE (`id` = '952'); -UPDATE `mall_permission` SET `name` = '电能数据' WHERE (`id` = '108'); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907291703__REICON_POWER_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201907291703__REICON_POWER_MENU.sql deleted file mode 100644 index 3c9ea1614..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907291703__REICON_POWER_MENU.sql +++ /dev/null @@ -1,2 +0,0 @@ -UPDATE `mall_permission` SET `icon` = 'icon-iconfontchangemeter-copy' WHERE (`id` = '108'); -UPDATE `mall_permission` SET `icon` = 'icon-dianbiao' WHERE (`id` = '952'); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907301005__G_ALTER_CREDIT_HISTORY.sql b/mallinkAdmin/src/main/resources/db/migration/V201907301005__G_ALTER_CREDIT_HISTORY.sql deleted file mode 100644 index bb40db683..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907301005__G_ALTER_CREDIT_HISTORY.sql +++ /dev/null @@ -1 +0,0 @@ -alter table wx_credit_history add column ticket_number varchar(50) DEFAULT '' COMMENT '小票号'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907301028__L_ALTER_CONTENT.sql b/mallinkAdmin/src/main/resources/db/migration/V201907301028__L_ALTER_CONTENT.sql deleted file mode 100644 index 6a2719b7f..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907301028__L_ALTER_CONTENT.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table wx_rent_contract modify `late_pay_ratio` varchar(100) DEFAULT NULL; -alter table wx_property_contract modify `late_pay_ratio` varchar(100) DEFAULT NULL; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907301447__L_ALTER_CONTENT.sql b/mallinkAdmin/src/main/resources/db/migration/V201907301447__L_ALTER_CONTENT.sql deleted file mode 100644 index b7128be92..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907301447__L_ALTER_CONTENT.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table wx_bill_action modify `user_id` BIGINT(20) NULL DEFAULT NULL; -alter table wx_bill_action modify `phone` VARCHAR(50) NULL DEFAULT NULL; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907301502__ADD_KW_TABLES.sql b/mallinkAdmin/src/main/resources/db/migration/V201907301502__ADD_KW_TABLES.sql deleted file mode 100644 index 2f367ebf5..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907301502__ADD_KW_TABLES.sql +++ /dev/null @@ -1,87 +0,0 @@ -CREATE TABLE IF NOT EXISTS `kw_box` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, - `imei` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备编号', - `iccid` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SIM卡编号', - `place` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '位置', - `fw_version` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '固件版本号', - `hd_version` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '硬件版本号', - `register_status` smallint(2) NOT NULL DEFAULT '0' COMMENT '注册状态0出厂已注册1', - `online_status` smallint(2) NOT NULL DEFAULT '0' COMMENT '在线状态1在线0离线', - `register_time` datetime DEFAULT NULL COMMENT '注册时间', - `last_online_time` datetime DEFAULT NULL COMMENT '最后一次在线时间', - `config` json DEFAULT NULL COMMENT '配置', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_time` datetime NOT NULL COMMENT '更新时间', - `com_key` varchar(40) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `status` smallint(2) NOT NULL DEFAULT '0', - `max_tag_num` smallint(2) NOT NULL DEFAULT '16', - PRIMARY KEY (`id`), - KEY `id_index` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='盒子表'; - - -CREATE TABLE IF NOT EXISTS `kw_box_cmd_history` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `imei` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备编号', - `iccid` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SIM卡编号', - `cmd` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令类型', - `content` json DEFAULT NULL COMMENT '信息', - `device_time` datetime NOT NULL COMMENT '设备命令上传记录时间', - `create_time` datetime NOT NULL COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `id_index` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='命令历史表'; - - -CREATE TABLE IF NOT EXISTS `kw_merchant_meter` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `meter_id` bigint(20) NOT NULL COMMENT '电表ID', - `merchant_id` bigint(20) NOT NULL COMMENT '商户ID', - `status` smallint(2) NOT NULL COMMENT '状态1历史0在用', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_time` datetime NOT NULL COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `id_index` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='商户电表关联表'; - - -CREATE TABLE IF NOT EXISTS `kw_meter` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `address` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '电表编号', - `brand` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '品牌', - `model` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '型号', - `place` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '位置', - `last_online_time` datetime DEFAULT NULL, - `total_power` int(10) DEFAULT NULL, - `online_status` smallint(2) NOT NULL DEFAULT '0' COMMENT '在线状态1在线0离线', - `config` json DEFAULT NULL COMMENT '配置', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_time` datetime NOT NULL COMMENT '更新时间', - `status` smallint(2) NOT NULL, - `box_id` bigint(20) DEFAULT NULL, - `bind_status` smallint(2) NOT NULL DEFAULT '0' COMMENT '0已绑定 1未绑定', - PRIMARY KEY (`id`), - KEY `id_index` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='电表表'; - - -CREATE TABLE IF NOT EXISTS `kw_meter_data` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `tenant_id` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `meter_id` bigint(20) NOT NULL COMMENT '电表ID', - `box_id` bigint(20) NOT NULL COMMENT '盒子ID', - `address` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '电表编号', - `total_power` int(10) DEFAULT NULL COMMENT '总消耗电能', - `device_time` datetime NOT NULL COMMENT '设备命令上传记录时间', - `create_time` datetime NOT NULL COMMENT '创建时间', - `used_power` int(10) DEFAULT NULL, - `last_device_time` datetime DEFAULT NULL, - `last_total_power` int(10) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `id_index` (`id`), - KEY `meter_box_index` (`meter_id`,`box_id`,`tenant_id`,`device_time`,`create_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='电表数据表'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907301607__L_ALTER_BILL.sql b/mallinkAdmin/src/main/resources/db/migration/V201907301607__L_ALTER_BILL.sql deleted file mode 100644 index a4af96deb..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907301607__L_ALTER_BILL.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table wx_bill_action modify `createtime` DATETIME NULL DEFAULT CURRENT_TIMESTAMP; -alter table wx_bill_action modify `updatetime` DATETIME NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907311830__L_ALTER_BILL.sql b/mallinkAdmin/src/main/resources/db/migration/V201907311830__L_ALTER_BILL.sql deleted file mode 100644 index 1a6a31149..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201907311830__L_ALTER_BILL.sql +++ /dev/null @@ -1,13 +0,0 @@ -ALTER TABLE `wx_msg_validationcode_model` -ADD COLUMN `msg_type` INT(1) NULL DEFAULT 0 COMMENT '1短信2邮件'; - -ALTER TABLE `wx_msg_validationcode_model` -ADD COLUMN `role_type` INT(1) NULL DEFAULT 0 COMMENT '0通用1管理员2商户端3消费者'; - -update wx_msg_validationcode_model set msg_type = 1 where content not like '<%'; -update wx_msg_validationcode_model set msg_type = 2 where content like '<%'; - -update wx_msg_validationcode_model set role_type = 2 where name in('账单待缴模板','账单欠缴模板','商户分账账户新增通知商户','商户分账账户变更通知商户','商户分账账户删除提醒','待缴账单通知','限时活动报名成功','限时活动参加提醒','欠缴账单通知'); -update wx_msg_validationcode_model set role_type = 3 where name in('场景投放','限时活动报名成功','限时活动参加提醒',''); -update wx_msg_validationcode_model set role_type = 1 where name in('审批通过通知','审批通知','待办通知','驳回通知','审批通知','代办通知','通过审批通知','审批通过通知'); -update wx_msg_validationcode_model set role_type = 0 where name in('验证码'); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908011133__BASIC_SET.sql b/mallinkAdmin/src/main/resources/db/migration/V201908011133__BASIC_SET.sql deleted file mode 100644 index 04dc3c626..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201908011133__BASIC_SET.sql +++ /dev/null @@ -1,4 +0,0 @@ -update wx_weapp_basic_set -set template_info= -"{\"verify_fail\": {\"id\": \"AT1824\", \"custom_param\": \"{\\\"index\\\":[\\\"keyword1\\\",\\\"keyword2\\\",\\\"keyword3\\\",\\\"keyword4\\\",\\\"keyword5\\\",\\\"keyword6\\\",\\\"keyword7\\\"],\\\"emphasis\\\":\\\"keyword1.DATA\\\",\\\"keyword1\\\":\\\"可抵{keyword1}元\\\",\\\"keyword2\\\":\\\"{keyword2}\\\",\\\"keyword3\\\":\\\"{keyword3}\\\",\\\"keyword4\\\":\\\"{keyword4}\\\",\\\"keyword5\\\":\\\"{keyword5}元\\\",\\\"keyword6\\\":\\\"{keyword6}\\\",\\\"keyword7\\\":\\\"猜也猜不到的优惠,只有幸运的人才能看到,就是你,{keyword7}\\n☟☟☟☟☟☟☟\\n☞ 快看看 ☜\\n☝︎☝︎☝︎☝︎☝︎☝︎☝︎\\n\\\"}\", \"keyword_id_list\": [1, 3, 4, 5]}, \"press_success\": {\"id\": \"AT1173\", \"custom_param\": \"{\\\"index\\\":[\\\"keyword1\\\",\\\"keyword2\\\",\\\"keyword3\\\",\\\"keyword4\\\",\\\"keyword5\\\",\\\"keyword6\\\"],\\\"emphasis\\\":\\\"keyword5.DATA\\\",\\\"keyword1\\\":\\\"{keyword1}\\\",\\\"keyword2\\\":\\\"{keyword2}元\\\",\\\"keyword3\\\":\\\"{keyword3}\\\",\\\"keyword4\\\":\\\"{keyword4}\\\",,\\\"keyword5\\\":\\\"{keyword5}元\\\",\\\"keyword6\\\":\\\"请于一小时内尽快支付,过期将无法以底价购买。\\\"}\", \"keyword_id_list\": [1, 17, 22, 23, 4, 3]}, \"verify_success\": {\"id\": \"AT0423\", \"custom_param\": \"{\\\"index\\\":[\\\"keyword1\\\",\\\"keyword2\\\",\\\"keyword3\\\",\\\"keyword4\\\"],\\\"emphasis\\\":\\\"keyword1.DATA\\\",\\\"keyword1\\\":\\\"可抵{keyword1}元\\\",\\\"keyword2\\\":\\\"{keyword2}\\\",\\\"keyword3\\\":\\\"{keyword3}\\\",\\\"keyword4\\\":\\\"猜也猜不到的优惠,只有幸运的人才能看到,就是你,{keyword4}\\n☟☟☟☟☟☟☟\\n☞ 快看看 ☜\\n☝︎☝︎☝︎☝︎☝︎☝︎☝︎\\n\\\"}\", \"keyword_id_list\": [14, 15, 16, 7, 10, 3, 9]}}" -where type = 2; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908011420__UPDATE_SCORE.sql b/mallinkAdmin/src/main/resources/db/migration/V201908011420__UPDATE_SCORE.sql deleted file mode 100644 index 9edd77563..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201908011420__UPDATE_SCORE.sql +++ /dev/null @@ -1,5 +0,0 @@ -update wx_score_rules set rules =JSON_ARRAY_INSERT(rules,'$[1].childs[9]',json_object('desc','线上交易0元','step',1,'limit',0,'score',0,'title','数码家电','businessId',11)) -where type=2 and json_contains_path(rules,'one','$[1].childs')=1; - -update wx_score_rules set rules =JSON_ARRAY_INSERT(rules,'$[1].childs[9]',json_object('desc','线上交易0元','step',1,'limit',0,'score',0,'title','数码家电','businessId',11)) -where type=1 and json_contains_path(rules,'one','$[1].childs')=1; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908021153__L_ALTER_CONTENT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908021153__L_ALTER_CONTENT.sql deleted file mode 100644 index 887c759c5..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201908021153__L_ALTER_CONTENT.sql +++ /dev/null @@ -1,2 +0,0 @@ -alter table wx_rent_contract modify `late_pay_day` INT(10) DEFAULT 0; -alter table wx_property_contract modify `late_pay_day` INT(10) DEFAULT 0; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908051920__CHANGE_SCORE_HIS.sql b/mallinkAdmin/src/main/resources/db/migration/V201908051920__CHANGE_SCORE_HIS.sql deleted file mode 100644 index 1e57e5ce2..000000000 --- a/mallinkAdmin/src/main/resources/db/migration/V201908051920__CHANGE_SCORE_HIS.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `wx_score_history` -CHANGE COLUMN `create_date` `create_date` DATETIME NOT NULL COMMENT '创建日期' ; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908091615__G_ALTER_ACTIVITY_JOIN.sql b/mallinkAdmin/src/main/resources/db/migration/V201908091615__G_ALTER_ACTIVITY_JOIN.sql new file mode 100644 index 000000000..b64579205 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908091615__G_ALTER_ACTIVITY_JOIN.sql @@ -0,0 +1,3 @@ +ALTER TABLE wx_activity_join add column telphone varchar(15) DEFAULT '' COMMENT '联系电话'; + + diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908091630__G_ALTER_ACTIVITY.sql b/mallinkAdmin/src/main/resources/db/migration/V201908091630__G_ALTER_ACTIVITY.sql new file mode 100644 index 000000000..d02c07302 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908091630__G_ALTER_ACTIVITY.sql @@ -0,0 +1 @@ +ALTER TABLE wx_activity add column selectques json DEFAULT NULL COMMENT '常见问题选择'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908091640__G_ALTER_ACTIVITY_JOIN.sql b/mallinkAdmin/src/main/resources/db/migration/V201908091640__G_ALTER_ACTIVITY_JOIN.sql new file mode 100644 index 000000000..90dc57e7c --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908091640__G_ALTER_ACTIVITY_JOIN.sql @@ -0,0 +1 @@ +ALTER TABLE wx_activity_join change column name name varchar(20) DEFAULT '' COMMENT '姓名'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908101840__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908101840__POS_CHANGED.sql new file mode 100644 index 000000000..fdeb56b35 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908101840__POS_CHANGED.sql @@ -0,0 +1,45 @@ +CREATE TABLE `th_dev_info` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `dev_id` varchar(30) NOT NULL COMMENT '开发者ID', + `name` varchar(30) NOT NULL COMMENT '名称', + `type` smallint(2) NOT NULL COMMENT '类型(0:自用, 1:东软POS)', + `req_key` varchar(128) NOT NULL COMMENT '请求私钥', + `res_key` varchar(128) NOT NULL COMMENT '响应私钥', + `state` tinyint(6) NOT NULL DEFAULT '0' COMMENT '商户状态,0-使用中,1-禁用', + `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='第三方开发者信息表'; +ALTER TABLE `th_dev_info` ADD INDEX `idx_DevId` (`dev_id` ASC); + +create table pos_coupon_order_verify ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `coupon_order_id` bigint(20) NOT NULL COMMENT '券包ID', + `pos_order_id` bigint(20) NULL COMMENT 'POS订单ID', + `state` tinyint(6) NOT NULL DEFAULT '0' COMMENT '状态,0-使用中,1-禁用', + `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='POS核销记录'; + +alter table wx_order +add `pos_order_id` bigint(20) NULL COMMENT 'POS订单ID', +change `type` `type` tinyint(6) NOT NULL DEFAULT '0' COMMENT '支付类型(0:券1:付款码支付,2:C扫码支付,3,储值卡,4积分支付 9:B端POS支付 10:东软POS支付)'; + +alter table wx_pay_order +add `type` tinyint(6) NOT NULL DEFAULT '0' COMMENT '支付类型(0:微信支付, 9:B端POS支付 10:东软POS同步)', +add `pos_pay_id` bigint(20) NULL COMMENT 'POS支付订单ID'; + +create table pos_mall_config ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `discount` tinyint(6) NOT NULL DEFAULT '0' COMMENT '会员折扣状态,0-使用中,1-禁用', + `coupon` tinyint(6) NOT NULL DEFAULT '0' COMMENT '会员优惠券状态,0-使用中,1-禁用', + `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='POS优惠设置'; + +alter table wx_mall +add column `pos_qrcode_rule` varchar(50) DEFAULT '' COMMENT 'pos小票二维码规则'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907181130__ADD_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201908121655__W_ADD_MENU.sql similarity index 72% rename from mallinkAdmin/src/main/resources/db/migration/V201907181130__ADD_MENU.sql rename to mallinkAdmin/src/main/resources/db/migration/V201908121655__W_ADD_MENU.sql index e01b94bf9..438959cec 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V201907181130__ADD_MENU.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V201908121655__W_ADD_MENU.sql @@ -1,11 +1,7 @@ INSERT INTO `mall_permission` (`id`,`name`, `parent_id`,`available`,`permission`,`resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`,`sort`) VALUES - (952, '智能电表', 9, 'Y', null, 0, null, null, 'meterManage', 'icon-navicon-yhgl', 0, 952), - (965, '电表管理', 952, 'Y', null, 1, null, null, 'meterManage', null, 0, 965), - (966, '盒子管理', 952, 'Y', null, 1, null, null, 'boxManage', null, 0, 966), - (967, '商户电表', 952, 'Y', null, 1, null, null, 'merMeterManage', null, 0, 967), - (108, '电表数据', 1, 'Y', NULL, 1, NULL, NULL, 'meterData', 'icon-wifi', 0, 108); + (695, '商户发券', 608, 'Y', null, 0, null, null, 'merchantCoupon', null, 0, 695); DROP TABLE IF EXISTS `mall_sale_type` ; CREATE TABLE `mall_sale_type` ( @@ -22,13 +18,14 @@ INSERT INTO `mall_sale_type` (`id`,`name`, `type`, `period`, `menus`) VALUES (1, '尊享全能版', 1, 12, - '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967]' + '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967]' ), (2, '尊享营销版', 2, 12, - '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,701,702,711,712,713,901,902,903,931,932,951,961]' + '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,961]' ), (3, '速享版', 3, 1, - '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,701,702,711,712,713,901,902,903,931,932]' + '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932]' ) + ; - ; \ No newline at end of file + ALTER TABLE `wx_level_config` ADD COLUMN `scale` tinyint NOT NULL DEFAULT 10 COMMENT '积分倍率' AFTER `capability`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908131046__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908131046__L_CONTRACT.sql new file mode 100644 index 000000000..7a265c598 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908131046__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_rent_contract +add column `bus_discount_ratio` json NULL DEFAULT NULL COMMENT '联营扣点率'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908131355__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908131355__L_CONTRACT.sql new file mode 100644 index 000000000..02aa4a345 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908131355__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_rent_contract +add column `bus_discount_time` SMALLINT(1) NULL DEFAULT 0 COMMENT '1年2月3周期'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908131725__W_ADD_SCALE.sql b/mallinkAdmin/src/main/resources/db/migration/V201908131725__W_ADD_SCALE.sql new file mode 100644 index 000000000..f285a65ba --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908131725__W_ADD_SCALE.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_level_config` CHANGE COLUMN `scale` `scale` smallint UNSIGNED NOT NULL DEFAULT 10 COMMENT '会员等级积分倍率'; +ALTER TABLE `wx_score_rules` ADD COLUMN `scale` smallint UNSIGNED COMMENT '会员生日积分倍率' AFTER `clear_year`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908141417__FLOOR_AREA.sql b/mallinkAdmin/src/main/resources/db/migration/V201908141417__FLOOR_AREA.sql new file mode 100644 index 000000000..73d90be39 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908141417__FLOOR_AREA.sql @@ -0,0 +1,4 @@ +ALTER TABLE `wx_mall_floor` +ADD COLUMN `operating_area` decimal(10,2) NULL COMMENT '营业面积', +ADD COLUMN `total_area` decimal(10,2) NULL COMMENT '总面积' +; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908150940__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908150940__POS_CHANGED.sql new file mode 100644 index 000000000..1108a87bf --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908150940__POS_CHANGED.sql @@ -0,0 +1,2 @@ +alter table pos_mall_config +add column `card` tinyint(6) NOT NULL DEFAULT '0' COMMENT '会员优惠券状态,0-使用中,1-禁用'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908151120__POS_CAR_SPEND.sql b/mallinkAdmin/src/main/resources/db/migration/V201908151120__POS_CAR_SPEND.sql new file mode 100644 index 000000000..478f9c2e7 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908151120__POS_CAR_SPEND.sql @@ -0,0 +1,6 @@ +ALTER TABLE `wx_card_spend` +ADD `from` tinyint(6) NOT NULL DEFAULT '0' COMMENT '来源(0:C端小程序扫一扫, 1:B端POS, 2:东软POS)', +ADD `pos_refund_status` tinyint(6) NULL COMMENT 'pos状态(1:POS线下退款开始, 2:POS线下退款成功)', +ADD COLUMN `pos_order_id` bigint(20) NULL COMMENT 'POS订单账号', +CHANGE COLUMN `ip` `ip` varchar(20) COMMENT 'ip地址', +CHANGE COLUMN `pay_status` `pay_status` smallint(2) NOT NULL DEFAULT 0 COMMENT '支付状态(0:未分帐, 1:已分账, 2:已人工分账, 10:预支付(POS))'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql b/mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql new file mode 100644 index 000000000..f66b13b5b --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908151320__POS_CMD_LOG.sql @@ -0,0 +1,14 @@ +CREATE TABLE `pos_action_log` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `url` varchar (100) NOT NULL COMMENT '访问url', + `ip` varchar (20) NOT NULL COMMENT 'ip地址', + `method` varchar (10) NOT NULL COMMENT 'http访问', + `start_time` bigint(20) NOT NULL COMMENT 'api发起时间', + `end_time` bigint(20) NOT NULL COMMENT 'api发起时间', + `cost_time` INTEGER NOT NULL COMMENT '访问花费时间', + `req_json` json DEFAULT NULL COMMENT '命令请求JSON', + `res_json` json DEFAULT NULL COMMENT '返回结果', + PRIMARY KEY (`id`) +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='POS访问LOG' CHECKSUM=0 DELAY_KEY_WRITE=0; + +ALTER TABLE `pos_action_log` ADD INDEX `idx_Index` (`url`, `ip`, `method`, `start_time`); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908151357__POS_CMD_LOG.sql b/mallinkAdmin/src/main/resources/db/migration/V201908151357__POS_CMD_LOG.sql new file mode 100644 index 000000000..4cc11611a --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908151357__POS_CMD_LOG.sql @@ -0,0 +1,2 @@ +alter table `pos_action_log` +add column `dev_id` VARCHAR(50) GENERATED ALWAYS AS (`req_json` ->> '$.dev_id') NULL; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908151421__ADD_POWER_BILL_CONFIG.sql b/mallinkAdmin/src/main/resources/db/migration/V201908151421__ADD_POWER_BILL_CONFIG.sql new file mode 100644 index 000000000..e4796231e --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908151421__ADD_POWER_BILL_CONFIG.sql @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS wx_merchant_power_bill_config; +CREATE TABLE wx_merchant_power_bill_config( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `merchant_id` bigint(20) NOT NULL COMMENT '商户ID', + `merchant_name` varchar(50) NOT NULL COMMENT '商户名称', + `merchant_type` smallint(2) NOT NULL COMMENT '商户类型1店铺2点位', + `build_way` tinyint(2) NOT NULL default 0 COMMENT '生成方式1按电表2固定金额', + `price` varchar(10) NOT NULL COMMENT '金额(电表计费时为单价)', + `create_date` datetime NOT NULL COMMENT '创建时间', + `update_date` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='电费自动生成规则' CHECKSUM=0 DELAY_KEY_WRITE=0; + +DROP TABLE IF EXISTS wx_power_bill_auto_config; +CREATE TABLE wx_power_bill_auto_config( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `unit_price` varchar(10) NOT NULL COMMENT '单价', + `build_day` tinyint(3) NOT NULL COMMENT '每月多少日拉取上月数据', + `receive_day` tinyint(3) NOT NULL COMMENT '截止缴款日', + `create_date` datetime NOT NULL COMMENT '创建时间', + `update_date` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='电费自动生成规则' CHECKSUM=0 DELAY_KEY_WRITE=0; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908161540__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908161540__POS_CHANGED.sql new file mode 100644 index 000000000..d60201912 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908161540__POS_CHANGED.sql @@ -0,0 +1,2 @@ +alter table wx_coupon_order +add `verify_type` tinyint(6) NULL COMMENT '核销类型(0:B端核销, 1:POS独立核销 2:POS交易核销)'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908161853__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908161853__L_CONTRACT.sql new file mode 100644 index 000000000..c7ffddecf --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908161853__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_rent_contract +modify column `bus_discount_ratio` varchar(1000) NULL DEFAULT NULL COMMENT '联营扣点率'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201907231537__L_ADD_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201908191508__L_ADD_MENU.sql similarity index 59% rename from mallinkAdmin/src/main/resources/db/migration/V201907231537__L_ADD_MENU.sql rename to mallinkAdmin/src/main/resources/db/migration/V201908191508__L_ADD_MENU.sql index d2804c3d8..87460782d 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V201907231537__L_ADD_MENU.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V201908191508__L_ADD_MENU.sql @@ -1,7 +1,9 @@ +update mall_permission set name = '账单催缴' where name = '商户账单'; + INSERT INTO `mall_permission` (`id`,`name`, `parent_id`,`available`,`permission`,`resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`,`sort`) VALUES - (592, '短信管理', 50, 'Y', null, 1, null, null, 'dreamSend', 'icon-navicon-dxgl', 0, 592); + (414, '商户账单', 4, 'Y', null, 1, null, null, 'merchantBillList', 'icon-icon-test2', 0, 402); DROP TABLE IF EXISTS `mall_sale_type` ; CREATE TABLE `mall_sale_type` ( @@ -18,13 +20,12 @@ INSERT INTO `mall_sale_type` (`id`,`name`, `type`, `period`, `menus`) VALUES (1, '尊享全能版', 1, 12, - '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,592,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967]' + '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,414,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967]' ), (2, '尊享营销版', 2, 12, - '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,592,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,701,702,711,712,713,901,902,903,931,932,951,961]' + '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,961]' ), (3, '速享版', 3, 1, - '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,701,702,711,712,713,901,902,903,931,932]' + '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932]' ) - - ; \ No newline at end of file + ; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908201134__L_ADD_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201908201134__L_ADD_MENU.sql new file mode 100644 index 000000000..4db3dd1c9 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908201134__L_ADD_MENU.sql @@ -0,0 +1,29 @@ + +INSERT INTO `mall_permission` (`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) +VALUES + (968, '电费管理', 952, 'Y', NULL, 1, NULL, NULL, 'meterFee', NULL, 0, 968); + +DROP TABLE IF EXISTS `mall_sale_type` ; +CREATE TABLE `mall_sale_type` ( + `id` bigint(64) NOT NULL, + `name` varchar(32) DEFAULT NULL COMMENT '销售类型', + `type` tinyint(2) DEFAULT NULL COMMENT '资源类型1:尊享全能版 2:尊享营销版 3.速享版', + `period` tinyint(2) DEFAULT NULL COMMENT '有效期(单位月)', + `menus` json DEFAULT NULL COMMENT '菜单列表', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` ROW_FORMAT=DYNAMIC COMMENT='系统销售表' CHECKSUM=0 DELAY_KEY_WRITE=0; + +INSERT INTO `mall_sale_type` + (`id`,`name`, `type`, `period`, `menus`) +VALUES + (1, '尊享全能版', 1, 12, + '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,414,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967,968]' + ), + (2, '尊享营销版', 2, 12, + '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,961]' + ), + (3, '速享版', 3, 1, + '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932]' + ) + ; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908221020__POS_ORDER.sql b/mallinkAdmin/src/main/resources/db/migration/V201908221020__POS_ORDER.sql new file mode 100644 index 000000000..3fe0edf87 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908221020__POS_ORDER.sql @@ -0,0 +1,41 @@ +create table `pos_order` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `pos_order_no` varchar(20) NULL COMMENT 'POS订单ID', + `type` tinyint(6) NOT NULL DEFAULT 0 COMMENT '支付类型(1: 独立核销, 2:支付)', + `order_status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '订单状态:0-待付款/待核销;1-已支付;2-已取消(限定时间内未付款);3-待退款;4-已退款;5-退款失败', + `bu_user_id` bigint(20) DEFAULT NULL COMMENT 'b端用户', + `payment_type` smallint(2) NOT NULL COMMENT '0: 付款 1: 退款 2:自动退款 3:A端退款 10:独立核销', + `payment` int(11) default NULL COMMENT '支付金额:允许有负数,退款时为负值。核销时,金额可以不填写', + `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='POS订单'; + +CREATE TABLE `pos_pay_order` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_time` datetime NOT NULL COMMENT '更新时间', + `order_id` bigint(20) NOT NULL COMMENT '订单ID', + `bu_user_id` bigint(20) DEFAULT NULL COMMENT 'b端用户', + `type` tinyint(6) NOT NULL DEFAULT 0 COMMENT '支付类型(1:独立核销 2:支付核销 3:现金支付)', + `pay_from` tinyint(6) NOT NULL DEFAULT 0 COMMENT '支付来源(0: 现金, 1:微信 2:支付核销 3:现金支付)', + `pay_amount` int(11) NOT NULL COMMENT '支付金额(分)', + `pay_time_start` datetime NOT NULL COMMENT '支付发起时间', + `pay_time_end` datetime NOT NULL COMMENT '支付结束时间', + `prepay_id` varchar(64) DEFAULT NULL COMMENT '微信预支付交易会话标识-发模板信息使用', + `transaction_id` varchar(36) DEFAULT NULL COMMENT '微信生成的订单号', + `pay_vendor` int(11) NOT NULL DEFAULT 0 COMMENT '支付渠道: 0-微信 1-支付宝 2-银联 ', + `pay_order_no` varchar(36) DEFAULT '' COMMENT '支付订单号', + `pay_order_status` int(11) NOT NULL DEFAULT 0 COMMENT '支付状态: 0-支付中;1-支付成功;2-支付失败', + `share` smallint(2) DEFAULT NULL COMMENT '是否支持分账(0:不支持,1:支持)', + `share_amount` int(11) DEFAULT NULL COMMENT '分账金额(总金额扣掉手续费后的金额)', + `rate_amount` int(11) DEFAULT NULL COMMENT '分账实际通道费', + `fail_reason` varchar(50) DEFAULT '' COMMENT '支付失败原因', + `auth_code` varchar(128) DEFAULT NULL COMMENT '扫码支付授权码', + `open_id` varchar(128) DEFAULT NULL COMMENT '微信支付后获取的open_id', + `pay_end_from` smallint(2) DEFAULT NULL COMMENT '支付后结果来源(0:callback, 1:query)', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` DEFAULT CHARSET=utf8mb4 COMMENT='POS支付订单'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908221440__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908221440__L_CONTRACT.sql new file mode 100644 index 000000000..0afc547ad --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908221440__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_bill_rent +add column `pay_ratio` int(5) NULL DEFAULT NULL COMMENT '连营扣点跳点率'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908221610__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908221610__POS_CHANGED.sql new file mode 100644 index 000000000..f30932c69 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908221610__POS_CHANGED.sql @@ -0,0 +1,2 @@ +alter table `pos_order` +add `remain_amount` int(11) default NULL COMMENT '支付金额:允许有负数,退款时为负值。核销时,金额可以不填写' after `payment`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908261540__W_ALTER_USER.sql b/mallinkAdmin/src/main/resources/db/migration/V201908261540__W_ALTER_USER.sql new file mode 100644 index 000000000..d21da836b --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908261540__W_ALTER_USER.sql @@ -0,0 +1 @@ +ALTER TABLE `wx_c_user_basic_info` ADD COLUMN `score_date` datetime COMMENT '生日倍率日期' AFTER `act_record`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908271058__G_USER_DATA_RULE.sql b/mallinkAdmin/src/main/resources/db/migration/V201908271058__G_USER_DATA_RULE.sql new file mode 100644 index 000000000..f5cf2c813 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908271058__G_USER_DATA_RULE.sql @@ -0,0 +1,35 @@ +drop table if exists wx_user_data_rule; +CREATE TABLE wx_user_data_rule ( + `id` bigint(20) NOT NULL, + `tenant_id` varchar(10) NOT NULL COMMENT '租户ID', + `user_id` bigint(20) NOT NULL COMMENT '角色名称', + `type` tinyint(3) NOT NULL COMMENT '权限类型1系统全部数据2楼层及业态', + `building_floor` json DEFAULT NULL COMMENT '楼层楼座', + `business` json DEFAULT NULL COMMENT '业态', + `target` json DEFAULT NULL COMMENT '数据范围', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户数据权限' CHECKSUM=0 DELAY_KEY_WRITE=0; + +drop table if exists wx_data_rule_target; +CREATE TABLE wx_data_rule_target ( + `id` bigint(20) NOT NULL, + `parent` bigint(20) NOT NULL COMMENT '父级', + `name` varchar(50) NOT NULL COMMENT '名称', + `tag` varchar(50) DEFAULT NULL COMMENT '标签', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='数据权限目标' CHECKSUM=0 DELAY_KEY_WRITE=0; + + +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '1', '0', '商户商铺', '', '2019-08-26 13:23:25', '2019-08-26 13:23:27'); +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '2', '0', '合同管理', '', '2019-08-26 13:32:04', '2019-08-26 13:32:07'); +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '101','1', '商户列表', 'merchant_list', '2019-08-26 13:32:17', '2019-08-26 13:32:19'); +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '102','1', '解单数据', 'merchant_trade', '2019-08-26 13:33:24', '2019-08-26 13:33:25'); +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '201','2', '租金合同', 'rent_contract_list', '2019-08-26 13:34:17', '2019-08-26 13:34:20'); +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '202','2', '物业合同', 'property_contract_list', '2019-08-26 13:34:45', '2019-08-26 13:34:47'); +insert into `wx_data_rule_target` ( `id`, `parent`, `name`, `tag`, `create_time`, `update_time`) values ( '203','2', '租金物业合同', 'rent_property_contract_list', '2019-08-26 13:36:23', '2019-08-26 13:36:25'); diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908281030__G_USER_DATA_RULE.sql b/mallinkAdmin/src/main/resources/db/migration/V201908281030__G_USER_DATA_RULE.sql new file mode 100644 index 000000000..6a36ccb01 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908281030__G_USER_DATA_RULE.sql @@ -0,0 +1 @@ +alter table wx_user_data_rule add unique uni_user(user_id); \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908281420__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908281420__POS_CHANGED.sql new file mode 100644 index 000000000..1ade9c355 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908281420__POS_CHANGED.sql @@ -0,0 +1,13 @@ +alter table wx_order +add `pos_order_create_time` bigint(20) NULL COMMENT 'POS系统订单创建时间'; + +alter table wx_pay_order +add `pos_pay_order_time` bigint(20) NULL COMMENT '支付订单创建时间,来源于POS', +add `pos_pay_order_no` varchar(20) NULL COMMENT '支付订单流水号, 来源于POS, 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空', +add `pos_pay_desc` varchar(100) NULL COMMENT 'POS支付描述', +modify `pos_pay_id` bigint(20) NULL COMMENT '支付订单号,来源于POS'; + +alter table pos_mall_config +modify `discount` tinyint(6) NOT NULL DEFAULT '0' COMMENT '会员折扣是否开启,0-禁用,1-可用', +modify `coupon` tinyint(6) NOT NULL DEFAULT '0' COMMENT '会员优惠券是否开启,0-禁用,1-单选可用,2-多选可用', +modify `card` tinyint(6) NOT NULL DEFAULT '0' COMMENT '会员消费卡是否开启,0-禁用,1-可用' after `coupon`; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908281750__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908281750__POS_CHANGED.sql new file mode 100644 index 000000000..2496e0f76 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908281750__POS_CHANGED.sql @@ -0,0 +1,2 @@ +alter table wx_pay_order +change column `pos_pay_desc` `pos_pay_des` varchar(100) NULL COMMENT 'POS支付描述'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908291022__L_FLOW.sql b/mallinkAdmin/src/main/resources/db/migration/V201908291022__L_FLOW.sql new file mode 100644 index 000000000..9000f56de --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908291022__L_FLOW.sql @@ -0,0 +1,81 @@ +alter table wx_flow_config modify `parent_id` BIGINT(20) NULL DEFAULT NULL; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 789) parent_id, + '789' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 790) parent_id, + '790' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1000) parent_id, + '1000' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1001) parent_id, + '1001' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1002) parent_id, + '1002' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1003) parent_id, + '1003' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1004) parent_id, + '1004' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1005) parent_id, + '1005' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1006) parent_id, + '1006' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1007) parent_id, + '1007' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1008) parent_id, + '1008' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1009) parent_id, + '1009' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1010) parent_id, + '1010' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1011) parent_id, + '1011' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1012) parent_id, + '1012' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; + +INSERT INTO `wx_flow_config` (`id`, `parent_id`, `tenant_id`, `name`, `type`, `model_id`, `sort`) +select (select unix_timestamp(now()) + CEILING(RAND()*90000+10000)) id, + (select id from wx_flow_config where name = '账单审批' and tenant_id = 1013) parent_id, + '1013' tenant_id, '结算单审核' name, 10 type, 0 model_id, 2 sort from dual; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908291150__G_PERMISSION.sql b/mallinkAdmin/src/main/resources/db/migration/V201908291150__G_PERMISSION.sql new file mode 100644 index 000000000..e9412d9cd --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908291150__G_PERMISSION.sql @@ -0,0 +1 @@ +update mall_permission set parent_id=5,icon='icon-quanyiguanli-' where id=513; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908291430__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908291430__POS_CHANGED.sql new file mode 100644 index 000000000..3df19e4ea --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908291430__POS_CHANGED.sql @@ -0,0 +1,5 @@ +alter table wx_pay_order +add `pos_payment_type` tinyint(6) NULL COMMENT '支付方式: 0微信;1支付宝;2现金;3会员折扣;4优惠券;5预付卡;6银行卡,来源于POS' after `pay_from`, +modify `ip` varchar(20) NULL COMMENT 'ip地址', +change column `pos_pay_id` `pos_pay_order_id` bigint(20) NULL COMMENT 'POS支付订单ID', +change column `type` `pay_from` tinyint(6) NULL COMMENT '支付类型(0:C端微信支付, 1:POS支付)'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908291938__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908291938__L_CONTRACT.sql new file mode 100644 index 000000000..87767988b --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908291938__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_bill_rent +add column `bus_discount_ratio` varchar(500) NULL DEFAULT NULL COMMENT '联营扣点率'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301131__L_ADD_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301131__L_ADD_MENU.sql new file mode 100644 index 000000000..5c23403b7 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301131__L_ADD_MENU.sql @@ -0,0 +1,28 @@ +INSERT INTO `mall_permission` (`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) +VALUES + (417, '结算管理', 415, 'Y', NULL, 1, NULL, NULL, 'auditManage', 'icon-jiesuan', 0, 417); + +DROP TABLE IF EXISTS `mall_sale_type` ; +CREATE TABLE `mall_sale_type` ( + `id` bigint(64) NOT NULL, + `name` varchar(32) DEFAULT NULL COMMENT '销售类型', + `type` tinyint(2) DEFAULT NULL COMMENT '资源类型1:尊享全能版 2:尊享营销版 3.速享版', + `period` tinyint(2) DEFAULT NULL COMMENT '有效期(单位月)', + `menus` json DEFAULT NULL COMMENT '菜单列表', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` ROW_FORMAT=DYNAMIC COMMENT='系统销售表' CHECKSUM=0 DELAY_KEY_WRITE=0; + +INSERT INTO `mall_sale_type` + (`id`,`name`, `type`, `period`, `menus`) +VALUES + (1, '尊享全能版', 1, 12, + '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,414,417,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967,968]' + ), + (2, '尊享营销版', 2, 12, + '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,961]' + ), + (3, '速享版', 3, 1, + '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932]' + ) + ; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301520__G_ALTER_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301520__G_ALTER_MENU.sql new file mode 100644 index 000000000..661236b6d --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301520__G_ALTER_MENU.sql @@ -0,0 +1 @@ +update `mall_sale_type` set `menus`='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 50, 101, 102, 103, 104, 105, 106, 107, 108, 201, 202, 203, 204, 205, 206, 211, 212, 221, 222, 251, 299, 300, 301, 302, 303, 304, 305, 306, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 521, 522, 523, 531, 532, 533, 591, 595, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 621, 622, 623, 624, 625, 626, 627, 641, 642, 643, 644, 645, 651, 661, 662, 663, 671, 672, 673, 674, 681, 682, 683, 684, 685, 691, 692, 693, 694, 695, 701, 702, 711, 712, 713, 901, 902, 903, 931, 932, 951, 952, 961, 962, 965, 966, 967, 968]' where `id`='1'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301540__G_ALTER_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301540__G_ALTER_CONTRACT.sql new file mode 100644 index 000000000..dacceea5f --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301540__G_ALTER_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_rent_contract modify adjust_ratio_way smallint(2) default 1 comment '年租金调整方式1按比例2按金额3自定义'; +alter table wx_property_contract modify adjust_ratio_way smallint(2) default 1 comment '年租金调整方式1按比例2按金额3自定义'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301605__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301605__L_CONTRACT.sql new file mode 100644 index 000000000..d7ebeb556 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301605__L_CONTRACT.sql @@ -0,0 +1,21 @@ +alter table wx_bill_rent +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + +alter table wx_bill_rent_deposit +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + +alter table wx_bill_property +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + +alter table wx_bill_property_deposit +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + +alter table wx_bill_daily +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + +alter table wx_bill_other +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + +alter table wx_bill_other_deposit +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301630__MENU_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301630__MENU_CHANGED.sql new file mode 100644 index 000000000..651945058 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301630__MENU_CHANGED.sql @@ -0,0 +1,24 @@ +DROP TABLE IF EXISTS `mall_sale_type` ; +CREATE TABLE `mall_sale_type` ( + `id` bigint(64) NOT NULL, + `name` varchar(32) DEFAULT NULL COMMENT '销售类型', + `type` tinyint(2) DEFAULT NULL COMMENT '资源类型1:尊享全能版 2:尊享营销版 3.速享版', + `period` tinyint(2) DEFAULT NULL COMMENT '有效期(单位月)', + `menus` json DEFAULT NULL COMMENT '菜单列表', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` ROW_FORMAT=DYNAMIC COMMENT='系统销售表' CHECKSUM=0 DELAY_KEY_WRITE=0; + +INSERT INTO `mall_sale_type` + (`id`,`name`, `type`, `period`, `menus`) +VALUES + (1, '尊享全能版', 1, 12, + '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,299,300,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967,968]' + ), + (2, '尊享营销版', 2, 12, + '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,416,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,961]' + ), + (3, '速享版', 3, 1, + '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,416,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932]' + ) + ; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301829__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301829__L_CONTRACT.sql new file mode 100644 index 000000000..9bc58f5c2 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301829__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_bill_rent +add column `join_rent_price` SMALLINT (1) NULL DEFAULT 0 COMMENT '联营租金'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908301845__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908301845__L_CONTRACT.sql new file mode 100644 index 000000000..802ea0b85 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908301845__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_bill_rent +modify column `join_rent_price` BIGINT(20) NULL DEFAULT NULL COMMENT '联营扣点率'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908311510__MENU_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201908311510__MENU_CHANGED.sql new file mode 100644 index 000000000..81a673006 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908311510__MENU_CHANGED.sql @@ -0,0 +1,24 @@ +DROP TABLE IF EXISTS `mall_sale_type` ; +CREATE TABLE `mall_sale_type` ( + `id` bigint(64) NOT NULL, + `name` varchar(32) DEFAULT NULL COMMENT '销售类型', + `type` tinyint(2) DEFAULT NULL COMMENT '资源类型1:尊享全能版 2:尊享营销版 3.速享版', + `period` tinyint(2) DEFAULT NULL COMMENT '有效期(单位月)', + `menus` json DEFAULT NULL COMMENT '菜单列表', + PRIMARY KEY (`id`), + UNIQUE `id_UNIQUE` USING BTREE (`id`) comment '' +) ENGINE=`InnoDB` ROW_FORMAT=DYNAMIC COMMENT='系统销售表' CHECKSUM=0 DELAY_KEY_WRITE=0; + +INSERT INTO `mall_sale_type` + (`id`,`name`, `type`, `period`, `menus`) +VALUES + (1, '尊享全能版', 1, 12, + '[1,2,3,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,108,201,202,203,204,205,206,211,212,221,222,251,299,300,301,302,303,304,305,306,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,592,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,952,961,962,965,966,967,968]' + ), + (2, '尊享营销版', 2, 12, + '[1,2,4,5,6,7,8,9,10,50,101,102,103,104,105,106,107,201,202,203,204,205,211,212,221,222,251,409,410,411,416,501,502,503,504,505,506,507,508,509,511,512,513,521,522,523,531,532,533,591,595,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,627,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932,951,961]' + ), + (3, '速享版', 3, 1, + '[2,4,5,6,7,10,50,201,202,205,211,212,221,222,251,409,410,411,416,501,502,503,504,505,506,507,508,511,512,513,521,522,523,531,532,533,591,592,601,602,603,604,605,606,607,608,609,610,611,612,621,622,623,624,625,626,641,642,643,644,645,651,661,662,663,671,672,673,674,681,682,683,684,685,691,692,693,694,695,701,702,711,712,713,901,902,903,931,932]' + ) + ; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908311549__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908311549__L_CONTRACT.sql new file mode 100644 index 000000000..0662c4b2f --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908311549__L_CONTRACT.sql @@ -0,0 +1,2 @@ +alter table wx_bill_settle_record +add column `desc` VARCHAR (800) NULL DEFAULT NULL COMMENT '描述'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201908311635__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201908311635__L_CONTRACT.sql new file mode 100644 index 000000000..37d339f81 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201908311635__L_CONTRACT.sql @@ -0,0 +1,3 @@ +alter table wx_merchant_subsidy +add column `freeze` SMALLINT (1) NULL DEFAULT 0 COMMENT '0正常1冻结'; + diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909031540__POS_CARD_SPEND.sql b/mallinkAdmin/src/main/resources/db/migration/V201909031540__POS_CARD_SPEND.sql new file mode 100644 index 000000000..bd6fc778a --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909031540__POS_CARD_SPEND.sql @@ -0,0 +1,3 @@ +ALTER TABLE `wx_card_spend` +change `from` `pay_from` tinyint(6) NOT NULL DEFAULT '0' COMMENT '来源(0:C端小程序扫一扫, 1:POS)', +drop column `pos_refund_status`; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909031716__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201909031716__L_CONTRACT.sql new file mode 100644 index 000000000..e33453878 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909031716__L_CONTRACT.sql @@ -0,0 +1 @@ +update wx_flow_config set type=21 where name = '结算单审核'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909041150__G_BILL_DAILY.sql b/mallinkAdmin/src/main/resources/db/migration/V201909041150__G_BILL_DAILY.sql new file mode 100644 index 000000000..4054ad487 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909041150__G_BILL_DAILY.sql @@ -0,0 +1 @@ +alter table wx_bill_daily add column build_way tinyint(3) default 1 comment '创建方式1手动2自动3导入'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909051400__CHANGE_CREDIT.sql b/mallinkAdmin/src/main/resources/db/migration/V201909051400__CHANGE_CREDIT.sql new file mode 100644 index 000000000..514ee7964 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909051400__CHANGE_CREDIT.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_credit_history` +CHANGE COLUMN `business_id` `business_id` integer(11) DEFAULT NULL COMMENT '业态ID(计算新增积分时使用)'; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909051720__CHANGE_MENU.sql b/mallinkAdmin/src/main/resources/db/migration/V201909051720__CHANGE_MENU.sql new file mode 100644 index 000000000..4ce635c84 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909051720__CHANGE_MENU.sql @@ -0,0 +1 @@ +update `mall_permission` set `parent_id` = 4, `icon` = 'icon-jiesuancopy' where id = 417; \ No newline at end of file diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql new file mode 100644 index 000000000..03c39a8e9 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql @@ -0,0 +1,12 @@ +ALTER TABLE `wx_order` +ADD COLUMN `pos_order_create_sn` varchar(30) null COMMENT 'pos sn' AFTER `pos_order_create_time`; + +ALTER TABLE `wx_refund_order` +add `refund_from` tinyint(6) NOT NULL DEFAULT '0' COMMENT '支付类型(0:inside, 1:POS)', +add `pos_pay_order_id` bigint(20) NULL COMMENT 'POS支付订单ID,来源于POS', +add `pos_refund_order_id` bigint(20) NULL COMMENT 'POS退款订单ID,来源于POS', +add `pos_refund_order_time` bigint(20) NULL COMMENT 'POS退款订单创建时间,来源于POS', +add `pos_refund_order_status` tinyint(6) NULL COMMENT '支付订单退款状态(0:非手动,1:手动退款,2:手动释放同步),来源于POS', +add `pos_refund_type` tinyint(6) NULL COMMENT '支付方式: 0微信;1支付宝;2现金;3优惠券;4预付卡;5银行卡6记账,来源于POS', +add `pos_refund_order_no` varchar(20) NULL COMMENT '退款订单流水号, 来源于POS, 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空', +add `pos_refund_desc` varchar(100) NULL COMMENT 'POS退款描述'; diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909061641__L_CONTRACT.sql b/mallinkAdmin/src/main/resources/db/migration/V201909061641__L_CONTRACT.sql new file mode 100644 index 000000000..8d94a35b5 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909061641__L_CONTRACT.sql @@ -0,0 +1,46 @@ + +CREATE TABLE `wx_bill_settle` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `settle_number` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结算单号', + `merchant_id` bigint(20) DEFAULT NULL COMMENT '商户ID', + `status` smallint(1) DEFAULT '0' COMMENT '7待清算3结算完成', + `apply_status` smallint(1) DEFAULT '0' COMMENT '审核状态0未审核1审核中2审核完成3驳回4异常终止5撤回', + `receive_money` bigint(12) DEFAULT '0' COMMENT '收款', + `pay_money` bigint(12) DEFAULT '0' COMMENT '承付', + `settletime` datetime DEFAULT NULL COMMENT '结算时间', + `createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updatetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='结算单'; + + +CREATE TABLE `wx_bill_settle_bill` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `settle_id` bigint(20) DEFAULT NULL COMMENT '结算单id', + `type` smallint(1) DEFAULT '0' COMMENT '类型: 0收款1承付', + `bill_id` bigint(20) DEFAULT NULL COMMENT '账单id', + `bill_type` smallint(1) DEFAULT '0' COMMENT '账单类型: 1租金2押金3物业4日常费用6其他8补贴', + `createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updatetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='结算单-账单表'; + + +CREATE TABLE `wx_bill_settle_record` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `settle_id` bigint(20) NOT NULL COMMENT '主表id', + `tenant_id` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户id', + `userid` bigint(20) DEFAULT NULL COMMENT '操作人id', + `user_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人姓名', + `settle_money` bigint(12) DEFAULT '0' COMMENT '清算金额', + `settle_time` datetime DEFAULT NULL COMMENT '清算时间', + `settle_way` smallint(1) DEFAULT '1' COMMENT '清算方式1现金2支付宝3微信4银行卡转账5其他', + `balance` bigint(12) DEFAULT '0' COMMENT '结余', + `detail` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '明细', + `createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updatetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `desc` varchar(800) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='结算记录表'; \ No newline at end of file diff --git a/mallinkAdmin/src/test/java/com/iformall/service/test/Test.java b/mallinkAdmin/src/test/java/com/iformall/service/test/Test.java new file mode 100644 index 000000000..9d8139178 --- /dev/null +++ b/mallinkAdmin/src/test/java/com/iformall/service/test/Test.java @@ -0,0 +1,99 @@ +package com.iformall.service.test; + +import com.alibaba.fastjson.JSON; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxBillAll; +import com.iformall.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.ThreadContext; +import org.apache.shiro.web.subject.WebSubject; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import javax.annotation.Resource; + +@Slf4j +@AutoConfigureMockMvc +@FixMethodOrder(MethodSorters.JVM) +@ActiveProfiles("dev") +@RunWith(SpringRunner.class) +@SpringBootTest +public class Test { + + private static final String TENANT_ID = "456"; + + @Resource + private org.apache.shiro.mgt.SecurityManager securityManager; + @Resource + private WebApplicationContext webApplicationContext; + private MockHttpServletRequest mockHttpServletRequest; + private MockHttpServletResponse mockHttpServletResponse; + + @Autowired + WxLevelConfigService levelConfigService; + + @Autowired + WxCouponSendService wxCouponSendService; + + @Autowired + WxScoreRulesService wxScoreRulesService ; + + private MockMvc mockMvc; + + + @Autowired + private WxBillSettleService wxBillSettleService; + @Autowired + private WxBillAllService wxBillAllService; + + @Before + public void setUp() { + mockHttpServletRequest = new MockHttpServletRequest(webApplicationContext.getServletContext()); + mockHttpServletResponse = new MockHttpServletResponse(); + MockHttpSession mockHttpSession = new MockHttpSession(webApplicationContext.getServletContext()); + mockHttpServletRequest.setSession(mockHttpSession); + SecurityUtils.setSecurityManager(securityManager); + mockMvc = MockMvcBuilders + .webAppContextSetup(webApplicationContext) + .build(); + login("yftest", "123456zz"); + } + + private void login(String username, String password) { + Subject subject = new WebSubject.Builder(mockHttpServletRequest, mockHttpServletResponse) + .buildWebSubject(); + UsernamePasswordToken token = new UsernamePasswordToken(username, password, true); + subject.login(token); + ThreadContext.bind(subject); + } + + @org.junit.Test + public void levelList() { +// WxBillSettle settle = wxBillSettleService.getById(328411851323572224l); +// log.debug("data:{}", JSON.toJSONString(settle)); + WxBillAll wxBillAll = new WxBillAll(); + wxBillAll.setMerchantId(324754110547066880l); + wxBillAll.setTenantId("456"); + wxBillAll.setBillTypeValue(10); + log.debug("data:{}", JSON.toJSONString( wxBillAllService.listBill(wxBillAll))); + } + + + +} diff --git a/mallinkAdmin/src/test/java/com/iformall/service/test/WebTest.java b/mallinkAdmin/src/test/java/com/iformall/service/test/WebTest.java new file mode 100644 index 000000000..a4e0d3ff8 --- /dev/null +++ b/mallinkAdmin/src/test/java/com/iformall/service/test/WebTest.java @@ -0,0 +1,176 @@ +package com.iformall.service.test; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumCouponSendStatus; +import com.iformall.enums.EnumCouponSendType; +import com.iformall.mapper.WxCouponMapper; +import com.iformall.service.WxCouponSendService; +import com.iformall.service.WxLevelConfigService; +import com.iformall.service.WxScoreRulesService; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.ThreadContext; +import org.apache.shiro.web.subject.WebSubject; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultHandlers; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import tk.mybatis.mapper.entity.Example; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Slf4j +@AutoConfigureMockMvc +@FixMethodOrder(MethodSorters.JVM) +@ActiveProfiles("dev") +@RunWith(SpringRunner.class) +@SpringBootTest +public class WebTest { + + private static final String TENANT_ID = "456"; + + @Resource + private org.apache.shiro.mgt.SecurityManager securityManager; + @Resource + private WebApplicationContext webApplicationContext; + private MockHttpServletRequest mockHttpServletRequest; + private MockHttpServletResponse mockHttpServletResponse; + + @Autowired + WxLevelConfigService levelConfigService; + + @Autowired + WxCouponSendService wxCouponSendService; + + @Autowired + WxScoreRulesService wxScoreRulesService ; + + private MockMvc mockMvc; + + @Autowired + WxCouponMapper wxCouponMapper ; + + @Before + public void setUp() { + mockHttpServletRequest = new MockHttpServletRequest(webApplicationContext.getServletContext()); + mockHttpServletResponse = new MockHttpServletResponse(); + MockHttpSession mockHttpSession = new MockHttpSession(webApplicationContext.getServletContext()); + mockHttpServletRequest.setSession(mockHttpSession); + SecurityUtils.setSecurityManager(securityManager); + mockMvc = MockMvcBuilders + .webAppContextSetup(webApplicationContext) + .build(); + login("yftest", "123456zz"); + } + + private void login(String username, String password) { + Subject subject = new WebSubject.Builder(mockHttpServletRequest, mockHttpServletResponse) + .buildWebSubject(); + UsernamePasswordToken token = new UsernamePasswordToken(username, password, true); + subject.login(token); + ThreadContext.bind(subject); + } + + @Test + public void levelList() { + WxLevelConfig wxLevelConfig = new WxLevelConfig(); + wxLevelConfig.setTenantId(TENANT_ID); + wxLevelConfig.setSortColumns(BaseEntity.SortField.Points_ASC); + PageInfo data = levelConfigService.listAsPage(wxLevelConfig, 1, 999); + log.debug("data:{}", JSON.toJSONString(data)); + } + + /** + * 投放列表 + */ + @Test + public void list() { + WxCouponSend query = new WxCouponSend(); + query.setSendType(EnumCouponSendSendType.MERCHANT.getCode()); + query.setStatus(EnumCouponSendStatus.VALID.getCode()); + query.setSortColumns(BaseEntity.SortField.CreateDate_DESC); + List pageInfo = wxCouponSendService.listAsPage(query, 0, 10).getList(); + log.info("couponSend list = {}", JSON.toJSONString(pageInfo)); + } + + /** + * 商户注券,添加conditions: {limit:888} + */ + @Test + public void listCouponSend() throws Exception { + MvcResult result = mockMvc.perform( + MockMvcRequestBuilders.get("/wxCouponSend/list") + .param("pageNum", "1") + .param("pageSize", "10") + .param("sortColumn", "createDate") + .param("sortOrder", "desc") + .param("status", "1") + //.param("expired", "1") + .param("sendType", EnumCouponSendSendType.MERCHANT.getCode() + "") + ) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ObjectMapper mapper = new ObjectMapper(); + Map respMap = mapper.readValue(responseStr, Map.class); + log.info("respMap -> {}", JSON.toJSONString(respMap)); + } + + /** + * 商户注券,添加conditions: {limit:888} + */ + @Test + public void addCouponSend() throws Exception { + WxCouponSend wxCouponSend = new WxCouponSend(); + wxCouponSend.setSendType(EnumCouponSendSendType.MERCHANT.getCode()); + wxCouponSend.setCouponId(267460814401699840L); + wxCouponSend.setTenantId(TENANT_ID); + wxCouponSend.setTitle("口红666"); + wxCouponSend.setCreateDate(new Date()); + wxCouponSend.setUpdateDate(new Date()); + JSONObject jo = new JSONObject(); + jo.put(WxCouponSend.KEY_MERCHANT_LNVENTORY, 994); + + wxCouponSend.setConditions(jo.toJSONString()); + MvcResult result = mockMvc.perform( + MockMvcRequestBuilders.post("/wxCouponSend/add") + .contentType(MediaType.APPLICATION_JSON) + .content(JSON.toJSONString(wxCouponSend))) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ObjectMapper mapper = new ObjectMapper(); + Map respMap = mapper.readValue(responseStr, Map.class); + log.info("respMap -> {}", JSON.toJSONString(respMap)); + } + +} diff --git a/mallinkBApi/src/main/java/com/iformall/BApplication.java b/mallinkBApi/src/main/java/com/iformall/BApplication.java index b583daff9..02e6d8ba5 100644 --- a/mallinkBApi/src/main/java/com/iformall/BApplication.java +++ b/mallinkBApi/src/main/java/com/iformall/BApplication.java @@ -27,6 +27,21 @@ public class BApplication { @Value("${fm.open}") private boolean fmOpen; + @Value("${fm.upload_dir}") + private String uploadDir; + + @Value("${pos.dev_id}") + private String posDevId; + + @Value("${pos.req_key}") + private String posReqKey; + + @Value("${pos.res_key}") + private String posResKey; + + @Value("${pos.url}") + private String posUrl; + @Bean public boolean isFmException() { return fmException; @@ -42,6 +57,31 @@ public class BApplication { return fmOpen; } + @Bean + public String fmUploadDir() { + return uploadDir; + } + + @Bean + public String posDevId() { + return posDevId; + } + + @Bean + public String posReqKey() { + return posReqKey; + } + + @Bean + public String posResKey() { + return posResKey; + } + + @Bean + public String posUrl() { + return posUrl; + } + public static void main(String[] args) { SpringApplication.run(BApplication.class, args); diff --git a/mallinkBApi/src/main/java/com/iformall/controller/PosController.java b/mallinkBApi/src/main/java/com/iformall/controller/PosController.java new file mode 100644 index 000000000..f80db4518 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/PosController.java @@ -0,0 +1,200 @@ +package com.iformall.controller; + +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayConstant; +import com.iformall.service.PosBrunService; +import io.swagger.annotations.Api; +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("/api/pos") +@Api(description = "POS服务相关接口") +public class PosController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private PosBrunService posService; + + @ApiOperation(value = "检查POS Server是否正常", notes = "") + @GetMapping("checkAvaiable") + public ResultData checkAvaiable() { + return posService.checkAvaiable(); + } + + @ApiOperation(value = "商户POS用户/B端用户登录检查", notes = "{\"phone\":\"string\", \"password\":\"string(单位:分)\"}") + @PostMapping("checkUserPassword") + public ResultData checkUserPassword(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String phone = params.get("phone"); + String password = params.get("password"); + //登录凭证不能为空 + if (StringUtils.isBlank(phone)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空"); + } + if (StringUtils.isBlank(password)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空"); + } + return posService.checkUserPassword(user, phone, password); + } + + @ApiOperation(value = "获取会员折扣/优惠券/消费卡是否启用") + @PostMapping("getPosMemConfig") + public ResultData getPosMemConfig() { + return posService.getPosMemConfig(getTenantId()); + } + + @ApiOperation(value = "获取注册二维码及小票二维码规则") + @PostMapping("getQrCode") + public ResultData getQrCode() { + return posService.getQrCode(getTenantId()); + } + + @ApiOperation(value = "券独立核销-1-检查", notes = "{\"couponOrderId\":\"string\"}") + @PostMapping("checkCouponOrderForIndepentVerify") + public ResultData checkCouponOrderForIndepentVerify(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String couponOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // 券包ID + + if (StringUtils.isBlank(couponOrderIdStr)) { + return errParam(WxPayConstant.COUPON_ORDER_ID); + } + String verifyType = WxPayConstant.SCENE_VERIFY; + return posService.checkCouponOrderForIndepentVerify(user, verifyType, couponOrderIdStr); + } + + @ApiOperation(value = "券独立核销-2-核销", notes = "{\"couponOrderId\":\"string\", \"payment\":\"string(单位:分)\"}") + @PostMapping("posVerifyIndepent") + public ResultData posVerifyIndepent(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String couponOrderId = params.get("coupon_order_id"); + String payment = params.get("payment"); + if (StringUtils.isBlank(couponOrderId)) { + String errMessage = "券ID为空"; + logger.error(errMessage); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errMessage); + } + return posService.posVerifyIndepent(user, couponOrderId, payment); + } + + @ApiOperation(value = "会员支付-1-会员识别", notes = "{\"mem_id\":\"string(可选)\",\"mem_phone\":\"string(可选)\",\"pos_order_id\":\"string(必填)\",\"pos_amount\":\"string(单位:分)(必填)\"}") + @PostMapping("checkMem") + public ResultData checkMem(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String memIdStr = params.get(WxPayConstant.MEM_ID); // 会员ID + String memPhoneStr = params.get(WxPayConstant.MEM_PHONE); // 会员手机 + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额(单位:分) + + if (StringUtils.isBlank(posOrderIdStr)) { + return errParam(WxPayConstant.POS_ORDER_ID); + } + if (StringUtils.isBlank(posAmountStr)) { + return errParam(WxPayConstant.ORDER_AMOUNT); + } + + if (StringUtils.isBlank(memIdStr) && StringUtils.isBlank(memPhoneStr)) { + String errMessage = "please give one value for mem_id or mem_phone"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errMessage); + } + return posService.checkMem(user, memIdStr, memPhoneStr, posOrderIdStr, posAmountStr); + } + + @ApiOperation(value = "会员支付-2-交易核销检查", notes = "{\"coupon_order_id\":\"string(必填)\",\"pos_order_id\":\"string(必填)\",\"pos_amount\":\"string(必填)\"}") + @PostMapping("checkCouponOrderForPayVerify") + public ResultData checkCouponOrderForPayVerify(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String couponOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // 券包ID + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额 + + if (StringUtils.isBlank(couponOrderIdStr)) { + return errParam(WxPayConstant.COUPON_ORDER_ID); + } + if (StringUtils.isBlank(posOrderIdStr)) { + return errParam(WxPayConstant.POS_ORDER_ID); + } + if (StringUtils.isBlank(posAmountStr)) { + return errParam(WxPayConstant.ORDER_AMOUNT); + } + String verifyType = WxPayConstant.SCENE_PAY; + return posService.checkCouponOrderForPayVerify(user, verifyType, couponOrderIdStr, posOrderIdStr, posAmountStr); + } + + @ApiOperation(value = "会员支付-3-券预核销", notes = "{\"coupon_order_id\":\"string(必填)\",\"deduct_amount\":\"string(必填)\",\"pos_order_id\":\"string(必填)\",\"pos_amount\":\"string(必填)\"}") + @PostMapping("couponOrderPreVerify") + public ResultData couponOrderPreVerify(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String couponOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // 券包ID + String deductAmountStr = params.get(WxPayConstant.DEDUCT_AMOUNT); // 扣减金额 + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额(单位:分) + + if (StringUtils.isBlank(couponOrderIdStr)) { + return errParam(WxPayConstant.COUPON_ORDER_ID); + } + if (StringUtils.isBlank(deductAmountStr)) { + return errParam(WxPayConstant.DEDUCT_AMOUNT); + } + if (StringUtils.isBlank(posOrderIdStr)) { + return errParam(WxPayConstant.POS_ORDER_ID); + } + if (StringUtils.isBlank(posAmountStr)) { + return errParam(WxPayConstant.ORDER_AMOUNT); + } + return posService.couponOrderPreVerify(user, couponOrderIdStr, deductAmountStr, posOrderIdStr, posAmountStr); + } + + + @ApiOperation(value = "会员支付-4-支付完成", notes = "{\"pos_order_id\":\"string\"}") + @PostMapping("posOrderFinished") + public ResultData posOrderFinished(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + if (StringUtils.isBlank(posOrderIdStr)) { + return errParam(WxPayConstant.POS_ORDER_ID); + } + // 1. 获取订单信息 + // 2. 获取所有的支付订单信息 + // 3. 同步给FMPOS + + return new ResultData(); + } + + @ApiOperation(value = "会员支付-10-券预核销取消", notes = "{\"coupon_order_id\":\"string(必填)\",\"pos_order_id\":\"string(必填)\",\"pos_amount\":\"string(必填)\"}") + @PostMapping("couponOrderPreVerifyCancel") + public ResultData couponOrderPreVerifyCancel(@RequestBody Map params) { + WxMerchantBUser user = getUser(); + String couponOrderIdStr = params.get(WxPayConstant.COUPON_ORDER_ID); // 券包ID + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额(单位:分) + + if (StringUtils.isBlank(couponOrderIdStr)) { + return errParam(WxPayConstant.COUPON_ORDER_ID); + } + if (StringUtils.isBlank(posOrderIdStr)) { + return errParam(WxPayConstant.POS_ORDER_ID); + } + if (StringUtils.isBlank(posAmountStr)) { + return errParam(WxPayConstant.ORDER_AMOUNT); + } + return posService.couponOrderPreVerifyCancel(user, couponOrderIdStr, posOrderIdStr, posAmountStr); + } + + private ResultData errParam(String paramStr) { + String errMessage = String.format("request params[%s] error.", paramStr); + logger.error(errMessage); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errMessage); + } + +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/PosOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/PosOrderController.java new file mode 100644 index 000000000..7dfe63744 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/PosOrderController.java @@ -0,0 +1,95 @@ +package com.iformall.controller; + +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxMerchantBUser; +import io.swagger.annotations.Api; +import lombok.AllArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; + +import com.iformall.domain.po.PosOrder; +import com.iformall.service.PosOrderService; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + + +@RestController +@RequestMapping("/api/posOrder") +@AllArgsConstructor +@Api(description = "POS订单接口") +public class PosOrderController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + private final PosOrderService posOrderService; + + @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 PosOrder posOrder, Integer pageNum, Integer pageSize) { + if (null == posOrder) posOrder = new PosOrder(); + final PageInfo page = posOrderService.listAsPage(posOrder, pageNum, pageSize); + return new ResultData(page); + } + + @ApiOperation(value = "新增POS订单接口", notes = "") + @PostMapping("addForPosPay") + public ResultData add(@RequestBody PosOrder posOrder) { + WxMerchantBUser user = getUser(); + if (posOrder == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (posOrder.getType() == null) { + String errMessage = "订单类型为空"; + logger.error(errMessage); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errMessage); + } + if (posOrder.getPaymentType() == null) { + String errMessage = "支付类型为空"; + logger.error(errMessage); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errMessage); + } + if (posOrder.getPayment() == null) { + String errMessage = "支付金额为空"; + logger.error(errMessage); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errMessage); + } + + posOrder.setTenantId(user.getTenantId()); + posOrder.setBuUserId(user.getId()); + posOrderService.saveOrUpdate(posOrder); + return new ResultData(posOrder); + } + + @ApiOperation("根据id更新接口") + @PostMapping("update") + public ResultData update(@RequestBody PosOrder posOrder) { + posOrderService.saveOrUpdate(posOrder); + return new ResultData(); + } + + @ApiOperation("根据id删除接口") + @GetMapping("/del") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData delete(Long id) { + posOrderService.deleteById(id); + return new ResultData(Result.SUCCESS, "删除成功", null); + } + + @ApiOperation("根据id查询接口") + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData findById(Long id) { + return new ResultData(Result.SUCCESS, "查询成功", posOrderService.getById(id)); + } + + +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/PosPayOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/PosPayOrderController.java new file mode 100644 index 000000000..d4c40aac4 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/PosPayOrderController.java @@ -0,0 +1,72 @@ +package com.iformall.controller; + +import io.swagger.annotations.Api; +import lombok.AllArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; + +import com.iformall.domain.po.PosPayOrder; +import com.iformall.service.PosPayOrderService; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; + +@RestController +@RequestMapping("/api/posPayOrder") +@AllArgsConstructor +@Api(description = "POS支付订单接口") +public class PosPayOrderController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final PosPayOrderService posPayOrderService; + + + @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 PosPayOrder posPayOrder, Integer pageNum, Integer pageSize) { + if (null == posPayOrder) posPayOrder = new PosPayOrder(); + final PageInfo page = posPayOrderService.listAsPage(posPayOrder, pageNum, pageSize); + return new ResultData(page); + } + + @ApiOperation("新增POS订单接口") + @PostMapping("add") + public ResultData add(@RequestBody PosPayOrder posPayOrder) { + //Assert.notNull(posPayOrder.getName(), "角色名不能为空"); + //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); + posPayOrderService.saveOrUpdate(posPayOrder); + return new ResultData(); + } + + @ApiOperation("根据id更新接口") + @PostMapping("update") + public ResultData update(@RequestBody PosPayOrder posPayOrder) { + posPayOrderService.saveOrUpdate(posPayOrder); + return new ResultData(); + } + + @ApiOperation("根据id删除接口") + @GetMapping("/del") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData delete(Long id) { + posPayOrderService.deleteById(id); + return new ResultData(Result.SUCCESS, "删除成功", null); + } + + @ApiOperation("根据id查询接口") + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData findById(Long id) { + return new ResultData(Result.SUCCESS, "查询成功", posPayOrderService.getById(id)); + } + + +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java index e4f584ebd..0ac69f54f 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxBillController.java @@ -2,23 +2,23 @@ package com.iformall.controller; import com.iformall.common.ErrorCode; +import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxMerchant; import com.iformall.domain.vo.WxBillAll; import com.iformall.enums.EnumMerchantStatus; import com.iformall.service.WxBillAllService; +import com.iformall.service.WxBillSettleService; import com.iformall.service.WxMerchantBUserService; import com.iformall.service.WxMerchantService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; 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.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @@ -34,12 +34,10 @@ public class WxBillController extends BaseController { @Autowired WxBillAllService wxBillAllService; - - @Autowired - WxMerchantBUserService wxMerchantBUserService; - @Autowired WxMerchantService wxMerchantService; + @Autowired + WxBillSettleService wxBillSettleService; @ApiOperation("所有欠缴和待缴的数据") @PostMapping("listBillOweAndWaitPay") @@ -90,4 +88,12 @@ public class WxBillController extends BaseController { return wxBillAllService.listBill(wxBillAll); } + + @GetMapping("/findSettleById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + @ApiOperation("账单管理-结算单-id查找") + public ResultData findById(Long id) { + return new ResultData(Result.SUCCESS, "查询成功", wxBillSettleService.getById(id)); + } + } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 92eec461f..78592c3ad 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -7,6 +7,7 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.vo.WxCouponOrderCVo; +import com.iformall.enums.EnumCouponVerifyType; import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxMerchantBUserService; @@ -163,7 +164,7 @@ public class WxCouponOrderController extends BaseController { } if(couponOrder != null) { - wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, wxMerchantBUser); + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder.getTenantId(), couponOrderId, wxMerchantBUser.getId()); } return new ResultData(couponOrder); @@ -188,4 +189,15 @@ public class WxCouponOrderController extends BaseController { } return new ResultData(Result.SUCCESS, "查询成功", wxCouponOrderService.getById(couponOrderId)); } + + @ApiOperation(value = "核销接口", notes = "{\"couponOrderId\":\"string\"}") + @PostMapping("verifyForPos") + public ResultData verifyForPos(@RequestBody Map paramMap) { + // 0. 获取dev信息, tenantId信息 + // 1. check 查询 + // 2. create order + // 3. 独立核销 + + return new ResultData(); + } } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponSendController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponSendController.java new file mode 100644 index 000000000..74c9ccd94 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponSendController.java @@ -0,0 +1,138 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCouponActionLogVo; +import com.iformall.domain.vo.WxCouponSendVo; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumCouponSendStatus; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxCUserMapper; +import com.iformall.service.WxCouponActionLogService; +import com.iformall.service.WxCouponSendService; +import com.iformall.utils.DateUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/api/couponSend") +@Api(description = "商户注券相关接口") +public class WxCouponSendController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxCouponSendService wxCouponSendService; + @Autowired + private WxCouponActionLogService wxCouponActionLogService; + + @Resource + private WxCUserMapper wxCUserMapper; + + @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(WxCouponSend wxCouponSend, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxCouponSendController::list"); + if (Objects.isNull(wxCouponSend.getSendType())) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + wxCouponSend.setTenantId(getTenantId()); + wxCouponSend.setMerchantId(getUser().getMerchantId()); + if (Objects.nonNull(wxCouponSend.getExpired()) && Objects.equals(wxCouponSend.getExpired(), 0)) { + wxCouponSend.setMerchantRemain(0); + } + wxCouponSend.setStatus(wxCouponSend.getStatus()); + //库存大于0 + if (Objects.isNull(wxCouponSend.getSortColumn())) { + wxCouponSend.setSortColumns(BaseEntity.SortField.CreateDate_DESC); + } + final PageInfo page = wxCouponSendService.listAsPage(wxCouponSend, pageNum, pageSize); + + for (WxCouponSendVo cs : page.getList()) { + cs.setSendCount(wxCouponActionLogService.getCountByChannelId(getTenantId(), cs.getSendType(), cs.getId())); + } + return new ResultData(page); + } + + @ApiOperation("商户注券") + @PostMapping("/handSel") + @ApiImplicitParams({ + @ApiImplicitParam(name = "wxCouponSendIds", value = "CouponSend ID数组", dataType = "string", allowMultiple = true, paramType = "query", required = true), + @ApiImplicitParam(name = "cUserId", value = "用户ID", dataType = "long", paramType = "query", required = true), + }) + public ResultData handSel(@RequestBody Map params) { + logger.debug("[" + getIpAddr() + "] WxCouponSendController::handSel"); + if (CollectionUtils.isEmpty(params)) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + WxCUser cu = wxCUserMapper.selectByPrimaryKey(params.get("cUserId")); + if (Objects.isNull(cu)) { + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + + if (!params.containsKey("wxCouponSendIds")) { + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + + List wxCouponSendIds = (List) params.get("wxCouponSendIds"); + if (CollectionUtils.isEmpty(wxCouponSendIds)) { + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + + WxCouponSend wxCouponSend = new WxCouponSend(); + wxCouponSend.setIds(wxCouponSendIds.stream().map(Long::parseLong).collect(Collectors.toList())); + wxCouponSend.setTenantId(getTenantId()); + wxCouponSend.setSendType(EnumCouponSendSendType.MERCHANT.getCode()); + wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); + wxCouponSendService.handSel(wxCouponSend, cu); + return new ResultData(); + } + + @ApiOperation("注券记录") + @GetMapping("/actionLog") + @ApiImplicitParams({ + @ApiImplicitParam(name = "channelType", value = "注券类型,商户注券=7", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "beginDate", value = "开始日期 yyyy-MM-dd", dataType = "string", paramType = "query"), + @ApiImplicitParam(name = "endDate", value = "结束日期 yyyy-MM-dd", dataType = "string", paramType = "query"), + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData sendLog(Integer channelType, String beginDate, String endDate, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxCouponSendController::actionLog"); + Map params = new HashMap<>(); + if (Objects.nonNull(beginDate)) { + Date begin = DateUtils.stringToDate(beginDate); + params.put("beginDate", begin); + } + + if (Objects.nonNull(endDate)) { + Date end = DateUtils.stringToDate(endDate); + Calendar cal = Calendar.getInstance(); + cal.setTime(end); + cal.add(Calendar.DATE, 1); + params.put("endDate", cal.getTime()); + } + params.put("tenantId", getTenantId()); + params.put("channelType", channelType); + params.put("merchantId", getUser().getMerchantId()); + PageInfo data = wxCouponActionLogService.getActionLog(params, pageNum, pageSize); + return new ResultData(data); + } + + +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java index ecd202fca..b00c9aeff 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCreditHistoryController.java @@ -44,8 +44,9 @@ public class WxCreditHistoryController extends BaseController { @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) { + @ApiImplicitParam(name="spend",value="消费金额",dataType="int", paramType = "query",required=true), + @ApiImplicitParam(name = "userId", value = "会员Id", dataType = "long", paramType = "query", required = true)}) + public ResultData findByMerchantIdAndSpend(@RequestParam Long merchantId, @RequestParam String spendStr,@RequestParam Long userId) { log.debug("[" + getIpAddr() + "] WxCreditHistoryController::findByMerchantIdAndSpend"); WxMerchant wxMerchant = new WxMerchant(); wxMerchant.setStatus(EnumYesOrNo.YES.getCode()); @@ -55,7 +56,7 @@ public class WxCreditHistoryController extends BaseController { if (wxMerchant.getIsAdmin() != EnumYesOrNo.YES.getCode() && merchantId.longValue() != getUser().getMerchantId().longValue()) { return new ResultData(ErrorCode.USER_NO_PERMISSION); } - return new ResultData(wxCreditHistoryService.findByMerchantIdAndSpend(merchantId,spendStr,getTenantId())); + return new ResultData(wxCreditHistoryService.findByMerchantIdAndSpend(merchantId,spendStr,userId,getTenantId())); } @ApiOperation("根据手机号查询接口") diff --git a/mallinkBApi/src/main/java/com/iformall/service/PosBrunService.java b/mallinkBApi/src/main/java/com/iformall/service/PosBrunService.java new file mode 100644 index 000000000..053f58d4b --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/service/PosBrunService.java @@ -0,0 +1,555 @@ +package com.iformall.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.PosOrder; +import com.iformall.domain.po.PosPayOrder; +import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayConstant; +import com.iformall.pay.WxPayment; +import com.iformall.utils.PosUtil; +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.Date; +import java.util.List; +import java.util.Map; + +@Service +public class PosBrunService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private String posDevId; + + @Autowired + private String posReqKey; + + @Autowired + private String posResKey; + + @Autowired + private String posUrl; + + @Autowired + private PosOrderService posOrderService; + + @Autowired + private PosPayOrderService posPayOrderService; + + PosUtil posUtil = new PosUtil(); + + /** + * 检查POS Server是否正常 + * @return + */ + public ResultData checkAvaiable() { + try { + String resStr = posUtil.checkPosMemServer(posUrl); + if (resStr != null) { + return new ResultData(); + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 商户POS用户/B端用户登录检查 + * @param user + * @param phone + * @param password + * @return + */ + public ResultData checkUserPassword(WxMerchantBUser user, String phone, String password) { + try { + String resStr = posUtil.checkUserPassword(posUrl, posDevId, posReqKey, + user.getTenantId(), phone, password); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 获取会员折扣/优惠券/消费卡是否启用 + * @param tenantId + * @return + */ + public ResultData getPosMemConfig(String tenantId) { + try { + String resStr = posUtil.getPosMemConfig(posUrl, posDevId, posReqKey, tenantId); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 获取注册二维码及小票二维码规则 + * @param tenantId + * @return + */ + public ResultData getQrCode(String tenantId) { + try { + String resStr = posUtil.getQrCode(posUrl, posDevId, posReqKey, tenantId); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 会员识别 + * @param user + * @param memIdStr + * @param memPhoneStr + * @param posOrderIdStr + * @param posAmountStr + * @return + */ + public ResultData checkMem(WxMerchantBUser user, + String memIdStr, String memPhoneStr, + String posOrderIdStr, String posAmountStr) { + try { + String resStr = posUtil.checkMem(posUrl, posDevId, posReqKey, + user.getTenantId(), String.valueOf(user.getMerchantId()), + memIdStr, memPhoneStr, posOrderIdStr, posAmountStr); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 券独立核销检查 + * @param user + * @param verifyType + * @param couponOrderIdStr + * @return + */ + public ResultData checkCouponOrderForIndepentVerify(WxMerchantBUser user, + String verifyType, + String couponOrderIdStr) { + try { + String resStr = posUtil.checkCouponOrderForVerify(posUrl, posDevId, posReqKey, + user.getTenantId(), String.valueOf(user.getMerchantId()), String.valueOf(user.getId()), + verifyType, couponOrderIdStr, null, null); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 券交易核销检查 + * @param user + * @param verifyType + * @param couponOrderIdStr + * @param posOrderIdStr + * @param posAmountStr + * @return + */ + public ResultData checkCouponOrderForPayVerify(WxMerchantBUser user, + String verifyType, + String couponOrderIdStr, + String posOrderIdStr, String posAmountStr) { + try { + String resStr = posUtil.checkCouponOrderForVerify(posUrl, posDevId, posReqKey, + user.getTenantId(), String.valueOf(user.getMerchantId()), String.valueOf(user.getId()), + verifyType, couponOrderIdStr, posOrderIdStr, posAmountStr); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 券预核销 + * @param user + * @param couponOrderIdStr + * @param posOrderIdStr + * @param posAmountStr + * @return + */ + public ResultData couponOrderPreVerify(WxMerchantBUser user, + String couponOrderIdStr, String deductAmountStr, + String posOrderIdStr, String posAmountStr) { + Integer deductAmount, posAmount; + Long posOrderId; + try { + deductAmount = Integer.valueOf(deductAmountStr); + posAmount = Integer.valueOf(posAmountStr); + posOrderId = Long.valueOf(posOrderIdStr); + } catch (NumberFormatException e) { + logger.error(ErrorCode.SYS_PARAMETER_CAST_ERROR.getMessage()); + return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + // 1. 创建支付订单 + Date curDate = new Date(); + PosPayOrder posPayOrder = new PosPayOrder(); + posPayOrder.setTenantId(user.getTenantId()); + posPayOrder.setCreateTime(curDate); + posPayOrder.setUpdateTime(curDate); + posPayOrder.setOrderId(posOrderId); + posPayOrder.setBuUserId(user.getId()); + posPayOrder.setType(2); + posPayOrder.setPayFrom(10); + posPayOrder.setPayAmount(deductAmount); + posPayOrder.setPayTimeStart(curDate); + posPayOrder.setPayTimeEnd(curDate); + posPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); + posPayOrder.setShare(0); + try { + posPayOrderService.saveOrUpdate(posPayOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + + // 2. POS预核销 + try { + String resStr = posUtil.couponOrderPreVerify(posUrl, posDevId, posReqKey, + user.getTenantId(), String.valueOf(user.getMerchantId()), String.valueOf(user.getId()), + couponOrderIdStr, posOrderIdStr, posAmountStr); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + if (retObj.getString(WxPayConstant.RETURN_CODE).equalsIgnoreCase(WxPayConstant.RET_SUCCESS) && + retObj.getString(WxPayConstant.RESULT_CODE).equalsIgnoreCase(WxPayConstant.RET_SUCCESS)) { + Integer remainAmount = posAmount; + // 获取 返回值 + JSONArray retArr = retObj.getJSONArray(WxPayConstant.RET); + for (int i = 0; i > retArr.size(); i++) { + JSONObject couponObj = retArr.getJSONObject(i); + if (couponObj == null) { + continue; + } + String deductAmountOfCouponStr = couponObj.getString(WxPayConstant.DEDUCT_AMOUNT); + Integer deductAmountofCoupon = Integer.valueOf(deductAmountOfCouponStr); + // 新 支付订单状态 + PosPayOrder updatePayOrder = new PosPayOrder(); + updatePayOrder.setId(Long.valueOf(couponObj.getLong(WxPayConstant.ID))); + updatePayOrder.setPayAmount(deductAmountofCoupon); + updatePayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + updatePayOrder.setPayTimeEnd(new Date()); + try { + posPayOrderService.saveOrUpdate(updatePayOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + String remainAmountStr = couponObj.getString(WxPayConstant.REMAIN_AMOUNT); + Integer remainAmountofCoupon = Integer.valueOf(remainAmountStr); + remainAmount = remainAmountofCoupon; + } + // 更新 订单状态 + PosOrder updateOrder = new PosOrder(); + updateOrder.setId(posOrderId); + updateOrder.setRemainAmount(remainAmount); + updateOrder.setUpdateDate(new Date()); + if (remainAmount.equals(0)) { + updateOrder.setOrderStatus(EnumPosOrderStatus.PAYMENT_SUCCESS.getCode()); + retObj.put(WxPayConstant.ORDER_STATUS, EnumPosOrderStatus.PAYMENT_SUCCESS.getCode()); + retObj.put(WxPayConstant.DEDUCT_AMOUNT, 0); + } else { + updateOrder.setOrderStatus(EnumPosOrderStatus.PENDING.getCode()); + retObj.put(WxPayConstant.ORDER_STATUS, EnumPosOrderStatus.PENDING.getCode()); + retObj.put(WxPayConstant.DEDUCT_AMOUNT, remainAmount); + } + try { + posOrderService.saveOrUpdate(updateOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + return new ResultData(JSON.toJSONString(retObj)); + } else { + logger.error(resStr); + return new ResultData(Result.ERROR, retObj.getString(WxPayConstant.RESULT_DATA)); + } + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 券预核销取消 + * @param user + * @param couponOrderIdStr + * @param posOrderIdStr + * @param posAmountStr + * @return + */ + public ResultData couponOrderPreVerifyCancel(WxMerchantBUser user, + String couponOrderIdStr, + String posOrderIdStr, String posAmountStr) { + try { + String resStr = posUtil.couponOrderPreVerifyCancel(posUrl, posDevId, posReqKey, + user.getTenantId(), String.valueOf(user.getMerchantId()), String.valueOf(user.getId()), + couponOrderIdStr, posOrderIdStr, posAmountStr); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + /** + * 券独立核销 + * @param user + * @param couponOrderIdStr + * @param posOrderIdStr + * @return + */ + public ResultData couponOrderIndependentVerify(WxMerchantBUser user, String couponOrderIdStr, String posOrderIdStr) { + try { + String resStr = posUtil.couponOrderIndependentVerify(posUrl, posDevId, posReqKey, + user.getTenantId(), String.valueOf(user.getMerchantId()), String.valueOf(user.getId()), + couponOrderIdStr, posOrderIdStr); + if (resStr != null) { + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, posResKey)) { + return new ResultData(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } else { + return new ResultData(resStr); + } + } else { + return new ResultData(Result.ERROR, "无返回值"); + } + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + + public ResultData posVerifyIndepent(WxMerchantBUser user, String couponOrderId, String payment) { + // 1. 创建 POS订单 + PosOrder posOrder = new PosOrder(); + posOrder.setTenantId(user.getTenantId()); + posOrder.setType(EnumPosOrderType.VERIFY_INDEPENDENT.getCode()); + posOrder.setBuUserId(user.getId()); + posOrder.setOrderStatus(EnumPosOrderStatus.PENDING_VERIFY.getCode()); + posOrder.setPaymentType(EnumPosPayType.PAY_VERIFY_INDEPENT.getCode()); + if (StringUtils.isNotBlank(payment)) { + posOrder.setPayment(Integer.valueOf(payment)); + } + try { + posOrderService.saveOrUpdate(posOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + // 2. 创建 POS支付订单 + Date curDate = new Date(); + PosPayOrder posPayOrder = new PosPayOrder(); + posPayOrder.setTenantId(user.getTenantId()); + posPayOrder.setBuUserId(user.getId()); + posPayOrder.setOrderId(posOrder.getId()); + posPayOrder.setType(EnumPosPayType.PAY_VERIFY_INDEPENT.getCode()); + posPayOrder.setPayTimeStart(curDate); + posPayOrder.setPayTimeEnd(curDate); + posPayOrder.setPayOrderNo(couponOrderId); + posPayOrder.setPayOrderStatus(EnumPosOrderStatus.PENDING_VERIFY.getCode()); + posPayOrder.setCreateTime(curDate); + posPayOrder.setUpdateTime(curDate); + try { + posPayOrderService.saveOrUpdate(posPayOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + + // 3. POS支付订单支付 + try { + couponOrderIndependentVerify(user, couponOrderId, posOrder.getPosOrderNo()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + + try { + PosPayOrder updateOrder = new PosPayOrder(); + updateOrder.setId(posPayOrder.getId()); + updateOrder.setPayOrderStatus(EnumPosOrderStatus.VERIFY_SUCCESS.getCode()); + posPayOrderService.saveOrUpdate(posPayOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + + // 4. POS订单支付 + try { + PosOrder updateOrder = new PosOrder(); + updateOrder.setId(posOrder.getId()); + posOrder.setOrderStatus(EnumPosOrderStatus.VERIFY_SUCCESS.getCode()); + posOrderService.saveOrUpdate(posOrder); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + // 5. 同步给fm pos进程 + // 5.1 posOrder信息 + PosOrder syncOrder = posOrderService.getById(posOrder.getId()); + if (syncOrder != null) { + // 5.2 posPayOrder信息 + PosPayOrder q = new PosPayOrder(); + q.setOrderId(posOrder.getId()); + List posPayOrders = posPayOrderService.getList(q); + + } + + return new ResultData(); + } +} diff --git a/mallinkBApi/src/main/java/com/iformall/utils/PosUtil.java b/mallinkBApi/src/main/java/com/iformall/utils/PosUtil.java new file mode 100755 index 000000000..faa706d33 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/utils/PosUtil.java @@ -0,0 +1,738 @@ +package com.iformall.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayConstant; +import com.iformall.pay.WxPayment; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Title: POS接口 + * @author: Stormeye + * @date: 2018/3/8 17:41 + * @version: V1.0 + */ +public class PosUtil { + private static final Logger logger = LoggerFactory.getLogger(PosUtil.class); + + private static final String domain = "http://localhost:4000"; // "https://pos.youlane.cn/api"; + private static final String devId = "fmpos"; + private static final String reqKey = "ZiGFLC4@3c5sTLZT"; + private static final String resKey = "ugPAM7wd&%p6I0W8"; + + // url + private static final String URL_Version = "/version"; + private static final String URL_CheckUserPassword = "/checkUserPassword"; + private static final String URL_GetPosMemConfig = "/getPosMemConfig"; + private static final String URL_GetQrCode = "/getQrCode"; + private static final String URL_CheckMem = "/checkMem"; + private static final String URL_CheckCouponOrderForVerify = "/checkCouponOrderForVerify"; + private static final String URL_CouponOrderPreVerify = "/couponOrderPreVerify"; + private static final String URL_CouponOrderPreVerifyCancel = "/couponOrderPreVerifyCancel"; + private static final String URL_CouponOrderIndependentVerify = "/couponOrderIndependentVerify"; + private static final String URL_CouponOrderPayVerifyOne = "/couponOrderPayVerifyOne"; + private static final String URL_CouponOrderPayVerifyList = "/couponOrderPayVerifyList"; + private static final String URL_CouponOrderVerifyCancel = "/couponOrderVerifyCancel"; + private static final String URL_CheckCardPay = "/checkCardPay"; + private static final String URL_CardPayPre = "/cardPayPre"; + private static final String URL_CardPayPreCancel = "/cardPayPreCancel"; + private static final String URL_CardPay = "/cardPay"; + private static final String URL_CardPayCancel = "/cardPayCancel"; + + + /* + 可用的交易券, 支付可用(1, 2, 6), 独立核销可用(4, 6, 8, 9) + coupon_order_id, coupon_type, 售价, 面额, cancellable + 321872988134408192, 4, 0, 2000, NO + 321877927162249216, 2, 0, 10000, YES + 321878123232591872, 2, 1, 10000, NO + 321878185355214848, 1, 0, 10000, NO + 321878223800205312, 6, 0, 1000, YES + 321878329906921472, 6, 1, 1000, NO + 321882224846667776, 8, 1, 1500, NO + 321883878446825472, 100, 1, 50000, NO + */ + + private final OkHttpClient client = new OkHttpClient(); + private String doPost(String url, Map paramMap) { + String result = null; + MediaType jsonType = MediaType.parse("application/json; charset=utf-8"); + JSONObject json = new JSONObject(); + for (Map.Entry entry: paramMap.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + // 略过空值 + if (StringUtils.isBlank(value)) + continue; + json.put(key, value); + } + RequestBody requestBody = RequestBody.create(jsonType, JSON.toJSONString(json)); + Request request = new Request.Builder() + .url(url) + .post(requestBody) + .build(); + Response response = null; + try { + response = client.newCall(request).execute(); + result = response.body().string(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + return result; + } + private String doGet(String url) { + String result = null; + HttpUrl reqUrl = HttpUrl.parse(url).newBuilder().build(); + Request request = new Request.Builder().url(reqUrl).build(); + Response response = null; + try { + response = client.newCall(request).execute(); + result = response.body().string(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + return result; + } + + private boolean checkRespFailed(String resp) { + if(resp.startsWith("") || resp.startsWith("")) { + return true; + } + return false; + } + + + /** + * 0. 检查POS会员server是否正常 + * @param baseUrl + * @return B端用户信息 + */ + public String checkPosMemServer(String baseUrl) throws MallinkException { + String respStr = doGet(baseUrl + URL_Version); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + /** + * 1. 商户POS用户/B端用户登录检查 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param phone + * @param password + * @return B端用户信息 + */ + public String checkUserPassword(String baseUrl, String devId, String reqKey, + String tenantId, String phone, String password) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.PHONE, phone); + paramMap.put(WxPayConstant.PASSWORD, password); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CheckUserPassword, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 2. 获取会员折扣/优惠券/消费卡是否启用 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @return 会员折扣信息 + */ + public String getPosMemConfig(String baseUrl, String devId, String reqKey, + String tenantId) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_GetPosMemConfig, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 3. 获取注册二维码及小票二维码规则 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @return 二维码url及小票二维码规则 + */ + public String getQrCode(String baseUrl, String devId, String reqKey, + String tenantId) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_GetQrCode, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + /** + * 4. 会员识别 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param memId + * @param memPhone + * @param posOrderId + * @param posAmount + * @return 会员信息+会员折扣+会员可用优惠券列表 + */ + public String checkMem(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, + String memId, String memPhone, + String posOrderId, String posAmount) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + if (StringUtils.isNotBlank(memId)) { + paramMap.put(WxPayConstant.MEM_ID, memId); + } + if (StringUtils.isNotBlank(memPhone)) { + paramMap.put(WxPayConstant.MEM_PHONE, memPhone); + } + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap.put(WxPayConstant.ORDER_AMOUNT, posAmount); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CheckMem, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 5. 券核销检查 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param verifyType + * @param couponOrderId + * @param posOrderId + * @param posAmount + * @return 券是否可核销 + */ + public String checkCouponOrderForVerify(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + String verifyType, String couponOrderId, + String posOrderId, String posAmount) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.SCENE_TYPE, verifyType); + paramMap.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + if (StringUtils.isNotBlank(posOrderId)) { + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + } + if (StringUtils.isNotBlank(posAmount)) { + paramMap.put(WxPayConstant.ORDER_AMOUNT, posAmount); + } + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CheckCouponOrderForVerify, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 6. 券预核销 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param couponOrderId + * @param posOrderId + * @param posAmount + * @return + */ + public String couponOrderPreVerify(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + String couponOrderId, + String posOrderId, String posAmount) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap.put(WxPayConstant.ORDER_AMOUNT, posAmount); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CouponOrderPreVerify, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 7. 券预核销取消 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param couponOrderId + * @param posOrderId + * @param posAmount + * @return + */ + public String couponOrderPreVerifyCancel(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + String couponOrderId, + String posOrderId, String posAmount) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap.put(WxPayConstant.ORDER_AMOUNT, posAmount); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CouponOrderPreVerifyCancel, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 8. 券独立核销 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param couponOrderId + * @param posOrderId + * @return + */ + public String couponOrderIndependentVerify(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + String couponOrderId, + String posOrderId) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CouponOrderIndependentVerify, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 9. 券交易核销-单个优惠券接口 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param couponOrderId + * @param posOrderId + * @param posAmount + * @return + */ + public String couponOrderPayVerifyOne(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + String couponOrderId, + String posOrderId, String posAmount) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap.put(WxPayConstant.ORDER_AMOUNT, posAmount); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CouponOrderPayVerifyOne, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 10. 券交易核销-优惠券列表 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param couponOrderIdList + * @param posOrderId + * @param posAmount + * @return + */ + public String couponOrderPayVerifyList(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + List couponOrderIdList, + String posOrderId, String posAmount) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.COUPON_ORDER_LIST, JSON.toJSONString(couponOrderIdList)); + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap.put(WxPayConstant.ORDER_AMOUNT, posAmount); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CouponOrderPayVerifyList, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + /** + * 11. 券核销取消 + * @param baseUrl + * @param devId + * @param reqKey + * @param tenantId + * @param merchantId + * @param buUserId + * @param couponOrderId + * @param posOrderId + * @return + */ + public String couponOrderVerifyCancel(String baseUrl, String devId, String reqKey, + String tenantId, String merchantId, String buUserId, + String couponOrderId, + String posOrderId) throws MallinkException { + Map paramMap = new HashMap<>(); + paramMap.put(WxPayConstant.DEV_ID, devId); + paramMap.put(WxPayConstant.TENANT_ID, tenantId); + paramMap.put(WxPayConstant.MERCHANT_ID, merchantId); + paramMap.put(WxPayConstant.BUSER_ID, buUserId); + paramMap.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + paramMap.put(WxPayConstant.POS_ORDER_ID, posOrderId); + paramMap = WxPayment.buildSignAfterParasMapForHMAC(paramMap, reqKey); + + String respStr = doPost(baseUrl + URL_CouponOrderVerifyCancel, paramMap); + if(respStr == null) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + if(checkRespFailed(respStr)) { + throw new MallinkException(ErrorCode.POS_CMD_FAIL); + } + return respStr; + } + + + + public static void main(String[] args) { + String tenantId = "456"; + String phone = "13120223636"; + String password = "drpos345"; + String merchantId = "320833942159982592"; + String buUserId = "320834180694245376"; + String memId = ""; + String memPhone = "13910154397"; + String posOrderId = "1"; + String posAmount = "200"; + String couponOrderId = "321877927162249216"; + String verifyType = "independent"; + PosUtil posUtil = new PosUtil(); + + String resStr = posUtil.checkPosMemServer(domain); + if (resStr != null) { + System.out.println(resStr); + } + + /* + String resStr = posUtil.checkUserPassword(domain, devId, reqKey, tenantId, phone, password); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + resStr = posUtil.getPosMemConfig(domain, devId, reqKey, tenantId); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + + resStr = posUtil.getQrCode(domain, devId, reqKey, tenantId); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + + resStr = posUtil.checkMem(domain, devId, reqKey, + tenantId, merchantId, + memId, memPhone, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + couponOrderId = "321878223800205312"; + verifyType = "independent"; + resStr = posUtil.checkCouponOrderForVerify(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, verifyType, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + + couponOrderId = "321877927162249216"; + resStr = posUtil.couponOrderPreVerify(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + + couponOrderId = "321877927162249216"; + resStr = posUtil.couponOrderPreVerifyCancel(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + + couponOrderId = "321878223800205312"; + resStr = posUtil.couponOrderIndependentVerify(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, posOrderId); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + couponOrderId = "321878223800205312"; + resStr = posUtil.couponOrderPreVerify(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + couponOrderId = "321878223800205312"; + resStr = posUtil.couponOrderPayVerifyOne(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + couponOrderId = "321878223800205312"; + resStr = posUtil.couponOrderVerifyCancel(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, posOrderId); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + + + couponOrderId = "321878223800205312"; + resStr = posUtil.couponOrderPreVerify(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + couponOrderId = "321878223800205312"; + List couponOrderIdList = new ArrayList<>(); + couponOrderIdList.add(couponOrderId); + resStr = posUtil.couponOrderPayVerifyList(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderIdList, + posOrderId, posAmount); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + couponOrderId = "321878223800205312"; + resStr = posUtil.couponOrderVerifyCancel(domain, devId, reqKey, + tenantId, merchantId, buUserId, + couponOrderId, posOrderId); + if (resStr != null) { + System.out.println(resStr); + JSONObject retObj = JSON.parseObject(resStr); + Map options = retObj; + if (!WxPayment.verifyNotifyHMAC(options, resKey)) { + System.out.println("verify sign error"); + } else { + System.out.println("verify sign ok"); + } + } + */ + } +} diff --git a/mallinkBApi/src/main/resources/application-dev.yml b/mallinkBApi/src/main/resources/application-dev.yml index 58c8b199e..cb96b5895 100644 --- a/mallinkBApi/src/main/resources/application-dev.yml +++ b/mallinkBApi/src/main/resources/application-dev.yml @@ -109,6 +109,13 @@ fm: open: true upload_dir: /home/test/server/uploads +pos: + dev_id: fmpos + url: https://pos.youlane.cn/api + req_key: ZiGFLC4@3c5sTLZT + res_key: ugPAM7wd&%p6I0W8 + + logging: level: tk.mybatis: debug diff --git a/mallinkBApi/src/main/resources/application-prod.yml b/mallinkBApi/src/main/resources/application-prod.yml index 68ed5e22a..fa839da92 100644 --- a/mallinkBApi/src/main/resources/application-prod.yml +++ b/mallinkBApi/src/main/resources/application-prod.yml @@ -93,6 +93,12 @@ fm: open: true upload_dir: /home/ec2-user/server/uploads/ +pos: + dev_id: fmpos + url: https://pos.malls.iformall.com/api + req_key: ZiGFLC4@3c5sTLZT + res_key: ugPAM7wd&%p6I0W8 + logging: level: tk.mybatis: debug diff --git a/mallinkBApi/src/main/resources/application-test.yml b/mallinkBApi/src/main/resources/application-test.yml index 9a57cd7a3..c0b4e140d 100644 --- a/mallinkBApi/src/main/resources/application-test.yml +++ b/mallinkBApi/src/main/resources/application-test.yml @@ -93,6 +93,12 @@ fm: open: true upload_dir: /home/ec2-user/server/uploads/ +pos: + dev_id: fmpos + url: https://postest.malls.iformall.com/api + req_key: ZiGFLC4@3c5sTLZT + res_key: ugPAM7wd&%p6I0W8 + logging: level: tk.mybatis: debug diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index 89915c6b5..cfe444b2f 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -27,6 +27,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Objects; @RestController public class BaseController { @@ -128,8 +129,8 @@ public class BaseController { 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())) { + // 微信名称,统一成微信昵称 + if (!Objects.equals(basicInfo.getNickName(), user.getNickName())) { basicInfo.setNickName(user.getNickName()); } // 性别 @@ -137,14 +138,14 @@ public class BaseController { basicInfo.setSex(user.getGender()); } // 成长值 - if (basicInfo.getPoins() == null) { + if (Objects.nonNull(user.getScore())) { basicInfo.setPoins(user.getScore()); } // 积分 - if (basicInfo.getCredit() == null) { + if (Objects.nonNull(user.getCredit())) { basicInfo.setCredit(user.getCredit()); } - wxCUserBasicInfoService.updateObj(basicInfo, user.getId()); + wxCUserBasicInfoService.updateObj(basicInfo, user); } else { Date cur = new Date(); WxCUserBasicInfo basicInfo = new WxCUserBasicInfo(); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 63ef3f549..526a2be4a 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -527,7 +527,7 @@ public class WxUserGrantController extends BaseController { if(isFirstPhone) { // 首次授权, 增加成长值及积分 // 成长值 - user.setScore(wxScoreRulesService.addScore(EnumScoreType.WECHAT_PHONE, user)); + user.setScore(user.getScore() + wxScoreRulesService.addScore(EnumScoreType.WECHAT_PHONE, user)); //增加积分 wxCUserService.addCredit(user, EnumScoreType.WECHAT_PHONE); } diff --git a/mallinkCallback/src/main/java/com/iformall/config/WebConfig.java b/mallinkCallback/src/main/java/com/iformall/config/WebConfig.java index 55248bebc..c736af6d3 100644 --- a/mallinkCallback/src/main/java/com/iformall/config/WebConfig.java +++ b/mallinkCallback/src/main/java/com/iformall/config/WebConfig.java @@ -46,22 +46,53 @@ public class WebConfig implements WebMvcConfigurer { List> converters = adapter.getMessageConverters(); MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); + List supportedMediaTypes = new ArrayList(); MediaType textMedia = new MediaType(MediaType.TEXT_PLAIN, Charset.forName("UTF-8")); supportedMediaTypes.add(textMedia); MediaType jsonMedia = new MediaType(MediaType.APPLICATION_JSON, Charset.forName("UTF-8")); supportedMediaTypes.add(jsonMedia); - jsonConverter.setSupportedMediaTypes(supportedMediaTypes); - converters.add(jsonConverter); - + ObjectMapper objectMapper = getObjectMapper(); + jsonConverter.setObjectMapper(objectMapper); + converters.add(jsonConverter); adapter.setMessageConverters(converters); return adapter; } + private ObjectMapper getObjectMapper() { + //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); + return objectMapper; + } + @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); @@ -118,31 +149,7 @@ public class WebConfig implements WebMvcConfigurer { 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); + ObjectMapper objectMapper = getObjectMapper(); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); } diff --git a/mallinkPosApi/pom.xml b/mallinkPosApi/pom.xml new file mode 100644 index 000000000..79eda0078 --- /dev/null +++ b/mallinkPosApi/pom.xml @@ -0,0 +1,154 @@ + + + 4.0.0 + + mallink + com.iformall + 1.0 + + + mallinkPosApi + + + + com.iformall + mallinkService + 1.0 + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + ZIP + + antlr, + cn.afterturn, + ch.qos.logback, + com.alibaba, + com.amazonaws, + com.mchange, + com.fasterxml.jackson.core, + com.fasterxml.jackson.dataformat, + com.fasterxml.jackson.datatype, + com.fasterxml.jackson.module, + com.fasterxml.uuid, + com.fasterxml, + com.github.axet, + com.github.binarywang, + com.github.jsqlparser, + com.github.pagehelper, + com.github.ulisesbocchio, + com.github.virtuald, + com.google.code.findbugs, + com.google.code.gson, + com.google.errorprone, + com.google.guava, + com.google.protobuf, + com.google.zxing, + com.jayway.jsonpath, + com.jhlabs, + com.puppycrawl.tools, + com.rabbitmq, + com.squareup.okhttp3, + com.squareup.okio, + com.sun, + com.sun.mail, + com.thoughtworks.xstream, + com.zaxxer, + commons-beanutils, + commons-cli, + commons-codec, + commons-collections, + commons-fileupload, + commons-io, + commons-logging, + io.lettuce, + io.netty, + io.projectreactor, + io.springfox, + io.swagger, + io.undertow, + javax.activation, + javax.annotation, + javax.mail, + javax.persistence, + javax.servlet, + javax.validation, + javax.xml.bind, + joda-time, + junit, + mysql, + net.bytebuddy, + net.minidev, + net.sf.dozer, + net.sf.saxon, + ognl, + org.antlr, + org.apache.commons, + org.apache.httpcomponents, + org.apache.logging.log4j, + org.apache.poi, + org.apache.poi.wso2, + org.apache.rocketmq, + org.apache.shiro, + org.apache.tomcat.embed, + org.apache.xmlbeans, + org.aspectj, + org.assertj, + org.bouncycastle, + org.checkerframework, + org.codehaus.mojo, + org.crazycake, + org.dom4j, + org.flowable, + org.flywaydb, + org.glassfish, + org.hibernate.validator, + org.jasypt, + org.javassist, + org.jboss.logging, + org.jboss.spec.javax.annotation, + org.jboss.spec.javax.websocket, + org.jboss.xnio, + org.jdom, + org.jodd, + org.mapstruct, + org.mockito, + org.mybatis, + org.mybatis.generator, + org.mybatis.spring.boot, + org.ow2.asm, + org.projectlombok, + org.quartz-scheduler, + org.reflections, + org.rocketmq.spring.boot, + org.slf4j, + org.springframework, + org.springframework.amqp, + org.springframework.boot, + org.springframework.data, + org.springframework.retry, + org.springframework.ws, + org.yaml, + redis.clients, + software.amazon.ion, + tk.mybatis, + xmlpull, + xpp3 + + + + + + diff --git a/mallinkPosApi/src/main/java/com/iformall/PosApplication.java b/mallinkPosApi/src/main/java/com/iformall/PosApplication.java new file mode 100644 index 000000000..c89c4bc2e --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/PosApplication.java @@ -0,0 +1,57 @@ +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 tk.mybatis.spring.annotation.MapperScan; + +/** + * @author Stormeye + * @date 2019-08-08 + */ +@SpringBootApplication +@MapperScan(basePackages = {"com.iformall.mapper"}) +@EnableEncryptableProperties +@EnableRocketMQ +public class PosApplication { + + @Value("${fm.exception}") + private boolean fmException; + + @Value("${fm.exception_emails}") + private String fmExceptionEmails; + + @Value("${fm.open}") + private boolean fmOpen; + + @Value("${fm.upload_dir}") + private String uploadDir; + + @Bean + public boolean isFmException() { + return fmException; + } + + @Bean + public String fmExceptionEmails() { + return fmExceptionEmails; + } + + @Bean + public boolean isFmOpen() { + return fmOpen; + } + + @Bean + public String fmUploadDir() { + return uploadDir; + } + + + public static void main(String[] args) { + SpringApplication.run(PosApplication.class, args); + } +} diff --git a/mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java new file mode 100644 index 000000000..61821c134 --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemControllerLog.java @@ -0,0 +1,10 @@ +package com.iformall.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemControllerLog { + String description() default ""; +} diff --git a/mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java new file mode 100644 index 000000000..f2cd84adf --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/annotation/SystemServiceLog.java @@ -0,0 +1,10 @@ +package com.iformall.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemServiceLog { + String description() default ""; +} diff --git a/mallinkPosApi/src/main/java/com/iformall/config/AwsProperty.java b/mallinkPosApi/src/main/java/com/iformall/config/AwsProperty.java new file mode 100644 index 000000000..0329f1d6d --- /dev/null +++ b/mallinkPosApi/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/mallinkPosApi/src/main/java/com/iformall/config/RedisConfig.java b/mallinkPosApi/src/main/java/com/iformall/config/RedisConfig.java new file mode 100644 index 000000000..7e167a93e --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/config/RedisConfig.java @@ -0,0 +1,125 @@ +package com.iformall.config; + +import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.WxMall; +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.cache.RedisCacheWriter; +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.Map; + +/** + * 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; + } + + @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; + } + + @Bean("mallRedisTemplate") + public RedisTemplate getMallRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxMall.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/mallinkPosApi/src/main/java/com/iformall/config/Swagger2Config.java b/mallinkPosApi/src/main/java/com/iformall/config/Swagger2Config.java new file mode 100644 index 000000000..884ba6c19 --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/config/Swagger2Config.java @@ -0,0 +1,49 @@ +package com.iformall.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +//参考:http://blog.csdn.net/catoop/article/details/50668896 +@Configuration +@EnableSwagger2 +public class Swagger2Config { + + @Bean + public Docket createRestApi() { + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList(); + //增加一个request的header参数 + tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); + pars.add(tokenPar.build()); + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("com.iformall.controller")) + .paths(PathSelectors.any()) + .build() + .globalOperationParameters(pars); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("b端 api") + .description("b端 api") + .termsOfServiceUrl("http://localhost:8000") + .version("2.0") + .build(); + } + +} \ No newline at end of file diff --git a/mallinkPosApi/src/main/java/com/iformall/config/WebMvcConfig.java b/mallinkPosApi/src/main/java/com/iformall/config/WebMvcConfig.java new file mode 100644 index 000000000..d7ea2644e --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/config/WebMvcConfig.java @@ -0,0 +1,80 @@ +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.*; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * MVC配置 + * + * @author stormeye.wu + * @email wugq@mippoint.com + * @date 2017-04-20 22:30 + */ +@Configuration +@EnableWebMvc +public class WebMvcConfig 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); + } +} \ No newline at end of file diff --git a/mallinkPosApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkPosApi/src/main/java/com/iformall/controller/BaseController.java new file mode 100644 index 000000000..b6a067993 --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/controller/BaseController.java @@ -0,0 +1,83 @@ +package com.iformall.controller; + +import java.beans.PropertyEditorSupport; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.service.WxAppinfoService; +import com.iformall.service.wechat.FmOpenService; +import com.iformall.utils.IPUtil; +import com.iformall.utils.MaUtil; +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; + +@RestController +public class BaseController { + @Autowired + private boolean isFmOpen; + + @Autowired + private WxAppinfoService wxAppinfoService; + + @Autowired + private FmOpenService openService; + + @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 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); + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } + } + + public WxMaService getWeappServiceByAppInfo(WxAppinfo appinfo) { + if(!isFmOpen) { + WxMaService service = MaUtil.getWeappService(appinfo); + return service; + } + return null; + } + + public String getIpAddr() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ipaddress = IPUtil.getIpAddr(request); + return ipaddress; + } +} diff --git a/mallinkPosApi/src/main/java/com/iformall/controller/HomeController.java b/mallinkPosApi/src/main/java/com/iformall/controller/HomeController.java new file mode 100644 index 000000000..ab029d09c --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/controller/HomeController.java @@ -0,0 +1,26 @@ +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 extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Value("${version}") + private String version; + + @GetMapping("/version") + @ApiOperation("获取后端版本号") + public ResultData version() { + logger.debug("[" + getIpAddr() + "] HomeController::version"); + return new ResultData(version); + } +} \ No newline at end of file diff --git a/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java b/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java new file mode 100644 index 000000000..c83fc6b7b --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/controller/PosController.java @@ -0,0 +1,448 @@ +package com.iformall.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.*; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayConstant; +import com.iformall.pay.WxPayment; +import com.iformall.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.text.SimpleDateFormat; +import java.util.*; + +@RestController +@AllArgsConstructor +@Api(description = "POS相关接口") +public class PosController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final SimpleDateFormat neuDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + private final PosService posService; + private final ThDevInfoService thDevInfoService; + private final WxCouponOrderService couponOrderService; + + @ApiOperation(value = "门店用户登录检查, 同时会返回会员折扣/优惠券/消费卡是否启用,mall信息及注册二维码及小票二维码规则", notes = "request: \n{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)," + + "\"tenant_id\":\"string(必填)\"," + + "\"phone\":\"string(必填)\"," + + "\"password\":\"string(必填)\"}\n" + + "response: \n{" + + "\"return_code\":\"SUCCESS\",\"return_msg\":\"\",\"result_code\":\"SUCCESS\"," + + "\"tenant_id\":\"456\",\"mall_name\":\"富茂中心\"," + + "\"merchant_id\":\"320833942159982592\",\"merchant_name\":\"东软合作\"," + + "\"merchant_img\":\"https://s3.cn-northwest-1.amazonaws.com.cn/iformall-net/234/WechatIMG5071.png\"," + + "\"order_operation_id\":\"320834180694245376\"," + + "\"qrcode_url\":\"https://s3.cn-northwest-1.amazonaws.com.cn/iformall-net/456/formall_c.png\"," + + "\"pos_qrcode_rule\":\"https://ctest.malls.iformall.com/order/(二维码规则: url + POS订单ID)\"," + + "\"discount\":\"false(是否支持会员折扣,false:禁用,true:可用)\"," + + "\"coupon\":\"0(会员优惠券是否开启,0-禁用,1-单选可用,2-多选可用)\",\"coupon_desc\":\"禁用(会员优惠券是否开启描述)\"," + + "\"card\":\"false(是否支持卡支付,false:禁用,true:可用)\"" + + "\"nonce_str\":\"2d8320f95e73419ebd42fcfded970d5b\"," + + "\"sign\":\"62139EE7897CF3BA44D9DBECA95AF6B116A9C49BBBB574BF3D2AF2939EE30423\"}") + @PostMapping("/checkUserPassword") + @SystemControllerLog(description = "门店用户登录检查") + public Map checkUserPassword(@RequestBody Map params) { + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.checkUserPassword(params); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", null); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); + } + } + + @ApiOperation(value = "查询及试算接口", notes = "{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)\"," + + "\"tenant_id\":\"string(必填)\"," + + "\"merchant_id\":\"string(必填)\"," + + "\"order_operator_id\":\"string(必填)\"," + + "\"mem_id\":\"string(选填)\"," + + "\"mem_phone_number\":\"string(选填)\"," + + "\"card_id\":\"string(选填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"order_amount\":\"string单位(分)(必填)\"," + + "\"order_amount_left\":\"string单位(分)(必填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"coupon_list\":\"json array[券包ID list](必填),例[\"1\",\"2\",\"3\"]\"}") + @PostMapping("/queryAndCalc") + @SystemControllerLog(description = "支付计算接口") + public Map calcForMem(@RequestBody Map params) { + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.queryAndCalcMem(params); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); + } + } + + @ApiOperation(value = "优惠核销接口", notes = "{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)\"," + + "\"tenant_id\":\"string(必填)\"," + + "\"merchant_id\":\"string(必填)\"," + + "\"order_operator_id\":\"string(必填)\"," + + "\"mem_id\":\"string(选填)\"," + + "\"mem_phone_number\":\"string(选填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"order_number_of_platform\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(必填)\"," + + "\"order_amount_left\":\"string单位(分)(必填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"coupon_list\":\"json array[券包ID list](必填),例[\"1\",\"2\",\"3\"]\"}") + @PostMapping("/couponOrderVerify") + @SystemControllerLog(description = "优惠核销接口") + public Map couponOrderVerify(@RequestBody Map params) { + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.couponOrderVerify(params); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); + } + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); + } + + @ApiOperation(value = "券核销取消", notes = "{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)\"," + + "\"tenant_id\":\"string(必填)\"," + + "\"merchant_id\":\"string(必填)\"," + + "\"order_operator_id\":\"string(必填)\"," + + "\"mem_id\":\"string(选填)\"," + + "\"mem_phone_number\":\"string(选填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"order_number_of_platform\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(选填)\"," + + "\"order_amount_left\":\"string单位(分)(选填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"payment_info\":{" + + "\"coupon_id\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(选填)\"," + + "\"amount_left\":\"string单位(分)(选填)\"," + + "\"promotion_amount\":\"string单位(分)(选填)\"," + + "\"amount_left_after_pay\":\"string单位(分)(选填)\"" + + "}}") + @PostMapping("/couponOrderVerifyCancel") + @SystemControllerLog(description = "券核销取消") + public Map couponOrderIndependentVerifyCancel(@RequestBody Map params) { + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.couponOrderVerifyCancel(params); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",500, e.getMessage()); + } + } + + @ApiOperation(value = "消费卡支付", notes = "{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)\"," + + "\"tenant_id\":\"string(必填)\"," + + "\"merchant_id\":\"string(必填)\"," + + "\"order_operation_id\":\"string(必填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"order_number_of_platform\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(选填)\"," + + "\"order_amount_left\":\"string单位(分)(选填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"card_id\":\"string(必填)\"," + + "\"amount_paid_by_card\":\"string(必填)\"}") + @PostMapping("/cardPayPre") + @SystemControllerLog(description = "消费卡支付") + public Map cardPayPre(@RequestBody Map params) { + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.cardPayPre(params); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); + } + } + + @ApiOperation(value = "消费卡支付取消", notes = "{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)\"," + + "\"tenant_id\":\"string(必填)\"," + + "\"merchant_id\":\"string(必填)\"," + + "\"order_operation_id\":\"string(必填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"order_number_of_platform\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(选填)\"," + + "\"order_amount_left\":\"string单位(分)(选填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"payment_info\":{" + + "\"card_id\":\"string(必填)\"," + + "\"card_spend_id\":\"string(必填)\"," + + "\"amount_paid_by_card\":\"string单位(分)(选填)\"," + + "\"amount_left_after_pay\":\"string单位(分)(选填)\"" + + "}}") + @PostMapping("/cardPayPreCancel") + @SystemControllerLog(description = "消费卡支付取消") + public Map cardPayPreCancel(@RequestBody Map params) { + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.cardPayPreCancel(params); + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",500, e.getMessage()); + } + } + + @ApiOperation(value = "POS订单同步", notes = "支付成功/支付取消后订单同步" + + "{" + + "\"dev_id\":\"string(必填)\"," + + "\"nonce_str\":\"string(必填)\"," + + "\"tenant_id\":\"string(必填)\"," + + "\"merchant_id\":\"string(必填)\"," + + "\"order_operation_id\":\"string(必填)\"," + + "\"business_type\":\"string(0:核销1支付(必填)\"," + + "\"mem_id\":\"string(必填)\"," + + "\"mem_phone_number\":\"string(必填)\"," + + "\"order_number_of_platform\":\"string(必填)\"," + + "\"order_amount\":\"string单位(分)(选填)\"," + + "\"order_amount_left\":\"string单位(分)(选填)\"," + + "\"order_create_sn\":\"string单位(分)(必填)\"," + + "\"payment_info\":{" + + "\"card_id\":\"string(必填)\"," + + "\"card_spend_id\":\"string(必填)\"," + + "\"amount_paid_by_card\":\"string单位(分)(选填)\"," + + "\"amount_left_after_pay\":\"string单位(分)(选填)\"" + + "}}") + @PostMapping("/posOrderSync") + @SystemControllerLog(description = "POS订单同步") + public Map posOrderSync(@RequestBody Map params) { + logger.info(params.toString()); + JSONObject payContent = new JSONObject(); + JSONObject retObj = new JSONObject(); + + // 1. check sign + Map retMap = checkSign(params, payContent); + if (retMap != null) { + // 签名相关异常返回 + return retMap; + } + String resKey = payContent.getString(WxPayConstant.RES_KEY); + logger.info(WxPayConstant.RES_KEY + ": " + resKey); + + try { + retObj = posService.posOrderSync(params); + } catch (MallinkException e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "", 500, e.getMessage()); + } + + return buildReturnMap(retObj, resKey, WxPayConstant.RET_SUCCESS, "",null); + } + + /** + * 构造返回map,无签名, 有错误 + * @param retCode + * @param retMsg + * @param errCode + * @param errMsg + * @return + */ + private Map buildReturnMap(String retCode, String retMsg, Integer errCode, String errMsg) { + Map retMap = new HashMap<>(); + retMap.put(WxPayConstant.RETURN_CODE, retCode); + retMap.put(WxPayConstant.RETURN_MSG, retMsg); + retMap.put(WxPayConstant.RESULT_CODE, "" + errCode); + retMap.put(WxPayConstant.RESULT_MSG, errMsg); + return retMap; + } + + /** + * 构造返回map,带签名, 有错误 + * @param dataMap + * @param resKey + * @param retCode + * @param retMsg + * @param err + * @return + */ + private Map buildReturnMap(JSONObject dataMap, String resKey, String retCode, String retMsg, ErrorCode err) { + Map retMap = new HashMap<>(); + retMap.put(WxPayConstant.RETURN_CODE, retCode); + retMap.put(WxPayConstant.RETURN_MSG, retMsg); + if (err != null) { + retMap.put(WxPayConstant.RESULT_CODE, "" + err.getCode()); + retMap.put(WxPayConstant.RESULT_MSG, err.getMessage()); + } else { + retMap.put(WxPayConstant.RESULT_CODE, "0"); + retMap.put(WxPayConstant.RESULT_MSG, ""); + } + if (dataMap != null) { + retMap.put(WxPayConstant.RESULT_DATA, JSON.toJSONString(dataMap)); + } + return WxPayment.buildSignAfterParasMapForHMAC(retMap, resKey); + } + + /** + * 构造返回map,带签名, 有错误 + * @param dataMap + * @param resKey + * @param retCode + * @param retMsg + * @param errCode + * @param errMsg + * @return + */ + private Map buildReturnMap(JSONObject dataMap, String resKey, String retCode, String retMsg, Integer errCode, String errMsg) { + Map retMap = new HashMap<>(); + retMap.put(WxPayConstant.RETURN_CODE, retCode); + retMap.put(WxPayConstant.RETURN_MSG, retMsg); + retMap.put(WxPayConstant.RESULT_CODE, "" + errCode); + retMap.put(WxPayConstant.RESULT_MSG, errMsg); + retMap.put(WxPayConstant.RESULT_DATA, JSON.toJSONString(dataMap)); + return WxPayment.buildSignAfterParasMapForHMAC(retMap, resKey); + } + + + /** + * 验证创建订单请求参数,参数通过返回JSONObject对象,否则返回错误文本信息 + * @param params + * @return + */ + private Map checkSign(Map params, JSONObject payContent) { + // 1. check sign + // 开发者参数 + String devId = params.get(WxPayConstant.DEV_ID); // 开发者ID + String sign = params.get(WxPayConstant.SIGN); // 签名 + if (StringUtils.isBlank(devId)) { + String errorMessage = String.format("request params[%s] error.", WxPayConstant.DEV_ID); + return buildReturnMap(WxPayConstant.RET_FAIL, "参数错误", ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errorMessage); + } + if (StringUtils.isBlank(sign)) { + String errorMessage = String.format("request params[%s] error.", WxPayConstant.SIGN); + return buildReturnMap(WxPayConstant.RET_FAIL, "参数错误", ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), errorMessage); + } + + // 查询开发者信息 + ThDevInfo devInfo = thDevInfoService.getByDevId(devId); + if (devInfo == null) { + String errorMessage = String.format("Can't found devInfo[%s=%s] record in db.", WxPayConstant.DEV_ID, devId); + return buildReturnMap(WxPayConstant.RET_FAIL, "参数错误", ErrorCode.DEV_ID_NOT_FOUND.getCode(), errorMessage); + } + if (devInfo.getState().equals(EnumEnableType.Disable.getCode())) { + String errorMessage = String.format("devInfo not available [%s=%s] record in db.", WxPayConstant.DEV_ID, devId); + return buildReturnMap(WxPayConstant.RET_FAIL, "参数错误", ErrorCode.DEV_ID_IS_DISABLED.getCode(), errorMessage); + } + + if (StringUtils.isBlank(devInfo.getReqKey())) { + String errorMessage = String.format("%s is null[%s=%s] record in db.", WxPayConstant.REQ_KEY, WxPayConstant.DEV_ID, devId); + return buildReturnMap(WxPayConstant.RET_FAIL, "参数错误", ErrorCode.DEV_ID_REQ_KEY_IS_NULL.getCode(), errorMessage); + } + if (StringUtils.isBlank(devInfo.getResKey())) { + String errorMessage = String.format("%s is null[%s=%s] record in db.", WxPayConstant.RES_KEY, WxPayConstant.DEV_ID, devId); + return buildReturnMap(WxPayConstant.RET_FAIL, "参数错误", ErrorCode.DEV_ID_RES_KEY_IS_NULL.getCode(), errorMessage); + } + payContent.put(WxPayConstant.RES_KEY, devInfo.getResKey()); + + boolean signVerified = WxPayment.verifyNotifyHMAC(params, devInfo.getReqKey()); + if (!signVerified) { + String errorMessage = ErrorCode.DEV_ID_SIGN_ERR.getMessage(); + logger.error(errorMessage + ": " + params.toString()); + return buildReturnMap(WxPayConstant.RET_FAIL, errorMessage, ErrorCode.DEV_ID_SIGN_ERR.getCode(), errorMessage + ": " + params.toString()); + } + return null; + } + + + +} diff --git a/mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java b/mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java new file mode 100644 index 000000000..cbdabd81a --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/log/SystemLogAspect.java @@ -0,0 +1,69 @@ +package com.iformall.log; + + +import com.alibaba.fastjson.JSON; +import com.iformall.domain.po.PosActionLog; +import com.iformall.pay.WxPayConstant; +import com.iformall.service.PosActionLogService; +import com.iformall.utils.IPUtil; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@Aspect +@Component +public class SystemLogAspect { + private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect.class); + + @Autowired + private PosActionLogService posActionLogService; + + @Pointcut("@annotation(com.iformall.annotation.SystemControllerLog)") + public void controllerAspect(){ + } + + @Pointcut("@annotation(com.iformall.annotation.SystemServiceLog)") + public void serviceAspect(){ + } + + @Around("controllerAspect()") + public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { + PosActionLog posActionLog = new PosActionLog(); + long startTime = System.currentTimeMillis(); + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ipaddress = IPUtil.getIpAddr(request); + posActionLog.setUrl(request.getRequestURL().toString()); + posActionLog.setIp(ipaddress); + posActionLog.setMethod(request.getMethod()); + posActionLog.setReqJson(JSON.toJSONString(joinPoint.getArgs()[0])); + posActionLog.setStartTime(startTime); + + try { + Object o = joinPoint.proceed(); + posActionLog.setResJson(JSON.toJSONString(o)); + long endTime = System.currentTimeMillis(); + posActionLog.setEndTime(endTime); + posActionLog.setCostTime(Long.valueOf(endTime - startTime).intValue()); + try { + posActionLogService.saveOrUpdate(posActionLog); + } catch (Exception e) { + logger.error("save pos log error: " + e.getMessage()); + } + return o; + } catch (Throwable throwable) { + logger.error("异常: " + throwable.getMessage()); + return null; + } + + } + +} diff --git a/mallinkPosApi/src/main/java/com/iformall/service/PosService.java b/mallinkPosApi/src/main/java/com/iformall/service/PosService.java new file mode 100644 index 000000000..65d640e5e --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/service/PosService.java @@ -0,0 +1,83 @@ +package com.iformall.service; + +import com.alibaba.fastjson.JSONObject; +import com.iformall.exception.MallinkException; + +import java.util.Map; + + +public interface PosService { + + /** + * 获取商城会员设置状态 + * @param params + * @return + */ + JSONObject checkUserPassword(Map params) throws MallinkException; + + /** + * 支付计算 + * @param params + * @return + */ + JSONObject queryAndCalcMem(Map params) throws MallinkException; + + /** + * 优惠核销(包含核销,支付预核销) + * @param params + * @return + * @throws MallinkException + */ + JSONObject couponOrderVerify(Map params) throws MallinkException; + + /** + * 优惠撤销(包含核销撤销,支付预核销撤销) + * @param params + * @return + * @throws MallinkException + */ + JSONObject couponOrderVerifyCancel(Map params) throws MallinkException; + + /** + * 消费卡POS预支付 + * @param params + * @return + * @throws MallinkException + */ + JSONObject cardPayPre(Map params) throws MallinkException; + + /** + * 消费卡POS预支付取消 + * @param params + * @return + * @throws MallinkException + */ + JSONObject cardPayPreCancel(Map params) throws MallinkException; + + /** + * 订单同步-Neusoft-支付或者退款成功后通知富茂 + * @param params + * @return + * @throws MallinkException + */ + JSONObject posOrderSync(Map params) throws MallinkException; + + /** + * 消费卡POS支付 + * @param params + * @return + * @throws MallinkException + */ + //Map cardPay(Map params) throws MallinkException; + + + /** + * 消费卡POS支付取消 + * @param params + * @return + * @throws MallinkException + */ + //Map cardPayCancel(Map params) throws MallinkException; + + +} diff --git a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java new file mode 100644 index 000000000..55278c83b --- /dev/null +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -0,0 +1,2536 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.PromotionCalc; +import com.iformall.domain.vo.WxCouponOrderCVo; +import com.iformall.domain.vo.WxLevelMerchantCVo; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.*; +import com.iformall.pay.WxPayConstant; +import com.iformall.service.*; +import io.swagger.models.auth.In; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +@AllArgsConstructor +public class PosServiceImpl implements PosService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + // 东软时间格式, 4位年2位月2位日2位24小时制时2位分2位秒3位毫秒 时区+8 北京时间 + private final SimpleDateFormat neuDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + private final WxMallService mallService; + private final PosMallConfigService posMallConfigService; + private final WxCUserService cUserService; + private final WxLevelConfigService levelConfigService; + private final WxCouponOrderService couponOrderService; + private final WxMerchantService merchantService; + private final WxMerchantBUserService merchantBUserService; + private final PosCouponOrderVerifyService posCouponOrderVerifyService; + private final WxScoreRulesService scoreRulesService; + private final WxCreditHistoryService creditHistoryService; + private final WxCardInfoService cardInfoService; + private final WxCardSpendService cardSpendService; + + private final WxOrderMapper orderMapper; + private final WxPayOrderMapper payOrderMapper; + private final WxRefundOrderMapper refundOrderMapper; + private final WxCouponOrderMapper couponOrderMapper; + private final WxCouponMerchantMapper couponMerchantMapper; + private final WxCouponMapper couponMapper; + + + /** + * 门店用户登录检查 + * @param params + * @return + */ + @Override + public JSONObject checkUserPassword(Map params) throws MallinkException { + JSONObject retMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String phone = params.get(WxPayConstant.PHONE); // buUser's Phone + String password = params.get(WxPayConstant.PASSWORD); // buUser's password + + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } + if (StringUtils.isBlank(phone)) { + errParam(WxPayConstant.PHONE); + } + if (StringUtils.isBlank(password)) { + errParam(WxPayConstant.PASSWORD); + } + WxMall mall = mallService.getByTenantId(tenantId); + if (mall == null) { + logger.error(ErrorCode.MALL_INFO_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.MALL_INFO_NOT_FOUND); + } + + PosMallConfig config = posMallConfigService.getByTenantId(tenantId); + if (config == null) { + logger.error(ErrorCode.MALL_INFO_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.MALL_INFO_NOT_FOUND); + } + + WxMerchantBUser user = new WxMerchantBUser(); + user.setTenantId(tenantId); + user.setPhone(phone); + user.setStatus(EnumMerchantBUserStatus.VALID.getCode()); + WxMerchantBUser user1 = null; + + try { + user1 = merchantBUserService.getBUserByAppId(user); + } catch (Exception e) { + String errMessage = ErrorCode.MERCHANT_BUSER_NOT_VALID.getMessage() + "phone: " + phone + ", " +e.getMessage(); + throw new MallinkException(ErrorCode.MERCHANT_BUSER_NOT_VALID.getCode(), errMessage); + } + if (user1 != null) { + // check merchant 状态 + WxMerchant merchant = checkAndGetMerchant(user1.getMerchantId()); + // check password + if (user1.getUserPwd().equalsIgnoreCase(password)) { + retMap.put(WxPayConstant.TENANT_ID, user1.getTenantId()); + retMap.put(WxPayConstant.MALL_NAME, mall.getName()); + retMap.put(WxPayConstant.MERCHANT_ID, String.valueOf(user1.getMerchantId())); + retMap.put(WxPayConstant.MERCHANT_NAME, merchant.getName()); + retMap.put(WxPayConstant.MERCHANT_IMG, merchant.getImgUrl()); + retMap.put(WxPayConstant.BUSER_ID, String.valueOf(user1.getId())); + + JSONObject qrCodeInfo = new JSONObject(); + qrCodeInfo.put(WxPayConstant.REG_QRCODE_URL, mall.getImgQrcodeWeapp()); + qrCodeInfo.put(WxPayConstant.POS_QRCODE_RULE, mall.getPosQrcodeRule()); + retMap.put(WxPayConstant.QRCODE, qrCodeInfo); + + JSONObject memInfo = new JSONObject(); + memInfo.put(WxPayConstant.DISCOUNT, String.valueOf(config.getDiscount().equals(EnumPosEnableType.Enable.getCode()))); + memInfo.put(WxPayConstant.COUPON, String.valueOf(config.getCoupon())); + memInfo.put(WxPayConstant.COUPON_DES, EnumPosCouponEnableType.getEnum(config.getCoupon()).getMessage()); + memInfo.put(WxPayConstant.CARD, String.valueOf(config.getCard().equals(EnumPosEnableType.Enable.getCode()))); + retMap.put(WxPayConstant.MEM_CONFIG, memInfo); + + return retMap; + } else { + logger.error(ErrorCode.PASSWORD_ERROR.getMessage()); + throw new MallinkException(ErrorCode.PASSWORD_ERROR); + } + } else { + String errMessage = "B端用户不存在, phone: " + phone; + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), errMessage); + } + } + + @Override + public JSONObject queryAndCalcMem(Map params) throws MallinkException { + JSONObject dataMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID + String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 交易场景 + String orderCreateSN = params.get(WxPayConstant.ORDER_CREATE_SN); // POS SN号 + String coListStr = params.get(WxPayConstant.COUPON_ORDER_LIST); // 优惠券列表 + + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } else { + dataMap.put(WxPayConstant.TENANT_ID, tenantId); + } + if (StringUtils.isBlank(merchantIdStr)) { + errParam(WxPayConstant.MERCHANT_ID); + } else { + dataMap.put(WxPayConstant.MERCHANT_ID, merchantIdStr); + } + if (StringUtils.isBlank(buUserIdStr)) { + errParam(WxPayConstant.BUSER_ID); + } else { + dataMap.put(WxPayConstant.BUSER_ID, buUserIdStr); + } + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } else { + dataMap.put(WxPayConstant.SCENE_TYPE, sceneTypeStr); + } + if (StringUtils.isBlank(orderCreateSN)) { + errParam(WxPayConstant.ORDER_CREATE_SN); + } else { + dataMap.put(WxPayConstant.ORDER_CREATE_SN, orderCreateSN); + } + + Integer iSceneType; + try { + iSceneType = Integer.valueOf(sceneTypeStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + // 1. POS 支持 配置 + PosMallConfig config = posMallConfigService.getByTenantId(tenantId); + if (config == null) { + logger.error(ErrorCode.POS_CONFIG_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_NOT_FOUND); + } + + // 2. 商户ID, B端用户ID + Long merchantId, buUserId; + try { + merchantId = Long.valueOf(merchantIdStr); + buUserId = Long.valueOf(buUserIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + // 3. check merchant + WxMerchant merchant = checkAndGetMerchant(merchantId); + // 4. check buUser + WxMerchantBUser buUser = checkAndGetMerchantUser(buUserId, merchantId); + + EnumPosSceneType sceneType = EnumPosSceneType.getEnum(iSceneType); + JSONObject promotionData = new JSONObject(); + JSONObject promotionInfo = new JSONObject(); + JSONObject promotionPayment = new JSONObject(); + PromotionCalc promotionCalc = new PromotionCalc(); + if (sceneType.equals(EnumPosSceneType.VERIFY)) { + if (config.getCoupon().equals(EnumPosCouponEnableType.Disable.getCode())) { + logger.error(ErrorCode.POS_CONFIG_MEM_COUPON_DISABLE.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_MEM_COUPON_DISABLE); + } + JSONObject promotionCoupon = new JSONObject(); + JSONArray couponList = new JSONArray(); + if (StringUtils.isBlank(coListStr)) { + errParam(WxPayConstant.COUPON_ORDER_LIST); + } + JSONArray couponOrderArr = JSON.parseArray(coListStr); + if (couponOrderArr.size() != 1) { + String errMessage = "核销只能使用一张券"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), errMessage); + } + String couponOrderIdStr = couponOrderArr.getString(0); + if (couponOrderIdStr != null) { + try { + JSONObject couponPromoMap = calcOneCouponVerify(promotionCalc, couponOrderIdStr, merchantId); + couponList.add(couponPromoMap); + } catch (MallinkException e) { + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + throw new MallinkException(500, e.getMessage()); + } + } + promotionCoupon.put(WxPayConstant.COUPON_ORDER_LIST, couponList); + // 券优惠总信息 + promotionCoupon.put(WxPayConstant.COUPON_PROMOTION_AMOUNT, promotionCalc.getPromotionAmount()); + promotionInfo.put(WxPayConstant.COUPON, promotionCoupon); + } else if(sceneType.equals(EnumPosSceneType.PAY)) { + JSONObject promotionCoupon = new JSONObject(); + JSONArray couponList = new JSONArray(); + + String memIdStr = params.get(WxPayConstant.MEM_ID); // 会员ID + String memPhoneStr = params.get(WxPayConstant.MEM_PHONE); // 会员手机 + String cardIdStr = params.get(WxPayConstant.CARD_ID); // 卡ID + String orderAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额(单位:分) + String orderAmountLeftStr = params.get(WxPayConstant.ORDER_AMOUNT_LEFT); // POS订单金额(单位:分) + if (StringUtils.isBlank(orderAmountStr)) { + errParam(WxPayConstant.ORDER_AMOUNT); + } else { + dataMap.put(WxPayConstant.ORDER_AMOUNT, orderAmountStr); + } + if (StringUtils.isBlank(orderAmountLeftStr)) { + errParam(WxPayConstant.ORDER_AMOUNT_LEFT); + } else { + dataMap.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmountLeftStr); + } + + WxCUser user = null; + if (StringUtils.isNotBlank(cardIdStr)) { + Long cardId; + try { + cardId = Long.valueOf(cardIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); + } + WxCouponOrder couponOrder = couponOrderMapper.selectByPrimaryKey(cardId); + if (couponOrder == null) { + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + user = cUserService.getById(couponOrder.getOwnerId()); + } else { + if (StringUtils.isBlank(memIdStr) && StringUtils.isBlank(memPhoneStr)) { + errParam2(WxPayConstant.MEM_ID, WxPayConstant.MEM_PHONE); + } + // 10. 获取会员信息 + user = getMemUser(tenantId, memIdStr, memPhoneStr); + } + + if (user == null) { + logger.error(ErrorCode.USER_NOT_MEMBER.getMessage()); + throw new MallinkException(ErrorCode.USER_NOT_MEMBER); + } + if (user != null) { + dataMap.put(WxPayConstant.MEM_ID, user.getId().toString()); + dataMap.put(WxPayConstant.MEM_PHONE, user.getPhone()); + } + // 11. 订单金额 + Integer orderAmount, orderAmountLeft; + try { + orderAmount = Integer.valueOf(orderAmountStr); + orderAmountLeft = Integer.valueOf(orderAmountLeftStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + promotionCalc.setOrderAmount(orderAmount); + promotionCalc.setOrderAmountLeft(orderAmountLeft); + promotionCalc.setPromotionAmount(0); + promotionCalc.setAmountLeftAfterPay(orderAmountLeft); + // 12. 会员折扣 + JSONObject discountObj = getMemLevelDiscount(promotionCalc, config.getDiscount(), tenantId, user, merchantId); + promotionInfo.put(WxPayConstant.MEMBER_DISCOUNT, discountObj); + // 14. 获取用户可用券列表 + if (!config.getCoupon().equals(EnumPosCouponEnableType.Disable.getCode())) { + Map coQ = new HashMap<>(); + coQ.put("tenantId", tenantId); + coQ.put("cUserId", user.getId()); + coQ.put("merchantId", merchantId); + List avaCoList = couponOrderMapper.findAvailCouponOrder(coQ); + JSONArray selCoArr = JSONObject.parseArray(coListStr); + if (config.getCoupon().equals(EnumPosCouponEnableType.SingleEnable.getCode())) { + if (selCoArr.size() > 1) { // 为空时,返回所有可用券列表 + String errMessage = "支付只能使用一张券"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.POS_COUPON_PAY_ERROR.getCode(), errMessage); + } + for (int i = 0; i < avaCoList.size(); i++) { + WxCouponOrderCVo couponOrderCVo = avaCoList.get(i); + boolean selCoupon = isSelCoupon(selCoArr, couponOrderCVo.getId()); + try { + JSONObject couponObj = calcOneCouponPay(promotionCalc, couponOrderCVo, selCoupon); + couponList.add(couponObj); + } catch (MallinkException e) { + if (selCoupon) { + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } + } catch (Exception e) { + if (selCoupon) { + throw new MallinkException(500, e.getMessage()); + } + } + } + } else if (config.getCoupon().equals(EnumPosCouponEnableType.MultiEnable.getCode())) { + for (int i = 0; i < avaCoList.size(); i++) { + WxCouponOrderCVo couponOrderCVo = avaCoList.get(i); + boolean selCoupon = isSelCoupon(selCoArr, couponOrderCVo.getId()); + try { + JSONObject couponObj = calcOneCouponPay(promotionCalc, couponOrderCVo, selCoupon); + couponList.add(couponObj); + } catch (MallinkException e) { + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + throw new MallinkException(500, e.getMessage()); + } + } + } + } + promotionCoupon.put(WxPayConstant.COUPON_ORDER_LIST, couponList); + // 券优惠总信息 + promotionCoupon.put(WxPayConstant.COUPON_PROMOTION_AMOUNT, promotionCalc.getPromotionAmount()); + promotionInfo.put(WxPayConstant.COUPON, promotionCoupon); + } + // 构造支付信息 + promotionPayment.put(WxPayConstant.ORDER_AMOUNT, promotionCalc.getOrderAmount()); + promotionPayment.put(WxPayConstant.ORDER_AMOUNT_LEFT, promotionCalc.getOrderAmountLeft()); + promotionPayment.put(WxPayConstant.PROMOTION_AMOUNT, promotionCalc.getPromotionAmount()); + promotionPayment.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, promotionCalc.getAmountLeftAfterPay()); + promotionData.put(WxPayConstant.PAYMENT_PREDICTION, promotionPayment); + promotionData.put(WxPayConstant.PROMOTION_INFO, promotionInfo); + dataMap.put(WxPayConstant.PROMOTION_DATA, JSON.toJSONString(promotionData)); + return dataMap; + } + + /** + * 单券核销计算 + * @param promotionCalc + * @param merchantId + * @param couponOrderIdStr + * @return + */ + private JSONObject calcOneCouponVerify(PromotionCalc promotionCalc, String couponOrderIdStr, Long merchantId) { + JSONObject retObj = new JSONObject(); + Date now = new Date(); + // 1. 获取券包信息 + WxCouponOrderCVo couponOrderCVo = checkAndGetCouponOrder(couponOrderIdStr, merchantId, now); + + // 2. 检查券类型 核销可用(4, 6, 8, 9) + EnumCouponType couponType = EnumCouponType.getEnum(couponOrderCVo.getCouponType()); + if (!(couponType.getCode().equals(EnumCouponType.COUPON_MULTIMCH.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_LIPIN.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_PRESS.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_GROUP.getCode())) + ) { + logger.error(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT.getMessage()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); + } + retObj.put(WxPayConstant.COUPON_ID, couponOrderIdStr); + retObj.put(WxPayConstant.IS_SELECTED, EnumPosSelect.SELECTED.getCode()); + retObj.put(WxPayConstant.TITLE, couponOrderCVo.getTitle()); + retObj.put(WxPayConstant.COUPON_TYPE, couponType.getMessage()); + retObj.put(WxPayConstant.COVER_IMG, couponOrderCVo.getCoverImg()); + retObj.put(WxPayConstant.PRICE, couponOrderCVo.getPrice()); + retObj.put(WxPayConstant.SALE_PRICE, couponOrderCVo.getSalePrice()); + retObj.put(WxPayConstant.COUPON_DES, String.format("过期时间: %s", mydateFormat.format(couponOrderCVo.getExpiredTime()))); + promotionCalc.setOrderAmount(couponOrderCVo.getPrice()); + promotionCalc.setOrderAmountLeft(couponOrderCVo.getPrice()); + promotionCalc.setPromotionAmount(couponOrderCVo.getPrice()); + promotionCalc.setAmountLeftAfterPay(0); + return retObj; + } + + /** + * 单券核销 + * @param promotionCalc + * @param merchantId + * @param couponOrderIdStr + * @return + */ + public JSONObject oneCouponVerify(PromotionCalc promotionCalc, String couponOrderIdStr, Long merchantId, Long buUserId, Long posOrderId) { + JSONObject retObj = new JSONObject(); + Date now = new Date(); + // 1. 获取券包信息 + WxCouponOrderCVo couponOrderCVo = checkAndGetCouponOrder(couponOrderIdStr, merchantId, now); + + // 2. 检查券类型 核销可用(4, 6, 8, 9) + EnumCouponType couponType = EnumCouponType.getEnum(couponOrderCVo.getCouponType()); + if (!(couponType.getCode().equals(EnumCouponType.COUPON_MULTIMCH.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_LIPIN.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_PRESS.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_GROUP.getCode())) + ) { + logger.error(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT.getMessage()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); + } + // 5. get coupon + WxCoupon wxCoupon = couponMapper.selectByPrimaryKey(couponOrderCVo.getCouponId()); + if (wxCoupon == null) { + logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrderCVo.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + + try { + doVerify(retObj, EnumPosActionType.VERIFY_INDEPENT, couponOrderCVo, wxCoupon, merchantId, buUserId, posOrderId); + } catch (MallinkException e) { + logger.error(e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(500, e.getMessage()); + } + retObj.put(WxPayConstant.COUPON_ID, couponOrderIdStr); + retObj.put(WxPayConstant.IS_SELECTED, EnumPosSelect.SELECTED.getCode()); + retObj.put(WxPayConstant.TITLE, couponOrderCVo.getTitle()); + retObj.put(WxPayConstant.COUPON_TYPE, couponType.getMessage()); + retObj.put(WxPayConstant.COVER_IMG, couponOrderCVo.getCoverImg()); + retObj.put(WxPayConstant.PRICE, couponOrderCVo.getPrice()); + retObj.put(WxPayConstant.SALE_PRICE, couponOrderCVo.getSalePrice()); + retObj.put(WxPayConstant.COUPON_DES, String.format("过期时间: %s", mydateFormat.format(couponOrderCVo.getExpiredTime()))); + promotionCalc.setOrderAmount(couponOrderCVo.getPrice()); + promotionCalc.setOrderAmountLeft(couponOrderCVo.getPrice()); + promotionCalc.setPromotionAmount(couponOrderCVo.getPrice()); + promotionCalc.setAmountLeftAfterPay(0); + return retObj; + } + + /** + * 券支付计算 + * @param promotionCalc + * @param couponOrderCVo + * @param couponSelected + * @return + */ + private JSONObject calcOneCouponPay(PromotionCalc promotionCalc, WxCouponOrderCVo couponOrderCVo, boolean couponSelected) { + JSONObject retObj = new JSONObject(); + Date now = new Date(); + + // 2. 检查券类型 支付可用(1, 2, 6), + EnumCouponType couponType = EnumCouponType.getEnum(couponOrderCVo.getCouponType()); + if (!(couponType.getCode().equals(EnumCouponType.COUPON_MULTIMCH.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_MANJIAN.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_DAIJIN.getCode()))) { + logger.error(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT.getMessage()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); + } + + // 3. 满减券检查使用金额 + if (couponType.equals(EnumCouponType.COUPON_MANJIAN)) { + if (promotionCalc.getOrderAmount() < couponOrderCVo.getUsePrice()) { + logger.error(ErrorCode.VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH.getMessage()); + throw new MallinkException(ErrorCode.VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH); + } + } + + // 4. 生成优惠券抵扣信息 + retObj.put(WxPayConstant.COUPON_ID, couponOrderCVo.getId().toString()); + retObj.put(WxPayConstant.TITLE, couponOrderCVo.getTitle()); + retObj.put(WxPayConstant.COUPON_TYPE, couponType.getMessage()); + retObj.put(WxPayConstant.COVER_IMG, couponOrderCVo.getCoverImg()); + retObj.put(WxPayConstant.PRICE, couponOrderCVo.getPrice()); + retObj.put(WxPayConstant.SALE_PRICE, couponOrderCVo.getSalePrice()); + if (couponType.equals(EnumCouponType.COUPON_MANJIAN)) { + retObj.put(WxPayConstant.USE_PRICE, couponOrderCVo.getSalePrice()); + String des = String.format("%s-满%s元可用,可抵%s元, 过期时间: %s", + couponType.getMessage(), couponOrderCVo.getUsePriceStr(), couponOrderCVo.getPriceStr(), + mydateFormat.format(couponOrderCVo.getExpiredTime())); + retObj.put(WxPayConstant.COUPON_DES, des); + } else { + String des = String.format("%s-可抵%s元, 过期时间: %s", + couponType.getMessage(), couponOrderCVo.getPriceStr(), + mydateFormat.format(couponOrderCVo.getExpiredTime())); + retObj.put(WxPayConstant.COUPON_DES, des); + } + if (couponSelected) { + retObj.put(WxPayConstant.IS_SELECTED, String.valueOf(EnumPosSelect.SELECTED.getCode())); + Integer remainAmount = promotionCalc.getAmountLeftAfterPay() - couponOrderCVo.getPrice(); + if (remainAmount < 0) { + remainAmount = 0; + } + Integer discountAmount = promotionCalc.getAmountLeftAfterPay() - remainAmount; + promotionCalc.setPromotionAmount(discountAmount); + promotionCalc.setAmountLeftAfterPay(remainAmount); + } + return retObj; + } + + /** + * 券支付计算 + * @param promotionCalc + * @param couponOrderCVo + * @param couponSelected + * @return + */ + private JSONObject oneCouponPay(PromotionCalc promotionCalc, WxCouponOrderCVo couponOrderCVo, Long merchantId, Long buUserId, Long posOrderId, boolean couponSelected) { + JSONObject retObj = new JSONObject(); + Date now = new Date(); + + // 2. 检查券类型 支付可用(1, 2, 6), + EnumCouponType couponType = EnumCouponType.getEnum(couponOrderCVo.getCouponType()); + if (!(couponType.getCode().equals(EnumCouponType.COUPON_MULTIMCH.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_MANJIAN.getCode()) || + couponType.getCode().equals(EnumCouponType.COUPON_DAIJIN.getCode()))) { + logger.error(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT.getMessage()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); + } + + // 3. 满减券检查使用金额 + if (couponType.equals(EnumCouponType.COUPON_MANJIAN) && couponSelected) { + if (promotionCalc.getOrderAmount() < couponOrderCVo.getUsePrice()) { + logger.error(ErrorCode.VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH.getMessage()); + throw new MallinkException(ErrorCode.VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH); + } + } + + // 4. 生成优惠券抵扣信息 + retObj.put(WxPayConstant.COUPON_ID, couponOrderCVo.getId().toString()); + retObj.put(WxPayConstant.TITLE, couponOrderCVo.getTitle()); + retObj.put(WxPayConstant.COUPON_TYPE, couponType.getMessage()); + retObj.put(WxPayConstant.COVER_IMG, couponOrderCVo.getCoverImg()); + retObj.put(WxPayConstant.PRICE, couponOrderCVo.getPrice()); + retObj.put(WxPayConstant.SALE_PRICE, couponOrderCVo.getSalePrice()); + if (couponType.equals(EnumCouponType.COUPON_MANJIAN)) { + retObj.put(WxPayConstant.USE_PRICE, couponOrderCVo.getSalePrice()); + String des = String.format("%s-满%s元可用,可抵%s元, 过期时间: %s", + couponType.getMessage(), couponOrderCVo.getUsePriceStr(), couponOrderCVo.getPriceStr(), + mydateFormat.format(couponOrderCVo.getExpiredTime())); + retObj.put(WxPayConstant.COUPON_DES, des); + } else { + String des = String.format("%s-可抵%s元, 过期时间: %s", + couponType.getMessage(), couponOrderCVo.getPriceStr(), + mydateFormat.format(couponOrderCVo.getExpiredTime())); + retObj.put(WxPayConstant.COUPON_DES, des); + } + if (couponSelected) { + // 5. get coupon + WxCoupon wxCoupon = couponMapper.selectByPrimaryKey(couponOrderCVo.getCouponId()); + if (wxCoupon == null) { + logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrderCVo.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + try { + doVerify(retObj, EnumPosActionType.VERIFY_PAY, couponOrderCVo, wxCoupon, merchantId, buUserId, posOrderId); + } catch (MallinkException e) { + logger.error(e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(500, e.getMessage()); + } + retObj.put(WxPayConstant.IS_SELECTED, String.valueOf(EnumPosSelect.SELECTED.getCode())); + Integer remainAmount = promotionCalc.getAmountLeftAfterPay() - couponOrderCVo.getPrice(); + if (remainAmount < 0) { + remainAmount = 0; + } + Integer discountAmount = promotionCalc.getAmountLeftAfterPay() - remainAmount; + promotionCalc.setPromotionAmount(discountAmount); + promotionCalc.setAmountLeftAfterPay(remainAmount); + } + return retObj; + } + + private WxCouponOrderCVo checkAndGetCouponOrder(String couponOrderIdStr, Long merchantId, Date currDate) { + // 1, 获取券包信息 + WxCouponOrderCVo couponOrderCVo = couponOrderService.detailCUserVo(couponOrderIdStr); + if (couponOrderCVo == null) { + logger.error(ErrorCode.COUPON_ORDER_IS_NULL.getMessage() + ": " + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + // 2. 券包状态检查 + if (couponOrderCVo.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { + logger.error("已过期: couponOrder-" + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); + } + if (couponOrderCVo.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { + logger.error("已作废: couponOrder-" + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); + } + if (couponOrderCVo.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { + logger.error("已经核销过的券: couponOrder-" + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); + } + // 3. 检查有效期 + if (couponOrderCVo.getValidStartDate() != null && couponOrderCVo.getValidEndDate() != null) { + if (couponOrderCVo.getValidStartDate().getTime() > currDate.getTime()) { + logger.error("此券有效期未开始:" + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (couponOrderCVo.getValidEndDate().getTime() < currDate.getTime()) { + logger.error("此券有效期已结束:" + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + } + // 4 券已过期 + if (couponOrderCVo.getExpiredTime().before(currDate)) { + logger.error("此券已过期:" + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + + Long couponOrderId = couponOrderCVo.getId(); + + // 5. 检查适用门店 + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.setProductId(couponOrderCVo.getCouponId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + List couponMerchantList = couponMerchantMapper.findList(wxCouponMerchant); + if (!couponMerchantList.stream().anyMatch(cm->cm.getMerchantId().equals(merchantId))){ + logger.error("券: coupon-" + couponOrderCVo.getCouponId() + "核销: couponMerchantId-" + merchantId + " 门店不适用"); + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + return couponOrderCVo; + } + + private WxCUser getMemUser(String tenantId, String memIdStr, String memPhoneStr) { + WxCUser user = null; + if (StringUtils.isNotBlank(memIdStr)) { + Long memId; + try { + memId = Long.valueOf(memIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); + } + + user = cUserService.getById(memId); + } + if (StringUtils.isNotBlank(memPhoneStr)) { + WxCUser q = new WxCUser(); + q.setTenantId(tenantId); + q.setPhone(memPhoneStr); + user = cUserService.getByObject(q); + } + return user; + } + + /** + * 会员折扣 + * @param promotionCalc + * @param discountConfig + * @param tenantId + * @param user + * @param merchantId + * @return + */ + private JSONObject getMemLevelDiscount(PromotionCalc promotionCalc, Integer discountConfig, String tenantId, WxCUser user, Long merchantId) { + JSONObject discountObj = new JSONObject(); + Integer discount = 100; + if (discountConfig.equals(EnumPosEnableType.Enable.getCode())) { + String level = WxLevelConfigService.DEFAULT_LEVEL; + // 1. 会员级别Level + List levelList = levelConfigService.getByTenantId(tenantId); + Long levelId = 0L; + for (WxLevelConfig levelConfig : levelList) { + if (user.getScore() >= levelConfig.getPoints()) { + if (levelConfig.getDiscountEnable().equals(EnumLevelConfigDiscountStatus.ENABLE.getCode())) + levelId = levelConfig.getId(); + level = levelConfig.getLevel(); + } + } + + // 2. 会员级别对应折扣discount + WxLevelMerchant levelMerchant = new WxLevelMerchant(); + levelMerchant.setTenantId(tenantId); + levelMerchant.setLevelId(levelId); + levelMerchant.setMerchantId(merchantId); + List levelMerchantList = levelConfigService.findListCVo(levelMerchant); + if (levelMerchantList.size() >= 1) { + WxLevelMerchantCVo levelMerchantCVo = levelMerchantList.get(0); + if (levelMerchantCVo != null) { + discount = levelMerchantCVo.getDiscount(); + } + } + + discountObj.put(WxPayConstant.LEVEL, level); + discountObj.put(WxPayConstant.DISCOUNT_DES, level); + discountObj.put(WxPayConstant.DISCOUNT, discount); + } else { + discountObj.put(WxPayConstant.DISCOUNT, discount); + discountObj.put(WxPayConstant.DISCOUNT_DES, "不支持会员折扣"); + } + + // 13. 计算折扣及剩余支付金额(四舍五入) + Double remainAmountD = promotionCalc.getAmountLeftAfterPay() * 1.0D * discount / 100; + Integer remainAmount = Long.valueOf(Math.round(remainAmountD)).intValue(); + Integer discountAmount = promotionCalc.getAmountLeftAfterPay() - remainAmount; + + discountObj.put(WxPayConstant.ORDER_AMOUNT, promotionCalc.getOrderAmount()); + discountObj.put(WxPayConstant.ORDER_AMOUNT_LEFT, promotionCalc.getOrderAmountLeft()); + discountObj.put(WxPayConstant.DISCOUNT_AMOUNT, String.valueOf(discountAmount)); + discountObj.put(WxPayConstant.REMAIN_AMOUNT, String.valueOf(remainAmount)); + promotionCalc.setPromotionAmount(discountAmount); + promotionCalc.setAmountLeftAfterPay(remainAmount); + return discountObj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject couponOrderVerify(Map params) throws MallinkException { + JSONObject dataMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID + String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 交易场景 + String orderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String orderCreateSN = params.get(WxPayConstant.ORDER_CREATE_SN); // POS SN号 + String coListStr = params.get(WxPayConstant.COUPON_ORDER_LIST); // 优惠券列表 + + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } else { + dataMap.put(WxPayConstant.TENANT_ID, tenantId); + } + if (StringUtils.isBlank(merchantIdStr)) { + errParam(WxPayConstant.MERCHANT_ID); + } else { + dataMap.put(WxPayConstant.MERCHANT_ID, merchantIdStr); + } + if (StringUtils.isBlank(buUserIdStr)) { + errParam(WxPayConstant.BUSER_ID); + } else { + dataMap.put(WxPayConstant.BUSER_ID, buUserIdStr); + } + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } else { + dataMap.put(WxPayConstant.SCENE_TYPE, sceneTypeStr); + } + if (StringUtils.isBlank(orderIdStr)) { + errParam(WxPayConstant.POS_ORDER_ID); + } else { + dataMap.put(WxPayConstant.POS_ORDER_ID, orderIdStr); + } + if (StringUtils.isBlank(orderCreateSN)) { + errParam(WxPayConstant.ORDER_CREATE_SN); + } else { + dataMap.put(WxPayConstant.ORDER_CREATE_SN, orderCreateSN); + } + + // 0. 场景 + Integer iSceneType; + try { + iSceneType = Integer.valueOf(sceneTypeStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + // 1. POS 支持 配置 + PosMallConfig config = posMallConfigService.getByTenantId(tenantId); + if (config == null) { + logger.error(ErrorCode.POS_CONFIG_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_NOT_FOUND); + } + + // 2. 商户ID, B端用户ID + Long merchantId, buUserId, posOrderId; + try { + merchantId = Long.valueOf(merchantIdStr); + buUserId = Long.valueOf(buUserIdStr); + posOrderId = Long.valueOf(orderIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + // 3. check merchant + WxMerchant merchant = checkAndGetMerchant(merchantId); + // 4. check buUser + WxMerchantBUser buUser = checkAndGetMerchantUser(buUserId, merchantId); + + EnumPosSceneType sceneType = EnumPosSceneType.getEnum(iSceneType); + JSONObject promotionData = new JSONObject(); + JSONObject promotionInfo = new JSONObject(); + JSONObject promotionPayment = new JSONObject(); + PromotionCalc promotionCalc = new PromotionCalc(); + if (sceneType.equals(EnumPosSceneType.VERIFY)) { + if (config.getCoupon().equals(EnumPosCouponEnableType.Disable.getCode())) { + logger.error(ErrorCode.POS_CONFIG_MEM_COUPON_DISABLE.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_MEM_COUPON_DISABLE); + } + JSONObject promotionCoupon = new JSONObject(); + JSONArray couponList = new JSONArray(); + if (StringUtils.isBlank(coListStr)) { + errParam(WxPayConstant.COUPON_ORDER_LIST); + } + JSONArray couponOrderArr = JSON.parseArray(coListStr); + if (couponOrderArr.size() != 1) { + String errMessage = "核销只能使用一张券"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), errMessage); + } + String couponOrderIdStr = couponOrderArr.getString(0); + if (couponOrderIdStr != null) { + try { + JSONObject couponPromoMap = oneCouponVerify(promotionCalc, couponOrderIdStr, merchantId, buUserId, posOrderId); + couponList.add(couponPromoMap); + } catch (MallinkException e) { + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + throw new MallinkException(500, e.getMessage()); + } + } + promotionCoupon.put(WxPayConstant.COUPON_ORDER_LIST, couponList); + // 券优惠总信息 + promotionCoupon.put(WxPayConstant.COUPON_PROMOTION_AMOUNT, promotionCalc.getPromotionAmount()); + promotionInfo.put(WxPayConstant.COUPON, promotionCoupon); + } else if(sceneType.equals(EnumPosSceneType.PAY)) { + JSONObject promotionCoupon = new JSONObject(); + JSONArray couponList = new JSONArray(); + + String memIdStr = params.get(WxPayConstant.MEM_ID); // 会员ID + String memPhoneStr = params.get(WxPayConstant.MEM_PHONE); // 会员手机 + String orderAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额(单位:分) + String orderAmountLeftStr = params.get(WxPayConstant.ORDER_AMOUNT_LEFT); // POS订单金额(单位:分) + if (StringUtils.isBlank(orderAmountStr)) { + errParam(WxPayConstant.ORDER_AMOUNT); + } else { + dataMap.put(WxPayConstant.ORDER_AMOUNT, orderAmountStr); + } + if (StringUtils.isBlank(orderAmountLeftStr)) { + errParam(WxPayConstant.ORDER_AMOUNT_LEFT); + } else { + dataMap.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmountLeftStr); + } + if (StringUtils.isBlank(memIdStr) && StringUtils.isBlank(memPhoneStr)) { + errParam2(WxPayConstant.MEM_ID, WxPayConstant.MEM_PHONE); + } + // 10. 获取会员信息 + WxCUser user = getMemUser(tenantId, memIdStr, memPhoneStr); + if (user == null) { + logger.error(ErrorCode.USER_NOT_MEMBER.getMessage()); + throw new MallinkException(ErrorCode.USER_NOT_MEMBER); + } + if (user != null) { + dataMap.put(WxPayConstant.MEM_ID, user.getId().toString()); + dataMap.put(WxPayConstant.MEM_PHONE, user.getPhone()); + } + // 11. 订单金额 + Integer orderAmount, orderAmountLeft; + try { + orderAmount = Integer.valueOf(orderAmountStr); + orderAmountLeft = Integer.valueOf(orderAmountLeftStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + promotionCalc.setOrderAmount(orderAmount); + promotionCalc.setOrderAmountLeft(orderAmountLeft); + promotionCalc.setPromotionAmount(0); + promotionCalc.setAmountLeftAfterPay(orderAmountLeft); + // 12. 会员折扣 + JSONObject discountObj = getMemLevelDiscount(promotionCalc, config.getDiscount(), tenantId, user, merchantId); + promotionInfo.put(WxPayConstant.MEMBER_DISCOUNT, discountObj); + // 14. 获取用户可用券列表 + if (!config.getCoupon().equals(EnumPosCouponEnableType.Disable.getCode())) { + Map coQ = new HashMap<>(); + coQ.put("tenantId", tenantId); + coQ.put("cUserId", user.getId()); + coQ.put("merchantId", merchantId); + List avaCoList = couponOrderMapper.findAvailCouponOrder(coQ); + JSONArray selCoArr = JSONObject.parseArray(coListStr); + if (config.getCoupon().equals(EnumPosCouponEnableType.SingleEnable.getCode())) { + if (selCoArr.size() > 1) { + String errMessage = "支付只能使用一张券"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.POS_COUPON_PAY_ERROR.getCode(), errMessage); + } + } + if (config.getCoupon().equals(EnumPosCouponEnableType.SingleEnable.getCode()) || + config.getCoupon().equals(EnumPosCouponEnableType.MultiEnable.getCode())) { + for (int i = 0; i < avaCoList.size(); i++) { + WxCouponOrderCVo couponOrderCVo = avaCoList.get(i); + boolean selCoupon = isSelCoupon(selCoArr, couponOrderCVo.getId()); + try { + JSONObject couponObj = oneCouponPay(promotionCalc, couponOrderCVo, merchantId, buUserId, posOrderId, selCoupon); + couponList.add(couponObj); + } catch (MallinkException e) { + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + throw new MallinkException(500, e.getMessage()); + } + } + } + } + promotionCoupon.put(WxPayConstant.COUPON_ORDER_LIST, couponList); + // 券优惠总信息 + promotionCoupon.put(WxPayConstant.COUPON_PROMOTION_AMOUNT, promotionCalc.getPromotionAmount()); + promotionInfo.put(WxPayConstant.COUPON, promotionCoupon); + } + // 构造支付信息 + promotionPayment.put(WxPayConstant.ORDER_AMOUNT, promotionCalc.getOrderAmount()); + promotionPayment.put(WxPayConstant.ORDER_AMOUNT_LEFT, promotionCalc.getOrderAmountLeft()); + promotionPayment.put(WxPayConstant.PROMOTION_AMOUNT, promotionCalc.getPromotionAmount()); + promotionPayment.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, promotionCalc.getAmountLeftAfterPay()); + promotionData.put(WxPayConstant.PAYMENT_PREDICTION, promotionPayment); + promotionData.put(WxPayConstant.PROMOTION_INFO, promotionInfo); + dataMap.put(WxPayConstant.PROMOTION_DATA, JSON.toJSONString(promotionData)); + return dataMap; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject couponOrderVerifyCancel(Map params) { + JSONObject retMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID + String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 交易场景 + String orderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String orderCreateSN = params.get(WxPayConstant.ORDER_CREATE_SN); // POS SN号 + String paymentInfoStr = params.get(WxPayConstant.PAYMENT_INFO); // 优惠信息 + + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } else { + retMap.put(WxPayConstant.TENANT_ID, tenantId); + } + if (StringUtils.isBlank(merchantIdStr)) { + errParam(WxPayConstant.MERCHANT_ID); + } else { + retMap.put(WxPayConstant.MERCHANT_ID, merchantIdStr); + } + if (StringUtils.isBlank(buUserIdStr)) { + errParam(WxPayConstant.BUSER_ID); + } else { + retMap.put(WxPayConstant.BUSER_ID, buUserIdStr); + } + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } else { + retMap.put(WxPayConstant.SCENE_TYPE, sceneTypeStr); + } + if (StringUtils.isBlank(orderIdStr)) { + errParam(WxPayConstant.POS_ORDER_ID); + } else { + retMap.put(WxPayConstant.POS_ORDER_ID, orderIdStr); + } + if (StringUtils.isBlank(orderCreateSN)) { + errParam(WxPayConstant.ORDER_CREATE_SN); + } else { + retMap.put(WxPayConstant.ORDER_CREATE_SN, orderCreateSN); + } + if (StringUtils.isBlank(paymentInfoStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + + Integer iSceneType; + try { + iSceneType = Integer.valueOf(sceneTypeStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + Long merchantId, buUserId, posOrderId = 0L; + try { + merchantId = Long.valueOf(merchantIdStr); + buUserId = Long.valueOf(buUserIdStr); + posOrderId = Long.valueOf(orderIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + // 2. check merchant + WxMerchant merchant = checkAndGetMerchant(merchantId); + // 3. check buUser + WxMerchantBUser buUser = checkAndGetMerchantUser(buUserId, merchantId); + + JSONObject paymentInfo = JSON.parseObject(paymentInfoStr); + if (paymentInfo == null) { + errParam(WxPayConstant.PAYMENT_INFO); + } + String couponOrderIdStr = paymentInfo.getString(WxPayConstant.COUPON_ID); + if (StringUtils.isBlank(couponOrderIdStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + // 4. check couponOrderId + WxCouponOrderCVo couponOrderCVo = couponOrderService.detailCUserVo(couponOrderIdStr); + if (couponOrderCVo == null) { + logger.error(ErrorCode.COUPON_ORDER_IS_NULL.getMessage() + ": " + couponOrderIdStr); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + if (couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode())) { + logger.error("券包ID: " + couponOrderCVo.getId() + "未核销"); + throw new MallinkException(ErrorCode.POS_COUPON_ORDER_NOT_VERIFY); + } + // 5. 检查适用门店 + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.setProductId(couponOrderCVo.getCouponId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + List couponMerchantList = couponMerchantMapper.findList(wxCouponMerchant); + if (!couponMerchantList.stream().anyMatch(cm->cm.getMerchantId().equals(merchantId))){ + logger.error("券: coupon-" + couponOrderCVo.getCouponId() + "核销: couponMerchantId-" + merchantIdStr + " 门店不适用"); + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + // 5. 核销后无法反向 + WxCoupon coupon = couponMapper.selectByPrimaryKey(couponOrderCVo.getCouponId()); + if (coupon.getSalePrice() > 0 || + (coupon.getSubsidyType() > EnumCouponSubsidyType.NO_SUBSIDY.getCode() && coupon.getSubsidyNum() > 0)) { + logger.error("券包ID: " + couponOrderIdStr + "核销无法退回"); + throw new MallinkException(ErrorCode.POS_COUPON_ORDER_VERIFY_NOT_CANCEL); + } + + WxCouponOrder couponOrder = new WxCouponOrder(); + couponOrder.setId(couponOrderCVo.getId()); + // 6. 核销撤销 + if (iSceneType.equals(EnumPosSceneType.VERIFY.getCode()) && + couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode())) { + logger.info("券已被核销无法取消: " + couponOrderIdStr); + JSONObject refundObj = new JSONObject(); + String errMesg = String.format("此券核销后无法退回, 券%s抵用%s元, 购买花费%s元", + couponOrderIdStr, couponOrderCVo.getPriceStr(), couponOrderCVo.getSalePriceStr()); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, couponOrderIdStr); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, "0"); + refundObj.put(WxPayConstant.REFUND_RESULT_MSG, errMesg); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + refundObj.put(WxPayConstant.PRICE, coupon.getPrice()); + refundObj.put(WxPayConstant.SALE_PRICE, coupon.getSalePrice()); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); + return retMap; + /* + try { + cancelVerify(couponOrderCVo, buUserId, posOrderId); + JSONObject refundObj = new JSONObject(); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, String.valueOf(couponOrderCVo.getId())); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, "0"); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT_MSG, "核销撤销成功"); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); + return retMap; + } catch (MallinkException e) { + logger.error(e.getMessage()); + JSONObject refundObj = new JSONObject(); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, String.valueOf(couponOrderCVo.getId())); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, e.getErrorCode()); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT_MSG, "核销撤销失败: " + e.getMessage()); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); + return retMap; + } + */ + } + // 6. 预核销取消 + else if (iSceneType.equals(EnumPosSceneType.PAY.getCode()) && + couponOrderCVo.getCouponOrderStatus().equals(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode())) { + logger.info("券已被预核销: " + couponOrderIdStr); + if (!couponOrderCVo.getBUserId().equals(buUserId)) { + logger.error(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL.getMessage() + ": " + buUserIdStr); + throw new MallinkException(ErrorCode.VERIFY_PRE_BUSER_NOT_EQUAL); + } + String memIdStr = params.get(WxPayConstant.MEM_ID); // 会员ID + String memPhoneStr = params.get(WxPayConstant.MEM_PHONE); // 会员手机 + String orderAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单金额(单位:分) + String orderAmountLeftStr = params.get(WxPayConstant.ORDER_AMOUNT_LEFT); // POS订单金额(单位:分) + String promotionAmountStr = paymentInfo.getString(WxPayConstant.PROMOTION_AMOUNT); + String amountLeftAfterPayStr = paymentInfo.getString(WxPayConstant.AMOUNT_LEFT_AFTER_PAY); + if (StringUtils.isBlank(orderAmountStr)) { + errParam(WxPayConstant.ORDER_AMOUNT); + } else { + retMap.put(WxPayConstant.ORDER_AMOUNT, orderAmountStr); + } + if (StringUtils.isBlank(orderAmountLeftStr)) { + errParam(WxPayConstant.ORDER_AMOUNT_LEFT); + } else { + retMap.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmountLeftStr); + } + if (StringUtils.isBlank(memIdStr) && StringUtils.isBlank(memPhoneStr)) { + errParam2(WxPayConstant.MEM_ID, WxPayConstant.MEM_PHONE); + } + if (StringUtils.isBlank(promotionAmountStr)) { + errParam(WxPayConstant.PROMOTION_AMOUNT); + } + if (StringUtils.isBlank(amountLeftAfterPayStr)) { + errParam(WxPayConstant.AMOUNT_LEFT_AFTER_PAY); + } + Integer promotionAmount, amountLeftAfterPay; + try { + promotionAmount = Integer.valueOf(promotionAmountStr); + amountLeftAfterPay = Integer.valueOf(amountLeftAfterPayStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(500, e.getMessage()); + } + if (!couponOrderCVo.getPrice().equals(promotionAmount)) { + String errMesg = String.format("券%s的金额与退款金额不一致", couponOrderIdStr); + logger.error(errMesg); + throw new MallinkException(ErrorCode.POS_COUPON_REFUND_ERROR.getCode(), errMesg); + } + // 10. 获取会员信息 + WxCUser user = getMemUser(tenantId, memIdStr, memPhoneStr); + if (user == null) { + logger.error(ErrorCode.USER_NOT_MEMBER.getMessage()); + throw new MallinkException(ErrorCode.USER_NOT_MEMBER); + } + if (user != null) { + retMap.put(WxPayConstant.MEM_ID, user.getId().toString()); + retMap.put(WxPayConstant.MEM_PHONE, user.getPhone()); + } + + try { + cancelPreVerify(couponOrderCVo, posOrderId); + JSONObject refundObj = new JSONObject(); + refundObj.put(WxPayConstant.COUPON_REFUND_ID, String.valueOf(couponOrderCVo.getId())); + refundObj.put(WxPayConstant.COUPON_REFUND_RESULT, "0"); + refundObj.put(WxPayConstant.REFUND_RESULT_MSG, "核销撤销成功"); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + refundObj.put(WxPayConstant.PROMOTION_AMOUNT, 0); + refundObj.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, amountLeftAfterPay + couponOrderCVo.getPrice()); + retMap.put(WxPayConstant.COUPON_REFUND_RESULT, JSON.toJSONString(refundObj)); + return retMap; + } catch (MallinkException e) { + logger.error(e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } + } + + String errMessage = String.format("核销撤销异常:券%s场景%s核销状态%d,不可撤销", couponOrderIdStr, sceneTypeStr, couponOrderCVo.getCouponOrderStatus()); + logger.error(errMessage); + throw new MallinkException(ErrorCode.POS_COUPON_REFUND_ERROR.getCode(), errMessage); + } + + /** + * 预核销 + * @param buUserId + * @param couponOrderCVo + * @param posOrderId + */ + private void doPreVerify(WxCouponOrderCVo couponOrderCVo, Long buUserId, Long posOrderId) { + int num = 0; + // 1. insert posOrderId + PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); + posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); + posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); + posCouponOrderVerify.setPosOrderId(posOrderId); + posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); + posCouponOrderVerify.setCreateDate(new Date()); + posCouponOrderVerify.setUpdateDate(new Date()); + try { + posCouponOrderVerifyService.saveOrUpdate(posCouponOrderVerify); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + + // 2. update couponOrder + try { + WxCouponOrder couponOrder = new WxCouponOrder(); + couponOrder.setId(couponOrderCVo.getId()); + couponOrder.setTenantId(couponOrderCVo.getTenantId()); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()); + couponOrder.setBUserId(buUserId); + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_POS_PAY.getCode()); + couponOrder.setUpdateDate(new Date()); + num = couponOrderMapper.updateVerifyCouponOrder(couponOrder); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + if (num != 1) { + logger.error("预核销异常:updatete num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + logger.info("预核销已完成: " + couponOrderCVo.getId()); + } + + /** + * 预核销回退 + * @param couponOrderCVo + * @param posOrderId + */ + private void cancelPreVerify(WxCouponOrderCVo couponOrderCVo, Long posOrderId) { + int num = 0; + // 1. update posOrderId + PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); + posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); + posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); + posCouponOrderVerify.setPosOrderId(posOrderId); + posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); + List posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerify); + if (posCouponOrderVerifyList.size() == 1) { + posCouponOrderVerify = posCouponOrderVerifyList.get(0); + if(posCouponOrderVerify != null) { + try { + posCouponOrderVerifyService.deleteById(posCouponOrderVerify.getId()); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + } + } else { + logger.error(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderId); + throw new MallinkException(ErrorCode.VERIFY_PRE_POS_ORDER_NOT_EQUAL); + } + + // 2. update couponOrder + try { + WxCouponOrder couponOrder = new WxCouponOrder(); + couponOrder.setId(couponOrderCVo.getId()); + couponOrder.setTenantId(couponOrderCVo.getTenantId()); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); + couponOrder.setUpdateDate(new Date()); + num = couponOrderMapper.cancelVerifyCouponOrder(couponOrder); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + if (num != 1) { + logger.error("预核销异常:updatete num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + logger.info("预核销已取消: " + couponOrderCVo.getId()); + } + + /** + * 核销 + * @param couponOrderCVo + * @param merchantId + * @param buUserId + * @param posOrderId + */ + private void doVerify(JSONObject retMap, EnumPosActionType actionType, WxCouponOrderCVo couponOrderCVo, WxCoupon coupon, + Long merchantId, Long buUserId, Long posOrderId) { + int num = 0; + // 1. insert posOrderId + PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); + posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); + posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); + posCouponOrderVerify.setPosOrderId(posOrderId); + posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); + try { + posCouponOrderVerifyService.saveOrUpdate(posCouponOrderVerify); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + // 2. update couponOrder + Date curDate = new Date(); + try { + WxCouponOrder couponOrder = new WxCouponOrder(); + couponOrder.setId(couponOrderCVo.getId()); + couponOrder.setTenantId(couponOrderCVo.getTenantId()); + if (actionType.equals(EnumPosActionType.VERIFY_INDEPENT)) { + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_POS_INDEPENDENT.getCode()); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + } else { + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_POS_PAY.getCode()); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()); + } + couponOrder.setBUserId(buUserId); + couponOrder.setUpdateDate(curDate); + if (couponOrderCVo.getBUserId() == null) { + num = couponOrderMapper.updateVerifyCouponOrder(couponOrder); + } else { + num = couponOrderMapper.updateVerifyCouponOrderStatus(couponOrder); + } + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + if (num != 1) { + logger.error("核销异常:update num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + logger.info("核销已完成: " + couponOrderCVo.getId()); + } + + private int posAddCredit(WxCouponOrderCVo couponOrderCVo, WxCoupon coupon, Long merchantId, Long buUserId) { + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + creditHistory.setOperatorId(buUserId); + creditHistory.setCUserId(couponOrderCVo.getcUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(couponOrderCVo.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setCouponId(couponOrderCVo.getCouponId()); + creditHistory.setBusinessId(coupon.getBusiness()); + creditHistory.setSpend(couponOrderCVo.getCouponPrice()); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(merchantId); + creditHistory = creditHistoryService.saveOrUpdate(creditHistory); + if (creditHistory.getCreditNum() != null) { + return creditHistory.getCreditNum(); + } else { + return 0; + } + } catch (Exception e) { + logger.error("核销积分值异常:" + e.getMessage()); + } + return 0; + } + + private int posAddCreditForPay(WxMerchant merchant, Long buUserId, Long memId, Integer payment) { + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + creditHistory.setOperatorId(buUserId); + creditHistory.setCUserId(memId); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(merchant.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setBusinessId(merchant.getBusinessId()); + creditHistory.setSpend(payment); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(merchant.getId()); + creditHistory = creditHistoryService.saveOrUpdate(creditHistory); + if (creditHistory.getCreditNum() != null) { + return creditHistory.getCreditNum(); + } else { + return 0; + } + } catch (Exception e) { + logger.error("核销积分值异常:" + e.getMessage()); + } + return 0; + } + + /** + * 核销回退 + * @param couponOrderCVo + * @param buUserId + * @param posOrderId + */ + private void cancelVerify(WxCouponOrderCVo couponOrderCVo, Long buUserId, Long posOrderId) { + // 1. 积分历史回退 + try { + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + creditHistory.setOperatorId(buUserId); + creditHistory.setCUserId(couponOrderCVo.getcUserId()); + creditHistory.setTenantId(couponOrderCVo.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setCouponId(couponOrderCVo.getCouponId()); + int num = creditHistoryService.cancelCredit(creditHistory); + if (num <= 1) { + logger.warn("核销积分历史回退: " + creditHistory.toString()); + } + } catch (Exception e) { + String errMessage = "核销积分历史回退:" + e.getMessage(); + logger.error(errMessage); + throw new MallinkException(500, errMessage); + } + // 2. 成长值历史回退 + try { + WxScoreHistory scoreHistory = new WxScoreHistory(); + scoreHistory.setTenantId(couponOrderCVo.getTenantId()); + scoreHistory.setScoreType(EnumScoreType.CONSUMPTION.getCode()); + scoreHistory.setCUserId(couponOrderCVo.getcUserId()); + scoreHistory.setOrderId(couponOrderCVo.getOrderId()); + int num = scoreRulesService.cancelScore(scoreHistory); + if (num <= 1) { + logger.warn("核销成长值历史回退: " + scoreHistory.toString()); + } + } catch (Exception e) { + String errMessage = "核销成长值历史回退:" + e.getMessage(); + logger.error(errMessage); + throw new MallinkException(500, errMessage); + } + + // 3. update posOrderId + PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); + posCouponOrderVerify.setTenantId(couponOrderCVo.getTenantId()); + posCouponOrderVerify.setCouponOrderId(couponOrderCVo.getId()); + posCouponOrderVerify.setPosOrderId(posOrderId); + posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); + List posCouponOrderVerifyList = posCouponOrderVerifyService.getList(posCouponOrderVerify); + if (posCouponOrderVerifyList.size() == 1) { + posCouponOrderVerify = posCouponOrderVerifyList.get(0); + if (posCouponOrderVerify != null) { + try { + posCouponOrderVerifyService.deleteById(posCouponOrderVerify.getId()); + } catch(Exception e){ + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + } + } else { + logger.error(ErrorCode.VERIFY_POS_ORDER_NOT_EQUAL.getMessage() + ": " + posOrderId); + throw new MallinkException(ErrorCode.VERIFY_POS_ORDER_NOT_EQUAL); + } + // 4. update couponOrder + int num = 0; + try { + WxCouponOrder couponOrder = new WxCouponOrder(); + couponOrder.setId(couponOrderCVo.getId()); + couponOrder.setTenantId(couponOrderCVo.getTenantId()); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); + couponOrder.setUpdateDate(new Date()); + num = couponOrderMapper.cancelVerifyCouponOrder(couponOrder); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrderCVo.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + if (num != 1) { + logger.error("核销异常:updatete num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + logger.info("核销已取消: " + couponOrderCVo.getId()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject cardPayPre(Map params) throws MallinkException { + JSONObject retMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID + String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID + String memIdStr = params.get(WxPayConstant.MEM_ID); // 会员ID + String memPhoneStr = params.get(WxPayConstant.MEM_PHONE); // 会员手机 + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 交易场景 + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String orderAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单总额(单位:分) + String orderAmountLeftStr = params.get(WxPayConstant.ORDER_AMOUNT_LEFT); // 本次需要支付的订单金额(单位:分) + String cardIdStr = params.get(WxPayConstant.CARD_ID); // 消费卡ID + String amountByCardStr = params.get(WxPayConstant.AMOUNT_PAID_BY_CARD); // 预付卡支付金额 + + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } else { + retMap.put(WxPayConstant.TENANT_ID, tenantId); + } + PosMallConfig config = posMallConfigService.getByTenantId(tenantId); + if (config == null) { + logger.error(ErrorCode.POS_CONFIG_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_NOT_FOUND); + } + if (config.getCard().equals(EnumPosEnableType.Disable.getCode())) { + logger.error(ErrorCode.POS_CONFIG_MEM_CARD_DISABLE.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_MEM_CARD_DISABLE); + } + if (StringUtils.isBlank(merchantIdStr)) { + errParam(WxPayConstant.MERCHANT_ID); + } else { + retMap.put(WxPayConstant.MERCHANT_ID, merchantIdStr); + } + if (StringUtils.isBlank(buUserIdStr)) { + errParam(WxPayConstant.BUSER_ID); + } else { + retMap.put(WxPayConstant.BUSER_ID, buUserIdStr); + } + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } else { + retMap.put(WxPayConstant.SCENE_TYPE, sceneTypeStr); + } + if (!sceneTypeStr.equals(EnumPosSceneType.PAY.getCode().toString())) { + logger.error(ErrorCode.POS_CARD_ONLY_SUPPORT_PAY.getMessage()); + throw new MallinkException(ErrorCode.POS_CARD_ONLY_SUPPORT_PAY); + } + if (StringUtils.isBlank(posOrderIdStr)) { + errParam(WxPayConstant.POS_ORDER_ID); + } else { + retMap.put(WxPayConstant.POS_ORDER_ID, posOrderIdStr); + } + if (StringUtils.isBlank(orderAmountStr)) { + errParam(WxPayConstant.ORDER_AMOUNT); + } else { + retMap.put(WxPayConstant.ORDER_AMOUNT, orderAmountStr); + } + if (StringUtils.isBlank(orderAmountLeftStr)) { + errParam(WxPayConstant.ORDER_AMOUNT_LEFT); + } else { + retMap.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmountLeftStr); + } + if (StringUtils.isBlank(cardIdStr)) { + errParam(WxPayConstant.CARD_ID); + } else { + retMap.put(WxPayConstant.CARD_ID, cardIdStr); + } + if (StringUtils.isBlank(amountByCardStr)) { + errParam(WxPayConstant.AMOUNT_PAID_BY_CARD); + } else { + retMap.put(WxPayConstant.AMOUNT_PAID_BY_CARD, amountByCardStr); + } + + Long merchantId, buUserId, posOrderId, cardId; + Integer amountByCard = 0; + try { + merchantId = Long.valueOf(merchantIdStr); + buUserId = Long.valueOf(buUserIdStr); + posOrderId = Long.valueOf(posOrderIdStr); + amountByCard = Integer.valueOf(amountByCardStr); + cardId = Long.valueOf(cardIdStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); + } + // 2. check merchant + WxMerchant merchant = checkAndGetMerchant(merchantId); + // 3. check buUser + WxMerchantBUser buUser = checkAndGetMerchantUser(buUserId, merchantId); + + WxCouponOrder couponOrder = couponOrderService.getById(cardId); + if(couponOrder == null) { + logger.error("卡不存在: " + cardIdStr); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + if (StringUtils.isNotBlank(memIdStr) || StringUtils.isNotBlank(memPhoneStr)) { + WxCUser cuUser = getMemUser(tenantId, memIdStr, memPhoneStr); + if (cuUser == null) { + logger.error(ErrorCode.USER_NOT_MEMBER.getMessage()); + throw new MallinkException(ErrorCode.USER_NOT_MEMBER); + } + if (couponOrder.getOwnerId().equals(cuUser.getId())) { + logger.error(ErrorCode.POS_CARD_OWNER_NOT_EQUAL.getMessage()); + throw new MallinkException(ErrorCode.POS_CARD_OWNER_NOT_EQUAL); + } + } + + WxCardInfo cardInfo = checkAndGetCardinfo(cardId, merchantId); + + if(amountByCard > cardInfo.getRemainingAmount()) { + logger.error("卡余额不足: " + cardIdStr); + throw new MallinkException(ErrorCode.CARD_REMAIN_AMOUNT_IS_NOT_ENOUGH); + } + + WxCardSpend record = new WxCardSpend(); + record.setPayFrom(EnumCardSpendFrom.POS.getCode()); + record.setTenantId(merchant.getTenantId()); + record.setCardId(cardId); + record.setOwnerId(couponOrder.getOwnerId()); + record.setMerchantId(merchantId); + record.setPosOrderId(posOrderId); + record.setDeductionAmount(amountByCard); + + try { + WxCardSpend cardSpend = cardSpendService.cardSpendForPosPrePay(record); + JSONObject cardPaymentObj = new JSONObject(); + cardPaymentObj.put(WxPayConstant.CARD_ID, cardId); + cardPaymentObj.put(WxPayConstant.CARD_AMOUNT_BEFORE_PAY, cardSpend.getCardBeforeAmount()); + cardPaymentObj.put(WxPayConstant.PAYMENT_AMOUNT, cardSpend.getPayment()); + cardPaymentObj.put(WxPayConstant.CARD_AMOUNT_AFTER_PAY, cardSpend.getCardRemainAmount()); + cardPaymentObj.put(WxPayConstant.CARD_SPEND_ID, cardSpend.getId().toString()); + cardPaymentObj.put(WxPayConstant.CARD_SPEND_TIME, neuDateFormat.format(cardSpend.getCreateDate())); + retMap.put(WxPayConstant.CARD_PAYMENT_DATA, JSON.toJSONString(cardPaymentObj)); + } catch (MallinkException e) { + logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("card spend error, req 3: " + record.toString() + ", e:" + e.getMessage()); + throw new MallinkException(500, e.getMessage()); + } + + return retMap; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject cardPayPreCancel(@RequestBody Map params) throws MallinkException { + JSONObject retMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID + String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 交易场景 + String orderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String orderAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单总额(单位:分) + String orderAmountLeftStr = params.get(WxPayConstant.ORDER_AMOUNT_LEFT); // 本次需要支付的剩余金额 + String orderCreateSN = params.get(WxPayConstant.ORDER_CREATE_SN); // POS SN号 + String paymentInfoStr = params.get(WxPayConstant.PAYMENT_INFO); // 优惠信息 + + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } else { + retMap.put(WxPayConstant.TENANT_ID, tenantId); + } + PosMallConfig config = posMallConfigService.getByTenantId(tenantId); + if (config == null) { + logger.error(ErrorCode.POS_CONFIG_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_NOT_FOUND); + } + if (config.getCard().equals(EnumPosEnableType.Disable.getCode())) { + logger.error(ErrorCode.POS_CONFIG_MEM_CARD_DISABLE.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_MEM_CARD_DISABLE); + } + if (StringUtils.isBlank(merchantIdStr)) { + errParam(WxPayConstant.MERCHANT_ID); + } else { + retMap.put(WxPayConstant.MERCHANT_ID, merchantIdStr); + } + if (StringUtils.isBlank(buUserIdStr)) { + errParam(WxPayConstant.BUSER_ID); + } else { + retMap.put(WxPayConstant.BUSER_ID, buUserIdStr); + } + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } else { + retMap.put(WxPayConstant.SCENE_TYPE, sceneTypeStr); + } + if (!sceneTypeStr.equals(EnumPosSceneType.PAY.getCode().toString())) { + logger.error(ErrorCode.POS_CARD_ONLY_SUPPORT_PAY.getMessage()); + throw new MallinkException(ErrorCode.POS_CARD_ONLY_SUPPORT_PAY); + } + if (StringUtils.isBlank(orderIdStr)) { + errParam(WxPayConstant.POS_ORDER_ID); + } else { + retMap.put(WxPayConstant.POS_ORDER_ID, orderIdStr); + } + if (StringUtils.isBlank(orderAmountStr)) { + errParam(WxPayConstant.ORDER_AMOUNT); + } else { + retMap.put(WxPayConstant.ORDER_AMOUNT, orderAmountStr); + } + if (StringUtils.isBlank(orderAmountLeftStr)) { + errParam(WxPayConstant.ORDER_AMOUNT_LEFT); + } else { + retMap.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderCreateSN); + } + if (StringUtils.isBlank(orderCreateSN)) { + errParam(WxPayConstant.ORDER_CREATE_SN); + } else { + retMap.put(WxPayConstant.ORDER_CREATE_SN, orderAmountLeftStr); + } + if (StringUtils.isBlank(paymentInfoStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + + JSONObject paymentInfo = JSON.parseObject(paymentInfoStr); + if (paymentInfo == null) { + errParam(WxPayConstant.PAYMENT_INFO); + } + String cardIdStr = paymentInfo.getString(WxPayConstant.CARD_ID); + if (StringUtils.isBlank(cardIdStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + String cardSpendIdStr = paymentInfo.getString(WxPayConstant.CARD_SPEND_ID); + if (StringUtils.isBlank(cardSpendIdStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + String amountPaidByCardStr = paymentInfo.getString(WxPayConstant.AMOUNT_PAID_BY_CARD); + if (StringUtils.isBlank(amountPaidByCardStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + String amountLeftAfterPayStr = paymentInfo.getString(WxPayConstant.AMOUNT_LEFT_AFTER_PAY); + if (StringUtils.isBlank(amountLeftAfterPayStr)) { + errParam(WxPayConstant.PAYMENT_INFO); + } + + Long merchantId, buUserId, posOrderId, cardId, cardSpendId; + Integer amountPaidByCard, amountLeftAfterPay; + try { + merchantId = Long.valueOf(merchantIdStr); + buUserId = Long.valueOf(buUserIdStr); + posOrderId = Long.valueOf(orderIdStr); + cardId = Long.valueOf(cardIdStr); + cardSpendId = Long.valueOf(cardSpendIdStr); + amountPaidByCard = Integer.valueOf(amountLeftAfterPayStr); + amountLeftAfterPay = Integer.valueOf(amountLeftAfterPayStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); + } + // 2. check merchant + WxMerchant merchant = checkAndGetMerchant(merchantId); + // 3. check buUser + WxMerchantBUser buUser = checkAndGetMerchantUser(buUserId, merchantId); + + WxCouponOrder couponOrder = couponOrderService.getById(cardId); + if(couponOrder == null) { + logger.error("卡不存在: " + cardIdStr); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + + WxCardInfo cardInfo = checkAndGetCardinfo(cardId, merchantId); + + WxCardSpend record = cardSpendService.getById(cardSpendId); + if (record == null) { + logger.error(ErrorCode.CARD_SPEND_IS_NOT_FOUND.getMessage() + ": " + cardSpendIdStr); + throw new MallinkException(ErrorCode.CARD_SPEND_IS_NOT_FOUND); + } + if (!record.getPayStatus().equals(EnumCardSpendStatus.PREV_PAY.getCode())) { + logger.error(ErrorCode.POS_CARD_PAY_NOT_CANCEL.getMessage()); + throw new MallinkException(ErrorCode.POS_CARD_PAY_NOT_CANCEL); + } + + try { + WxCardInfo updateCardInfo = cardSpendService.cardSpendForPosPrePayCancel(cardInfo, record); + JSONObject refundObj = new JSONObject(); + refundObj.put(WxPayConstant.CARD_ID, cardIdStr); + refundObj.put(WxPayConstant.CARD_REFUND_RESULT, "0"); + refundObj.put(WxPayConstant.REFUND_RESULT_MSG, "卡支付撤销成功"); + refundObj.put(WxPayConstant.REFUND_TIME_FROM_IFORMALL, neuDateFormat.format(new Date())); + refundObj.put(WxPayConstant.AMOUNT_PAID_BY_CARD, 0); + refundObj.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, amountLeftAfterPay + record.getDeductionAmount()); + retMap.put(WxPayConstant.CARD_REFUND_RESULT, JSON.toJSONString(refundObj)); + } catch (MallinkException e) { + logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("card spend error, req 3: " + record.toString() + ", e:" + e.getMessage()); + throw new MallinkException(500, e.getMessage()); + } + + return retMap; + } + + private WxCardInfo checkAndGetCardinfo(Long cardId, Long merchantId) { + WxCardInfo cardInfo = cardInfoService.getById(cardId); + if(cardInfo == null) { + String errMessage = "卡不存在: " + cardId; + logger.error(errMessage); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND.getCode(), errMessage); + } + + WxCouponMerchant couponMerchant = cardSpendService.checkMerchantInCoupon(cardInfo, merchantId); + if(couponMerchant == null) { + String errMessage = "商户不支持此卡 " + cardId; + logger.error(errMessage); + throw new MallinkException(ErrorCode.COUPON_ORDER_MERANT_IS_NULL.getCode(), errMessage); + } + return cardInfo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject posOrderSync(Map params) throws MallinkException { + JSONObject retMap = new JSONObject(); + + String tenantId = params.get(WxPayConstant.TENANT_ID); // 租户ID + String merchantIdStr = params.get(WxPayConstant.MERCHANT_ID); // 商户ID + String buUserIdStr = params.get(WxPayConstant.BUSER_ID); // POS操作员ID + String cuUserIdStr = params.get(WxPayConstant.MEM_ID); // 富茂系统会员ID + String cuPhoneStr = params.get(WxPayConstant.MEM_PHONE); // 富茂系统会员手机号 + String sceneTypeStr = params.get(WxPayConstant.SCENE_TYPE); // 场景类型 + String posOrderIdStr = params.get(WxPayConstant.POS_ORDER_ID); // POS订单ID + String posOrderTimeStr = params.get(WxPayConstant.POS_ORDER_TIME); // POS订单时间 + String posAmountStr = params.get(WxPayConstant.ORDER_AMOUNT); // POS订单总额 + String orderCreateSN = params.get(WxPayConstant.ORDER_CREATE_SN); // POS SN号 + String posStatusStr = params.get(WxPayConstant.ORDER_STATUS); // 订单状态: 0有效,1取消,根据订单状态处理优惠券;有效:优惠券从预核销处理为核销; + + // 1. check params + if (StringUtils.isBlank(tenantId)) { + errParam(WxPayConstant.TENANT_ID); + } + PosMallConfig config = posMallConfigService.getByTenantId(tenantId); + if (config == null) { + logger.error(ErrorCode.POS_CONFIG_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.POS_CONFIG_NOT_FOUND); + } + if (StringUtils.isBlank(merchantIdStr)) { + errParam(WxPayConstant.MERCHANT_ID); + } + if (StringUtils.isBlank(buUserIdStr)) { + errParam(WxPayConstant.BUSER_ID); + } + if (StringUtils.isBlank(cuUserIdStr)) { + errParam(WxPayConstant.MEM_ID); + } + if (StringUtils.isBlank(sceneTypeStr)) { + errParam(WxPayConstant.SCENE_TYPE); + } + if (StringUtils.isBlank(posOrderIdStr)) { + errParam(WxPayConstant.POS_ORDER_ID); + } + if (StringUtils.isBlank(posOrderTimeStr)) { + errParam(WxPayConstant.POS_ORDER_TIME); + } + if (StringUtils.isBlank(posAmountStr)) { + errParam(WxPayConstant.ORDER_AMOUNT); + } + if (StringUtils.isBlank(orderCreateSN)) { + errParam(WxPayConstant.ORDER_CREATE_SN); + } + if (StringUtils.isBlank(posStatusStr)) { + errParam(WxPayConstant.ORDER_STATUS); + } + + Long merchantId, buUserId, posOrderId, memId; + Integer posAmount; + Integer iSceneType; + Date orderTime = null; + try { + merchantId = Long.valueOf(merchantIdStr); + buUserId = Long.valueOf(buUserIdStr); + memId = Long.valueOf(cuUserIdStr); + iSceneType = Integer.valueOf(sceneTypeStr); + posOrderId = Long.valueOf(posOrderIdStr); + posAmount = Integer.valueOf(posAmountStr); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); + } + try { + orderTime = neuDateFormat.parse(posOrderTimeStr); + } catch (ParseException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); + } + // 2. check merchant + WxMerchant merchant = checkAndGetMerchant(merchantId); + // 3. check buUser + WxMerchantBUser merchantBUser = checkAndGetMerchantUser(buUserId, merchantId); + // 4. 同步 + if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_PAY)) { + // 4.1 支付同步 + syncOrder(params, merchant, merchantBUser, iSceneType, posOrderId, memId, posAmount, orderTime, orderCreateSN); + } else if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_REFUND)) { + // 退款同步 + syncRefundOrder(params, merchantBUser, iSceneType, posOrderId, memId, posAmount, orderTime, orderCreateSN); + } + + return retMap; + } + + /** + * 支付同步 + * @param params + * @param merchant + * @param buUser + * @param iSceneType + * @param posOrderId + * @param memId + * @param orderAmount + * @param orderTime + */ + public void syncOrder( + Map params, + WxMerchant merchant, WxMerchantBUser buUser, + Integer iSceneType, + Long posOrderId, Long memId, Integer orderAmount, Date orderTime, String orderCreateSn) { + WxOrder order = createOrderByPos(buUser, memId, posOrderId, orderAmount, orderTime, orderCreateSn); + String payDetail = params.get(WxPayConstant.PAY_DETAIL); + JSONObject payDetailObj = JSON.parseObject(payDetail); + PromotionCalc scoreCreditCalc = new PromotionCalc(); + scoreCreditCalc.setScore(0); + scoreCreditCalc.setCredit(0); + JSONArray payDetailList = payDetailObj.getJSONArray(WxPayConstant.PAY_DETAIL_LIST); + for (int i=0;i params, + WxMerchantBUser buUser, + Integer iSceneType, + Long posOrderId, Long memId, Integer orderAmount, Date orderTime, String orderCreateSn) { + // add to wx_order + WxOrder refundOrder = createRefundByPos(buUser, memId, posOrderId, orderAmount, orderTime, orderCreateSn); + String refundDetail = params.get(WxPayConstant.NEU_REFUND_DETAIL); + JSONObject refundDetailObj = JSON.parseObject(refundDetail); + JSONArray refundDetailList = refundDetailObj.getJSONArray(WxPayConstant.NEU_REFUND_DETAIL_LIST); + for (int i=0;i核销 + if (sceneType.equals(EnumPosSceneType.PAY.getCode())) { + WxCouponOrder updateCO = new WxCouponOrder(); + updateCO.setId(couponOrderId); + updateCO.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + couponOrderMapper.updateByPrimaryKeySelective(updateCO); + } + WxCouponOrderCVo couponOrderCVo = couponOrderService.detailCUserVo(posPayOrderNo); + if (couponOrderCVo != null) { + // 3. 成长值 + try { + WxOrder scoreOrder = orderMapper.selectByPrimaryKey(couponOrderCVo.getOrderId()); + int point = scoreRulesService.addScore2(EnumScoreType.CONSUMPTION, scoreOrder, couponOrderCVo.getBusinessId()); + scoreCreditCalc.setScore(scoreCreditCalc.getScore() + point); + } catch (Exception e) { + logger.error("交易核销成长值异常:" + e.getMessage()); + } + + WxCoupon wxCoupon = couponMapper.selectByPrimaryKey(couponOrderCVo.getCouponId()); + if (wxCoupon == null) { + logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrderCVo.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + + // 4. 积分 + try { + int credit = posAddCredit(couponOrderCVo, wxCoupon, merchantBUser.getMerchantId(), merchantBUser.getId()); + scoreCreditCalc.setCredit(scoreCreditCalc.getCredit() + credit); + } catch (Exception e) { + logger.error("交易核销积分异常:" + e.getMessage()); + } + // 3. 核销后处理 + couponOrderService.sendInsideCouponVerifyMsg(merchantBUser.getTenantId(), couponOrderId, merchantBUser.getId()); + } + return payOrder; + } + + /** + * 支付订单-预付卡 + * @param merchant + * @param buUser + * @param order + * @param memId + * @param posPayOrderId + * @param neuPaymentAmount + * @param neuPosPayOrderTime + * @param posPayOrderNo + */ + public WxPayOrder payOrderFromCard( + PromotionCalc scoreCreditCalc, + WxMerchant merchant, WxMerchantBUser buUser, + WxOrder order, Long memId, + Long posPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String posPayOrderNo) { + // 1. insert into PayOrder + WxPayOrder payOrder = new WxPayOrder() {{ + Date curDate = new Date(); + final IdWorker idWorker = IdWorker.get(); + Long id = idWorker.nextId(); + setId(id); + setTenantId(buUser.getTenantId()); + setCUserId(memId); + setBUserId(buUser.getId()); + setOrderId(order.getId()); + setCreateTime(curDate); + setUpdateTime(curDate); + setPayTimeStart(curDate); + setPayTimeEnd(curDate); + setPayOrderNo(String.valueOf(id)); + setPayAmount(neuPaymentAmount); + setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); + setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + setShare(EnumPayShare.NO.getCode()); + setPayFrom(EnumPayFrom.POS.getCode()); + setPosPayOrderId(posPayOrderId); + setPosPayOrderTime(neuPosPayOrderTime.getTime()); + setPosPaymentType(EnumNeuPosPamentType.MEM_CARD.getCode()); + setPosPayDes("POS富茂卡支付"); + setPosPayOrderNo(posPayOrderNo); + + }}; + int sqlRow = payOrderMapper.insertSelective(payOrder); + if (sqlRow != 1) { + logger.error("pay order insert error: " + payOrder.toString()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + // 2. 卡支付 + Long cardSpendId; + try { + cardSpendId = Long.valueOf(posPayOrderNo); + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + WxCardSpend cardSpend = cardSpendService.getById(cardSpendId); + cardSpend.setOrderId(order.getId()); + cardSpendService.cardSpendForPosPay(scoreCreditCalc, cardSpend, merchant, buUser); + return payOrder; + } + + /** + * 支付订单POS + * @param merchant + * @param buUser + * @param order + * @param memId + * @param neuPayOrderType + * @param neuPayOrderId + * @param neuPaymentAmount + * @param neuPosPayOrderTime + * @param neuPayThirdNo + * @return + */ + public WxPayOrder payOrderFromPos( + PromotionCalc scoreCreditCalc, + WxMerchant merchant, WxMerchantBUser buUser, WxOrder order, Long memId, + Integer neuPayOrderType, Long neuPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String neuPayThirdNo) { + // 1. insert into PayOrder + WxPayOrder payOrder = new WxPayOrder() {{ + Date curDate = new Date(); + final IdWorker idWorker = IdWorker.get(); + Long id = idWorker.nextId(); + setId(id); + setTenantId(buUser.getTenantId()); + setCUserId(memId); + setOrderId(order.getId()); + setCreateTime(curDate); + setUpdateTime(curDate); + setPayTimeStart(curDate); + setPayTimeEnd(curDate); + setPayOrderNo(String.valueOf(id)); + setPayAmount(neuPaymentAmount); + setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); + setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + setShare(EnumPayShare.NO.getCode()); + setPayFrom(EnumPayFrom.POS.getCode()); + setPosPayOrderId(neuPayOrderId); + setPosPayOrderTime(neuPosPayOrderTime.getTime()); + setPosPaymentType(neuPayOrderType); + setPosPayDes("POS支付"); + setPosPayOrderNo(neuPayThirdNo); + + }}; + int sqlRow = payOrderMapper.insertSelective(payOrder); + if (sqlRow != 1) { + logger.error("pay order insert error: " + payOrder.toString()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + + // 2. 积分, 成长值 + // 3. 成长值 + try { + WxOrder scoreOrder = orderMapper.selectByPrimaryKey(order.getId()); + scoreOrder.setPayment(neuPaymentAmount); + int point = scoreRulesService.addScore2(EnumScoreType.CONSUMPTION, scoreOrder, merchant.getBusinessId()); + scoreCreditCalc.setScore(scoreCreditCalc.getScore() + point); + } catch (Exception e) { + logger.error("交易核销成长值异常:" + e.getMessage()); + } + + // 4. 积分 + try { + int credit = posAddCreditForPay(merchant, buUser.getId(), memId, neuPaymentAmount); + scoreCreditCalc.setCredit(scoreCreditCalc.getCredit() + credit); + } catch (Exception e) { + logger.error("交易核销积分异常:" + e.getMessage()); + } + + return payOrder; + } + + /** + * 退款订单POS + * @param buUser + * @param refundOrder + * @param memId + * @return + */ + public WxRefundOrder refundOrderFromPos( + WxMerchantBUser buUser, WxOrder refundOrder, Long memId, + Long posPayOrderId, Long posRefundOrderId, Date posRefundOrderTime, + Integer posRefundOrderStatus, Integer posRefundAmount, Integer posRefundType, + String neuRefundThirdNo) { + // 1. pay order + // 查找支付订单 + WxPayOrder payOrderQ = new WxPayOrder() {{ + setTenantId(refundOrder.getTenantId()); + setCUserId(refundOrder.getCUserId()); + setOrderId(refundOrder.getId()); + setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + setPosPayOrderId(posPayOrderId); + }}; + + try { + payOrderQ = payOrderMapper.selectOne(payOrderQ); + } catch (Exception e) { + throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); + } + if (payOrderQ == null) { + logger.error("支付订单不存在(payOrder不存在)"); + throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); + } + // 2. insert into refund order + WxRefundOrder refundPayOrder = new WxRefundOrder() {{ + Date curDate = new Date(); + final IdWorker idWorker = IdWorker.get(); + Long id = idWorker.nextId(); + setId(id); + setRefundId(String.valueOf(id)); + setTenantId(buUser.getTenantId()); + setCUserId(memId); + setOrderId(refundOrder.getId()); + setCreateTime(curDate); + setUpdateTime(curDate); + setRefundTimeStart(curDate); + setRefundTimeEnd(curDate); + setTotalFee(posRefundAmount); + setRefundFee(posRefundAmount); + setRefundFrom(EnumPayFrom.POS.getCode()); + setRefundOrderStatus(EnumRefundStatus.REFUND_SUCCESS.getCode()); + setPosPayOrderId(posPayOrderId); + setPosRefundOrderId(posRefundOrderId); + setPosRefundOrderTime(posRefundOrderTime.getTime()); + setPosRefundOrderStatus(posRefundOrderStatus); + setPosRefundType(posRefundType); + setPosRefundDes("POS退款"); + setPosRefundOrderNo(neuRefundThirdNo); + + }}; + refundPayOrder.setPayOrderNo(String.valueOf(payOrderQ.getId())); + + int sqlRow = refundOrderMapper.insertSelective(refundPayOrder); + if (sqlRow != 1) { + logger.error("refund order insert error: " + refundPayOrder.toString()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + + return refundPayOrder; + } + + /** + * 基于NEUPOS订单信息创建订单 + * @param merchantBUser + * @param memId + * @param posOrderId + * @param posAmount + * @param posOrderTime + * @return + */ + public WxOrder createOrderByPos( + final WxMerchantBUser merchantBUser, + final Long memId, + final Long posOrderId, final Integer posAmount, final Date posOrderTime, final String orderCreateSn + ) { + boolean isExist = true; + WxOrder orderQ = new WxOrder() {{ + setType(EnumOrderType.POSPAY.getCode()); + setCUserId(memId); + setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); + setPosOrderId(posOrderId); + }}; + try { + orderQ = orderMapper.selectOne(orderQ); + } catch (Exception e) { + isExist = false; + } + if (orderQ != null) { + logger.error(ErrorCode.POS_ORDER_HAD_SYNCED.getMessage()); + throw new MallinkException(ErrorCode.POS_ORDER_HAD_SYNCED); + } + + WxOrder order = new WxOrder() {{ + Date curr = new Date(); + String bodyStr = "POS支付, 金额: " + posAmount; + final IdWorker idWorker = IdWorker.get(); + Long orderId = idWorker.nextId(); + setId(orderId); + setTenantId(merchantBUser.getTenantId()); + setOrderNumber(orderId); + setType(EnumOrderType.POSPAY.getCode()); + setProductId(merchantBUser.getId()); + setCUserId(memId); + setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); + setPayment(posAmount); + setOrderStatus(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); + setDetail(bodyStr); + setCreateDate(curr); + setUpdateDate(curr); + setPosOrderId(posOrderId); + setPosOrderCreateTime(posOrderTime.getTime()); + setPosOrderCreateSn(orderCreateSn); + }}; + + try { + orderMapper.insertSelective(order); + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + return order; + } + + /** + * 基于NEUPOS退款订单信息创建退款订单 + * @param buUser + * @param memId + * @param posOrderId + * @param orderAmount + * @param posOrderTime + * @return + */ + public WxOrder createRefundByPos( + final WxMerchantBUser buUser, + final Long memId, + final Long posOrderId, final Integer orderAmount, final Date posOrderTime, final String orderCreateSn + ) { + // 1. 查找正向订单 + WxOrder orderQ = new WxOrder() {{ + setType(EnumOrderType.POSPAY.getCode()); + setCUserId(memId); + setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); + setPosOrderId(posOrderId); + }}; + try { + orderQ = orderMapper.selectOne(orderQ); + } catch (Exception e) { + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + if (orderQ == null) { + logger.error(ErrorCode.POS_ORDER_NOT_FOUND.getMessage()); + throw new MallinkException(ErrorCode.POS_ORDER_NOT_FOUND); + } + + // 2. 查找是否有退款订单 + WxOrder refundQ = new WxOrder() {{ + setType(EnumOrderType.POSPAY.getCode()); + setCUserId(memId); + setPosOrderId(posOrderId); + }}; + refundQ.setOrderNumber(orderQ.getOrderNumber()); + try { + refundQ = orderMapper.selectOne(refundQ); + } catch (Exception e) { + } + if (refundQ != null) { + logger.error(ErrorCode.POS_ORDER_HAD_SYNCED.getMessage()); + throw new MallinkException(ErrorCode.POS_ORDER_HAD_SYNCED); + } + + // 3. 创建退款订单 + WxOrder order = new WxOrder() {{ + Date curr = new Date(); + String bodyStr = "POS退款, 金额: " + orderAmount; + final IdWorker idWorker = IdWorker.get(); + Long orderId = idWorker.nextId(); + setId(orderId); + setTenantId(buUser.getTenantId()); + setType(EnumOrderType.POSPAY.getCode()); + setProductId(buUser.getId()); + setCUserId(memId); + setPaymentType(EnumPayType.PAY_POS_REFUND.getCode()); + setPayment(orderAmount); + setOrderStatus(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode()); + setDetail(bodyStr); + setCreateDate(curr); + setUpdateDate(curr); + setPosOrderId(posOrderId); + setPosOrderCreateTime(posOrderTime.getTime()); + setPosOrderCreateSn(orderCreateSn); + }}; + order.setOrderNumber(orderQ.getOrderNumber()); + + try { + orderMapper.insertSelective(order); + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + return order; + } + + + /** + * 检查及获取商户信息 + * @param merchantId + * @return + */ + private WxMerchant checkAndGetMerchant(Long merchantId) { + WxMerchant merchant = merchantService.getById(merchantId); + if (merchant == null) { + logger.error(ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage() + ": " + merchantId); + throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); + } + if (merchant.getIsDel().equals(EnumDelStatus.DEL.getCode()) || + merchant.getStatus().equals(EnumMerchantStatus.NOT_VALID.getCode())) { + logger.error(ErrorCode.MERCHANT_INFO_NOT_VALID.getMessage() + ": " + merchantId); + throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_VALID); + } + return merchant; + } + + /** + * 检查及获取商户用户 + * @param buUserId + * @param merchantId + */ + private WxMerchantBUser checkAndGetMerchantUser(Long buUserId, Long merchantId) { + WxMerchantBUser buUser = merchantBUserService.getById(buUserId); + if (buUser == null) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage() + ": " + buUserId); + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + if (!buUser.getMerchantId().equals(merchantId)) { + logger.error(ErrorCode.VERIFY_BUSER_MERCHANT_NOT_BELONG.getMessage() + ": " + buUserId); + throw new MallinkException(ErrorCode.VERIFY_BUSER_MERCHANT_NOT_BELONG); + } + return buUser; + } + + /** + * 券是否在选择列表中 + * @param selCoArr + * @param couponOrderId + * @return + */ + private boolean isSelCoupon(JSONArray selCoArr, Long couponOrderId) { + boolean selCoupon = false; + for (int j=0;j + + + + + + + [%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/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java b/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java new file mode 100644 index 000000000..5471eb62f --- /dev/null +++ b/mallinkPosApi/src/test/java/com/iformall/pos/test/PosAppTest.java @@ -0,0 +1,483 @@ +package com.iformall.pos.test; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iformall.PosApplication; +import com.iformall.enums.EnumNeuPosPamentType; +import com.iformall.enums.EnumPosSceneType; +import com.iformall.pay.WxPayConstant; +import com.iformall.pay.WxPayment; +import org.junit.Assert; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultHandlers; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Stormeye + * + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = { PosApplication.class}) +@ActiveProfiles("dev") +@AutoConfigureMockMvc +@FixMethodOrder(MethodSorters.JVM) +public class PosAppTest { + + @Autowired + private MockMvc mockMvc; + + private static final SimpleDateFormat neuDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + private static final String devId = "neupos"; + private static final String devReqKey = "qVH2YDmXJ$ok4a95"; + private static final String devResKey = "VE#1fB2PhUe@&3Of"; + + private static final String tenantId = "456"; + private static final String merchantId = "320833942159982592"; // 东软专用 + private static final String buUserId = "320834180694245376"; + private static final String phone = "13120223636"; + private static final String password = "drpos345"; + + private static final String posSN = "1"; + + /* + 可用的交易券, 支付可用(1, 2, 6), 核销可用(4, 6, 8, 9) + coupon_order_id, coupon_type, 售价, 面额, cancellable + 321872988134408192, 4, 0, 2000, NO + 321877927162249216, 2, 0, 10000, YES + 321878123232591872, 2, 1, 10000, NO + 321878185355214848, 1, 0, 10000, NO + 321878223800205312, 6, 0, 1000, YES + 321878329906921472, 6, 1, 1000, NO + 321882224846667776, 8, 1, 1500, NO + 321883878446825472, 100, 1, 50000, NO + */ + + @Test + public void versionTest() throws Exception { + // 1. version test + this.mockMvc + .perform(MockMvcRequestBuilders.get("/version")) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().string("{\"code\":200,\"message\":\"success\",\"data\":\"1.0\"}")) + .andDo(MockMvcResultHandlers.print()); + + } + + @Test + public void signErrorTest() throws Exception { + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.DEV_ID, ""); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, ""); + reqObj.put(WxPayConstant.COUPON_ORDER_ID, ""); + reqObj.put(WxPayConstant.NONCE_STR, ""); + reqObj.put(WxPayConstant.POS_ORDER_ID, ""); + reqObj.put(WxPayConstant.SIGN, WxPayment.createSignHMAC(reqObj, devReqKey)); + String reqJsonStr = JSONObject.toJSONString(reqObj); + this.mockMvc.perform( + MockMvcRequestBuilders.post("/checkCouponOrderForVerify") + .contentType(MediaType.APPLICATION_JSON) + .content(reqJsonStr) + ) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(MockMvcResultMatchers.jsonPath("$.return_code").value("FAIL")) + .andDo(MockMvcResultHandlers.print()); + } + + @Test + public void checkUserPasswordTest() throws Exception { + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.PHONE, phone); + reqObj.put(WxPayConstant.PASSWORD, password); + boolean resSigned = sendAndRes("/checkUserPassword", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void verifyCalculateTest() throws Exception { + String selCoList = "[\"321872988134408192\"]"; + String sceneType = String.valueOf(EnumPosSceneType.VERIFY.getCode()); + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.COUPON_ORDER_LIST, selCoList); + boolean resSigned = sendAndRes("/queryAndCalc", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void payCalculateTest_NoCouponOrder() throws Exception { + //String memId = "321178010928119808"; + //String phone = "13910154397"; + String cardId = "321883878446825472"; + String orderAmount = "2000"; + String orderAmountLeft = "2000"; + String selCoList = "[]"; + String sceneType = String.valueOf(EnumPosSceneType.PAY.getCode()); + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + //reqObj.put(WxPayConstant.MEM_ID, memId); + //reqObj.put(WxPayConstant.MEM_PHONE, phone); + reqObj.put(WxPayConstant.CARD_ID, cardId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmountLeft); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.COUPON_ORDER_LIST, selCoList); + boolean resSigned = sendAndRes("/queryAndCalc", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void payCalculateTest_WithOneCouponOrder() throws Exception { + String memId = "321178010928119808"; + String phone = "13910154397"; + String orderAmount = "20000"; + String orderAmountLeft = "20000"; + String selCoList = "[\"321878185355214848\"]"; + String sceneType = String.valueOf(EnumPosSceneType.PAY.getCode()); + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.MEM_ID, memId); + reqObj.put(WxPayConstant.MEM_PHONE, phone); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmountLeft); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.COUPON_ORDER_LIST, selCoList); + boolean resSigned = sendAndRes("/queryAndCalc", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void verifyTest() throws Exception { + String posOrderId = "1"; + String selCoList = "[\"321878223800205312\"]"; + String sceneType = String.valueOf(EnumPosSceneType.VERIFY.getCode()); + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.COUPON_ORDER_LIST, selCoList); + boolean resSigned = sendAndRes("/couponOrderVerify", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void couponOrderVerifyCancelTest() throws Exception { + String posOrderId = "1"; + String couponOrderId = "321878223800205312"; + String orderAmount = "1000"; + String amountLeft = "0"; + String sceneType = String.valueOf(EnumPosSceneType.VERIFY.getCode()); + Map reqObj = new HashMap<>(); + JSONObject paymentInfo = new JSONObject(); + paymentInfo.put(WxPayConstant.COUPON_ID, couponOrderId); + paymentInfo.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + paymentInfo.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmount); + paymentInfo.put(WxPayConstant.PROMOTION_AMOUNT, orderAmount); + paymentInfo.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, amountLeft); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.COUPON_ORDER_ID, couponOrderId); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.PAYMENT_INFO, JSON.toJSONString(paymentInfo)); + boolean resSigned = sendAndRes("/couponOrderVerifyCancel", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void verifySyncTest() throws Exception { + String memId = "321178010928119808"; + String memPhone = "13910154397"; + String sceneType = "0"; // 核销 + String posOrderId = "1"; + String posAmount = "1000"; + String posPayOrderId = "1"; + String posPaymentType = "4"; + String posPaymentTypeDes = "优惠券"; + String posPaymentStatus = "0"; + + String couponOrderId = "321878223800205312"; + + Date curDate = new Date(); + + Map payDetailOne = new HashMap<>(); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_ID, posPayOrderId); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TIME, neuDateFormat.format(curDate)); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TYPE, posPaymentType); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TYPE_DES, posPaymentTypeDes); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_PARAM, "{}"); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_STATUS, posPaymentStatus); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_OUT_NO, couponOrderId); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_AMOUNT, posAmount); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_OUT_TIME, neuDateFormat.format(curDate)); + + JSONArray payDetailList = new JSONArray(); + payDetailList.add(payDetailOne); + + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.MEM_ID, memId); + reqObj.put(WxPayConstant.MEM_PHONE, memPhone); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.POS_ORDER_TIME, neuDateFormat.format(curDate)); + reqObj.put(WxPayConstant.ORDER_AMOUNT, posAmount); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.ORDER_STATUS, "0"); + JSONObject payDetail = new JSONObject(); + payDetail.put(WxPayConstant.PAY_DETAIL_LIST, JSON.toJSONString(payDetailList)); + reqObj.put(WxPayConstant.PAY_DETAIL, JSON.toJSONString(payDetail)); + boolean resSigned = sendAndRes("/posOrderSync", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void payVerifyTest() throws Exception { + String memId = "321178010928119808"; + String memPhone = "13910154397"; + String posOrderId = "2"; + String orderAmount = "1000"; + String selCoList = "[\"321878223800205312\"]"; + String sceneType = String.valueOf(EnumPosSceneType.PAY.getCode()); + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.MEM_ID, memId); + reqObj.put(WxPayConstant.MEM_PHONE, memPhone); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmount); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.COUPON_ORDER_LIST, selCoList); + boolean resSigned = sendAndRes("/couponOrderVerify", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void payVerifySyncTest() throws Exception { + String memId = "321178010928119808"; + String memPhone = "13910154397"; + String sceneType = "1"; // 支付 + String posOrderId = "2"; + String orderAmount = "1000"; + String posPayOrderId = "2"; + String posPaymentType = String.valueOf(EnumNeuPosPamentType.MEM_COUPON.getCode()); + String posPaymentTypeDes = EnumNeuPosPamentType.MEM_COUPON.getMessage(); + String posPaymentStatus = "0"; + + String couponOrderId = "321878223800205312"; + + Date curDate = new Date(); + + Map payDetailOne = new HashMap<>(); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_ID, posPayOrderId); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TIME, neuDateFormat.format(curDate)); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TYPE, posPaymentType); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TYPE_DES, posPaymentTypeDes); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_PARAM, "{}"); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_STATUS, posPaymentStatus); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_OUT_NO, couponOrderId); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_AMOUNT, orderAmount); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_OUT_TIME, neuDateFormat.format(curDate)); + + JSONArray payDetailList = new JSONArray(); + payDetailList.add(payDetailOne); + + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.MEM_ID, memId); + reqObj.put(WxPayConstant.MEM_PHONE, memPhone); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.POS_ORDER_TIME, neuDateFormat.format(curDate)); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.ORDER_STATUS, "0"); + JSONObject payDetail = new JSONObject(); + payDetail.put(WxPayConstant.PAY_DETAIL_LIST, JSON.toJSONString(payDetailList)); + reqObj.put(WxPayConstant.PAY_DETAIL, JSON.toJSONString(payDetail)); + boolean resSigned = sendAndRes("/posOrderSync", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void cardPayPreTest() throws Exception { + String cardId = "321883878446825472"; + String sceneType = "1"; // 支付 + String posOrderId = "1"; + String orderAmount = "2000"; + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmount); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.CARD_ID, cardId); + reqObj.put(WxPayConstant.AMOUNT_PAID_BY_CARD, orderAmount); + boolean resSigned = sendAndRes("/cardPayPre", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void cardPayPreCancelTest() throws Exception { + String cardId = "321883878446825472"; + String cardSpendId = "329763372332511232"; + String sceneType = "1"; // 支付 + String posOrderId = "1"; + String orderAmount = "2000"; + JSONObject paymentInfo = new JSONObject(); + paymentInfo.put(WxPayConstant.CARD_ID, cardId); + paymentInfo.put(WxPayConstant.CARD_SPEND_ID, cardSpendId); + paymentInfo.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + paymentInfo.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmount); + paymentInfo.put(WxPayConstant.AMOUNT_PAID_BY_CARD, orderAmount); + paymentInfo.put(WxPayConstant.AMOUNT_LEFT_AFTER_PAY, "0"); + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.PAYMENT_INFO, JSON.toJSONString(paymentInfo)); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_AMOUNT_LEFT, orderAmount); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + boolean resSigned = sendAndRes("/cardPayPreCancel", reqObj); + Assert.assertEquals(resSigned, true); + } + + @Test + public void cardPaySyncTest() throws Exception { + String memId = "321178010928119808"; + String memPhone = "13910154397"; + String sceneType = "1"; // 支付 + String posOrderId = "1"; + String orderAmount = "2000"; + String posPayOrderId = "2"; + String posPaymentType = String.valueOf(EnumNeuPosPamentType.MEM_CARD.getCode()); + String posPaymentTypeDes = EnumNeuPosPamentType.MEM_CARD.getMessage(); + String posPaymentStatus = "0"; + String cardSpendId = "329763372332511232"; + + Date curDate = new Date(); + + Map payDetailOne = new HashMap<>(); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_ID, posPayOrderId); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TIME, neuDateFormat.format(curDate)); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TYPE, posPaymentType); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_TYPE_DES, posPaymentTypeDes); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_PARAM, "{}"); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_STATUS, posPaymentStatus); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_OUT_NO, cardSpendId); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_AMOUNT, orderAmount); + payDetailOne.put(WxPayConstant.NEU_PAY_ORDER_OUT_TIME, neuDateFormat.format(curDate)); + + JSONArray payDetailList = new JSONArray(); + payDetailList.add(payDetailOne); + + Map reqObj = new HashMap<>(); + reqObj.put(WxPayConstant.NONCE_STR, "1"); + reqObj.put(WxPayConstant.DEV_ID, devId); + reqObj.put(WxPayConstant.TENANT_ID, tenantId); + reqObj.put(WxPayConstant.MERCHANT_ID, merchantId); + reqObj.put(WxPayConstant.BUSER_ID, buUserId); + reqObj.put(WxPayConstant.SCENE_TYPE, sceneType); + reqObj.put(WxPayConstant.MEM_ID, memId); + reqObj.put(WxPayConstant.MEM_PHONE, memPhone); + reqObj.put(WxPayConstant.POS_ORDER_ID, posOrderId); + reqObj.put(WxPayConstant.POS_ORDER_TIME, neuDateFormat.format(curDate)); + reqObj.put(WxPayConstant.ORDER_AMOUNT, orderAmount); + reqObj.put(WxPayConstant.ORDER_CREATE_SN, posSN); + reqObj.put(WxPayConstant.ORDER_STATUS, "0"); + JSONObject payDetail = new JSONObject(); + payDetail.put(WxPayConstant.PAY_DETAIL_LIST, JSON.toJSONString(payDetailList)); + reqObj.put(WxPayConstant.PAY_DETAIL, JSON.toJSONString(payDetail)); + boolean resSigned = sendAndRes("/posOrderSync", reqObj); + Assert.assertEquals(resSigned, true); + } + + private boolean sendAndRes(String url, Map reqObj) throws Exception { + reqObj.put(WxPayConstant.SIGN, WxPayment.createSignHMAC(reqObj, devReqKey)); + String reqJsonStr = JSONObject.toJSONString(reqObj); + MvcResult result = mockMvc.perform( + MockMvcRequestBuilders.post(url) + .contentType(MediaType.APPLICATION_JSON) + .content(reqJsonStr)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcResultHandlers.print()) + .andReturn(); + String responseStr = result.getResponse().getContentAsString(); + ObjectMapper mapper = new ObjectMapper(); + Map respMap = mapper.readValue(responseStr, Map.class); + return WxPayment.verifyNotifyHMAC(respMap, devResKey); + } +} diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java index aed5190f7..624a8a21c 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/ActivitySchedule.java @@ -116,6 +116,7 @@ public class ActivitySchedule { WxCampaign campaign = new WxCampaign(); campaign.setStatus(EnumCampaignStatus.STATUS_THROW_IN.getCode()); campaign.setType(EnumCampaignType.PAGEPATH.getCode()); + campaign.setProduceType(EnumCampaignProductType.ACTIVITY_JOIN.getCode()); List campaignList = wxCampaignMapper.select(campaign); for (WxCampaign wxCampaign : campaignList) { WxActivity wxActivity = wxActivityMapper.selectByPrimaryKey(wxCampaign.getProduceId()); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java index f3bbbc16e..be84aff14 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java @@ -1,25 +1,25 @@ package com.iformall.schedule; import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.domain.vo.WxCouponSendVo; -import com.iformall.enums.EnumCouponSendSendType; -import com.iformall.enums.EnumCouponSendStatus; -import com.iformall.exception.MallinkException; +import com.iformall.enums.*; import com.iformall.mapper.*; -import com.iformall.service.WxCouponActionLogService; -import com.iformall.service.WxCouponSendService; -import com.iformall.service.WxLevelConfigService; -import com.iformall.service.WxOrderService; -import io.swagger.models.auth.In; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.*; +import com.iformall.utils.CreditUtil; +import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; @@ -30,163 +30,362 @@ import java.util.stream.Collectors; @Component public class CouponSendSchedule { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - private WxMallMapper wxMallMapper; - - @Autowired - private WxLevelConfigMapper WxLevelConfigMapper; - - @Autowired - private WxLevelConfigService wxLevelConfigService; - - @Autowired - private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; - - @Autowired - private WxCouponSendMapper wxCouponSendMapper; - - @Autowired - private WxCouponActionLogMapper wxCouponActionLogMapper; - - @Autowired - private WxOrderService wxOrderService; - - @Autowired - private WxCouponActionLogService wxCouponActionLogService; - - - //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 - @Scheduled(cron = "0 0 6 * * ?") // 测试每天6点发券 - //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 - public void couponSendSchedule() { - - List mallList = wxMallMapper.findList(new WxMall()); - - if (mallList.size()==0) { - logger.info("定时发券: No Mall info found"); - return; - } - - Date startTime = Date.from(LocalDateTime.now() - .with(TemporalAdjusters.firstDayOfMonth()) - .with(LocalTime.MIN) - .atZone(ZoneId.systemDefault()) - .toInstant()); - Date endTime = Date.from(LocalDateTime.now() - .with(TemporalAdjusters.lastDayOfMonth()) - .with(LocalTime.MAX) - .atZone(ZoneId.systemDefault()) - .toInstant()); - - mallList.stream().forEach(mall-> { - - WxLevelConfig wxLevelConfig = new WxLevelConfig(); - wxLevelConfig.setTenantId(mall.getTenantId()); - List levelConfigList = WxLevelConfigMapper.findList(wxLevelConfig); - levelConfigList = levelConfigList.stream() - .sorted(Comparator.comparing(WxLevelConfig::getPoints)) - .collect(Collectors.toList()); - - for (int levelIndex = 0; levelIndex < levelConfigList.size(); levelIndex++) { - WxLevelConfig l = levelConfigList.get(levelIndex); - if (l.getCapability() == null) - continue; - Integer levelStartScore = l.getPoints(); - Integer levelEndScore = levelIndex+1 < levelConfigList.size() ? levelConfigList.get(levelIndex+1).getPoints() : null; - - JSONObject jo = null; - Long result = null; - try { - jo = JSONObject.parseObject(l.getCapability()); - result = wxLevelConfigService.getCapabilitiesOfSendCarConpon(jo); - } catch (Exception e) { - logger.error("定时发券: 不能解析发券规则 levelId=" + l.getId() + e.getMessage()); - continue; - } - Long sendCount = result; - if (sendCount > 0) { - - WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); - wxCUserBasicInfoDto.setTenantId(l.getTenantId()); - wxCUserBasicInfoDto.setLevelStartScore(levelStartScore); - wxCUserBasicInfoDto.setLevelEndScore(levelEndScore); - List wxCUserBasicInfoList = wxCUserBasicInfoMapper.findListByScore(wxCUserBasicInfoDto); - - logger.info("定时发券:给LEVEL["+ l.getLevel() + - "]积分["+levelStartScore+"-"+levelEndScore+"]发券"+sendCount+"张"); - - wxCUserBasicInfoList.stream().forEach(cu->{ - - WxCouponSend wxCouponSend = new WxCouponSend(); - wxCouponSend.setTenantId(l.getTenantId()); - wxCouponSend.setSendType(EnumCouponSendSendType.TIMED.getCode()); - wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); - List couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); - int remain = couponSendList.stream().map(cs->{ - int count = cs.getRemainInventory(); - logger.info("定时发券:给["+ cu.getNickName() + - "]券[" + cs.getTitle() + "]还剩" + - count +"张"); - return count; - }).reduce(Integer::sum).get(); - - if (remain < sendCount){ - logger.error("定时发券:库存不足["+ cu.getNickName() +"]应发"+sendCount+"张,总共剩"+ remain + "张"); - return; - } - - int sentCount = couponSendList.stream().map(cs->{ - Map params = new HashMap(); - params.put("tenantId", cs.getTenantId()); - params.put("cUserId", cu.getId()); - params.put("couponId", cs.getCouponId()); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("channelType", EnumCouponSendSendType.TIMED.getCode()); - int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); - logger.info("定时发券:已经给["+ cu.getNickName() + - "]券[" + cs.getTitle() + "] " + - count +"张"); - return count; - }).reduce(Integer::sum).get(); - - - logger.info("定时发券:给["+ cu.getNickName() + - "]总共已发送券" + sentCount + "张,还需发"+ (sendCount-sentCount) +"张"); - - for (int count = 0; count < sendCount - sentCount; count++) { - boolean sent = false; - for(int couponIndex = 0; couponIndex< couponSendList.size(); couponIndex++) { - WxCouponSendVo cs = couponSendList.get(couponIndex); - if (cs.getRemainInventory() <= 0) - continue; - - // 发放免费券 - try { - WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cu.getId(), cs.getCouponId()); - wxCouponActionLogService.addOne(l.getTenantId(), cs.getCouponId(), couponOrder.getId(), cs.getSendType(), cs.getId()); - } catch (Exception e) { - logger.error("定时发券:发券失败 levelId=" + l.getId() + " couponId=" + cs.getCouponId() + " userId=" + cu.getId() + e.getMessage()); - continue; - } - - logger.info("定时发券:商场[" + mall.getName() + - "]会员等级[" + l.getLevel() + - "]发送券[" + cs.getTitle() + - "]给:" + cu.getNickName() + - " 电话-" + cu.getPhone() + - " id-" + cu.getId()); - sent = true; - break; - } - if (!sent) - break; - } - }); - } - } - }); - } + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxMallMapper wxMallMapper; + + @Autowired + private WxLevelConfigMapper WxLevelConfigMapper; + + @Autowired + private WxLevelConfigService wxLevelConfigService; + + @Autowired + private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + + @Autowired + private WxCouponSendMapper wxCouponSendMapper; + + @Autowired + private WxCouponActionLogMapper wxCouponActionLogMapper; + + @Autowired + private WxOrderService wxOrderService; + + @Autowired + private WxCouponActionLogService wxCouponActionLogService; + + @Autowired + private WxCouponSendConfigMapper couponSendConfigMapper; + + @Autowired + private WxCouponSendService wxCouponSendService; + @Autowired + private WxScoreRulesService wxScoreRulesService; + + @Autowired + private MqBaseProducer mqBaseProducer; + @Autowired + private PushLimitService pushLimitService; + + + //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 + @Scheduled(cron = "0 0 6 * * ?") // 测试每天6点发券 + //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 + public void couponSendSchedule() { + + List mallList = wxMallMapper.findList(new WxMall()); + + if (mallList.size() == 0) { + logger.info("定时发券: No Mall info found"); + return; + } + + Date startTime = Date.from(LocalDateTime.now() + .with(TemporalAdjusters.firstDayOfMonth()) + .with(LocalTime.MIN) + .atZone(ZoneId.systemDefault()) + .toInstant()); + Date endTime = Date.from(LocalDateTime.now() + .with(TemporalAdjusters.lastDayOfMonth()) + .with(LocalTime.MAX) + .atZone(ZoneId.systemDefault()) + .toInstant()); + //查找所有couponSendConfig + Map mallConfigMap = getAllCouponSendConfig(EnumCouponSendSendType.TIMED.getCode()); + mallList.stream().forEach(mall -> { + //判断启用状态,状态为关闭时跳过不执行 + if (isCouponSendDisable(mallConfigMap, mall)) { + logger.info("定时发券: {}发券状态关闭, 任务跳过不执行", mall.getName()); + return; + } + WxLevelConfig wxLevelConfig = new WxLevelConfig(); + wxLevelConfig.setTenantId(mall.getTenantId()); + List levelConfigList = WxLevelConfigMapper.findList(wxLevelConfig); + levelConfigList = levelConfigList.stream() + .sorted(Comparator.comparing(WxLevelConfig::getPoints)) + .collect(Collectors.toList()); + + for (int levelIndex = 0; levelIndex < levelConfigList.size(); levelIndex++) { + WxLevelConfig l = levelConfigList.get(levelIndex); + if (l.getCapability() == null) + continue; + Integer levelStartScore = l.getPoints(); + Integer levelEndScore = levelIndex + 1 < levelConfigList.size() ? levelConfigList.get(levelIndex + 1).getPoints() : null; + + JSONObject jo = null; + Long result = null; + try { + jo = JSONObject.parseObject(l.getCapability()); + result = wxLevelConfigService.getCapabilitiesOfSendCarConpon(jo); + } catch (Exception e) { + logger.error("定时发券: 不能解析发券规则 levelId=" + l.getId() + e.getMessage()); + continue; + } + Long sendCount = result; + if (sendCount > 0) { + + WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(l.getTenantId()); + wxCUserBasicInfoDto.setLevelStartScore(levelStartScore); + wxCUserBasicInfoDto.setLevelEndScore(levelEndScore); + List wxCUserBasicInfoList = wxCUserBasicInfoMapper.findListByScore(wxCUserBasicInfoDto); + + logger.info("定时发券:给LEVEL[" + l.getLevel() + + "]积分[" + levelStartScore + "-" + levelEndScore + "]发券" + sendCount + "张"); + + wxCUserBasicInfoList.stream().forEach(cu -> { + + WxCouponSend wxCouponSend = new WxCouponSend(); + wxCouponSend.setTenantId(l.getTenantId()); + wxCouponSend.setSendType(EnumCouponSendSendType.TIMED.getCode()); + wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); + List couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); + int remain = couponSendList.stream().map(cs -> { + int count = cs.getRemainInventory(); + logger.info("定时发券:给[" + cu.getNickName() + + "]券[" + cs.getTitle() + "]还剩" + + count + "张"); + return count; + }).reduce(Integer::sum).get(); + + if (remain < sendCount) { + logger.error("定时发券:库存不足[" + cu.getNickName() + "]应发" + sendCount + "张,总共剩" + remain + "张"); + return; + } + + int sentCount = couponSendList.stream().map(cs -> { + Map params = new HashMap(); + params.put("tenantId", cs.getTenantId()); + params.put("cUserId", cu.getId()); + params.put("couponId", cs.getCouponId()); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("channelType", EnumCouponSendSendType.TIMED.getCode()); + int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); + logger.info("定时发券:已经给[" + cu.getNickName() + + "]券[" + cs.getTitle() + "] " + + count + "张"); + return count; + }).reduce(Integer::sum).get(); + + int remainSend = (int) (sendCount - sentCount); + logger.info("定时发券:给[" + cu.getNickName() + + "]总共已发送券" + sentCount + "张,还需发" + remainSend + "张"); + + for (int count = 0; count < remainSend; count++) { + boolean sent = false; + for (int couponIndex = 0; couponIndex < couponSendList.size(); couponIndex++) { + WxCouponSendVo cs = couponSendList.get(couponIndex); + if (cs.getRemainInventory() <= 0) + continue; + + // 发放免费券 + try { + WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cu.getId(), cs.getCouponId(), null); + wxCouponActionLogService.addOne(l.getTenantId(), cs.getCouponId(), couponOrder.getId(), cs.getSendType(), cs.getId()); + } catch (Exception e) { + logger.error("定时发券:发券失败 levelId=" + l.getId() + " couponId=" + cs.getCouponId() + " userId=" + cu.getId() + e.getMessage()); + continue; + } + + logger.info("定时发券:商场[" + mall.getName() + + "]会员等级[" + l.getLevel() + + "]发送券[" + cs.getTitle() + + "]给:" + cu.getNickName() + + " 电话-" + cu.getPhone() + + " id-" + cu.getId()); + sent = true; + break; + } + if (!sent) + break; + } + }); + } + } + }); + } + + /** + * 生日券发放 + */ + @Scheduled(cron = "0 30 8 * * ?") // 测试每天8:30点发券 + public void birthdayCouponSendSchedule() { + logger.info("生日发券: 任务开始"); + List mallList = wxMallMapper.findList(new WxMall()); + if (mallList.size() == 0) { + logger.info("生日发券: No Mall info found"); + return; + } + + Date startTime = Date.from(LocalDateTime.now() + .with(TemporalAdjusters.firstDayOfYear()) + .with(LocalTime.MIN) + .atZone(ZoneId.systemDefault()) + .toInstant()); + Date endTime = Date.from(LocalDateTime.now() + .with(TemporalAdjusters.lastDayOfYear()) + .with(LocalTime.MAX) + .atZone(ZoneId.systemDefault()) + .toInstant()); + + //查找所有couponSendConfig + Map mallConfigMap = getAllCouponSendConfig(EnumCouponSendSendType.BIRTHDAY.getCode()); + DateFormat df = new SimpleDateFormat("MM-dd"); + mallList.forEach(mall -> { + //判断启用状态,状态为关闭时跳过不执行 + if (isCouponSendDisable(mallConfigMap, mall)) { + logger.info("生日发券: {} 发券状态关闭, 任务跳过不执行", mall.getName()); + return; + } + //查找生日券 + WxCouponSend wxCouponSend = new WxCouponSend(); + wxCouponSend.setTenantId(mall.getTenantId()); + wxCouponSend.setSendType(EnumCouponSendSendType.BIRTHDAY.getCode()); + wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); + List couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); + if (CollectionUtils.isEmpty(couponSendList)) { + logger.info("生日发券: 会员生日券投放列表为空 couponSendList = {}, 任务跳过不执行", couponSendList); + return; + } + + WxCouponSend birthdayConfig = wxCouponSendService.getConfig(EnumCouponSendSendType.BIRTHDAY.getCode(), mall.getTenantId()); + String conditions = birthdayConfig.getConditions(); + JSONObject configJo = null; + try { + configJo = JSONObject.parseObject(conditions); + } catch (Exception e) { + logger.error("生日发券: 解析conditions异常: {}", e.getMessage()); + } + if (Objects.isNull(conditions) || Objects.isNull(configJo)) { + logger.info("生日发券: 会员生日券配置解析异常 conditions = {}, 任务跳过不执行", conditions); + return; + } + + //默认生日当天发送 + int beforeDays = 0; + if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) { + beforeDays = configJo.getIntValue(WxCouponSend.KEY_BEFOREDAYS); + } + + //未来 ${beforeDays}天时间 + Calendar today = Calendar.getInstance(); + Date begin = today.getTime(); + today.add(Calendar.DAY_OF_YEAR, beforeDays); + Date end = today.getTime(); + + List wxCUserBasicInfoList = wxCUserBasicInfoMapper.findBirthdayList(mall.getTenantId(), df.format(begin.getTime()), df.format(end.getTime())); + if (CollectionUtils.isEmpty(wxCUserBasicInfoList)) { + logger.info("生日发券: {} 满足发券的用户列表为空 wxCUserBasicInfoList = {}, 任务跳过不执行", mall.getName(), wxCUserBasicInfoList); + return; + } + //过滤掉已经发送过生日券的用户 + List newUserList = wxCUserBasicInfoList.stream().filter(wxCUserBasicInfo -> { + Calendar now = Calendar.getInstance(); + //本次之前的20分钟 + now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) - 30); + Map params = new HashMap<>(); + params.put("tenantId", wxCUserBasicInfo.getTenantId()); + params.put("cUserId", wxCUserBasicInfo.getId()); + params.put("couponId", null); + params.put("startTime", startTime); + params.put("endTime", now.getTime()); + params.put("channelType", EnumCouponSendSendType.BIRTHDAY.getCode()); + int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); + //判断之前是否发送过会员生日券 + if (count > 0) { + logger.info("生日发券: 已经给会员{}发送过生日券, 本次不再发送", wxCUserBasicInfo.getNickName()); + return false; + } else { + return true; + } + }).collect(Collectors.toList()); + + List couponSendedUsers = new ArrayList<>(); + for (WxCouponSendVo cs : couponSendList) { + if (cs.getRemainInventory() <= 0) { + logger.info("生日发券: [title={},id={}]卡券库存不足!", cs.getTitle(), cs.getCouponId()); + continue; + } + for (WxCUserBasicInfo cu : newUserList) { + // 发放生日券 + try { + WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cu.getId(), cs.getCouponId(), null); + wxCouponActionLogService.addOne(cu.getTenantId(), cs.getCouponId(), couponOrder.getId(), cs.getSendType(), cs.getId()); + couponSendedUsers.add(cu); + } catch (Exception e) { + logger.error("定时发券:发券失败 levelId=" + cu.getId() + " couponId=" + cs.getCouponId() + " userId=" + cu.getId() + e.getMessage()); + continue; + } + logger.info("定时发券:商场[" + mall.getName() + + "]会员生日[" + cu.getBirthdate().toInstant() + + "]发送券[" + cs.getTitle() + + "]给:" + cu.getNickName() + + " 电话-" + cu.getPhone() + + " id-" + cu.getId()); + } + } + + int birthdayScale = CreditUtil.getBirthdayScoreScale(mall.getTenantId(), wxScoreRulesService); + for (WxCUserBasicInfo cu : couponSendedUsers) { + // 记录积分倍率日期 + try { + WxCUserBasicInfo toUpdate = new WxCUserBasicInfo(); + toUpdate.setId(cu.getId()); + toUpdate.setScoreDate(cu.getBirthdate()); + wxCUserBasicInfoMapper.updateByPrimaryKeySelective(toUpdate); + } catch (Exception e) { + logger.error("定时发券:记录积分倍率日期失败 {}", e.getMessage()); + continue; + } + //短信限制 + //boolean couponLimit = pushLimitService.checkMsg(cu.getTenantId()); + //if (couponLimit) { + sendSMS(cu, mall, birthdayScale); + //} else { + // logger.info("生日发券: {}", ErrorCode.PUSH_LIMIT_NOT_INRANG.getMessage()); + //} + } + }); + logger.info("生日发券: 任务结束"); + } + + private Map getAllCouponSendConfig(Integer sendType) { + WxCouponSendConfig queryConfig = new WxCouponSendConfig(); + queryConfig.setSendType(sendType); + List couponSendConfigList = couponSendConfigMapper.findList(queryConfig); + return CollectionUtils.isNotEmpty(couponSendConfigList) ? + couponSendConfigList.stream().collect(Collectors.toMap(WxCouponSendConfig::getTenantId, WxCouponSendConfig::getValue)) : null; + } + + private boolean isCouponSendDisable(Map mallConfigMap, WxMall mall) { + if (mallConfigMap != null && Objects.nonNull(mallConfigMap.get(mall.getTenantId()))) { + Integer disable = mallConfigMap.get(mall.getTenantId()); + return Objects.equals(disable, EnumEnableType.Disable.getCode()); + } + return false; + } + + private void sendSMS(WxCUserBasicInfo cUserBasicInfo, WxMall mall, int birthdayScale) { + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setReceiver(cUserBasicInfo.getPhone()); + wxMsgRecord.setTenantId(cUserBasicInfo.getTenantId()); + Map dynamicContentMap = new HashMap<>(); + + if (birthdayScale > WxScoreRules.DEFAULT_SCALE) { + float creditScale = new BigDecimal(birthdayScale).divide(new BigDecimal(WxScoreRules.DEFAULT_SCALE)).floatValue(); + dynamicContentMap.put("creditScale", String.valueOf(creditScale)); + wxMsgRecord.setModelType(EnumMsgModel.COUPON_BIRTHDAY_OPENED.getCode()); + } else { + //没有配置积分规则 + wxMsgRecord.setModelType(EnumMsgModel.COUPON_BIRTHDAY_OPENED_NO.getCode()); + } + dynamicContentMap.put("userName", Objects.isNull(cUserBasicInfo.getNickName()) ? "" : cUserBasicInfo.getNickName()); + dynamicContentMap.put("mallName", mall.getName()); + wxMsgRecord.setDynamicContentMap(dynamicContentMap); + 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/OrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java index d8e03b841..b362e5a7d 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java @@ -103,7 +103,7 @@ public class OrderExpiringSchedule { // 拼团取消 WxOrder order = new WxOrder(); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); - wxOrderMapper.select(order).parallelStream().forEach(o -> { + wxOrderMapper.select(order).stream().forEach(o -> { try { orderGroupExpired(o); } catch (Exception e) { @@ -114,7 +114,7 @@ public class OrderExpiringSchedule { //拼团过期 order = new WxOrder(); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()); - wxOrderMapper.select(order).parallelStream().forEach(o -> { + wxOrderMapper.select(order).stream().forEach(o -> { try { returnMoney(o); } catch (Exception e) { @@ -125,7 +125,7 @@ public class OrderExpiringSchedule { //拼团券下架 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); - wxOrderMapper.select(order).parallelStream().forEach(o -> { + wxOrderMapper.select(order).stream().forEach(o -> { try { returnMoney(o); } catch (Exception e) { @@ -135,7 +135,7 @@ public class OrderExpiringSchedule { //参团失败 order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); - wxOrderMapper.select(order).parallelStream().forEach(o -> { + wxOrderMapper.select(order).stream().forEach(o -> { try { returnMoney(o); } catch (Exception e) { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java new file mode 100644 index 000000000..7241c1e13 --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java @@ -0,0 +1,226 @@ +package com.iformall.schedule; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.domain.dto.KwMeterDataDto; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.KwMeterDataVo; +import com.iformall.enums.*; +import com.iformall.mapper.KwMerchantMeterMapper; +import com.iformall.mapper.WxMerchantPowerBillConfigMapper; +import com.iformall.mapper.WxMerchantShopMapper; +import com.iformall.mapper.WxPowerBillAutoConfigMapper; +import com.iformall.service.WxBillDailyService; +import com.iformall.service.kw.KwMeterDataService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author gongbiao + */ + +@Component +public class PowerBillAutoBuildSchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxPowerBillAutoConfigMapper wxPowerBillAutoConfigMapper; + + @Autowired + private WxMerchantPowerBillConfigMapper wxMerchantPowerBillConfigMapper; + + @Autowired + private WxBillDailyService wxBillDailyService; + + @Autowired + private WxMerchantShopMapper wxMerchantShopMapper; + + @Autowired + KwMeterDataService kwMeterDataService; + + @Autowired + KwMerchantMeterMapper kwMerchantMeterMapper; + + /** + * 每天5点执行 + */ + @Scheduled(cron = "0 0 5 * * ?") + public void powerBillAutoConfigStart() { + logger.info("自动生成电费账单开始...."); + int dayOfMonth = LocalDate.now().getDayOfMonth(); + List wxPowerBillAutoConfigs = wxPowerBillAutoConfigMapper.selectAll() + .stream().filter(config -> StringUtils.isNotEmpty(config.getUnitPrice()) + && StringUtils.isNotEmpty(config.getBuildDay()) + && StringUtils.isNotEmpty(config.getReceiveDay())) + .collect(Collectors.toList()); + for (int i = 0; i < wxPowerBillAutoConfigs.size(); i++) { + WxPowerBillAutoConfig wxPowerBillAutoConfig = wxPowerBillAutoConfigs.get(i); + if (String.valueOf(dayOfMonth).equals(wxPowerBillAutoConfig.getBuildDay())) { + merchantPowerBillConfigStart(wxPowerBillAutoConfig); + } + } + logger.info("自动生成电费账单结束...."); + } + + private void merchantPowerBillConfigStart(WxPowerBillAutoConfig wxPowerBillAutoConfig) { + WxMerchantPowerBillConfig wxMerchantPowerBillConfig = new WxMerchantPowerBillConfig(); + wxMerchantPowerBillConfig.setTenantId(wxPowerBillAutoConfig.getTenantId()); + List wxMerchantPowerBillConfigs = wxMerchantPowerBillConfigMapper.select(wxMerchantPowerBillConfig); + for (int i = 0; i < wxMerchantPowerBillConfigs.size(); i++) { + buildPowerBill(wxMerchantPowerBillConfigs.get(i), wxPowerBillAutoConfig); + } + } + + private void buildPowerBill(WxMerchantPowerBillConfig wxMerchantPowerBillConfig, WxPowerBillAutoConfig wxPowerBillAutoConfig) { + + Map monthDate = getLastMonthDate(); + Date startdate = monthDate.get("startdate"); + Date enddate = monthDate.get("enddate"); + Date lastdate = monthDate.get("lastdate"); + MallUserInfo mallUserInfo = getMallUserInfo(); + WxBillDaily wxBillDaily = getBillDaily(wxMerchantPowerBillConfig); + Date receiveDate = getReceiveDate(Integer.parseInt(wxPowerBillAutoConfig.getReceiveDay())); + long receivePay; + String unitPrice; + long usedPower = 0L; + Long merchantId = wxMerchantPowerBillConfig.getMerchantId(); + if (wxMerchantPowerBillConfig.getBuildWay().equals(EnumPowerBillBuildWay.METER.getCode())) { + //根据日期拉取电量 单价 * 电量 = 电费 + usedPower = getUsedPower(startdate, lastdate, merchantId); + if (usedPower == 0) { + logger.info("没有电量使用,不生成账单>>>>商户ID:" + merchantId); + return; + } + //按电表 单价从商户配置表中取 因为会修改 + unitPrice = wxMerchantPowerBillConfig.getPrice(); + receivePay = new BigDecimal(unitPrice).multiply(new BigDecimal(usedPower)) + .setScale(0, RoundingMode.HALF_EVEN).longValue(); + } else { + //按固定金额 单位从统一配置表中取 + unitPrice = wxPowerBillAutoConfig.getUnitPrice(); + String price = wxMerchantPowerBillConfig.getPrice(); + receivePay = new BigDecimal(price).multiply(new BigDecimal(100)).longValue(); + } + + JSONArray priceDetals = new JSONArray(); + JSONObject priceDetal = new JSONObject(); + priceDetal.put("key", "unitPrice"); + priceDetal.put("value", unitPrice); + priceDetals.add(priceDetal); + priceDetal = new JSONObject(); + priceDetal.put("key", "power"); + priceDetal.put("value", new BigDecimal(usedPower).divide(new BigDecimal(100)).toPlainString()); + priceDetals.add(priceDetal); + + wxBillDaily.setReceivePay(receivePay); + wxBillDaily.setNeedPay(receivePay); + wxBillDaily.setReceiveDate(receiveDate); + wxBillDaily.setStarttime(startdate); + wxBillDaily.setEndtime(enddate); + wxBillDaily.setPriceDetail(priceDetals.toJSONString()); + wxBillDaily.setBuildWay(EnumBillDailyBuildWay.AUTO.getCode()); + wxBillDailyService.saveOrUpdate(wxBillDaily, mallUserInfo); + + } + + private int getUsedPower(Date startdate, Date lastdate, Long merchantId) { + KwMerchantMeter kwMerchantMeter = new KwMerchantMeter(); + kwMerchantMeter.setMerchantId(merchantId); + kwMerchantMeter.setStatus(EnumMerchantMeterStatus.VALID.getCode()); + List merchantMeterList = kwMerchantMeterMapper.select(kwMerchantMeter); + int usedPower = 0; + if (!merchantMeterList.isEmpty()) { + int size = merchantMeterList.size(); + for (int i = 0; i < size; i++) { + KwMerchantMeter merchantMeter = merchantMeterList.get(i); + KwMeterDataDto kwMeterDataDto = new KwMeterDataDto(); + kwMeterDataDto.setTenantId(merchantMeter.getTenantId()); + kwMeterDataDto.setMeterId(merchantMeter.getMeterId()); + kwMeterDataDto.setStartTime(startdate); + kwMeterDataDto.setEndTime(lastdate); + KwMeterDataVo power = kwMeterDataService.getPower(kwMeterDataDto); + if (power != null) { + Optional usedPowerOptional = Optional.ofNullable(power.getUsedPower()); + Integer integer = usedPowerOptional.orElse(0); + usedPower += integer; + } + } + } + return usedPower; + } + + private WxBillDaily getBillDaily(WxMerchantPowerBillConfig wxMerchantPowerBillConfig) { + WxBillDaily wxBillDaily = new WxBillDaily(); + Long merchantId = wxMerchantPowerBillConfig.getMerchantId(); + wxBillDaily.setShopId(getShopId(merchantId)); + wxBillDaily.setTenantId(wxMerchantPowerBillConfig.getTenantId()); + wxBillDaily.setMerchantId(merchantId); + wxBillDaily.setMerchantName(wxMerchantPowerBillConfig.getMerchantName()); + wxBillDaily.setType(EnumBillDailyType.POWER.getCode()); + wxBillDaily.setRentShopType(wxMerchantPowerBillConfig.getMerchantType()); + wxBillDaily.setPay(0L); + wxBillDaily.setPayWay(EnumBillPayWay.OTHER.getCode()); + return wxBillDaily; + } + + private Map getLastMonthDate() { + ZoneId zoneId = ZoneOffset.systemDefault(); + LocalDate now = LocalDate.now().minusMonths(1L); + now = now.with(TemporalAdjusters.firstDayOfMonth()); + Instant start = now.atStartOfDay().atZone(zoneId).toInstant(); + Date first = Date.from(start); + now = now.with(TemporalAdjusters.lastDayOfMonth()); + Instant end = now.atStartOfDay().atZone(zoneId).toInstant(); + Date last = Date.from(end); + now = now.with(TemporalAdjusters.firstDayOfNextMonth()); + Instant lastday = now.atStartOfDay().atZone(zoneId).toInstant(); + Date next = Date.from(lastday); + Map dateMap = new HashMap<>(3); + dateMap.put("startdate", first); + dateMap.put("enddate", last); + dateMap.put("lastdate", next); + return dateMap; + } + + private Date getReceiveDate(int day) { + ZoneId zoneId = ZoneOffset.systemDefault(); + LocalDate of = LocalDate.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), day); + Instant instant = of.atStartOfDay().atZone(zoneId).toInstant(); + return Date.from(instant); + } + + private Long getShopId(Long merchantId) { + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setMerchantId(merchantId); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List select = wxMerchantShopMapper.select(wxMerchantShop); + if (!select.isEmpty()) { + return select.get(0).getShopId(); + } + return 0L; + } + + private MallUserInfo getMallUserInfo() { + MallUserInfo mallUserInfo = new MallUserInfo(); + mallUserInfo.setId(0L); + mallUserInfo.setName("系统生成"); + mallUserInfo.setPhone("0"); + return mallUserInfo; + } + +} \ 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 bc029f63e..75ddd0c35 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -27,6 +27,7 @@ public enum ErrorCode{ SYS_EXTEND_JSON_ERROR(1012, "JSON格式异常"), SYS_REPEAT_SUBMIT_EXCEPTION(1013, "请勿重复操作"), REPORT_TYPE_UNKNOWN(1014, "不支持的报表类型"), + SYS_MCH_NOT_FOUND(1015, "微信商户号未找到"), /** * 菜单 @@ -52,6 +53,15 @@ public enum ErrorCode{ NET_TOKEN_INVALID(1052, "TOKEN无效"), NET_TOKEN_EMPTY(1053, "TOKEN不能为空"), + /** + * 第三方开发者 + */ + DEV_ID_NOT_FOUND(1200, "未知的第三方开发者"), + DEV_ID_IS_DISABLED(1201, "第三方开发者已被禁用"), + DEV_ID_REQ_KEY_IS_NULL(1202, "开发者request key未设置"), + DEV_ID_RES_KEY_IS_NULL(1203, "开发者response Key未设置"), + DEV_ID_SIGN_ERR(1204, "开发者签名错误"), + /** * 业务级别 @@ -88,6 +98,7 @@ public enum ErrorCode{ MERCHANT_REPORT_DATE_NOT_VALID(999, "上报日期大于当天"), MERCHANT_NAME_IS_FOUND(2014, "商户名称已存在"), MERCHANT_CAR_NOT_DEL(2015, "停车商户不能被删除"), + MERCHANT_BUSER_NOT_VALID(2016, "商户用户不存在或已被禁用"), /** * 券 */ @@ -123,6 +134,7 @@ public enum ErrorCode{ COUPON_ONLY_FOR_NEW_MEMBER(2044, "您已经参加过新会员活动"), COUPON_ALREADY_IN_NEW_MEMBER(2045, "您正在参加别的新会员活动"), + COUPON_VALID_NOT_SUPPORTED(2046, "券类型不支持"), /** * 车流 2040 */ @@ -179,6 +191,8 @@ public enum ErrorCode{ COUPON_ORDER_MERANT_IS_NULL(4005, "卡券商户不存在"), COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE(4006, "卡券使用期还未开始"), COUPON_ORDER_IS_LATER_THAN_VALIDDATE(4007, "卡券使用期已结束"), + COUPON_ORDER_IS_PRE_VERIFY(4008, "卡券已被预核销"), + COUPON_SEND_LIMIT_VERIFY(4009, "商户购券数错误"), /** * 卡 @@ -188,11 +202,14 @@ public enum ErrorCode{ CARD_IS_NOT_COST(9003, "优惠卡未消费,退款请用卡券退款,钱直接退回购买人手里"), CARD_TRANSFERED(9004, "卡已被领取"), CARD_TRANSFER_INVALID(9005, "卡转赠已失效"), + CARD_SUBSIDY_NOT_SET(9006, "卡补贴未设置"), /** * 卡消费 */ CARD_SPEND_IS_PAID(9050, "卡消费已支付"), + CARD_SPEND_IS_NOT_PREV(9051, "卡消费不是预消费订单"), + CARD_SPEND_IS_NOT_FOUND(9052, "卡消费信息未找到"), /** * 砍价 @@ -219,6 +236,24 @@ public enum ErrorCode{ UNIFORM_SEND_FAILED(11010, "小程序统一消息发送失败"), USER_LOGIN_FAILED(11011, "微信用户未登录或登录有问题"), + /** + * POS + */ + POS_CONFIG_NOT_FOUND(11100, "POS会员相关未设置"), + POS_CONFIG_MEM_DISCOUNT_DISABLE(11101, "POS会员折扣未启用"), + POS_CONFIG_MEM_COUPON_DISABLE(11102, "POS会员优惠券未启用"), + POS_CONFIG_MEM_CARD_DISABLE(11103, "POS会员卡支付未启用"), + POS_COUPON_ORDER_NOT_VERIFY(11104, "此券未核销"), + POS_COUPON_ORDER_VERIFY_NOT_CANCEL(11105, "此券核销无法取消"), + POS_COUPON_PAY_ERROR(11106, "POS券包支付异常"), + POS_COUPON_REFUND_ERROR(11107, "POS券包退款异常"), + POS_CARD_PAY_NOT_CANCEL(11108, "卡支付无法取消"), + POS_CARD_ONLY_SUPPORT_PAY(11109, "卡支付只支持支付"), + POS_CARD_OWNER_NOT_EQUAL(11110, "卡拥有者不对应"), + POS_ORDER_HAD_SYNCED(11111, "订单已同步"), + POS_ORDER_NOT_FOUND(11112, "订单未找到"), + POS_CMD_FAIL(11200, "POS命令错误"), + /** * 支付 @@ -267,9 +302,18 @@ public enum ErrorCode{ * 核销 */ VERIFY_ERROR(12050, "核销异常"), + VERIFY_PRE_BUSER_NOT_EQUAL(12051, "预核销操作员不一致,请先取消上次预核销"), + VERIFY_PRE_POS_ORDER_IS_EMPTY(12052, "预核销POS订单ID为空"), + VERIFY_PRE_POS_ORDER_NOT_EQUAL(12053, "预核销POS订单不一致,请先取消上次预核销"), + VERIFY_PRE_POS_ORDER_PRICE_ISSUE(12054, "预核销券金额失败,请确定券金额是否合适"), + VERIFY_BUSER_MERCHANT_NOT_BELONG(12055, "核销员不属于此商户"), + VERIFY_POS_ORDER_NOT_EQUAL(12056, "核销POS订单不一致,请先取消上次预核销"), + VERIFY_COUPON_TYPE_NOT_SUPPORT(12057, "核销不支持此券类型"), + VERIFY_MANJIAN_USER_PRICE_NOT_TOUCH(12058, "金额未达到满减券使用金额"), MSG_REPEAT_SEND(12061, "短信重复发送"), VERIFY_COUPON_ORDER_MERCHANT_IS_NULL(12062, "卡券核销失败,请查看适用门店"), + /** * 解单 */ @@ -451,12 +495,19 @@ public enum ErrorCode{ ACTIVITY_JOIN_TIME_END(30003, "活动报名时间已结束"), ACTIVITY_SEND_ERROR(30004, "活动投放到宣传页失败,宣传页显示已达七条上限!"), ACTIVITY_TIME_ERROR(30005, "活动报名结束时间不能大于活动结束时间"), + ACTIVITY_WAIT_CONFIRMED(30006, "您报名的活动还在审核中"), + ACTIVITY_EXPIRED(30007, "您报名的活动已过期"), /** * 文件上传 */ PICTURE_SIZE_EXCEED(40001, "图片超过2M限制"), + /** + * 电费生成配置 + */ + POWER_BILL_CONFIGU_NOT_FOUND(50001, "未配置电费账单生成规则"), + ; 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 f72027687..3743582f8 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java @@ -42,7 +42,10 @@ public class WxCUserBasicInfoDto extends BaseEntity { @Transient @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") private String tenantId; - + + @Transient + private Integer reportType; + @Transient private Date birthStartTime; @@ -73,11 +76,9 @@ public class WxCUserBasicInfoDto extends BaseEntity { @Transient List tagIds; - @Transient private String phones; - @Transient @io.swagger.annotations.ApiModelProperty(value="1查询导入的数据",name="queryImport") protected Integer queryImport; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/BaseEntity.java b/mallinkService/src/main/java/com/iformall/domain/po/BaseEntity.java index 08d80ff93..1a3e2ce7b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/BaseEntity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/BaseEntity.java @@ -30,6 +30,14 @@ public class BaseEntity implements Serializable { @Transient private String sortColumns; + @Transient + protected String floorForRule; + + @Transient + protected String businessForRule; + + @Transient + protected String[] tempShop; public String getSortColumns() { if(StringUtils.isBlank(sortColumn)){ @@ -166,6 +174,12 @@ public class BaseEntity implements Serializable { Date_ASC("`date` ASC"), Date_DESC("`date` DESC"), + + TradeAmt_ASC("`trade_amt` ASC"), + TradeAmt_DESC("`trade_amt` DESC"), + + ReportDate_ASC("`report_date` ASC"), + ReportDate_DESC("`report_date` DESC"), ; private String value; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/KwMeter.java b/mallinkService/src/main/java/com/iformall/domain/po/KwMeter.java index d2685f06e..e351376ea 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/KwMeter.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/KwMeter.java @@ -4,12 +4,10 @@ import cn.afterturn.easypoi.excel.annotation.Excel; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.ToString; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -86,10 +84,13 @@ public class KwMeter extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "波特率(1200,2400,9600)", name = "bandrate") private Integer bandrate; - @Excel(name = "商户", width = 20, orderNum = "8") @Transient + @Excel(name = "商户", width = 20, orderNum = "8") private String merchantName; + @Transient + private Long merchantId; + @Transient private Integer merchantMeterStatus; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MallPermission.java b/mallinkService/src/main/java/com/iformall/domain/po/MallPermission.java index 09a35057d..7c44ba575 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/MallPermission.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/MallPermission.java @@ -28,6 +28,9 @@ public class MallPermission extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="父编号ID,一级菜单为0",name="parentId") private Long parentId; @Transient + @io.swagger.annotations.ApiModelProperty(value="原父编号ID",name="origParentId") + private Long origParentId; + @Transient @io.swagger.annotations.ApiModelProperty(value="父菜单",name="parentName") private String parentName; @io.swagger.annotations.ApiModelProperty(value="是否可用 Y/N",name="permission") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MallRolePermission.java b/mallinkService/src/main/java/com/iformall/domain/po/MallRolePermission.java index 9a6af2b22..dc120e6ce 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/MallRolePermission.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/MallRolePermission.java @@ -18,7 +18,11 @@ public class MallRolePermission extends BaseEntity { protected Long id; @Transient - protected List ids; + protected List ids; + + @Transient + protected List permissionIds; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java b/mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java new file mode 100644 index 000000000..b117f6226 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/PosActionLog.java @@ -0,0 +1,41 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import java.math.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "pos_action_log") +@Data +public class PosActionLog implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="访问url",name="url") + private String url; + @io.swagger.annotations.ApiModelProperty(value="ip地址",name="ip") + private String ip; + @io.swagger.annotations.ApiModelProperty(value="http访问",name="method") + private String method; + @io.swagger.annotations.ApiModelProperty(value="api发起时间",name="startTime") + private Long startTime; + @io.swagger.annotations.ApiModelProperty(value="api发起时间",name="endTime") + private Long endTime; + @io.swagger.annotations.ApiModelProperty(value="访问花费时间",name="costTime") + private Integer costTime; + @io.swagger.annotations.ApiModelProperty(value="命令请求JSON",name="reqJson") + private String reqJson; + @io.swagger.annotations.ApiModelProperty(value="返回结果",name="resJson") + private String resJson; + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/PosCouponOrderVerify.java b/mallinkService/src/main/java/com/iformall/domain/po/PosCouponOrderVerify.java new file mode 100644 index 000000000..22221eef1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/PosCouponOrderVerify.java @@ -0,0 +1,37 @@ +package com.iformall.domain.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.*; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; +import javax.persistence.Id; + +@Table(name = "pos_coupon_order_verify") +@Data +@EqualsAndHashCode(callSuper = true) +public class PosCouponOrderVerify extends BaseEntity { + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="券包ID",name="couponOrderId") + private Long couponOrderId; + @io.swagger.annotations.ApiModelProperty(value="POS订单ID",name="posOrderId") + private Long posOrderId; + @io.swagger.annotations.ApiModelProperty(value="状态,0-使用中,1-禁用",name="state") + private Integer state; + @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/WxScoreValidityPeriod.java b/mallinkService/src/main/java/com/iformall/domain/po/PosMallConfig.java similarity index 50% rename from mallinkService/src/main/java/com/iformall/domain/po/WxScoreValidityPeriod.java rename to mallinkService/src/main/java/com/iformall/domain/po/PosMallConfig.java index b0b90257c..87a449eef 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxScoreValidityPeriod.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/PosMallConfig.java @@ -1,35 +1,36 @@ package com.iformall.domain.po; import lombok.Data; +import lombok.EqualsAndHashCode; import javax.persistence.*; import java.util.*; import javax.persistence.Transient; import java.util.List; import javax.persistence.Id; -import java.io.Serializable; -@Table(name = "wx_score_validity_period") +@Table(name = "pos_mall_config") @Data -public class WxScoreValidityPeriod extends BaseEntity { +@EqualsAndHashCode(callSuper = true) +public class PosMallConfig extends BaseEntity { private static final long serialVersionUID = 1L; @Id protected Long id; @Transient - protected List ids; - - + protected List ids; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; - - @io.swagger.annotations.ApiModelProperty(value="年",name="year") - private String year; - + @io.swagger.annotations.ApiModelProperty(value="会员折扣是否开启,0-禁用,1-可用",name="discount") + private Integer discount; + @io.swagger.annotations.ApiModelProperty(value="会员优惠券是否开启,0-禁用,1-单选可用,2-多选可用,",name="coupon") + private Integer coupon; + @io.swagger.annotations.ApiModelProperty(value="会员消费卡是否开启,0-禁用,1-可用",name="card") + private Integer card; @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/PosOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/PosOrder.java new file mode 100644 index 000000000..ffb669e1d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/PosOrder.java @@ -0,0 +1,44 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "pos_order") +@Data +public class PosOrder implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="POS订单ID",name="posOrderNo") + private String posOrderNo; + @io.swagger.annotations.ApiModelProperty(value="支付类型(1: 独立核销, 2:支付)",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="订单状态:0-待付款/待核销;1-已支付;2-已取消(限定时间内未付款);3-待退款;4-已退款;5-退款失败",name="orderStatus") + private Integer orderStatus; + @io.swagger.annotations.ApiModelProperty(value="b端用户",name="buUserId") + private Long buUserId; + @io.swagger.annotations.ApiModelProperty(value="0: 付款 1: 退款 2:自动退款 3:A端退款 10.核销",name="paymentType") + private Integer paymentType; + @io.swagger.annotations.ApiModelProperty(value="支付金额:允许有负数,退款时为负值。核销时,金额可以不填写",name="paymentType") + private Integer payment; + @io.swagger.annotations.ApiModelProperty(value="支付剩余金额",name="remainAmount") + private Integer remainAmount; + @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/PosPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/PosPayOrder.java new file mode 100644 index 000000000..a837da83f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/PosPayOrder.java @@ -0,0 +1,69 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import java.math.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "pos_pay_order") +@Data +public class PosPayOrder implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @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="订单ID",name="orderId") + private Long orderId; + @io.swagger.annotations.ApiModelProperty(value="b端用户",name="buUserId") + private Long buUserId; + @io.swagger.annotations.ApiModelProperty(value="支付类型(1:独立核销 2:支付核销 3:现金支付)",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="支付来源(0: 现金, 1:微信 2:支付核销 3:现金支付, 10:券)",name="payFrom") + private Integer payFrom; + @io.swagger.annotations.ApiModelProperty(value="支付金额(分)",name="payAmount") + private Integer payAmount; + @io.swagger.annotations.ApiModelProperty(value="支付发起时间",name="payTimeStart") + private Date payTimeStart; + @io.swagger.annotations.ApiModelProperty(value="支付结束时间",name="payTimeEnd") + private Date payTimeEnd; + @io.swagger.annotations.ApiModelProperty(value="微信预支付交易会话标识-发模板信息使用",name="prepayId") + private String prepayId; + @io.swagger.annotations.ApiModelProperty(value="微信生成的订单号",name="transactionId") + private String transactionId; + @io.swagger.annotations.ApiModelProperty(value="支付渠道: 0-微信 1-支付宝 2-银联 ",name="payVendor") + private Integer payVendor; + @io.swagger.annotations.ApiModelProperty(value="支付订单号",name="payOrderNo") + private String payOrderNo; + @io.swagger.annotations.ApiModelProperty(value="支付状态: 0-支付中;1-支付成功;2-支付失败",name="payOrderStatus") + private Integer payOrderStatus; + @io.swagger.annotations.ApiModelProperty(value="是否支持分账(0:不支持,1:支持)",name="share") + private Integer share; + @io.swagger.annotations.ApiModelProperty(value="分账金额(总金额扣掉手续费后的金额)",name="shareAmount") + private Integer shareAmount; + @io.swagger.annotations.ApiModelProperty(value="分账实际通道费",name="rateAmount") + private Integer rateAmount; + @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") + private String failReason; + @io.swagger.annotations.ApiModelProperty(value="扫码支付授权码",name="authCode") + private String authCode; + @io.swagger.annotations.ApiModelProperty(value="微信支付后获取的open_id",name="openId") + private String openId; + @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") + private Integer payEndFrom; + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java new file mode 100644 index 000000000..5fc34ee85 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/ThDevInfo.java @@ -0,0 +1,39 @@ +package com.iformall.domain.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.*; +import java.util.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; + +@Table(name = "th_dev_info") +@Data +@EqualsAndHashCode(callSuper = true) +public class ThDevInfo extends BaseEntity { + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="开发者ID",name="devId") + private String devId; + @io.swagger.annotations.ApiModelProperty(value="名称",name="name") + private String name; + @io.swagger.annotations.ApiModelProperty(value="类型(0:自用, 1:东软POS)",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="请求私钥",name="reqKey") + private String reqKey; + @io.swagger.annotations.ApiModelProperty(value="响应私钥",name="resKey") + private String resKey; + @io.swagger.annotations.ApiModelProperty(value="商户状态,0-使用中,1-禁用",name="state") + private Integer state; + @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/WxActivity.java b/mallinkService/src/main/java/com/iformall/domain/po/WxActivity.java index cf427477e..e75b2ba30 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxActivity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxActivity.java @@ -119,6 +119,8 @@ public class WxActivity extends BaseEntity { return "t:si:" + id; } + @io.swagger.annotations.ApiModelProperty(value = "常见问题选择", name = "selectques") + private String selectques; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxActivityJoin.java b/mallinkService/src/main/java/com/iformall/domain/po/WxActivityJoin.java index d37ac71d5..0c2c70da2 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxActivityJoin.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxActivityJoin.java @@ -57,7 +57,8 @@ public class WxActivityJoin extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "手机", name = "phone") private String phone; - @io.swagger.annotations.ApiModelProperty(value = "答案", name = "answer") + @Excel(name = "调查问券", width = 10, orderNum = "50") + @io.swagger.annotations.ApiModelProperty(value = "调查问券", name = "answer") private String answer; @Excel(name = "活动签到", replace = {"未签到_0", "已签到_1"}, width = 10, orderNum = "7") @io.swagger.annotations.ApiModelProperty(value = "签到状态1签到0未签到", name = "signIn") @@ -81,4 +82,8 @@ public class WxActivityJoin extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "状态", name = "statusStr") private String statusStr; + @Excel(name = "联系电话", width = 10, orderNum = "9") + @io.swagger.annotations.ApiModelProperty(value = "联系电话", name = "telphone") + private String telphone; + } 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 7150d717d..d3d57b81d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java @@ -106,5 +106,10 @@ public class WxBillDaily extends BaseEntity{ @io.swagger.annotations.ApiModelProperty(value = "结束时间", name = "endtime") private Date endtime; + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; + + @io.swagger.annotations.ApiModelProperty(value = "创建方式1手动2自动3导入", name = "buildWay") + private Integer buildWay; } 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 3d23f2c13..f38fb317d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java @@ -77,5 +77,7 @@ public class WxBillDeposit extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") private Integer payWay; - + + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; } 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 f6a584e60..1df316759 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java @@ -130,5 +130,6 @@ public class WxBillOther extends BaseEntity { @Transient private List> shops; - + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; } 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 920fd8f06..1a70376a0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java @@ -139,5 +139,6 @@ public class WxBillOtherDeposit extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "结束时间", name = "endtime") private Date endtime; - + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; } 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 dc1c949c1..1ab08ec51 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java @@ -184,4 +184,7 @@ public class WxBillProperty extends BaseEntity { private String latePayMoneyBefore; @Transient private String latePayMoneyUpdate; + + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; } 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 5fdbf2bbd..42e05dfd5 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java @@ -76,5 +76,7 @@ public class WxBillPropertyDeposit extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "支付方式:见枚举EnumBillPayWay", name = "payWay") private Integer payWay; - + + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; } 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 460af80d8..90709370b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java @@ -176,7 +176,6 @@ public class WxBillRent extends BaseEntity { @Transient private Long deposit; - @Transient @io.swagger.annotations.ApiModelProperty(value = "联营费率", name = "payRatio") private Long payRatio; @@ -185,7 +184,6 @@ public class WxBillRent extends BaseEntity { @Transient private Integer limitEnd; - @io.swagger.annotations.ApiModelProperty(value = "n日后开始计算滞纳金", name = "latePayRatio") @Transient private Integer latePayDay; @@ -194,5 +192,11 @@ public class WxBillRent extends BaseEntity { private String latePayMoneyBefore; @Transient private String latePayMoneyUpdate; - + private String busDiscountRatio; + + @io.swagger.annotations.ApiModelProperty(value = "冻结状态,0正常1冻结", name = "freeze") + private Integer freeze; + + @io.swagger.annotations.ApiModelProperty(value = "联营租金", name = "joinRentPrice") + private Long joinRentPrice; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java new file mode 100644 index 000000000..ee327710d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettle.java @@ -0,0 +1,100 @@ +package com.iformall.domain.po; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author luozukai + */ +@Table(name = "wx_bill_settle") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxBillSettle extends BaseEntity { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="结算单号",name="settleNumber") + @Excel(name="结算单号",width = 20,orderNum = "1") + private String settleNumber; + @Transient + @Excel(name="结算商户",width = 20,orderNum = "2") + private String merchantName; + @io.swagger.annotations.ApiModelProperty(value="商户id",name="merchantId") + private Long merchantId; + @io.swagger.annotations.ApiModelProperty(value="0待确认1未清算结余金额2结算完成",name="status") + @Excel(name="结算状态",width = 20,orderNum = "8") + private Integer status; + @io.swagger.annotations.ApiModelProperty(value="审核状态0未审核1审核中2审核完成3驳回4异常终止5撤回",name="applyStatus") + @Excel(name="审批状态",width = 20,orderNum = "9") + private Integer applyStatus; + @Excel(name="收款(元)",width = 20,orderNum = "4") + @io.swagger.annotations.ApiModelProperty(value="收款",name="receiveMoney") + private Long receiveMoney; + @io.swagger.annotations.ApiModelProperty(value="承付",name="payMoney") + @Excel(name="承付(元)",width = 20,orderNum = "5") + private Long payMoney; + @io.swagger.annotations.ApiModelProperty(value="结算时间",name="settletime") + @Excel(name="结算时间",width = 20,orderNum = "7") + private Date settletime; + + @Excel(name="创建时间",width = 20,orderNum = "3") + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime") + private Date createtime; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updatetime") + private Date updatetime; + + @Transient + @io.swagger.annotations.ApiModelProperty(value = "审批流参数", name = "flowParams") + private Map flowParams; + + //结余金额 + @Transient + @Excel(name="结算金额(元)",width = 20,orderNum = "6") + private Long balance; + + @Transient + @io.swagger.annotations.ApiModelProperty(value = "收款账单列表", name = "receiveBillIds") + private List receiveBillIds; + @Transient + @io.swagger.annotations.ApiModelProperty(value = "承付账单列表", name = "payBillIds") + private List payBillIds; + @Transient + @io.swagger.annotations.ApiModelProperty(value = "结单记录", name = "settleRecordList") + private List settleRecordList; + + + @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="清算方向 1商场结款 2商户结款",name="settleWay") + private Integer settleWay; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="流向 0流入 1流出",name="direction") + private Integer direction; + + @Transient + private Integer limitStart; + @Transient + private Integer limitEnd; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleBill.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleBill.java new file mode 100644 index 000000000..75b7469a6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleBill.java @@ -0,0 +1,53 @@ +package com.iformall.domain.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * @author luozukai + */ +@Table(name = "wx_bill_settle_bill") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxBillSettleBill extends BaseEntity { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value="结算单id",name="settleId") + private Long settleId; + @io.swagger.annotations.ApiModelProperty(value="类型: 0收款1承付",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="账单id",name="billId") + private Long billId; + @io.swagger.annotations.ApiModelProperty(value="账单类型: 1租金2押金3物业4水费5电费6其他7空调费",name="billType") + private Integer billType; + + + @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="billName") + @Transient + private String billName; + @io.swagger.annotations.ApiModelProperty(value="应收金额",name="receivePay") + @Transient + private String receivePay; + + @Transient + @io.swagger.annotations.ApiModelProperty(value="账单开始时间",name="starttime") + private Date starttime; + @Transient + @io.swagger.annotations.ApiModelProperty(value="账单结束时间",name="endtime") + private Date endtime; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleRecord.java new file mode 100644 index 000000000..96fbc27fd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillSettleRecord.java @@ -0,0 +1,54 @@ +package com.iformall.domain.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * @author luozukai + */ +@Table(name = "wx_bill_settle_record") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxBillSettleRecord extends BaseEntity { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="结算单id",name="settleId") + private Long settleId; + @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="settleMoney") + private Long settleMoney; + @io.swagger.annotations.ApiModelProperty(value="清算时间",name="settleTime") + private Date settleTime; + @io.swagger.annotations.ApiModelProperty(value="清算方式1现金2支付宝3微信4银行卡转账5其他",name="settleWay") + private Integer settleWay; + @io.swagger.annotations.ApiModelProperty(value="结余",name="balance") + private Long balance; + @io.swagger.annotations.ApiModelProperty(value="明细",name="detail") + private String detail; + @io.swagger.annotations.ApiModelProperty(value="描述",name="desc") + private String desc; + + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime") + private Date createtime; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updatetime") + private Date updatetime; + + +} 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 f791ab351..4ee8f9789 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -2,6 +2,7 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -22,7 +23,10 @@ public class WxCUserBasicInfo extends BaseEntity { @Id protected Long id; - + + @JsonIgnore + protected Date scoreDate; + @Transient protected List ids; 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 47a592547..af9e19384 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java @@ -1,6 +1,7 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; +import com.iformall.common.ErrorCode; import lombok.Data; import lombok.EqualsAndHashCode; @@ -35,6 +36,8 @@ public class WxCardSpend extends BaseEntity { @Excel(name = "订单号", width = 20, orderNum = "5") @io.swagger.annotations.ApiModelProperty(value="订单账号",name="orderId") private Long orderId; + @io.swagger.annotations.ApiModelProperty(value="POS订单账号",name="posOrderId") + private Long posOrderId; @io.swagger.annotations.ApiModelProperty(value="ip地址",name="ip") private String ip; @io.swagger.annotations.ApiModelProperty(value="抵扣金额",name="deductionAmount") @@ -60,9 +63,12 @@ public class WxCardSpend extends BaseEntity { private Date updateDate; @Excel(name = "支付状态", width = 20, orderNum = "11", replace = {"未支付_0", "已分账_1", "已人工分账_2"}) - @io.swagger.annotations.ApiModelProperty(value="支付状态(0:未分帐, 1:已分账, 2:已人工分账)",name="payStatus") + @io.swagger.annotations.ApiModelProperty(value="支付状态(0:未分帐, 1:已分账, 2:已人工分账, 10:预支付(POS))",name="payStatus") private Integer payStatus; + @io.swagger.annotations.ApiModelProperty(value="来源(0:C端小程序扫一扫, 1:POS支付)",name="payFrom") + private Integer payFrom; + @Transient @Excel(name = "消费金额(元)", width = 20, orderNum = "7") private String deductionAmountStr; 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 75807c1c2..fe3db4917 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -39,7 +39,7 @@ public class WxCouponOrder extends BaseEntity{ private Long orderId; @io.swagger.annotations.ApiModelProperty(value = "该订单对应券的实际过期时间 ", name = "expiredTime") private Date expiredTime; - @io.swagger.annotations.ApiModelProperty(value = "状态:0-待使用 1-已核销 2-已过期 3-已作废 4-卡使用中 5-卡已过期 6-卡已用完 7-卡已线下退款", name = "couponOrderStatus") + @io.swagger.annotations.ApiModelProperty(value = "状态:0-待使用 1-已核销 2-已过期 3-已作废 4-卡使用中 5-卡已过期 6-卡已用完 7-卡已线下退款 100-预核销", name = "couponOrderStatus") private Integer couponOrderStatus; @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createDate") private Date createDate; @@ -51,6 +51,9 @@ public class WxCouponOrder extends BaseEntity{ @io.swagger.annotations.ApiModelProperty(value="过期退款(0:正常,1不退)",name="autoRefund") private Integer autoRefund; + @io.swagger.annotations.ApiModelProperty(value="核销类型(0:B端核销, 1:POS独立核销 2:POS交易核销)",name="verifyType") + private Integer verifyType; + @Transient private String couponName; @Transient 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 04730bb92..cb1b82335 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -15,12 +16,89 @@ import java.util.List; @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class WxCouponSend extends BaseEntity { + + /** + * 卡券ids + */ + @Transient + public static final String KEY_COUPONIDS = "couponIds" ; + /** + * beforeDays + */ + @Transient + public static final String KEY_BEFOREDAYS = "beforeDays" ; + /** + * limit 商户购券数 + */ + @JsonIgnore + @Transient + public static final String KEY_MERCHANT_LNVENTORY = "merchantLnventory" ; + + /** + * limit 商户注券数 + */ + @JsonIgnore + @Transient + public static final String KEY_MERCHANT_SEND = "merchantSend" ; + + /** + * limit 商户注券数 + */ + @JsonIgnore + @Transient + public static final String KEY_MERCHANT_REMAIN = "merchantRemain" ; + + /** + * 排序-商户购券数 + */ + @JsonIgnore + public static final String SORT_MERCHANT_LNVENTORY = "merchantLnventory" ; + + /** + * 排序-商户已发数 + */ + @JsonIgnore + public static final String SORT_MERCHANT_SEND = "merchantSend" ; + + /** + * 排序-商户剩余数 + */ + @JsonIgnore + public static final String SORT_REMAIN = "merchantRemain" ; + @Id protected Long id; @Transient protected List ids; + /** + * 商户购券数 + */ + @Transient + protected Integer merchantLnventory; + + /** + * 商户已发数 + */ + @Transient + protected Integer merchantSend; + + /** + * 商户剩余数 + */ + @Transient + protected Integer merchantRemain; + + /**发卷所属商户名**/ + @Transient + private String merchantName; + /** + * 商户ID + */ + @Transient + private Long merchantId; + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; @io.swagger.annotations.ApiModelProperty(value="卡券id",name="couponId") @@ -28,11 +106,11 @@ public class WxCouponSend extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="券名称",name="title") private String title; - @io.swagger.annotations.ApiModelProperty(value="发券方式(1.主动领取,2.停车发券,3.核销发券)",name="sendType") + @io.swagger.annotations.ApiModelProperty(value="2:停车发券 3:核销发券 4: B端刷卡发券 5:商户发卷 6:定时发券 7:商户发券",name="sendType") private Integer sendType; @io.swagger.annotations.ApiModelProperty(value="发券条件",name="condition") private String conditions; - @io.swagger.annotations.ApiModelProperty(value="0:有效 1:无效",name="status") + @io.swagger.annotations.ApiModelProperty(value="0:有效 1:无效,全部时不传",name="status") private Integer status; @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") @@ -47,4 +125,13 @@ public class WxCouponSend extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "1是0否", name = "是否发送短信1是0否") private Integer sendSms; + @io.swagger.annotations.ApiModelProperty(value = "0未过期1已过期,全部时不传", name = "expired" ) + @Transient + private Integer expired; + + @JsonIgnore + @io.swagger.annotations.ApiModelProperty(value = "0未过期1已过期,全部时不传", name = "expired" ) + @Transient + private String sortCol ; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java index 1545a1983..86cc1c78f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCreditHistory.java @@ -64,7 +64,7 @@ public class WxCreditHistory extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="券ID(积分兑换券时生成)",name="couponId") private Long couponId; @io.swagger.annotations.ApiModelProperty(value="业态ID(计算新增积分时使用)",name="businessId") - private Long businessId; + private Integer businessId; @io.swagger.annotations.ApiModelProperty(value="花费",name="spend") private Integer spend; @io.swagger.annotations.ApiModelProperty(value="兑换用途",name="changePurpose") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxDataRuleTarget.java b/mallinkService/src/main/java/com/iformall/domain/po/WxDataRuleTarget.java new file mode 100644 index 000000000..1b3b730c3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxDataRuleTarget.java @@ -0,0 +1,41 @@ +package com.iformall.domain.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * @author gongbiao + */ +@Table(name = "wx_data_rule_target") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxDataRuleTarget extends BaseEntity { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value = "父级ID", name = "parent") + private Long parent; + @io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "name") + private String name; + @io.swagger.annotations.ApiModelProperty(value = "标签", name = "tag") + private String tag; + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createTime") + private Date createTime; + @io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updateTime") + private Date updateTime; + + @Transient + private List children; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java b/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java index 6c2b44b75..d1971b58f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java @@ -14,10 +14,12 @@ import javax.persistence.Id; @EqualsAndHashCode(callSuper = true) public class WxLevelConfig extends BaseEntity { private static final long serialVersionUID = 1L; - + @Transient + public static final int DEFAULT_SCALE = 10; + @Id protected Long id; - + @Transient protected List ids; @@ -42,6 +44,9 @@ public class WxLevelConfig extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="是否启用(0:未启用,启用1,2,3,分别对应wx_merchant_discount里的rate_vip1, rate_vip2, rate_vip3)",name="discountEnable") private Integer discountEnable; + @io.swagger.annotations.ApiModelProperty(value="积分倍率(默认值1.0)",name="scale") + private Integer scale ; + @Transient protected Long count; 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 20788363b..361f432fe 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java @@ -66,6 +66,9 @@ public class WxMall extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="分享封面图片",name="weappShareCoverImg") private String weappShareCoverImg; + @io.swagger.annotations.ApiModelProperty(value="POS小票二维码规则",name="posQrcodeRule") + private String posQrcodeRule; + @io.swagger.annotations.ApiModelProperty(value="销售类型",name="saleType") private Integer saleType; @io.swagger.annotations.ApiModelProperty(value="启用开始时间",name="validStart") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMallFloor.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMallFloor.java index ae9c496d7..a1b6da5cc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMallFloor.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMallFloor.java @@ -4,6 +4,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import javax.persistence.*; +import java.math.BigDecimal; import java.util.*; import javax.persistence.Transient; import java.util.List; @@ -31,6 +32,10 @@ public class WxMallFloor extends BaseEntity { private String floorName; @io.swagger.annotations.ApiModelProperty(value="底图路径",name="backgroundImg") private String backgroundImg; + @io.swagger.annotations.ApiModelProperty(value="总面积",name="totalArea") + private BigDecimal totalArea; + @io.swagger.annotations.ApiModelProperty(value="营业面积",name="operatingArea") + private BigDecimal operatingArea; @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") 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 32f39ab9c..eb8473c03 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -1,6 +1,10 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; +import com.iformall.domain.vo.WxShopVo; +import com.iformall.enums.EnumBusiness; +import com.iformall.enums.EnumSubBusiness; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -12,6 +16,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Table(name = "wx_merchant") @Data @@ -20,24 +25,42 @@ import java.util.Map; public class WxMerchant extends BaseEntity { @Id protected Long id; - + + @ApiModelProperty(name = "ids", value = "商户ID数组") @Transient protected List ids; @Transient private List userids; + @Transient private List shopids; @Transient private List shops; + @Transient + private List shopVos; + @Transient private List users; @Transient private Long rentContractId; + + @io.swagger.annotations.ApiModelProperty(value="商户名",name="name") + @Excel(name="商户名",width = 20,orderNum = "1") + private String name; + + @io.swagger.annotations.ApiModelProperty(value="联系人",name="linkPerson") + @Excel(name="联系人",width = 20,orderNum = "2") + private String linkPerson; + + @io.swagger.annotations.ApiModelProperty(value="联系方式",name="linkPhone") + @Excel(name="联系方式",width = 20,orderNum = "3") + private String linkPhone; + @Transient @Excel(name="租期开始时间",width = 20,format="yyyy-MM-dd",orderNum = "4") @io.swagger.annotations.ApiModelProperty(value="租期开始时间",name="rentalStartDate") @@ -48,139 +71,153 @@ public class WxMerchant extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="租期结束时间",name="rentalEndDate") private Date rentalEndDate; - @Transient - @io.swagger.annotations.ApiModelProperty(value="单价",name="price") - private BigDecimal price; - - @Transient - private Integer receivePeriod; + @Excel(name="商户状态",width = 20,orderNum = "6",replace = {"停用_0","正常_1"}) + @io.swagger.annotations.ApiModelProperty(value="状态1可用0停用",name="status") + private Integer status; @Transient @Excel(name="账户类型",width = 20,orderNum = "7",replace = {"_null","商户号_0","微信号_1"}) - @io.swagger.annotations.ApiModelProperty(value="账户类型",name="accountTypeValue") + @io.swagger.annotations.ApiModelProperty(value="账户类型",name="accountTypeValue") private Integer accountTypeValue; @Transient @Excel(name="账户号",width = 20,orderNum = "8") - @io.swagger.annotations.ApiModelProperty(value="账户ID",name="accountId") + @io.swagger.annotations.ApiModelProperty(value="账户ID",name="accountId") private String accountId; @Transient @Excel(name="账户名",width = 20,orderNum = "9") - @io.swagger.annotations.ApiModelProperty(value="账户名",name="accountName") + @io.swagger.annotations.ApiModelProperty(value="账户名",name="accountName") private String accountName; + @Excel(name="创建时间",width = 20,format="yyyy-MM-dd",orderNum = "10") + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + + @Excel(name="是否展示",width = 20,orderNum = "11",replace = {"否_0","是_1"}) + @io.swagger.annotations.ApiModelProperty(value = "是否显示在C端", name = "isPublic") + private Integer isPublic; + + @Excel(name = "待缴提醒", width = 20, orderNum = "12") + @io.swagger.annotations.ApiModelProperty(value = "待缴提醒", name = "billSetting") + private Integer billSetting; + + @Transient + @Excel(name = "业态", width = 20, orderNum = "13") + @io.swagger.annotations.ApiModelProperty(value="经营业态ID:参照wx_business表",name="businessId") + private String businessName; + + @Transient + @Excel(name = "子业态", width = 20, orderNum = "14") + @io.swagger.annotations.ApiModelProperty(value="子业态",name="subBusinessId") + private String subBusinessName; + + @Transient + @Excel(name = "商铺", width = 20, orderNum = "15") + private String shopsStr; + + @Transient + @Excel(name = "管理员", width = 20, orderNum = "16") + private String usersStr; + + @Excel(name = "主谈人", width = 20, orderNum = "17") + @io.swagger.annotations.ApiModelProperty(value = "主谈人", name = "talkUserMain") + private String talkUserMain; + + @Excel(name = "辅谈人", width = 20, orderNum = "18") + @io.swagger.annotations.ApiModelProperty(value = "辅谈人", name = "talkUserAux") + private String talkUserAux; + + public String getShopsStr() { + if (shopVos != null && shopVos.size() > 0) { + return String.join("\n", + shopVos.stream().map( + s->{return s.getBuildingName()+"-"+s.getFloorName()+"-"+s.getShopNumber();} + ).collect(Collectors.toList())); + } else { + return null; + } + } + + public String getUsersStr() { + if (users != null && users.size() > 0) { + return String.join("\n", + users.stream().map( + u->{return u.getName()+"-"+u.getPhone();} + ).collect(Collectors.toList())); + } else { + return null; + } + } + + public String getBusinessName() { + return EnumBusiness.getEnumMessage(businessId); + } + + public String getSubBusinessName() { + return EnumSubBusiness.getEnumMessage(subBusinessId); + } + + @Transient + @io.swagger.annotations.ApiModelProperty(value="单价",name="price") + private BigDecimal price; + + @Transient + private Integer receivePeriod; + @Transient @io.swagger.annotations.ApiModelProperty(value="账户参数",name="accountParameter") private String accountParameter; - @Transient private List> shoplist; - @Transient private WxMerchantCorp wxMerchantCorp; - @Transient private WxMerchantTax wxMerchantTax; - @Transient private List levelConfigList; - @Transient private Integer rentShopType; - @Transient private Integer isUse; - @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; @io.swagger.annotations.ApiModelProperty(value="商户图片",name="imgUrl") private String imgUrl; - - @io.swagger.annotations.ApiModelProperty(value="商户名",name="name") - @Excel(name="商户名",width = 20,orderNum = "1") - private String name; - - @io.swagger.annotations.ApiModelProperty(value="联系人",name="linkPerson") - @Excel(name="联系人",width = 20,orderNum = "2") - private String linkPerson; - - @io.swagger.annotations.ApiModelProperty(value="联系方式",name="linkPhone") - @Excel(name="联系方式",width = 20,orderNum = "3") - private String linkPhone; - - @Excel(name="创建时间",width = 20,format="yyyy-MM-dd",orderNum = "10") - @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="停车厂商(1:ETCP)",name="carVendorType") private Integer carVendorType; @io.swagger.annotations.ApiModelProperty(value="停车厂商参数",name="carParams") private String carParams; - - @Excel(name="商户状态",width = 20,orderNum = "6",replace = {"停用_0","正常_1"}) - @io.swagger.annotations.ApiModelProperty(value="状态1可用0停用",name="status") - private Integer status; - @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; - @io.swagger.annotations.ApiModelProperty(value="品牌",name="brand") private Long brand; - @io.swagger.annotations.ApiModelProperty(value = "类型", name = "type") private Integer type; - - @Excel(name="是否展示",width = 20,orderNum = "11",replace = {"否_0","是_1"}) - @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; - - @Excel(name = "待缴提醒", width = 20, orderNum = "12") - @io.swagger.annotations.ApiModelProperty(value = "待缴提醒", name = "billSetting") - private Integer billSetting; - @io.swagger.annotations.ApiModelProperty(value = "置顶时间", name = "topTime") private Date topTime; - @io.swagger.annotations.ApiModelProperty(value="二维码地址",name="qrCode") private String qrCode; - @io.swagger.annotations.ApiModelProperty(value="简介",name="introduction") private String introduction; - @io.swagger.annotations.ApiModelProperty(value="优惠活动",name="actionDesc") private String actionDesc; - @io.swagger.annotations.ApiModelProperty(value = "是否删除1是0否", name = "isDel") private Integer isDel; - - @Excel(name = "主谈人", width = 20, orderNum = "13") - @io.swagger.annotations.ApiModelProperty(value = "主谈人", name = "talkUserMain") - private String talkUserMain; - - @Excel(name = "辅谈人", width = 20, orderNum = "14") - @io.swagger.annotations.ApiModelProperty(value = "辅谈人", name = "talkUserAux") - private String talkUserAux; - @io.swagger.annotations.ApiModelProperty(value = "客服电话", name = "linkLinePhone") private String linkLinePhone; @@ -198,4 +235,5 @@ public class WxMerchant extends BaseEntity { return ""; return "t:md:" + id; } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantPowerBillConfig.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantPowerBillConfig.java new file mode 100644 index 000000000..81d01a8b8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantPowerBillConfig.java @@ -0,0 +1,50 @@ +package com.iformall.domain.po; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * @author gongbiao + */ +@Table(name = "wx_merchant_power_bill_config") +@Data +@JsonIgnoreProperties(value = {"handler"}) +@EqualsAndHashCode(callSuper = true) +public class WxMerchantPowerBillConfig extends BaseEntity { + @Id + protected Long id; + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value = "tenantId", name = "tenantId") + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value = "'商户ID'", name = "merchantId") + private Long merchantId; + + @io.swagger.annotations.ApiModelProperty(value = "'商户名称'", name = "merchantName") + private String merchantName; + + @io.swagger.annotations.ApiModelProperty(value = "'商户类型'", name = "merchantType") + private Integer merchantType; + + @io.swagger.annotations.ApiModelProperty(value = "生成方式1按电表2固定金额", name = "buildWay") + private Integer buildWay; + + @io.swagger.annotations.ApiModelProperty(value = "金额(电表计费时为单价)", name = "price") + private String price; + + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createTime") + private Date createDate; + + @io.swagger.annotations.ApiModelProperty(value = "修改时间", name = "updateTime") + private Date updateDate; + +} 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 85768de67..cf013d4fd 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantSubsidy.java @@ -105,6 +105,9 @@ public class WxMerchantSubsidy extends BaseEntity { @Transient protected String statusStr; + @io.swagger.annotations.ApiModelProperty(value="是否冻结",name="freeze") + private Integer freeze; + public String getOrderPaymentStr() { if(getOrderPayment()!=null) { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantTradeDaily.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantTradeDaily.java index 03f0eeb4b..843192584 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantTradeDaily.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchantTradeDaily.java @@ -59,15 +59,18 @@ public class WxMerchantTradeDaily extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "凭证", name = "proof") private String proof; @io.swagger.annotations.ApiModelProperty(value = "月份如2019-05", name = "month") + @Transient private String month; @Transient - private String starttime; + private String startTime; @Transient - private String endtime; + private String endTime; + @Transient + private String merchantName; public Integer getTradeAmtInteger(){ if (StringUtils.isBlank(tradeAmt)){ 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 12d8ef6af..46c623137 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -40,7 +40,7 @@ public class WxOrder extends BaseEntity { private Long couponChannelId; @io.swagger.annotations.ApiModelProperty(value="产品ID(type-0:couponId, 1:buserId, 3:merchantId)",name="productId") private Long productId; - @io.swagger.annotations.ApiModelProperty(value="类型(0:券,1:B刷卡支付,2:C扫码支付,3:储值卡)",name="type") + @io.swagger.annotations.ApiModelProperty(value="类型(0:券,1:B刷卡支付,2:C扫码支付,3:储值卡, 10:POS支付)",name="type") private Integer type; @io.swagger.annotations.ApiModelProperty(value="0: 付款 1: 退款",name="paymentType") private Integer paymentType; @@ -70,6 +70,13 @@ public class WxOrder extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "formId", name = "formId") private String formId; + @io.swagger.annotations.ApiModelProperty(value = "POS系统订单ID", name = "posOrderId") + private Long posOrderId; + @io.swagger.annotations.ApiModelProperty(value="POS系统订单创建时间",name="posOrderCreateTime") + private Long posOrderCreateTime; + @io.swagger.annotations.ApiModelProperty(value="POS SN",name="posOrderCreateSn") + private String posOrderCreateSn; + @Transient protected List statusS; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java index da3f8623b..eb5d8801f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java @@ -64,5 +64,18 @@ public class WxPayOrder extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") private Integer payEndFrom; + @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS支付)",name="payFrom") + private Integer payFrom; + @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId") + private Long posPayOrderId; + @io.swagger.annotations.ApiModelProperty(value="支付订单创建时间,来源于POS",name="posPayOrderTime") + private Long posPayOrderTime; + @io.swagger.annotations.ApiModelProperty(value="支付方式: 0微信;1支付宝;2现金;3会员折扣;4优惠券;5预付卡;6银行卡,来源于POS",name="posPaymentType") + private Integer posPaymentType; + @io.swagger.annotations.ApiModelProperty(value="支付订单流水号, 来源于POS, 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空",name="posPayOrderNo") + private String posPayOrderNo; + @io.swagger.annotations.ApiModelProperty(value="POS支付描述",name="posPayDes") + private String posPayDes; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPowerBillAutoConfig.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPowerBillAutoConfig.java new file mode 100644 index 000000000..64011a9bd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPowerBillAutoConfig.java @@ -0,0 +1,44 @@ +package com.iformall.domain.po; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * @author gongbiao + */ +@Table(name = "wx_power_bill_auto_config") +@Data +@JsonIgnoreProperties(value = {"handler"}) +@EqualsAndHashCode(callSuper = true) +public class WxPowerBillAutoConfig extends BaseEntity { + @Id + protected Long id; + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value = "tenantId", name = "tenantId") + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value = "'单价'", name = "unitPrice") + private String unitPrice; + + @io.swagger.annotations.ApiModelProperty(value = "'每月多少日拉取上月数据'", name = "buildDay") + private String buildDay; + + @io.swagger.annotations.ApiModelProperty(value = "截止缴款日", name = "receiveDay") + private String receiveDay; + + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createTime") + private Date createDate; + + @io.swagger.annotations.ApiModelProperty(value = "修改时间", name = "updateTime") + private Date updateDate; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java index 8ac5f8c29..b0107a604 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java @@ -53,4 +53,21 @@ public class WxRefundOrder extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") private String failReason; + @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS)",name="refundFrom") + private Integer refundFrom; + @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId") + private Long posPayOrderId; + @io.swagger.annotations.ApiModelProperty(value="退款订单号,来源于POS",name="posRefundOrderId") + private Long posRefundOrderId; + @io.swagger.annotations.ApiModelProperty(value="支付订单创建时间,来源于POS",name="posRefundOrderTime") + private Long posRefundOrderTime; + @io.swagger.annotations.ApiModelProperty(value="支付订单退款状态(0:非手动,1:手动退款,2:手动释放同步),来源于POS",name="posRefundOrderStatus") + private Integer posRefundOrderStatus; + @io.swagger.annotations.ApiModelProperty(value="退款方式: 0微信;1支付宝;2现金;3优惠券;4预付卡;5银行卡6记账,来源于POS",name="posRefundType") + private Integer posRefundType; + @io.swagger.annotations.ApiModelProperty(value="退款订单流水号, 来源于POS, 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空",name="posRefundOrderNo") + private String posRefundOrderNo; + @io.swagger.annotations.ApiModelProperty(value="POS支付描述",name="posRefundDes") + private String posRefundDes; + } 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 f73c066d4..07a486e38 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java @@ -7,12 +7,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.apache.commons.lang3.StringUtils; - import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; import java.math.BigDecimal; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -232,6 +230,12 @@ public class WxRentContract extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "n日后开始计算滞纳金", name = "latePayRatio") private Integer latePayDay; + @io.swagger.annotations.ApiModelProperty(value = "联营扣点率", name = "busDiscountRatio") + private String busDiscountRatio; + + @io.swagger.annotations.ApiModelProperty(value = "联营扣点-时间范围 1年2月3周期", name = "busDiscountTime") + private Integer busDiscountTime; + public void setAdjustPeriodHandle() { if(EnumPriceUnit.D.getCode().equals(this.getPriceUnit()) && EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode().equals(adjustPeriod)){ this.adjustPeriod = EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode(); 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 1b46e7207..f2771cb84 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxScoreRules.java @@ -26,6 +26,9 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) public class WxScoreRules extends BaseEntity { + @Transient + public static final int DEFAULT_SCALE = 10; + @Transient private static final String scoreDefaultRules = "[" + @@ -70,6 +73,7 @@ public class WxScoreRules extends BaseEntity { "{\"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\":\"编辑个人信息\"}" + + "{\"id\":8,\"limit\":1,\"step\":1,\"score\":0,\"desc\":\"编辑个人信息\"}" + "]"; @Transient @@ -105,6 +109,9 @@ public class WxScoreRules extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="清除前多少年积分",name="clearYear") private Integer clearYear; + @io.swagger.annotations.ApiModelProperty(value="生日积分倍率",name="scale") + private Integer scale; + public static String getScoreDefaultRules() { return scoreDefaultRules; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxUserDataRule.java b/mallinkService/src/main/java/com/iformall/domain/po/WxUserDataRule.java new file mode 100644 index 000000000..d08c91070 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxUserDataRule.java @@ -0,0 +1,41 @@ +package com.iformall.domain.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_user_data_rule") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxUserDataRule extends BaseEntity { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + + @io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "userId") + private Long userId; + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value = "权限类型", name = "type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value = "楼层楼座", name = "buildingFloor") + private String buildingFloor; + @io.swagger.annotations.ApiModelProperty(value = "业态", name = "business") + private String business; + @io.swagger.annotations.ApiModelProperty(value = "数据范围", name = "target") + private String target; + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createTime") + private Date createTime; + @io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updateTime") + private Date updateTime; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MerchantMeterVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantMeterVo.java new file mode 100644 index 000000000..49661bb5c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MerchantMeterVo.java @@ -0,0 +1,20 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +/** + * @author gongbiao + */ +@Data +public class MerchantMeterVo { + + @io.swagger.annotations.ApiModelProperty(value = "商户ID", name = "merchantId") + private Long merchantId; + + @io.swagger.annotations.ApiModelProperty(value = "商户名", name = "merchantName") + private String merchantName; + + @io.swagger.annotations.ApiModelProperty(value = "存在电表", name = "has") + private Integer has; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/PromotionCalc.java b/mallinkService/src/main/java/com/iformall/domain/vo/PromotionCalc.java new file mode 100644 index 000000000..99dd6bc5c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/PromotionCalc.java @@ -0,0 +1,22 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.BaseEntity; +import lombok.Data; + +@Data +public class PromotionCalc extends BaseEntity { + @io.swagger.annotations.ApiModelProperty(value="订单总金额",name="orderAmount") + Integer orderAmount; + @io.swagger.annotations.ApiModelProperty(value="订单剩余金额",name="orderAmountLeft") + Integer orderAmountLeft; + @io.swagger.annotations.ApiModelProperty(value="优惠金额",name="promotionAmount") + Integer promotionAmount; + @io.swagger.annotations.ApiModelProperty(value="优惠后剩余金额",name="amountLeftAfterPay") + Integer amountLeftAfterPay; + + @io.swagger.annotations.ApiModelProperty(value="成长值",name="score") + Integer score; + @io.swagger.annotations.ApiModelProperty(value="积分",name="credit") + Integer credit; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/RatioVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/RatioVo.java new file mode 100644 index 000000000..493e63c9e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/RatioVo.java @@ -0,0 +1,13 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +@Data +public class RatioVo { + //扣点率 + private Integer ratio = 0; + //金额 + private Long price = 0l; + + private String useRatio = ""; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/ReceivedAndPayVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/ReceivedAndPayVo.java new file mode 100644 index 000000000..9d7ef6c96 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/ReceivedAndPayVo.java @@ -0,0 +1,28 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + + + +@Data +public class ReceivedAndPayVo { + + @Excel(name="商户名",width = 20,orderNum = "1") + private String name; + @Excel(name="商铺号",width = 20,orderNum = "2") + private String shopNumber; + @Excel(name="商铺类型",width = 20,orderNum = "3") + private String shopType; + @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 String receivePay; + @Excel(name="承付总额(元)",width = 20,orderNum = "7") + private String payOut; + @Excel(name="结余金额(元)",width = 20,orderNum = "8") + private String balance; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/TouchUsersReportVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/TouchUsersReportVo.java index 78559e7f7..1934c32ff 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/TouchUsersReportVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/TouchUsersReportVo.java @@ -1,5 +1,6 @@ package com.iformall.domain.vo; +import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; /** @@ -7,14 +8,20 @@ import lombok.Data; */ @Data public class TouchUsersReportVo { - private String xTime; - private int uv; - private int pv; - - private int userCount; // 领取人数 - private int couponCount; // 领取券数 - private int verifyUserCount; // 核销人数 - private int verifyCount; //核销量 + @Excel(name = "日期", width = 20, orderNum = "1") + private String XTime; + @Excel(name = "浏览量(PV)", width = 20, orderNum = "2") + private int pv; + @Excel(name = "独立访客(UV)", width = 20, orderNum = "3") + private int uv; + @Excel(name = "领取券数", width = 20, orderNum = "4") + private int couponCount; + @Excel(name = "领取人数", width = 20, orderNum = "5") + private int userCount; + @Excel(name = "核销数", width = 20, orderNum = "6") + private int verifyCount; + @Excel(name = "核销用户数", width = 20, orderNum = "7") + private int verifyUserCount; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/UserCountVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/UserCountVo.java new file mode 100644 index 000000000..623acb1a8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/UserCountVo.java @@ -0,0 +1,27 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.text.DecimalFormat; + +/** + * 会员结构vo + * @author jinguo + * + */ + +@Data +public class UserCountVo implements Serializable { + + private static final long serialVersionUID = 6780570955120276661L; + //名称 + private String reportTime; + + //数量 + private Long incCount; + + //数量 + private Long totalCount; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WordDocTableVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WordDocTableVo.java new file mode 100644 index 000000000..820240bb0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WordDocTableVo.java @@ -0,0 +1,19 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class WordDocTableVo implements Serializable{ + + private static final long serialVersionUID = 1L; + + private List> params; + + private int tableIndex = 0; + + //替换的行 + private int rowIndex = 0; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxActivityJoinQuestionAnswer.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxActivityJoinQuestionAnswer.java new file mode 100644 index 000000000..7e44e11a6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxActivityJoinQuestionAnswer.java @@ -0,0 +1,14 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +/** + * @author gongbiao + * @date 2019/8/9 + */ +@Data +public class WxActivityJoinQuestionAnswer { + + private String ques; + private String answer; +} 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 7ff113c84..4f543c6ea 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAll.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import javax.persistence.Transient; +import java.util.ArrayList; import java.util.List; /** @@ -44,6 +45,11 @@ public class WxBillAll extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="商户Id",name="merchantId") private Long merchantId; + @Transient + private String statusListStr; + @Transient + private String typeListStr; + @io.swagger.annotations.ApiModelProperty(value="多个状态",name="statusList") private List statusList; @@ -116,7 +122,6 @@ public class WxBillAll extends BaseEntity { private String payDate; - @Transient @io.swagger.annotations.ApiModelProperty(value = "过滤已收金额1过滤", name = "filterHasPay") private Integer filterHasPay; @@ -133,4 +138,19 @@ public class WxBillAll extends BaseEntity { @Transient private Long newLatePrice; + @Transient + @SortColumn(column = "payOut") + private Integer payOut; + + @Transient + private Integer balance; + + + @Transient + @io.swagger.annotations.ApiModelProperty(value = "冻结状态0正常1冻结", name = "freeze") + private Integer freeze; + + @io.swagger.annotations.ApiModelProperty(value = "多个类型", name = "typeStr") + private String typeStr; + } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java index 4e01afa4d..632b71865 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillAllVo.java @@ -68,6 +68,12 @@ public class WxBillAllVo { @io.swagger.annotations.ApiModelProperty(value = "评论", name = "comments") private String comments; + @io.swagger.annotations.ApiModelProperty(value = "明细", name = "priceDetail") + private String priceDetail; + + @io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updatetime") + private Date updatetime; + public String getReceivePayStr() { if(getReceivePay()!=null) { receivePayStr = new BigDecimal(getReceivePay()).divide(new BigDecimal(100)).toString(); diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java index cb81a2dc6..17babd699 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java @@ -25,13 +25,14 @@ public class WxBillExcelTemplateOther { @Excel(name = "费用所属期-结束时间*", width = 20, orderNum = "5", format = "yyyy-MM-dd") private Date endtime; + @Excel(name = "实际应收金额(元)*", width = 20, orderNum = "6") private String receivePayStr; @Excel(name = "收款金额(元)*", width = 20, orderNum = "7") private String payStr; - @Excel(name = "收款日期*", width = 20, orderNum = "8", format = "yyyy-MM-dd") + @Excel(name = "收款日期", width = 20, orderNum = "8", format = "yyyy-MM-dd") private Date payDate; @Excel(name = "截止缴款日*", width = 20, orderNum = "9", format = "yyyy-MM-dd") diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillSettleVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillSettleVo.java new file mode 100644 index 000000000..fe55ed2c8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillSettleVo.java @@ -0,0 +1,44 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * @author luozukai + */ +@Data +@ToString(callSuper = true) +public class WxBillSettleVo { + + @Excel(name="结算单号",width = 20,orderNum = "1") + private String settleNumber; + + @Excel(name="结算商户",width = 20,orderNum = "2") + private String merchantName; + + @Excel(name="创建时间",width = 20,orderNum = "3") + private String createtime; + + @Excel(name="收款(元)",width = 20,orderNum = "4") + private String receiveMoney; + + @Excel(name="承付(元)",width = 20,orderNum = "5") + private String payMoney; + + @Excel(name="结算金额(元)",width = 20,orderNum = "6") + private String balance; + + @Excel(name="结算时间",width = 20,orderNum = "7") + private String settletime; + + @Excel(name="结算状态",width = 20,orderNum = "8") + private String status; + + @Excel(name="审批状态",width = 20,orderNum = "9") + private String applyStatus; + + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponActionLogVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponActionLogVo.java new file mode 100644 index 000000000..a676206ae --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponActionLogVo.java @@ -0,0 +1,32 @@ +package com.iformall.domain.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.io.Serializable; +import java.util.Date; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode +public class WxCouponActionLogVo implements Serializable{ + @io.swagger.annotations.ApiModelProperty(value="券名称",name="title") + private String title; + @io.swagger.annotations.ApiModelProperty(value="注券日期",name="createDate") + private Date createDate; + @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="operator") + private String operator; + @io.swagger.annotations.ApiModelProperty(value="ActionLog ID",name="actionId") + private Long actionId ; + @io.swagger.annotations.ApiModelProperty(value="券Id",name="couponId") + private Long couponId ; + @io.swagger.annotations.ApiModelProperty(value="couponSend ID",name="couponSendId") + private Long couponSendId ; + //@io.swagger.annotations.ApiModelProperty(value="tenantId",name="tenantId") + //private String tenantId ; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java index f6fc39d05..7932c4807 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java @@ -8,6 +8,7 @@ import lombok.ToString; import javax.persistence.Id; import javax.persistence.Transient; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -82,4 +83,34 @@ public class WxCouponOrderCVo extends WxCouponOrder { @io.swagger.annotations.ApiModelProperty(value="商户列表",name="merchantVoList") private List merchantVoList; + + @Transient + private String salePriceStr; + + @Transient + private String usePriceStr; + + @Transient + private String priceStr; + + public String getSalePriceStr() { + if(salePrice!=null) { + salePriceStr = new BigDecimal(salePrice).divide(new BigDecimal(100)).toString(); + } + return salePriceStr; + } + + public String getUsePriceStr() { + if(usePrice!=null) { + usePriceStr = new BigDecimal(usePrice).divide(new BigDecimal(100)).toString(); + } + return usePriceStr; + } + + public String getPriceStr() { + if(price!=null) { + priceStr = new BigDecimal(price).divide(new BigDecimal(100)).toString(); + } + return priceStr; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponSendVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponSendVo.java index dc1bf0020..2cab48668 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponSendVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponSendVo.java @@ -33,4 +33,9 @@ public class WxCouponSendVo extends WxCouponSend implements Serializable{ /**发卷所属商户名**/ private String merchantName; + + private Date sendDate ; + + @io.swagger.annotations.ApiModelProperty(value="自领取之日几日有效",name="validDays") + private Integer validDays ; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxLevelMerchantCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxLevelMerchantCVo.java index cb3b9bdf4..951f765ba 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxLevelMerchantCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxLevelMerchantCVo.java @@ -32,7 +32,7 @@ public class WxLevelMerchantCVo implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "店铺列表", name = "shopVoList") private List shopVoList; - @io.swagger.annotations.ApiModelProperty(value="折扣",name="discount") + @io.swagger.annotations.ApiModelProperty(value="折扣(0-100折扣)",name="discount") private Integer discount; @Transient 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 31002b4c3..5360473e9 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSubsidyVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantSubsidyVo.java @@ -37,4 +37,8 @@ public class WxMerchantSubsidyVo extends WxMerchantSubsidy { @io.swagger.annotations.ApiModelProperty(value="持有人手机",name="phone") private String phone; + @io.swagger.annotations.ApiModelProperty(value="0正常1冻结",name="freeze") + private Integer freeze; + + } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantTradeDailyVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantTradeDailyVo.java index 07256d7c1..5da52d0ea 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantTradeDailyVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantTradeDailyVo.java @@ -2,6 +2,8 @@ package com.iformall.domain.vo; import cn.afterturn.easypoi.excel.annotation.Excel; import com.iformall.domain.po.BaseEntity; +import com.iformall.enums.EnumBusiness; +import com.iformall.enums.EnumSubBusiness; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -12,6 +14,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; @Data @ToString(callSuper = true) @@ -91,34 +94,47 @@ public class WxMerchantTradeDailyVo extends BaseEntity { private String proof; + @Transient + private List shopVos; + + @Transient + @Excel(name = "商铺", width = 20, orderNum = "10") + private String shopsStr; + @Transient private Integer isToday; - public static enum Field { - Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), - TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC"), - MerchantId_ASC("`merchant_id` ASC"), MerchantId_DESC("`merchant_id` DESC"), - TradeAmt_ASC("`trade_amt` ASC"), TradeAmt_DESC("`trade_amt` DESC"), - CreateDate_ASC("`create_date` ASC"), CreateDate_DESC("`create_date` DESC") - ; - private String value; - - Field(String value) { - this.value = value; - } - public String getValue() { - return value; - } + private Integer businessId; + private Integer subBusinessId; - public void setCol(String value) { - this.value = value; - } + @Transient + @Excel(name = "业态", width = 20, orderNum = "8") + @io.swagger.annotations.ApiModelProperty(value="经营业态ID:参照wx_business表",name="businessId") + private String businessName; - @Override - public String toString() { - return this.getValue(); + @Transient + @Excel(name = "子业态", width = 20, orderNum = "9") + @io.swagger.annotations.ApiModelProperty(value="子业态",name="subBusinessId") + private String subBusinessName; + + public String getShopsStr() { + if (shopVos != null && shopVos.size() > 0) { + return String.join("\n", + shopVos.stream().map( + s->{return s.getBuildingName()+"-"+s.getFloorName()+"-"+s.getShopNumber();} + ).collect(Collectors.toList())); + } else { + return null; } } + public String getBusinessName() { + return EnumBusiness.getEnumMessage(businessId); + } + + public String getSubBusinessName() { + return EnumSubBusiness.getEnumMessage(subBusinessId); + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxRentPropertyContractVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxRentPropertyContractVo.java index dc414116a..4239511a4 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxRentPropertyContractVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxRentPropertyContractVo.java @@ -77,5 +77,11 @@ public class WxRentPropertyContractVo extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "审批流类型", name = "businessType") private Integer businessType; + + @io.swagger.annotations.ApiModelProperty(value = "联营扣点率", name = "busDiscountRatio") + private String busDiscountRatio; + + @io.swagger.annotations.ApiModelProperty(value = "联营扣点-时间范围 1年2月3周期", name = "busDiscountTime") + private Integer busDiscountTime; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyBuildWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyBuildWay.java new file mode 100644 index 000000000..0590dfad8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyBuildWay.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumBillDailyBuildWay { + + HAND(1, "手动"), + AUTO(2, "自动"), + IMPORT(3, "导入"),; + + public static EnumBillDailyBuildWay getEnum(Integer code) { + for (EnumBillDailyBuildWay value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBillDailyBuildWay(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 fc7874cc6..1395a4de3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillType.java @@ -13,7 +13,9 @@ public enum EnumBillType { WATER(4, "水费"), POWER(5, "电费"), ROUTINE(6, "其他"), - AIR_CONDITIONING(7, "空调费") + AIR_CONDITIONING(7, "空调费"), + OTHER_DEPOSIT(8, "其他押金"), + SETTLE(10, "结算单") ; 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 fcf76a503..a7cbb5806 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java @@ -15,7 +15,9 @@ public enum EnumBillTypeParam { POWER(6, "电费"), ROUTINE(7, "其他费用"), ATHER_DEPOSIT(8, "其他押金"), - AIR_CONDITIONING(9, "空调费") + AIR_CONDITIONING(9, "空调费"), + + SETTLE(10, "结算单") ; public static EnumBillTypeParam getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBusRatioTime.java b/mallinkService/src/main/java/com/iformall/enums/EnumBusRatioTime.java new file mode 100644 index 000000000..85f0ebce5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBusRatioTime.java @@ -0,0 +1,33 @@ +package com.iformall.enums; + +public enum EnumBusRatioTime { + YEAR(1, "年"), + MONTH(2, "月"), + PERIOD(3,"周期"), + ; + + public static EnumBusRatioTime getEnum(Integer code) { + for (EnumBusRatioTime value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBusRatioTime(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/EnumBusiness.java b/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java index 0e52ff16b..32980e2d1 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBusiness.java @@ -1,5 +1,8 @@ package com.iformall.enums; +import java.util.HashMap; +import java.util.Map; + /** * Created by Stormeye on 2018/08/09. */ @@ -16,22 +19,33 @@ public enum EnumBusiness { BUSINESS_ID7(7, "美妆"), BUSINESS_ID8(8, "珠宝"), BUSINESS_ID9(9, "服务"), - BUSINESS_ID10(10, "家居") + BUSINESS_ID10(10, "家居"), + BUSINESS_ID11(11, "数码家电"), ; - - public static EnumBusiness getEnum(Integer code) { + private static Map map = new HashMap(); + static { for (EnumBusiness value : values()) { - if (value.getCode().equals(code)) { - return value; - } + map.put(value.code, value); } - return null; + } + + public static EnumBusiness getEnum(Integer code) { + if (code == null) return null; + return map.get(code); + } + + public static String getEnumMessage(Integer code) { + if (code == null) return null; + if (map.get(code) == null) + return null; + return map.get(code).getMessage(); } private Integer code; private String message; + EnumBusiness(Integer code, String message) { this.code = code; this.message = message; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java new file mode 100644 index 000000000..8ca9592f7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCardSpendFrom { + + // 0:C端小程序扫一扫, 1:POS支付 + + C(0, "小程序支付"), + POS(1, "POS支付") + ; + + public static EnumCardSpendFrom getEnum(Integer code) { + for (EnumCardSpendFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCardSpendFrom(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/EnumCardSpendStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendStatus.java index 8b112b9f6..8d0b5b4a6 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendStatus.java @@ -7,9 +7,10 @@ public enum EnumCardSpendStatus { // 0-未支付;1-已分账;2:已人工分账; - NOT_PAY(0, "未支付"), + NOT_PAY(0, "未支付,开始记录"), PS_SHARED(1, "已分账"), - MANUAL_PAY(2, "已人工分账") + MANUAL_PAY(2, "已人工分账"), + PREV_PAY(10, "预支付(POS短期内占用)"), ; public static EnumCardSpendStatus 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 c54dd044a..d790806e3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java @@ -7,16 +7,18 @@ public enum EnumCouponOrderStatus { // 券状态 0-已领取/已购买/未核销/未使用/待使用,1:已核销/已使用,2:已过期,3:已作废 // 卡状态 4-使用中 5-已过期 6-已用完 7-已线下退款 - COUPON_ORDER_USE_WAIT(0, "待使用"), - COUPON_ORDER_USED(1, "已核销"), - COUPON_ORDER_OVER_TIME(2, "已过期"), + COUPON_ORDER_USE_WAIT(0, "待使用"),//占库存 + COUPON_ORDER_USED(1, "已核销"),//占库存 + COUPON_ORDER_OVER_TIME(2, "已过期"),//占库存 COUPON_ORDER_INVALID(3, "已作废"), - CARD_USING(4, "使用中"), - CARD_OVER_TIME(5, "已过期"), - CARD_COMPLETE(6, "已用完"), + CARD_USING(4, "使用中"),//占库存 + CARD_OVER_TIME(5, "已过期"),//占库存 + CARD_COMPLETE(6, "已用完"),//占库存 CARD_RETURNED(7, "已线下退款"), - CARD_TRANSFER(8, "已转赠") /// 此状态不在wx_coupon_order中使用,已移到transfer表 + CARD_TRANSFER(8, "已转赠"), //占库存 /// 此状态不在wx_coupon_order中使用,已移到transfer表 + + POS_PRE_VERIFY(100, "POS预核销"), //占库存 // POS设置状态 ; public static EnumCouponOrderStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSendType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSendType.java index d4d557ac7..ce205e21f 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSendType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendSendType.java @@ -5,7 +5,7 @@ package com.iformall.enums; */ public enum EnumCouponSendSendType { - // -1: 未知 0:精准发券 1:主动(保留) 2:停车发券 3:核销发券 4: B端刷卡发券 + // -1: 未知 0:精准发券 1:主动(保留) 2:停车发券 3:核销发券 4: B端刷卡发券 5:商户发卷 6:定时发券 7:商户发券 8:会员生日券 UNKNOWN(-1, "未知"), INJECT(0, "精准发券"), ACTIVE(1, "主动(保留)"), @@ -14,6 +14,8 @@ public enum EnumCouponSendSendType { B_MICROPAY(4, "B端刷卡发券"), C_ORDER(5, "购买发券"), TIMED(6, "定时发券"), + MERCHANT(7, "商户发券"), + BIRTHDAY(8, "会员生日券"), ; public static EnumCouponSendSendType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java new file mode 100644 index 000000000..4161a2e91 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponVerifyType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCouponVerifyType { + + // 0: 微信B端核销 1:POS独立核销 2:POS交易核销 + VERIFY_B(0,"微信B端核销"), + VERIFY_POS_INDEPENDENT(1, "POS独立核销"), + VERIFY_POS_PAY(2, "POS交易核销"), + ; + + public static EnumCouponVerifyType getEnum(Integer code) { + for (EnumCouponVerifyType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCouponVerifyType(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/EnumFlowKey.java b/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java index 7bccc1f19..7f36672f5 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java @@ -30,6 +30,8 @@ public enum EnumFlowKey { NEW_RENT_END(18, "商铺租赁合同终止"), NEW_RENT_POINT_CONTRACT(19, "多经点位商铺租赁合同签约"), NEW_RENT_POINT_CONTRACT_END(20, "多经点位商铺租赁合同终止"), + + SETTLE(21,"结算单审批"), ; public static EnumFlowKey getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumFreezeType.java b/mallinkService/src/main/java/com/iformall/enums/EnumFreezeType.java new file mode 100644 index 000000000..6cb2a46db --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumFreezeType.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumFreezeType { + + + DEF(0, "正常"), + YES(1, "冻结"), + ; + + public static EnumFreezeType getEnum(Integer code) { + for (EnumFreezeType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumFreezeType(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/EnumGetRatioFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumGetRatioFrom.java new file mode 100644 index 000000000..26cd88222 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumGetRatioFrom.java @@ -0,0 +1,32 @@ +package com.iformall.enums; + +public enum EnumGetRatioFrom { + RENT(1, "合同"), + BILL(2, "账单录入营业额"), + ; + + public static EnumGetRatioFrom getEnum(Integer code) { + for (EnumGetRatioFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumGetRatioFrom(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/EnumMissTimeType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMissTimeType.java new file mode 100644 index 000000000..3f10dd93c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMissTimeType.java @@ -0,0 +1,35 @@ +package com.iformall.enums; + +public enum EnumMissTimeType { + + YEAR(1, "年"), + MONTH(2, "月"), + PERIOD(3, "周期"), + OTHER(4, "其他"), + ; + + public static EnumMissTimeType getEnum(Integer code) { + for (EnumMissTimeType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMissTimeType(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/EnumMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java index 65f7f97ca..f679a6f7a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java @@ -30,6 +30,10 @@ public enum EnumMsgModel { FLOW_C_APPLY_NODIFY(20, "审批通知"), FLOW_C_PASS_NODIFY(21, "通过审批通知"), FLOW_C_REJECT_NODIFY(22, "驳回通知"), + + //会员生日券 + COUPON_BIRTHDAY_OPENED(28, "会员生日券开启"), + COUPON_BIRTHDAY_OPENED_NO(29, "会员生日券未开启"), ; public static EnumMsgModel getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumNeuPosPamentType.java b/mallinkService/src/main/java/com/iformall/enums/EnumNeuPosPamentType.java new file mode 100644 index 000000000..8673744f9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumNeuPosPamentType.java @@ -0,0 +1,40 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumNeuPosPamentType { + + // 来源于Neusoft的定义 0微信;1支付宝;2现金;3优惠券;4预付卡;5银行卡 + WECHAT(0, "微信"), + ALIPAY(1, "支付宝"), + CASH(2, "现金"), + MEM_COUPON(3, "优惠券"), + MEM_CARD(4, "预付卡"), + MEM_BANKCARD(5, "银行卡"), + ; + public static EnumNeuPosPamentType getEnum(Integer code) { + for (EnumNeuPosPamentType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumNeuPosPamentType(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/EnumNeuPosRefundType.java b/mallinkService/src/main/java/com/iformall/enums/EnumNeuPosRefundType.java new file mode 100644 index 000000000..7013d8e0b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumNeuPosRefundType.java @@ -0,0 +1,41 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumNeuPosRefundType { + + // 来源于Neusoft的定义 0微信;1支付宝;2现金;3会员折扣;4优惠券;5预付卡;6银行卡;7记账 + WECHAT(0, "微信"), + ALIPAY(1, "支付宝"), + CASH(2, "现金"), + MEM_COUPON(3, "优惠券"), + MEM_CARD(4, "预付卡"), + MEM_BANKCARD(5, "银行卡"), + BOOK(6, "记账"), + ; + public static EnumNeuPosRefundType getEnum(Integer code) { + for (EnumNeuPosRefundType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumNeuPosRefundType(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/EnumOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java index 5db17a0cc..01776f5b7 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java @@ -7,22 +7,22 @@ public enum EnumOrderStatus { // 0-待付款;1-已支付;2-已取消(限定时间内未付款);3-待退款;4-已退款;5-退款失败 - ORDER_STATUS_PENDING_PAYMENT(0, "待付款"), - ORDER_STATUS_PAYMENT_SUCCESS(1, "已支付"), + ORDER_STATUS_PENDING_PAYMENT(0, "待付款"),//占库存 + ORDER_STATUS_PAYMENT_SUCCESS(1, "已支付"),//占库存 ORDER_STATUS_OVERTIME_CANCEL(2, "已取消"), - ORDER_STATUS_PENDING_REFUND(3, "待退款"), + ORDER_STATUS_PENDING_REFUND(3, "待退款"),//占库存 ORDER_STATUS_REFUND_SUCCESS(4,"已退款"), - ORDER_STATUS_REFUND_FAILD(5, "退款失败"), - ORDER_STATUS_PRESSING(6, "砍价中"), - ORDER_STATUS_PRESS_COMPLETE(7, "砍价完成"), + ORDER_STATUS_REFUND_FAILD(5, "退款失败"),//占库存 + ORDER_STATUS_PRESSING(6, "砍价中"),//占库存 + ORDER_STATUS_PRESS_COMPLETE(7, "砍价完成"),//占库存 ORDER_STATUS_PRESS_OVERTIME(8, "砍价已过期"), ORDER_STATUS_PRESS_CANCEL(9, "砍价已取消"), - ORDER_STATUS_COOPERATING(10, "拼团中"), - ORDER_STATUS_COOPERATING_COMPLETE(11, "拼团完成"), + ORDER_STATUS_COOPERATING(10, "拼团中"),//占库存 + ORDER_STATUS_COOPERATING_COMPLETE(11, "拼团完成"),//占库存 ORDER_STATUS_COOPERATING_OVERTIME(12, "拼团已过期"), ORDER_STATUS_COOPERATING_CANCEL(13, "拼团失败"), ORDER_STATUS_COOPERATING_FAILD(14, "参团失败"), - ORDER_STATUS_COOPERATING_UNPAID(15, "拼团待付款"), + ORDER_STATUS_COOPERATING_UNPAID(15, "拼团待付款"),//占库存 ORDER_STATUS_COOPERATING_BREAK(16, "拼团取消") ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java index d8d922ed0..3beed9124 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderType.java @@ -11,7 +11,8 @@ public enum EnumOrderType { MICROPAY(1,"B收款码支付"), NATIVEPAY(2,"C扫码支付"), PREPAIDCARD(3, "储值卡"), - CREDIT(4,"积分支付") + CREDIT(4,"积分支付"), + POSPAY(10, "POS支付") ; public static EnumOrderType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayEndFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayEndFrom.java new file mode 100644 index 000000000..4aa58f79e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayEndFrom.java @@ -0,0 +1,35 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPayEndFrom { + + CALLBACK(0, "callback"), + QUERY(1, "查询"); + + public static EnumPayEndFrom getEnum(Integer code) { + for (EnumPayEndFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPayEndFrom(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/EnumPayFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayFrom.java index c81002007..8ff2c1b05 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayFrom.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayFrom.java @@ -5,8 +5,8 @@ package com.iformall.enums; */ public enum EnumPayFrom { - CALLBACK(0, "callback"), - QUERY(1, "查询"); + INSIDE_C(0, "C端支付"), + POS(1, "POS"); public static EnumPayFrom getEnum(Integer code) { for (EnumPayFrom value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java index a2e6bf50a..1f268aecf 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java @@ -8,7 +8,9 @@ public enum EnumPayType { PAY_PAYMENT(0, "付款"), PAY_B_REFUND(1, "B端退款"), PAY_AUTO_REFUND(2, "自动退款"), - PAY_ADMIN_REFUND(3, "A端退款"); + PAY_ADMIN_REFUND(3, "A端退款"), + PAY_POS_REFUND(4, "POS发起退款"); + public static EnumPayType getEnum(Integer code) { for (EnumPayType value : values()) { if (value.getCode().equals(code)) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java index d06ce91eb..1ecfb2492 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java @@ -9,7 +9,10 @@ public enum EnumPayWay { PAY_WAY_WECHAT(1, "微信支付"), PAY_WAY_WECHAT_WAP(2, "微信H5"), PAY_WAY_ALIPAY(3, "支付宝"), - PAY_WAY_ALIPAY_WAP(4, "支付宝H5"); + PAY_WAY_ALIPAY_WAP(4, "支付宝H5"), + PAY_WAY_POS_B(10, "POS B端"), + PAY_WAY_POS_NEU(11, "POS 东软"), + ; public static EnumPayWay getEnum(Integer code) { for (EnumPayWay value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPosActionType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosActionType.java new file mode 100644 index 000000000..95a2015e7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosActionType.java @@ -0,0 +1,43 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPosActionType { + + // 0: 检查, 1: 预核销 2: 预核销撤销 3:独立核销 4: 交易核销 5:核销撤销 + + CHECK(0, "检查"), + CALC(1, "计算"), + PAY_VERIFY_PRE(2, "交易预核销"), + PAY_VERIFY_PRE_CANCEL(3, "交易预核销撤销"), + VERIFY_INDEPENT(4,"独立核销"), + VERIFY_PAY(5,"交易核销"), + VERIFY_CANCEL(6,"核销撤销") + ; + + public static EnumPosActionType getEnum(Integer code) { + for (EnumPosActionType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosActionType(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/EnumPosCouponEnableType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosCouponEnableType.java new file mode 100644 index 000000000..e33abbd1b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosCouponEnableType.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPosCouponEnableType { + + // 0:禁用 1:单选可用 + + Disable(0, "禁用"), + SingleEnable(1, "单选可用"), + MultiEnable(2, "多选可用") + ; + + public static EnumPosCouponEnableType getEnum(Integer code) { + for (EnumPosCouponEnableType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosCouponEnableType(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/EnumPosEnableType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosEnableType.java new file mode 100644 index 000000000..797894732 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosEnableType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPosEnableType { + + // 0:禁用 1:可用 + + Disable(0, "禁用"), + Enable(1, "可用") + ; + + public static EnumPosEnableType getEnum(Integer code) { + for (EnumPosEnableType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosEnableType(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/EnumPosOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosOrderStatus.java new file mode 100644 index 000000000..7c9608948 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosOrderStatus.java @@ -0,0 +1,51 @@ +package com.iformall.enums; + + +/** + * @author Stormeye + */ + +public enum EnumPosOrderStatus { + + PENDING_PAYMENT(0, "待付款"), + PENDING(1, "支付中"), + PAYMENT_SUCCESS(2, "已支付"), + OVERTIME_CANCEL(3, "已取消"), + PENDING_REFUND(4, "待退款"), + REFUNDING(5, "退款中"), + REFUND_SUCCESS(6,"已退款"), + REFUND_FAILD(7, "退款失败"), + PENDING_VERIFY(10, "待核销"), + VERIFING(11, "核销中"), + VERIFY_SUCCESS(12, "已核销"), + VERIFY_CANCEL(13, "核销待退"), + VERIFY_CANCELING(14, "核销退中"), + VERIFY_CANCELED(15, "核销已退") + ; + + + public static EnumPosOrderStatus getEnum(Integer code) { + for (EnumPosOrderStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosOrderStatus(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/EnumPosOrderType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosOrderType.java new file mode 100644 index 000000000..035ce0fac --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosOrderType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author Stormeye + */ + +public enum EnumPosOrderType { + + VERIFY_INDEPENDENT(1,"独立核销"), + PAY(2,"支付") + ; + + public static EnumPosOrderType getEnum(Integer code) { + for (EnumPosOrderType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosOrderType(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/EnumPosPayType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosPayType.java new file mode 100644 index 000000000..6775daf55 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosPayType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPosPayType { + + PAY_PAYMENT(0, "付款"), + PAY_B_REFUND(1, "B端退款"), + PAY_AUTO_REFUND(2, "自动退款"), + PAY_ADMIN_REFUND(3, "A端退款"), + PAY_VERIFY_INDEPENT(10, "核销"), + ; + public static EnumPosPayType getEnum(Integer code) { + for (EnumPosPayType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosPayType(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/EnumPosSceneType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosSceneType.java new file mode 100644 index 000000000..311db9017 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosSceneType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumPosSceneType { + + VERIFY(0,"核销"), + PAY(1,"支付") + ; + + public static EnumPosSceneType getEnum(Integer code) { + for (EnumPosSceneType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosSceneType(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/EnumPosSelect.java b/mallinkService/src/main/java/com/iformall/enums/EnumPosSelect.java new file mode 100644 index 000000000..b9bb4e087 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPosSelect.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPosSelect { + + // 0:不使用 1:使用 + + NOT_SEL(0, "不使用"), + SELECTED(1, "使用") + ; + + public static EnumPosSelect getEnum(Integer code) { + for (EnumPosSelect value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPosSelect(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/EnumPowerBillBuildWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumPowerBillBuildWay.java new file mode 100644 index 000000000..37bde179b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPowerBillBuildWay.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumPowerBillBuildWay { + + METER(1, "按电表"), + PRICE(2, "按固定金额"),; + + public static EnumPowerBillBuildWay getEnum(Integer code) { + for (EnumPowerBillBuildWay value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPowerBillBuildWay(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/EnumRentContractAdjustRatioWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java index c3ce1bcd1..eb9af197e 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAdjustRatioWay.java @@ -8,7 +8,8 @@ package com.iformall.enums; public enum EnumRentContractAdjustRatioWay { RATIO(1, "按比例"), - MONEY(2, "按金额"),; + MONEY(2, "按金额"), + CUSTOM(3, "自定义"),; public static EnumRentContractAdjustRatioWay getEnum(Integer code) { for (EnumRentContractAdjustRatioWay value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumSettleBillType.java b/mallinkService/src/main/java/com/iformall/enums/EnumSettleBillType.java new file mode 100644 index 000000000..a6fafdfe7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumSettleBillType.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumSettleBillType { + + // 0收款1承付 + R(0, "收款"), + P(1, "承付"), + ; + + public static EnumSettleBillType getEnum(Integer code) { + for (EnumSettleBillType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumSettleBillType(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/EnumSettleRecordWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumSettleRecordWay.java new file mode 100644 index 000000000..a67482e87 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumSettleRecordWay.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumSettleRecordWay { + //清算方式 1现金2支付宝3微信4银行卡转账5其他 + M(1, "现金"), + ZFB(2, "支付宝"), + WEBCAT(3, "微信"), + CARD(4, "银行卡转账"), + OTHER(5, "其他"), + ; + + public static EnumSettleRecordWay getEnum(Integer code) { + for (EnumSettleRecordWay value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumSettleRecordWay(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/EnumSettleStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumSettleStatus.java new file mode 100644 index 000000000..8f7956ce3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumSettleStatus.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * luozukai + */ +public enum EnumSettleStatus { + //0待确认1未清算结余金额2结算完成 + DEF(0, "待确认"), + NOT_FINISH(7, "未清算结余金额"), + FINISH(3, "结算完成"), + ; + + public static EnumSettleStatus getEnum(Integer code) { + for (EnumSettleStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumSettleStatus(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/EnumSettleWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumSettleWay.java new file mode 100644 index 000000000..96aea91e5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumSettleWay.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumSettleWay { + + M(1, "商场结款"), + B(2, "商户结款"), + ; + + public static EnumSettleWay getEnum(Integer code) { + for (EnumSettleWay value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumSettleWay(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/EnumSubBusiness.java b/mallinkService/src/main/java/com/iformall/enums/EnumSubBusiness.java index 69e5af42d..01a371b25 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumSubBusiness.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumSubBusiness.java @@ -1,5 +1,8 @@ package com.iformall.enums; +import java.util.HashMap; +import java.util.Map; + /** * Created by Stormeye on 2018/08/09. */ @@ -26,17 +29,69 @@ public enum EnumSubBusiness { SUB_BUSINESS_ID18(18,"东北菜"), SUB_BUSINESS_ID19(19,"面包店"), SUB_BUSINESS_ID20(20,"咖啡厅"), - SUB_BUSINESS_ID21(21,"饮品店") + SUB_BUSINESS_ID21(21,"饮品店"), + SUB_BUSINESS_ID22(22,"男装"), + SUB_BUSINESS_ID23(23,"女装"), + SUB_BUSINESS_ID24(24,"童装"), + SUB_BUSINESS_ID25(25,"鞋帽"), + SUB_BUSINESS_ID26(26,"配饰"), + SUB_BUSINESS_ID27(27,"内衣"), + SUB_BUSINESS_ID28(28,"亲子摄影"), + SUB_BUSINESS_ID29(29,"亲子游乐"), + SUB_BUSINESS_ID30(30,"幼儿教育"), + SUB_BUSINESS_ID31(31,"孕产护理"), + SUB_BUSINESS_ID32(32,"童车童床"), + SUB_BUSINESS_ID33(33,"玩具"), + SUB_BUSINESS_ID34(34,"喂养用品"), + SUB_BUSINESS_ID35(35,"面部护肤"), + SUB_BUSINESS_ID36(36,"香水彩妆"), + SUB_BUSINESS_ID37(37,"男士护肤"), + SUB_BUSINESS_ID38(38,"营养保健"), + SUB_BUSINESS_ID39(39,"黄金"), + SUB_BUSINESS_ID40(40,"钻石"), + SUB_BUSINESS_ID41(41,"时尚饰品"), + SUB_BUSINESS_ID42(42,"翡翠玉石"), + SUB_BUSINESS_ID43(43,"钟表"), + SUB_BUSINESS_ID44(44,"KTV"), + SUB_BUSINESS_ID45(45,"轰趴馆"), + SUB_BUSINESS_ID46(46,"DIY手工"), + SUB_BUSINESS_ID47(47,"文化艺术"), + SUB_BUSINESS_ID48(48,"游艺娱乐"), + SUB_BUSINESS_ID49(49,"桌游"), + SUB_BUSINESS_ID50(50,"运动健身"), + SUB_BUSINESS_ID51(51,"婚纱摄影"), + SUB_BUSINESS_ID52(52,"美容美发"), + SUB_BUSINESS_ID53(53,"学习培训"), + SUB_BUSINESS_ID54(54,"家具"), + SUB_BUSINESS_ID55(55,"家饰"), + SUB_BUSINESS_ID56(56,"家纺"), + SUB_BUSINESS_ID57(57,"生活用品"), + SUB_BUSINESS_ID58(58,"厨具"), + SUB_BUSINESS_ID59(59,"家用电器"), + SUB_BUSINESS_ID60(60,"数码产品"), + SUB_BUSINESS_ID61(61,"手机通信"), + SUB_BUSINESS_ID62(62,"电脑办公"), + SUB_BUSINESS_ID63(63,"影音娱乐"), ; - - public static EnumSubBusiness getEnum(Integer code) { + private static Map map + = new HashMap(); + static { for (EnumSubBusiness value : values()) { - if (value.getCode().equals(code)) { - return value; - } + map.put(value.code, value); } - return null; + } + + public static EnumSubBusiness getEnum(Integer code) { + if (code == null) return null; + return map.get(code); + } + + public static String getEnumMessage(Integer code) { + if (code == null) return null; + if (map.get(code) == null) + return null; + return map.get(code).getMessage(); } private Integer code; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java index 446e6c72a..39e426c01 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTag.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTag.java @@ -1,5 +1,8 @@ package com.iformall.enums; +import java.util.HashMap; +import java.util.Map; + /** * Created by Stormeye on 2018/08/09. */ @@ -176,6 +179,8 @@ public enum EnumTag { ID_143(143L, EnumTagType.ID_17,"咖啡厅"), ID_144(144L, EnumTagType.ID_17,"饮品店"), + ID_145(145L, EnumTagType.ID_14,"数码家电"), + ID_1000(1000L, EnumTagType.ID_50,"一天以内"), ID_1001(1001L, EnumTagType.ID_50,"一周以内"), @@ -203,14 +208,16 @@ public enum EnumTag { ID_1302(1302L, EnumTagType.ID_54,"当月核销"), ; - - public static EnumTag getEnum(Long code) { + private static Map map = new HashMap(); + static { for (EnumTag value : values()) { - if (value.getCode().equals(code)) { - return value; - } + map.put(value.code, value); } - return null; + } + + public static EnumTag getEnum(Long code) { + if (code == null) return null; + return map.get(code); } private Long code; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumUserCountReportType.java b/mallinkService/src/main/java/com/iformall/enums/EnumUserCountReportType.java new file mode 100644 index 000000000..803f330b6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumUserCountReportType.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumUserCountReportType { + DAY(1, "日"), + MONTH(2, "月"), + YEAR(3, "年"); + public static EnumUserCountReportType getEnum(Integer code) { + for (EnumUserCountReportType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumUserCountReportType(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/EnumUserDataRuleType.java b/mallinkService/src/main/java/com/iformall/enums/EnumUserDataRuleType.java new file mode 100644 index 000000000..6a611601d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumUserDataRuleType.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumUserDataRuleType { + + ALL(1, "系统全部数据"), + FLOOR_BUSINESS(2, "楼层及业态数据"),; + + public static EnumUserDataRuleType getEnum(Integer code) { + for (EnumUserDataRuleType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumUserDataRuleType(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/mapper/KwMerchantMeterMapper.java b/mallinkService/src/main/java/com/iformall/mapper/KwMerchantMeterMapper.java index d7f888310..9e4bbeef6 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/KwMerchantMeterMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/KwMerchantMeterMapper.java @@ -6,6 +6,7 @@ import com.iformall.domain.dto.KwMerchantMeterDto; import com.iformall.domain.po.KwMerchantMeter; import com.iformall.domain.vo.KwMerchantMeterDataVo; import com.iformall.domain.vo.KwMerchantMeterVo; +import com.iformall.domain.vo.MerchantMeterVo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -19,4 +20,7 @@ public interface KwMerchantMeterMapper extends CommonMapper getMerchantMeter(String tenantId); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/KwMeterMapper.java b/mallinkService/src/main/java/com/iformall/mapper/KwMeterMapper.java index c6a7bf9e7..6bcc44290 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/KwMeterMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/KwMeterMapper.java @@ -10,6 +10,7 @@ import java.util.List; public interface KwMeterMapper extends CommonMapper { List findList(KwMeter param); + List findVoList(KwMeter param); //with merchant info int onlineBatch(@Param("list")List list); int offlineBatch(KwMeter param); diff --git a/mallinkService/src/main/java/com/iformall/mapper/MallMenuMapper.java b/mallinkService/src/main/java/com/iformall/mapper/MallMenuMapper.java new file mode 100644 index 000000000..d139f6d8a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/MallMenuMapper.java @@ -0,0 +1,98 @@ +package com.iformall.mapper; + + +import com.iformall.domain.po.MallPermission; +import com.iformall.domain.po.MallRolePermission; +import com.iformall.domain.po.MallSaleType; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; + +import java.util.List; + +@Mapper +public interface MallMenuMapper { + @UpdateProvider(type = MallPermissionDaoProvider.class, method = "updateMallPermission") + public void updateMallPermission(MallPermission mallPermission); + + @UpdateProvider(type = MallPermissionDaoProvider.class, method = "updatePermissionByParentId") + public void updatePermissionByParentId(MallPermission mallPermission); + + @DeleteProvider(type = MallPermissionDaoProvider.class, method = "deletePermissionRole") + public void deletePermissionRole(MallRolePermission mallRolePermission); + + @UpdateProvider(type = MallPermissionDaoProvider.class, method = "updateMallSaleType") + public void updateMallSaleType(MallSaleType mallSaleType); + + @SelectProvider(type = MallPermissionDaoProvider.class, method = "getMallRolePermissions") + public List getMallRolePermissions(MallRolePermission mallRolePermission); + + class MallPermissionDaoProvider { + public String updateMallPermission(MallPermission mallPermission) { + String sql = "UPDATE mall_permission "; + if (mallPermission.getName() != null) { + sql += " SET `name` = #{name}"; + } + if (mallPermission.getId() != null) { + sql += " where id = #{id}"; + } + return sql; + } + public String updatePermissionByParentId(MallPermission mallPermission) { + StringBuilder sb = new StringBuilder(); + sb.append("UPDATE mall_permission "); + if (mallPermission.getParentId() != null) { + sb.append(" SET `parent_id` = #{parentId} "); + } + if (mallPermission.getOrigParentId() != null) { + sb.append(" WHERE `parent_id` = #{origParentId}"); + } + if (mallPermission.getIds() != null) { + List ids = mallPermission.getIds(); + sb.append(" WHERE `id` in ("); + for(int i=0;i { + + List findList(PosActionLog posActionLog); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/PosCouponOrderVerifyMapper.java b/mallinkService/src/main/java/com/iformall/mapper/PosCouponOrderVerifyMapper.java new file mode 100644 index 000000000..fd6555c4c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/PosCouponOrderVerifyMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import org.apache.ibatis.annotations.Param; +import com.iformall.domain.po.PosCouponOrderVerify; + +public interface PosCouponOrderVerifyMapper extends CommonMapper { + + List findList(PosCouponOrderVerify posCouponOrderVerify); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/PosMallConfigMapper.java b/mallinkService/src/main/java/com/iformall/mapper/PosMallConfigMapper.java new file mode 100644 index 000000000..c65be81f3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/PosMallConfigMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.PosMallConfig; + +public interface PosMallConfigMapper extends CommonMapper { + + List findList(PosMallConfig posMallConfig); + + PosMallConfig getByTenantId(String tenantId); + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/PosOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/PosOrderMapper.java new file mode 100644 index 000000000..120bccc68 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/PosOrderMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import org.apache.ibatis.annotations.Param; +import com.iformall.domain.po.PosOrder; + +public interface PosOrderMapper extends CommonMapper { + + List findList(PosOrder posOrder); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/PosPayOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/PosPayOrderMapper.java new file mode 100644 index 000000000..e34479bfa --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/PosPayOrderMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import org.apache.ibatis.annotations.Param; +import com.iformall.domain.po.PosPayOrder; + +public interface PosPayOrderMapper extends CommonMapper { + + List findList(PosPayOrder posPayOrder); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/ThDevInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/ThDevInfoMapper.java new file mode 100644 index 000000000..4ae2d26ce --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/ThDevInfoMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import org.apache.ibatis.annotations.Param; +import com.iformall.domain.po.ThDevInfo; + +public interface ThDevInfoMapper extends CommonMapper { + + List findList(ThDevInfo thDevInfo); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java index 66fdede14..efd9b7078 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillAllMapper.java @@ -42,4 +42,15 @@ public interface WxBillAllMapper { */ List> getOweBillAsPage(WxBillAll record); + /** + * 应收和承付商户分页列表 + * + * @return + */ + List> getReceiveAndPayBillAsPage(WxBillAll record); + + Map getReceiveAndPayBillDetail(WxBillAll record); + + List> allDepositList(WxBillAll wxBillAll); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleBillMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleBillMapper.java new file mode 100644 index 000000000..d611d6bf8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleBillMapper.java @@ -0,0 +1,18 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxBillSettle; +import com.iformall.domain.po.WxBillSettleBill; +import java.util.List; + +/** + * @author luozukai + */ +public interface WxBillSettleBillMapper extends CommonMapper { + + List findBySettleId(WxBillSettleBill wxBillSettleBill); + + void update(WxBillSettleBill record); + + void delBySettleId(WxBillSettle record); +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java new file mode 100644 index 000000000..8e3148041 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleMapper.java @@ -0,0 +1,18 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxBillSettle; +import java.util.List; + +/** + * @author luozukai + */ +public interface WxBillSettleMapper extends CommonMapper { + + List findList(WxBillSettle wxBillSettle); + + + void update(WxBillSettle record); + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleRecordMapper.java new file mode 100644 index 000000000..af9ed274b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillSettleRecordMapper.java @@ -0,0 +1,20 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxBillSettle; +import com.iformall.domain.po.WxBillSettleRecord; + +import java.util.List; + +/** + * @author luozukai + */ +public interface WxBillSettleRecordMapper extends CommonMapper { + + List findList(WxBillSettleRecord wxBillSettleRecord); + + void update(WxBillSettleRecord record); + + Long getSumMoneyBySettleId(WxBillSettle wxBillSettle); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java index 338bab9b7..e0a840590 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java @@ -4,6 +4,7 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.vo.CUserBaseVo; +import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.WxCUserBasicInfoVo; import java.util.List; @@ -28,7 +29,10 @@ public interface WxCUserBasicInfoMapper extends CommonMapper findListByScore(WxCUserBasicInfoDto dto); + List findBirthdayList(String tenantId, String begin, String end); + long findCount(WxCUserBasicInfoDto dto); + List findCountHistory(WxCUserBasicInfoDto dto); List findVoList(WxCUserBasicInfo wxCUserBasicInfo); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java index 6d81d824f..99f9033f9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java @@ -6,6 +6,7 @@ import java.util.Map; import com.iformall.common.CommonMapper; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxCUser; +import com.iformall.domain.vo.UserCountVo; public interface WxCUserMapper extends CommonMapper { @@ -19,6 +20,8 @@ public interface WxCUserMapper extends CommonMapper { long findCount(WxCUserBasicInfoDto dto); + List findCountHistory(WxCUserBasicInfoDto dto); + List listByChannel(WxCUser wxCUser); long countByChannel(WxCUser wxCUser); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java index 846417c90..eb9dca973 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCardSpendMapper.java @@ -22,7 +22,10 @@ public interface WxCardSpendMapper extends CommonMapper { List> sumCardSpendVoForOwner(WxCardSpendVo wxCardSpend); - + /** + * POS + */ + int deleteForPrevCancel(WxCardSpend record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponActionLogMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponActionLogMapper.java index dd19a6a04..b04f7a851 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponActionLogMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponActionLogMapper.java @@ -6,6 +6,7 @@ import com.iformall.domain.dto.MarkingCouponDataReportDto; import com.iformall.domain.vo.MarkingSceneDataReportTVo; import com.iformall.domain.vo.MarkingSceneDataReportVo; import com.iformall.domain.vo.MarkingSceneDataVo; +import com.iformall.domain.vo.WxCouponActionLogVo; import org.apache.ibatis.annotations.Param; import com.iformall.domain.po.WxCouponActionLog; @@ -53,4 +54,11 @@ public interface WxCouponActionLogMapper extends CommonMapper params); + + /** + * 查找注券记录 + * @param params + * @return + */ + List getActionLog(Map params) ; } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java index 1ee46bedd..ebac5cc58 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java @@ -19,9 +19,9 @@ public interface WxCouponMapper extends CommonMapper { WxCouponCVo findVoDetail(@Param("id")Long id); - void reduceInventory(@Param("id")Long id,@Param("number")Integer number); + Integer reduceInventory(@Param("id")Long id,@Param("number")Integer number,@Param("remainInventory")Integer remainInventory); - void backInventory(@Param("id")Long id,@Param("remainInventory")Integer remainInventory, @Param("number")Integer number); + Integer backInventory(@Param("id")Long id, @Param("number")Integer number,@Param("remainInventory")Integer remainInventory); void offExpiriedCouponByValidDate(); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index 7c74034ec..0ec82b688 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -23,6 +23,8 @@ public interface WxCouponOrderMapper extends CommonMapper { // 券包核销 int updateVerifyCouponOrder(WxCouponOrder wxCouponOrder); + int updateVerifyCouponOrderStatus(WxCouponOrder wxCouponOrder); + int cancelVerifyCouponOrder(WxCouponOrder wxCouponOrder); //统一的计数接口 int findCount(WxCouponOrder wxCouponOrder); @@ -69,4 +71,8 @@ public interface WxCouponOrderMapper extends CommonMapper { //// 卡相关接口 List findCardListOfCUser(WxCardCVo wxCardCVo); WxCardCVo findCardDetailOfCUser(@Param("id")Long id); + + + /// POS接口 + List findAvailCouponOrder(Map params); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponSendMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponSendMapper.java index 5673bf4bc..82b322a85 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponSendMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponSendMapper.java @@ -4,13 +4,37 @@ import java.util.*; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxCouponSend; import com.iformall.domain.vo.WxCouponSendVo; +import org.apache.ibatis.annotations.Param; public interface WxCouponSendMapper extends CommonMapper { List findListVo(WxCouponSend wxCouponSend); + List findListVoByValidType(WxCouponSend wxCouponSend); void updateStatusByCouponId(WxCouponSend wxCouponSend); void offExpiriedCouponSendByCouponStatus(); - + + void updateBirthdayConfig(WxCouponSend wxCouponSend); + + /** + * 商户注券 库存减少 + * + * @param id 券ID + * @param merchantRemain 当前库存 + * @param merchantSend 当前已发数 + * @param number 减少数量 + */ + Integer reduceMerchantSend(Long id, Integer merchantRemain,Integer merchantSend,Integer number); + + /** + * 商户注券 库存退回 + * + * @param id 券ID + * @param merchantRemain 当前库存 + * @param merchantSend 当前已发数 + * @param number 回退数量 + */ + Integer backMerchantSend(Long id, Integer merchantRemain, Integer merchantSend,Integer number); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java index 5fb277662..88e4127e6 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java @@ -1,10 +1,11 @@ package com.iformall.mapper; -import java.util.*; import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxCreditHistory; import com.iformall.domain.vo.WxCreditHistoryNewIdVo; import com.iformall.domain.vo.WxCreditHistoryVo; -import com.iformall.domain.po.WxCreditHistory; + +import java.util.List; public interface WxCreditHistoryMapper extends CommonMapper { @@ -20,4 +21,15 @@ public interface WxCreditHistoryMapper extends CommonMapper { + + List findList(WxDataRuleTarget param); + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxLevelConfigMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxLevelConfigMapper.java index 145072641..5a7bd0a58 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxLevelConfigMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxLevelConfigMapper.java @@ -15,8 +15,13 @@ public interface WxLevelConfigMapper extends CommonMapper { void deleteAll(@Param("tenantId")String tenantId); - String getLevel(@Param("tenantId")String tenantId,@Param("poins")Integer poins); - - - + String getLevel(@Param("tenantId")String tenantId,@Param("points")Integer poins); + + /** + * 获取等级倍率 + * @param tenantId + * @param points + * @return + */ + Integer getScale(@Param("tenantId")String tenantId,@Param("points")Integer points); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantPowerBillConfigMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantPowerBillConfigMapper.java new file mode 100644 index 000000000..2108aef5b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantPowerBillConfigMapper.java @@ -0,0 +1,12 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxMerchantPowerBillConfig; + +import java.util.List; + +public interface WxMerchantPowerBillConfigMapper extends CommonMapper { + + List findList(WxMerchantPowerBillConfig wxMerchantPowerBillConfig); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantTradeDailyMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantTradeDailyMapper.java index f1ec40aa7..11b63c48d 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantTradeDailyMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantTradeDailyMapper.java @@ -11,9 +11,9 @@ public interface WxMerchantTradeDailyMapper extends CommonMapper findListOfWeek(WxMerchantTradeDaily wxMerchantTradeDaily); - List findListVo(WxMerchantTradeDailyVo wxMerchantTradeDaily); - - List findListVoOfMonth(WxMerchantTradeDaily wxMerchantTradeDaily); + List findVoList(WxMerchantTradeDaily wxMerchantTradeDaily); List findTotalListOfMonth(WxMerchantTradeDaily wxMerchantTradeDaily); + + String findSumMoney(WxMerchantTradeDaily wxMerchantTradeDaily); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxPowerBillAutoConfigMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxPowerBillAutoConfigMapper.java new file mode 100644 index 000000000..e04d6780a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxPowerBillAutoConfigMapper.java @@ -0,0 +1,15 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxPowerBillAutoConfig; + +import java.util.List; + +/** + * @author gongbiao + */ +public interface WxPowerBillAutoConfigMapper extends CommonMapper { + + List findList(WxPowerBillAutoConfig wxPowerBillAutoConfig); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java index d248615da..b6cbc38a0 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractMapper.java @@ -64,4 +64,7 @@ public interface WxRentContractMapper extends CommonMapper List listContractVo(WxRentPropertyContractVo record); WxRentContract getByBill(WxBillRent billRent); + + int getShopCountMax(); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxScoreValidityPeriodMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxScoreValidityPeriodMapper.java deleted file mode 100644 index af5ba02d2..000000000 --- a/mallinkService/src/main/java/com/iformall/mapper/WxScoreValidityPeriodMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iformall.mapper; - -import java.util.*; -import com.iformall.common.CommonMapper; -import com.iformall.domain.po.WxScoreValidityPeriod; - -public interface WxScoreValidityPeriodMapper extends CommonMapper { - - List findList(WxScoreValidityPeriod wxScoreValidityPeriod); - - - - - - -} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java index 5617e1700..389811786 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java @@ -31,7 +31,7 @@ public interface WxShopMapper extends CommonMapper { List findListWithMerchantMap(WxShop record); - List findShopVoList(Map map); + List findShopVoList(@Param("merchantId") Long merchantId); Long getCountByWxShop(WxShop wxShop); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxUserDataRuleMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxUserDataRuleMapper.java new file mode 100644 index 000000000..0e04f553d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxUserDataRuleMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxUserDataRule; + +import java.util.List; + +/** + * @author gongbiao + */ +public interface WxUserDataRuleMapper extends CommonMapper { + + List findList(WxUserDataRule param); + + +} diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java b/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java new file mode 100644 index 000000000..401d55a26 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayConstant.java @@ -0,0 +1,162 @@ +package com.iformall.pay; + +public class WxPayConstant { + public final static String REQ_KEY = "reqKey"; + public final static String RES_KEY = "resKey"; + + public final static String RET_SUCCESS = "SUCCESS"; + public final static String RET_FAIL = "FAIL"; + public final static String RESULT_SUCCESS = "0"; + + public final static String RETURN_CODE = "return_code"; + public final static String RETURN_MSG = "return_msg"; + public final static String RESULT_CODE = "result_code"; + public final static String RESULT_MSG = "result_msg"; + public final static String RESULT_DATA = "result_data"; + public final static String TIMESTAMP = "timestamp"; + + public final static String NONCE_STR = "nonce_str"; + public final static String DEV_ID = "dev_id"; + public final static String SIGN = "sign"; + public final static String FORCE = "force"; + + + public final static String TENANT_ID = "tenant_id"; + public final static String MALL_NAME = "mall_name"; + public final static String MERCHANT_ID = "merchant_id"; + public final static String MERCHANT_NAME = "merchant_name"; + public final static String MERCHANT_IMG = "merchant_img"; + public final static String BUSER_ID = "order_operation_id"; + public final static String COUPON_ORDER_ID = "coupon_order_id"; + public final static String COUPON_ORDER_LIST = "coupon_list"; + public final static String POS_ORDER_ID = "order_number_of_platform"; + public final static String ORDER_CREATE_SN = "order_create_sn"; + public final static String ORDER_AMOUNT = "order_amount"; + public final static String ORDER_AMOUNT_LEFT = "order_amount_left"; + public final static String MEM_ID = "mem_id"; + public final static String MEM_PHONE = "mem_phone_number"; + public final static String CARD_ID = "card_id"; + public final static String AMOUNT_PAID_BY_CARD = "amount_paid_by_card"; + public final static String CARD_AMOUNT_BEFORE_PAY = "card_amount_before_pay"; + public final static String PAYMENT_AMOUNT = "payment_amount"; + public final static String CARD_AMOUNT_AFTER_PAY = "card_amount_after_pay"; + public final static String CARD_SPEND_ID = "payment_id_from_iformall"; + public final static String CARD_SPEND_TIME = "payment_time_from_iformall"; + public final static String PHONE = "phone"; + public final static String PASSWORD = "password"; + public final static String MEM_CONFIG = "mem_config"; + + public final static String PROMOTION_AMOUNT = "promotion_amount"; + public final static String AMOUNT_LEFT_AFTER_PAY = "amount_left_after_pay"; + public final static String CARD_PAYMENT_DATA = "card_payment_data"; + + public final static String TITLE = "title"; + public final static String COVER_IMG = "cover_img"; + public final static String EXPIRE_TIME = "expire_time"; + public final static String VALID_START_DATE = "valid_start_date"; + public final static String VALID_END_DATE = "valid_end_date"; + public final static String PRICE = "price"; + public final static String SALE_PRICE = "sale_price"; + public final static String USE_PRICE = "use_price"; + public final static String STATUS = "status"; + public final static String STATUS_DES = "status_des"; + + public final static String SCENE_TYPE = "business_type"; + public final static String SCENE_VERIFY = "2"; + public final static String SCENE_PAY = "1"; + + public final static String CHECK = "check"; + public final static String PRE_VERIFY = "pre_verify"; + public final static String PRE_PAY= "pre_pay"; + public final static String VERIFY = "verify"; + public final static String PAY = "pay"; + public final static String CANCEL = "cancel"; + public final static String CANCEL_JSON = "cancel_json"; + public final static String CANCEL_DES = "cancel_des"; + + public final static String REG_QRCODE_URL = "qrcode_url"; + public final static String POS_QRCODE_RULE = "pos_qrcode_rule"; + public final static String QRCODE = "qrcode"; + + + public final static String DISCOUNT = "discount"; + public final static String DISCOUNT_DES = "discount_description"; + public final static String DISCOUNT_RATE = "discount_rate"; + public final static String COUPON = "coupon"; + public final static String MEM_COUPONS = "coupons"; + public final static String COUPON_DES = "coupon_description"; + public final static String CARD = "card"; + public final static String LEVEL = "level"; + public final static String AVAIL_CO_LIST = "avail_co_list"; + public final static String ID = "id"; + public final static String COUPON_ID = "coupon_id"; + public final static String COUPON_TYPE = "coupon_type"; + public final static String IS_SELECTED = "is_selected"; + + public final static String COUPON_REFUND_RESULT = "coupon_refund_result"; + public final static String COUPON_REFUND_ID = "coupon_refund_id"; + public final static String REFUND_RESULT_CODE = "result_code"; + public final static String REFUND_RESULT_MSG = "result_msg"; + public final static String REFUND_TIME_FROM_IFORMALL = "refund_time_from_iformall"; + public final static String CARD_REFUND_RESULT = "card_refund_result"; + + public final static String COUPON_PROMOTION_AMOUNT = "coupon_promotion_amount"; + + public final static String MEMBER_DISCOUNT = "member_discount"; + public final static String PROMOTION_INFO = "promotion_info"; + public final static String PROMOTION_DATA = "promotion_data"; + public final static String PAYMENT_PREDICTION = "payment_prediction"; + + public final static String PAYMENT_INFO = "payment_info"; + + public final static String DEDUCT_AMOUNT = "deduct_amount"; + public final static String REMAIN_AMOUNT = "remain_amount"; + public final static String ORDER_STATUS = "order_status"; + + public final static String POINT = "point"; + public final static String CREDIT = "credit"; + + public final static String REAL_AMOUNT = "real_amount"; + + public final static String SALE_FEE = "sale_fee"; + + public final static String ORG_AMOUNT = "org_amount"; + public final static String DISCOUNT_AMOUNT = "discount_amount"; + public final static String ORG_REMAIN_AMOUNT = "org_remain_amount"; + + public final static String RET = "ret"; + + public final static String TRUE = "true"; + public final static String FALSE = "false"; + + + //// 东软相关定义 + public final static String POS_ORDER_TIME = "order_time_of_platform"; // 平台订单创建时间, 格式:4位年2位月2位日2位24小时制时2位分2位秒3位毫秒 + public final static String PAY_DETAIL = "payment_detail"; + public final static String PAY_DETAIL_LIST = "payment_detail_list"; + public final static String NEU_PAY_ORDER_ID = "payment_number_of_platform"; // 东软平台支付订单号 + public final static String NEU_PAY_ORDER_TIME = "payment_order_time"; // 东软平台支付订单创建时间 + public final static String NEU_PAY_ORDER_TYPE = "payment_type"; // 支付方式: 0微信;1支付宝;2现金;3会员折扣;4优惠券;5预付卡;6银行卡 + public final static String NEU_PAY_ORDER_TYPE_DES = "payment_type_description"; // 支付方式描述:微信或支付宝或现金或会员折扣或优惠券或预付卡或银行卡 + public final static String NEU_PAY_ORDER_PARAM = "payment_third_party_string"; // 第三方使用数据,JSON存储,包含富茂所需的系统要素 + public final static String NEU_PAY_ORDER_STATUS = "payment_status"; // 支付状态:0非手动同步, 1手动同步 + public final static String NEU_PAY_ORDER_OUT_NO = "outer_payment_number"; // 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空 + public final static String NEU_PAY_ORDER_AMOUNT = "payment_amount"; // 支付金额 + public final static String NEU_PAY_ORDER_OUT_TIME = "pay_time"; // 第三方支付系统返回的支付时间,现金和富茂会员折扣时为空 + public final static String NEU_REFUND_DETAIL = "refund_detail"; + public final static String NEU_REFUND_DETAIL_LIST = "refund_detail_list"; + public final static String NEU_REFUND_ORDER_ID = "refund_number_of_platform"; // 东软平台退款订单号 + public final static String NEU_REFUND_ORDER_TIME = "refund_order_time"; // 东软平台退款订单创建时间 + public final static String NEU_REFUND_ORDER_TYPE = "refund_type"; // 退款方式: 0微信;1支付宝;2现金;3会员折扣;4优惠券;5预付卡;6银行卡;7记账; + // 退款方式可以与支付方式不同,但只能是记账,作为线下手动操作退款方式 + public final static String NEU_REFUND_ORDER_TYPE_DES = "refund_type_description"; // 退款方式描述:微信或支付宝或现金或会员折扣或优惠券或预付卡或银行卡或记账 + public final static String NEU_REFUND_ORDER_PARAM = "refund_third_party_string"; // 第三方使用数据,JSON存储,包含富茂所需的系统要素 + public final static String NEU_REFUND_ORDER_STATUS = "refund_status"; // 退款状态:0非手动, 1手动退款, 2手动释放同步 + public final static String NEU_REFUND_ORDER_OUT_NO = "outer_refund_number"; // 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空 + public final static String NEU_REFUND_ORDER_AMOUNT = "refund_amount"; // 退款金额 + public final static String NEU_REFUND_ORDER_OUT_TIME = "refund_time"; // 第三方支付系统返回的支付时间,现金和富茂会员折扣时为空 + + public final static String NEU_ORDER_PAY = "0"; // 有效, 优惠券从预核销处理为核销, 卡从预支付->支付 + public final static String NEU_ORDER_REFUND = "1"; // 取消 + +} diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java index f5da84065..f8931e90b 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayment.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayment.java @@ -14,6 +14,7 @@ import java.util.Map.Entry; import java.util.TreeMap; public class WxPayment { + /** * 构建参数 * @@ -386,6 +387,20 @@ public class WxPayment { return params; } + /** + * 构建签名之后的参数 + * + * @param params + * @param paternerKey + * @return Map + */ + public static Map buildSignAfterParasMapForHMAC(Map params, String paternerKey) { + params.put("nonce_str", Utility.generateUUID().replace("-", "")); + String sign = WxPayment.createSignHMAC(params, paternerKey); + params.put("sign", sign); + return params; + } + /** * 生成签名 * diff --git a/mallinkService/src/main/java/com/iformall/service/ExcelService.java b/mallinkService/src/main/java/com/iformall/service/ExcelService.java index 6a293cb80..b5ab9e51d 100644 --- a/mallinkService/src/main/java/com/iformall/service/ExcelService.java +++ b/mallinkService/src/main/java/com/iformall/service/ExcelService.java @@ -28,7 +28,7 @@ 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) + public 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); @@ -36,17 +36,17 @@ public class ExcelService { defaultExport(list, pojoClass, fileName, response, exportParams, false); } - public static void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, HttpServletResponse response, boolean template) + public void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, HttpServletResponse response, boolean template) { defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName, ExcelType.XSSF), template); } - public static void exportExcel(List> list, String fileName, HttpServletResponse response) + public 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, boolean template) + private void defaultExport(List list, Class pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams, boolean template) { Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list); if (workbook != null) { @@ -65,14 +65,14 @@ public class ExcelService { downLoadExcel(fileName, response, workbook); } - private static void defaultExport(List> list, String fileName, HttpServletResponse response) + private 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) + private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) { try { response.setCharacterEncoding("UTF-8"); @@ -86,7 +86,7 @@ public class ExcelService { } } - public static List importExcel(String filePath,Integer titleRows,Integer headerRows, Class pojoClass){ + public List importExcel(String filePath, Integer titleRows, Integer headerRows, Class pojoClass) { if (StringUtils.isBlank(filePath)){ return null; } @@ -105,7 +105,7 @@ public class ExcelService { return list; } - public static List importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class pojoClass) { + public List importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class pojoClass) { if (file == null) { return null; } diff --git a/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java b/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java index 82f7af593..780717c6e 100644 --- a/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java +++ b/mallinkService/src/main/java/com/iformall/service/MarkingDataReportService.java @@ -5,6 +5,8 @@ import com.iformall.domain.dto.MarkingCouponDataReportDto; import com.iformall.domain.dto.WxOrderReportDto; import com.iformall.domain.vo.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -33,4 +35,7 @@ public interface MarkingDataReportService { List listMicroPayOrderReportByDateAndMerchant(WxOrderReportDto wxOrderReportDto); PageInfo listMerchantMicroPayOrderReportByDate(WxOrderReportDto wxOrderReportDto,Integer pageNum, Integer pageSize); + + void exportTouchUsersData(HttpServletRequest request, HttpServletResponse response, MarkingCouponDataReportDto markingCouponDataReportDto); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxScoreValidityPeriodService.java b/mallinkService/src/main/java/com/iformall/service/PosActionLogService.java similarity index 56% rename from mallinkService/src/main/java/com/iformall/service/WxScoreValidityPeriodService.java rename to mallinkService/src/main/java/com/iformall/service/PosActionLogService.java index 670d0ff8c..76b2ef539 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxScoreValidityPeriodService.java +++ b/mallinkService/src/main/java/com/iformall/service/PosActionLogService.java @@ -1,19 +1,20 @@ package com.iformall.service; +import java.util.*; import com.github.pagehelper.PageInfo; -import com.iformall.domain.po.WxScoreValidityPeriod; +import com.iformall.domain.po.PosActionLog; -public interface WxScoreValidityPeriodService { +public interface PosActionLogService { /** * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ - PageInfo listAsPage(WxScoreValidityPeriod record, Integer pageIndex, Integer pageSize); + PageInfo listAsPage(PosActionLog record, Integer pageIndex, Integer pageSize); /** * 根据Id获得实体 @@ -21,14 +22,14 @@ public interface WxScoreValidityPeriodService { * @param id * @return */ - WxScoreValidityPeriod getById(Long id); + PosActionLog getById(Long id); /** * 保存或更新实体 * * @param record */ - void saveOrUpdate(WxScoreValidityPeriod record); + void saveOrUpdate(PosActionLog record); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/PosCouponOrderVerifyService.java b/mallinkService/src/main/java/com/iformall/service/PosCouponOrderVerifyService.java new file mode 100644 index 000000000..076262ce1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/PosCouponOrderVerifyService.java @@ -0,0 +1,57 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosCouponOrderVerify; + +import java.util.List; + +public interface PosCouponOrderVerifyService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(PosCouponOrderVerify record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(PosCouponOrderVerify record); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + PosCouponOrderVerify getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(PosCouponOrderVerify record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/PosMallConfigService.java b/mallinkService/src/main/java/com/iformall/service/PosMallConfigService.java new file mode 100644 index 000000000..0a0fda7d8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/PosMallConfigService.java @@ -0,0 +1,55 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosMallConfig; + +public interface PosMallConfigService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(PosMallConfig record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + PosMallConfig getById(Long id); + + /** + * 根据TenantId获得实体 + * + * @param tenantId + * @return + */ + PosMallConfig getByTenantId(String tenantId); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(PosMallConfig record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/PosOrderService.java b/mallinkService/src/main/java/com/iformall/service/PosOrderService.java new file mode 100644 index 000000000..e739d52d1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/PosOrderService.java @@ -0,0 +1,48 @@ +package com.iformall.service; + +import java.util.*; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosOrder; + +public interface PosOrderService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(PosOrder record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + PosOrder getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(PosOrder record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/PosPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/PosPayOrderService.java new file mode 100644 index 000000000..dd64c4aa9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/PosPayOrderService.java @@ -0,0 +1,57 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosPayOrder; + +import java.util.List; + +public interface PosPayOrderService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(PosPayOrder record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(PosPayOrder record); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + PosPayOrder getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(PosPayOrder record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/ThDevInfoService.java b/mallinkService/src/main/java/com/iformall/service/ThDevInfoService.java new file mode 100644 index 000000000..50133a7ff --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/ThDevInfoService.java @@ -0,0 +1,55 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.ThDevInfo; + +public interface ThDevInfoService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(ThDevInfo record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + ThDevInfo getById(Long id); + + /** + * 根据devId获得实体 + * + * @param devId + * @return + */ + ThDevInfo getByDevId(String devId); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(ThDevInfo record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index 1950f3b16..64a6c6751 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.iformall.common.ResultData; import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillSettle; import com.iformall.domain.vo.WxBillAll; import com.iformall.domain.vo.WxBillExcelTemplate; import com.iformall.domain.vo.WxBillExcelTemplateOther; @@ -17,6 +18,8 @@ import java.util.Map; */ public interface WxBillAllService { + List> allDepositList(WxBillAll wxBillAll); + Map listAsPage(WxBillAll wxBillAll, Integer pageNum, Integer pageSize); List> listBillOweAndWaitPay(WxBillAll wxBillAll); @@ -48,6 +51,16 @@ public interface WxBillAllService { */ Map getOweBillAsPage(WxBillAll record, Integer pageNum, Integer pageSize); + + /** + * 应收和承付商户分页列表 + * + * @return + */ + Map getReceiveAndPayBillAsPage(WxBillAll record, Integer pageNum, Integer pageSize); + + void exportReceiveAndPayBillAsPage(WxBillAll record, HttpServletRequest request, HttpServletResponse response); + void exportOweMerchant(WxBillAll record, HttpServletRequest request, HttpServletResponse response); void exportWaitMerchant(WxBillAll record, HttpServletRequest request, HttpServletResponse response); @@ -56,6 +69,8 @@ public interface WxBillAllService { void exportOweBill(WxBillAll wxBillAll, HttpServletRequest request, HttpServletResponse response); + void exportSettleBill(WxBillSettle wxBillSettle, HttpServletRequest request, HttpServletResponse response); + ResultData updateReceivePay(WxBillAll wxBillAll, MallUserInfo user); void addBillAction(EnumBillAction billAction, Long billId, Long oldPrice, Long newPrice, MallUserInfo mallUserInfo); diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillSettleRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxBillSettleRecordService.java new file mode 100644 index 000000000..d5efbfba1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxBillSettleRecordService.java @@ -0,0 +1,28 @@ +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.WxBillSettleRecord; + +/** + * @author luozukai + */ +public interface WxBillSettleRecordService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + PageInfo listAsPage(WxBillSettleRecord record, Integer pageIndex, Integer pageSize); + + /** + * 保存或更新实体 + * + * @param record + */ + ResultData saveOrUpdate(WxBillSettleRecord record,MallUserInfo mallUserInfo,Long bUserId); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillSettleService.java b/mallinkService/src/main/java/com/iformall/service/WxBillSettleService.java new file mode 100644 index 000000000..7e7e61da4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxBillSettleService.java @@ -0,0 +1,45 @@ +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.WxBillSettle; +import com.iformall.domain.po.WxBillSettleBill; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * @author luozukai + */ +public interface WxBillSettleService { + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + PageInfo listAsPage(WxBillSettle record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxBillSettle getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + ResultData saveOrUpdate(WxBillSettle record, MallUserInfo userInfo); + + void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillSettle wxBillSettle); + + void downloadBill(HttpServletRequest request, HttpServletResponse response, WxBillSettle wxBillSettle); + + void updateFreezeOrStatus(List billList, Integer freezeStatus, Integer status); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java index 6a09bff7c..655250b99 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java @@ -4,11 +4,9 @@ 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.po.*; import com.iformall.domain.vo.CUserBaseInfoT; +import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.WxTagsGroupVo; import javax.servlet.http.HttpServletRequest; @@ -70,7 +68,7 @@ public interface WxCUserBasicInfoService { * * @param record */ - void updateObj(WxCUserBasicInfo record, Long newId); + void updateObj(WxCUserBasicInfo record, WxCUser user); /** * 根据Id删除实体 @@ -122,7 +120,7 @@ public interface WxCUserBasicInfoService { void importOneMem(String tenantId, String importKey, List tagList, CUserBaseInfoT uBase,MallUserInfo mallUserInfo); long findCount(WxCUserBasicInfoDto dto); - + List findCountHistory(WxCUserBasicInfoDto dto); /** * 停车会员记录导出 * @param record diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java index c7a4638b5..607aab594 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java @@ -5,9 +5,13 @@ import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCreditHistory; +import com.iformall.domain.vo.UserCountVo; import com.iformall.enums.EnumScoreType; import me.chanjar.weixin.mp.bean.result.WxMpUser; +import java.util.List; +import java.util.Map; + public interface WxCUserService { /** @@ -94,6 +98,13 @@ public interface WxCUserService { */ long findCount(WxCUserBasicInfoDto dto); + /** + * 统计数量 + * @param dto + * @return + */ + List findCountHistory(WxCUserBasicInfoDto dto); + /** * 通过渠道获取会员信息 diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java b/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java index 2b27343f9..ec9006260 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java @@ -3,7 +3,9 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.vo.PromotionCalc; import com.iformall.domain.vo.WxCardSpendVo; +import com.iformall.exception.MallinkException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -102,5 +104,10 @@ public interface WxCardSpendService { */ void exportData(WxCardSpendVo wxCardSpendVo, HttpServletRequest request, HttpServletResponse response); - + /** + * POS 卡支付相关接口 + */ + WxCardSpend cardSpendForPosPrePay(WxCardSpend record) throws MallinkException; + WxCardInfo cardSpendForPosPrePayCancel(WxCardInfo cardInfo, WxCardSpend record) throws MallinkException; + WxCardSpend cardSpendForPosPay(PromotionCalc scoreCreditCalc, WxCardSpend record, WxMerchant merchant, WxMerchantBUser buUser) throws MallinkException; } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponActionLogService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponActionLogService.java index 6ef78390c..028aafae9 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponActionLogService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponActionLogService.java @@ -2,6 +2,10 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCouponActionLog; +import com.iformall.domain.vo.WxCouponActionLogVo; + +import java.util.List; +import java.util.Map; public interface WxCouponActionLogService { @@ -42,6 +46,14 @@ public interface WxCouponActionLogService { int getCountByChannelId(String tenantId, int channelType, Long channelId); - + + /** + * 查找注券记录 + * @param params + * @param pageNum + * @param pageSize + * @return + */ + PageInfo getActionLog(Map params, Integer pageNum, Integer pageSize) ; } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 339507e93..22e8ad7a1 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.List; +import java.util.Map; public interface WxCouponOrderService { @@ -56,7 +57,7 @@ public interface WxCouponOrderService { /** * 核销后发送消息 */ - void sendInsideCouponVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser); + void sendInsideCouponVerifyMsg(String tenantId, Long couponOrderId, Long buUserId); /** * 核销后处理 @@ -188,5 +189,4 @@ public interface WxCouponOrderService { ResultData queryCardStatus(WxCouponOrder wxCouponOrder); void exportData(WxCouponOrderBVo wxCouponOrder, HttpServletRequest request, HttpServletResponse response); - } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponSendService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponSendService.java index 29736170b..456964729 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponSendService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponSendService.java @@ -1,10 +1,13 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCouponSend; import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.enums.EnumCouponSendSendType; +import javax.validation.constraints.NotNull; + public interface WxCouponSendService { /** @@ -16,7 +19,7 @@ public interface WxCouponSendService { * @return */ PageInfo listAsPage(WxCouponSend record, Integer pageIndex, Integer pageSize); - + /** * 根据Id获得实体 * @@ -32,6 +35,12 @@ public interface WxCouponSendService { */ void saveOrUpdate(WxCouponSend record); + /** + * 更新为无效 + * @param record + */ + void updateInvalid(WxCouponSend record) ; + /** * 根据Id删除实体 * @@ -48,12 +57,43 @@ public interface WxCouponSendService { boolean sendCouponToUser(EnumCouponSendSendType type, Object param); void updateStatusByCouponId(Long couponId,String tenantId, int status); - - - - - - - + /** + * 添加或更新生日券配置 + * @param beforeDays + * @param sendType + * @param tenantId + */ + void saveOrUpdateConfig(Integer beforeDays, Integer sendType, String tenantId) ; + /** + * 获取生日券配置 + * @param sendType + * @param tenantId + * @return + */ + WxCouponSend getConfig(Integer sendType,String tenantId) ; + + /** + * 商户注券 库存减少 + * + * @param id 券ID + * @param merchantRemain 当前库存 + * @param merchantSend 当前已发 + * @param number 减少数量 + */ + void reduceMerchantSend(Long id, Integer merchantRemain, Integer merchantSend ,Integer number); + + /** + * 商户注券 库存退回 + * + * @param id 券ID + * @param merchantRemain 当前库存 + * @param merchantSend 当前已发 + * @param number 回退数量 + */ + void backMerchantRemainInventory(Long id, Integer merchantRemain, Integer merchantSend ,Integer number); + + void handSel(WxCouponSend wxCouponSend, WxCUser user) ; + + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index b977c216e..dffc887e8 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -6,6 +6,7 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponStatisVo; +import org.apache.ibatis.annotations.Param; public interface WxCouponService { @@ -202,4 +203,22 @@ public interface WxCouponService { WxCoupon findById(WxCoupon wxCoupon); + /** + * 库存减少 + * + * @param id 券ID + * @param remainInventory 当前库存 + * @param number 减少数量 + */ + void reduceRemainInventory(Long id, Integer remainInventory, Integer number); + + /** + * 库存退回 + * + * @param id 券ID + * @param remainInventory 当前库存 + * @param number 回退数量 + */ + void backRemainInventory(Long id, Integer remainInventory, Integer number); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java b/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java index 95195bb91..5cff9b1ee 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCreditHistoryService.java @@ -1,6 +1,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; import com.iformall.domain.po.WxCreditHistory; import com.iformall.domain.vo.WxCreditHistoryVo; @@ -45,6 +46,13 @@ public interface WxCreditHistoryService { */ WxCreditHistory saveOrUpdate(WxCreditHistory record); + /** + * 积分历史回退 + * + * @param record + */ + int cancelCredit(WxCreditHistory record); + /** * 根据Id删除实体 * @@ -52,10 +60,12 @@ public interface WxCreditHistoryService { */ void deleteById(Long id); - Map findByMerchantIdAndSpend(Long merchantId, String spendStr, String tenantId); + Map findByMerchantIdAndSpend(Long merchantId, String spendStr, Long userId,String tenantId); void clearCreditByYear(); void exportData(HttpServletRequest request, HttpServletResponse response, WxCreditHistory wxCreditHistory); + ResultData getCreditSummary(WxCreditHistory wxCreditHistory); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxDataRuleTargetService.java b/mallinkService/src/main/java/com/iformall/service/WxDataRuleTargetService.java new file mode 100644 index 000000000..3db70c2ed --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxDataRuleTargetService.java @@ -0,0 +1,34 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxDataRuleTarget; + +import java.util.List; + +/** + * @author gongbiao + */ +public interface WxDataRuleTargetService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxDataRuleTarget record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List findList(WxDataRuleTarget record); + + + List getList(); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java b/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java index 59d703841..b75de2a71 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMallBuildingService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxMallBuildingFloorDto; import com.iformall.domain.po.WxMallBuilding; +import com.iformall.domain.po.WxMallFloor; public interface WxMallBuildingService { @@ -51,4 +52,11 @@ public interface WxMallBuildingService { */ void addBuildingAndFloors(WxMallBuildingFloorDto record); + /** + * 保存楼层楼座面积 + * + * @param record + */ + void saveFloorArea(WxMallFloor record); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantPowerBillConfigService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantPowerBillConfigService.java new file mode 100644 index 000000000..2f047705d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantPowerBillConfigService.java @@ -0,0 +1,43 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxMerchantPowerBillConfig; + +public interface WxMerchantPowerBillConfigService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxMerchantPowerBillConfig record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxMerchantPowerBillConfig getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + ResultData saveOrUpdate(WxMerchantPowerBillConfig record); + + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantTradeDailyService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantTradeDailyService.java index d156ad928..13a66235b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantTradeDailyService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantTradeDailyService.java @@ -81,11 +81,11 @@ public interface WxMerchantTradeDailyService { * @param pageSize * @return */ - PageInfo listAsPageVo(WxMerchantTradeDailyVo record, Integer pageIndex, Integer pageSize); + PageInfo listAsPageVo(WxMerchantTradeDaily record, Integer pageIndex, Integer pageSize); - ResultData update(WxMerchantTradeDailyVo tradeDailyVo); + ResultData update(WxMerchantTradeDaily tradeDailyVo); - ResultData queryTradeDaily(WxMerchantTradeDailyVo wxMerchantTradeDaily); + ResultData queryTradeDaily(WxMerchantTradeDaily wxMerchantTradeDaily); - void exportData(WxMerchantTradeDailyVo wxMerchantTradeDaily, HttpServletRequest request, HttpServletResponse response); + void exportData(WxMerchantTradeDaily wxMerchantTradeDaily, HttpServletRequest request, HttpServletResponse response); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index ce026d370..6158c90eb 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.domain.vo.WxOrderCouponPressVo; import com.iformall.domain.vo.WxOrderCouponVo; import com.iformall.domain.vo.WxOrderQueryVo; @@ -55,9 +56,10 @@ public interface WxOrderService { * 免费券订单接口 * @param userId * @param couponId + * @param wxCouponSendVo 商户注券时必须指定 * @return WxCouponOrder */ - WxCouponOrder sendFreeCouponToUser(Long userId, Long couponId); + WxCouponOrder sendFreeCouponToUser(Long userId, Long couponId, WxCouponSendVo wxCouponSendVo); /** * orderSuccess 订单已支付 diff --git a/mallinkService/src/main/java/com/iformall/service/WxPowerBillAutoConfigService.java b/mallinkService/src/main/java/com/iformall/service/WxPowerBillAutoConfigService.java new file mode 100644 index 000000000..02530a12d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxPowerBillAutoConfigService.java @@ -0,0 +1,38 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxPowerBillAutoConfig; + +/** + * @author gongbiao + */ +public interface WxPowerBillAutoConfigService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxPowerBillAutoConfig record, Integer pageIndex, Integer pageSize); + + /** + * 根据tenantId获得实体 + * + * @param tenantId + * @return + */ + WxPowerBillAutoConfig getConfig(String tenantId); + + /** + * 保存或更新实体 + * + * @param record + */ + ResultData modify(WxPowerBillAutoConfig record); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java b/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java index fd9ffa57e..398192a24 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxScoreRulesService.java @@ -1,5 +1,6 @@ package com.iformall.service; +import com.iformall.domain.po.WxScoreHistory; import com.iformall.domain.po.WxScoreRules; import com.iformall.enums.EnumScoreType; @@ -27,6 +28,13 @@ public interface WxScoreRulesService { */ void saveOrUpdate(WxScoreRules record); + /** + * 成长值回退 + * + * @param record + */ + int cancelScore(WxScoreHistory record); + /** * 增加成长值 */ diff --git a/mallinkService/src/main/java/com/iformall/service/WxUserDataRuleService.java b/mallinkService/src/main/java/com/iformall/service/WxUserDataRuleService.java new file mode 100644 index 000000000..24d81bbdc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxUserDataRuleService.java @@ -0,0 +1,14 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxUserDataRule; + +/** + * @author gongbiao + */ +public interface WxUserDataRuleService { + + void modify(WxUserDataRule wxUserDataRule); + + WxUserDataRule findByUserId(Long userId); + +} 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 2135c12a0..d5ca6fd15 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java @@ -7,8 +7,12 @@ 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.enums.EnumCarCmd; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumCouponType; +import com.iformall.enums.EnumOrderType; import com.iformall.mapper.*; +import com.iformall.service.ExcelService; import com.iformall.service.MarkingDataReportService; import com.iformall.utils.DateUtils; import org.apache.commons.collections.map.HashedMap; @@ -18,6 +22,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.text.NumberFormat; import java.time.LocalDate; import java.util.*; @@ -42,7 +48,8 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { private WxCouponMapper wxCouponMapper; @Autowired private WxOrderMapper wxOrderMapper; - + @Autowired + private ExcelService excelService; private Date addDay(int addDayAmount) { Calendar c = Calendar.getInstance(); @@ -508,6 +515,20 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { } result.put("micropayHistory",historyMap); + //商户发券 + markingCouponDataReportDto.setChannelType(EnumCouponSendSendType.MERCHANT.getCode()); + List merchantList = wxCouponActionLogMapper.sceneDataList(markingCouponDataReportDto); + countMap = merchantList.stream().collect(Collectors.toMap(MarkingSceneDataVo::getXtime, p -> p.getSendCount())); + historyMap = new TreeMap<>(); + for (String date:days) { + historyMap.put(date.substring(5).replace("-","/"),"0"); + } + for (String key : countMap.keySet()) { + String keySub = key.substring(5).replace("-","/"); + historyMap.put(keySub,countMap.get(key)); + } + result.put("merchantHistory",historyMap); + return result; } @@ -653,6 +674,24 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { return new PageInfo<>(list); } + @Override + public void exportTouchUsersData(HttpServletRequest request, HttpServletResponse response, MarkingCouponDataReportDto markingCouponDataReportDto) { + if (markingCouponDataReportDto.getStartTime() != null) { + markingCouponDataReportDto.setStartTime(convertDateAndAdd(markingCouponDataReportDto.getStartTime(), 0)); + } + if (markingCouponDataReportDto.getEndTime() != null) { + markingCouponDataReportDto.setEndTime(markingCouponDataReportDto.getEndTime()); + } + HashMap params2 = new HashMap<>(); + params2.put("tenantId", markingCouponDataReportDto.getTenantId()); + if (markingCouponDataReportDto.getStartTime() != null) + params2.put("startTime", convertDateAndAdd(markingCouponDataReportDto.getStartTime(), 0)); + if (markingCouponDataReportDto.getEndTime() != null) + params2.put("endTime", markingCouponDataReportDto.getEndTime()); + List wxUserVisitList = wxCouponOrderMapper.touchUsersReportList(params2); + excelService.exportExcel(wxUserVisitList, null, "触达用户数", TouchUsersReportVo.class, "触达用户数" + ".xlsx", response, false); + } + @Override public PageInfo getTouchUsersReportList(String tenantId, MarkingCouponDataReportDto markingCouponDataReportDto, Integer pageIndex, Integer pageSize) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java new file mode 100644 index 000000000..1c7119c24 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/PosActionLogServiceImpl.java @@ -0,0 +1,54 @@ +package com.iformall.service.impl; + +import java.util.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosActionLog; +import com.iformall.mapper.PosActionLogMapper; +import com.iformall.service.PosActionLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class PosActionLogServiceImpl implements PosActionLogService { + + @Autowired + PosActionLogMapper posActionLogMapper; + + + @Override + public PageInfo listAsPage(PosActionLog record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> posActionLogMapper.findList(record)); + } + + @Override + public PosActionLog getById(Long id) { + return posActionLogMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(PosActionLog record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + posActionLogMapper.insertSelective(record); + } else { + posActionLogMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + posActionLogMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PosCouponOrderVerifyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PosCouponOrderVerifyServiceImpl.java new file mode 100644 index 000000000..3fc87acf8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/PosCouponOrderVerifyServiceImpl.java @@ -0,0 +1,60 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosCouponOrderVerify; +import com.iformall.mapper.PosCouponOrderVerifyMapper; +import com.iformall.service.PosCouponOrderVerifyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +import java.util.List; + +@Service +public class PosCouponOrderVerifyServiceImpl implements PosCouponOrderVerifyService { + + @Autowired + PosCouponOrderVerifyMapper posCouponOrderVerifyMapper; + + + @Override + public PageInfo listAsPage(PosCouponOrderVerify record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> posCouponOrderVerifyMapper.findList(record)); + } + + @Override + public List getList(PosCouponOrderVerify record) { + return posCouponOrderVerifyMapper.findList(record); + } + + @Override + public PosCouponOrderVerify getById(Long id) { + return posCouponOrderVerifyMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(PosCouponOrderVerify record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + posCouponOrderVerifyMapper.insertSelective(record); + } else { + posCouponOrderVerifyMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + posCouponOrderVerifyMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PosMallConfigServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PosMallConfigServiceImpl.java new file mode 100644 index 000000000..71df7b1b7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/PosMallConfigServiceImpl.java @@ -0,0 +1,59 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosMallConfig; +import com.iformall.mapper.PosMallConfigMapper; +import com.iformall.service.PosMallConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class PosMallConfigServiceImpl implements PosMallConfigService { + + @Autowired + PosMallConfigMapper posMallConfigMapper; + + + @Override + public PageInfo listAsPage(PosMallConfig record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> posMallConfigMapper.findList(record)); + } + + @Override + public PosMallConfig getById(Long id) { + return posMallConfigMapper.selectByPrimaryKey(id); + } + + @Override + public PosMallConfig getByTenantId(String id) { + PosMallConfig config = posMallConfigMapper.getByTenantId(id); + return config; + } + + @Override + public void saveOrUpdate(PosMallConfig record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + posMallConfigMapper.insertSelective(record); + } else { + posMallConfigMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + posMallConfigMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PosOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PosOrderServiceImpl.java new file mode 100644 index 000000000..8f831f748 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/PosOrderServiceImpl.java @@ -0,0 +1,56 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosOrder; +import com.iformall.mapper.PosOrderMapper; +import com.iformall.service.PosOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class PosOrderServiceImpl implements PosOrderService { + + @Autowired + PosOrderMapper posOrderMapper; + + + @Override + public PageInfo listAsPage(PosOrder record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> posOrderMapper.findList(record)); + } + + @Override + public PosOrder getById(Long id) { + return posOrderMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(PosOrder record) { + if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setPosOrderNo(String.valueOf(record.getId())); + if (record.getPayment() != null) { + record.setRemainAmount(record.getPayment()); + } + posOrderMapper.insertSelective(record); + } else { + posOrderMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + posOrderMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PosPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PosPayOrderServiceImpl.java new file mode 100644 index 000000000..f29dfd866 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/PosPayOrderServiceImpl.java @@ -0,0 +1,60 @@ +package com.iformall.service.impl; + +import java.util.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.PosPayOrder; +import com.iformall.mapper.PosPayOrderMapper; +import com.iformall.service.PosPayOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class PosPayOrderServiceImpl implements PosPayOrderService { + + @Autowired + PosPayOrderMapper posPayOrderMapper; + + + @Override + public PageInfo listAsPage(PosPayOrder record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> posPayOrderMapper.findList(record)); + } + + @Override + public List getList(PosPayOrder record) { + return posPayOrderMapper.findList(record); + } + + @Override + public PosPayOrder getById(Long id) { + return posPayOrderMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(PosPayOrder record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setPayOrderNo(String.valueOf(record.getId())); + posPayOrderMapper.insertSelective(record); + } else { + posPayOrderMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + posPayOrderMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/ThDevInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/ThDevInfoServiceImpl.java new file mode 100644 index 000000000..9e2f2ed61 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/ThDevInfoServiceImpl.java @@ -0,0 +1,69 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.ThDevInfo; +import com.iformall.mapper.ThDevInfoMapper; +import com.iformall.service.ThDevInfoService; +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; + +@Service +public class ThDevInfoServiceImpl implements ThDevInfoService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + ThDevInfoMapper thDevInfoMapper; + + + @Override + public PageInfo listAsPage(ThDevInfo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> thDevInfoMapper.findList(record)); + } + + @Override + public ThDevInfo getById(Long id) { + return thDevInfoMapper.selectByPrimaryKey(id); + } + + @Override + public ThDevInfo getByDevId(String devId) { + ThDevInfo q = new ThDevInfo(); + q.setDevId(devId); + try { + return thDevInfoMapper.selectOne(q); + } catch (Exception e) { + logger.error(e.getMessage()); + } + return null; + } + + @Override + public void saveOrUpdate(ThDevInfo record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + thDevInfoMapper.insertSelective(record); + } else { + thDevInfoMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + thDevInfoMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxActivityJoinServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxActivityJoinServiceImpl.java index 14e67748e..177711dc7 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxActivityJoinServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxActivityJoinServiceImpl.java @@ -1,5 +1,6 @@ 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; @@ -11,6 +12,7 @@ import com.iformall.domain.po.WxActivityJoin; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCreditHistory; import com.iformall.domain.po.msg.WxMsgRecord; +import com.iformall.domain.vo.WxActivityJoinQuestionAnswer; import com.iformall.enums.*; import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; @@ -93,6 +95,20 @@ public class WxActivityJoinServiceImpl implements WxActivityJoinService { WxActivity wxActivity = wxActivityMapper.selectByPrimaryKey(wxActivityJoin.getActivityId()); String title = wxActivity.getTitle(); List list = wxActivityJoinMapper.findList(wxActivityJoin); + for (WxActivityJoin activityJoin : list) { + String answer = activityJoin.getAnswer(); + if (StringUtils.isNotEmpty(answer)) { + StringBuffer quesAnswer = new StringBuffer(); + List wxActivityJoinQuestionAnswers = JSONArray.parseArray(answer, WxActivityJoinQuestionAnswer.class); + for (int i = 0; i < wxActivityJoinQuestionAnswers.size(); i++) { + WxActivityJoinQuestionAnswer wxActivityJoinQuestionAnswer = wxActivityJoinQuestionAnswers.get(i); + quesAnswer.append("[").append("问题").append(i + 1).append(":").append(wxActivityJoinQuestionAnswer.getQues()) + .append(" ").append("答案").append(":").append(wxActivityJoinQuestionAnswer.getAnswer()) + .append("]"); + activityJoin.setAnswer(quesAnswer.toString()); + } + } + } excelService.exportExcel(list, title, title, WxActivityJoin.class, "报名表.xlsx", response, false); } @@ -128,7 +144,9 @@ public class WxActivityJoinServiceImpl implements WxActivityJoinService { wxActivityMapper.updateByPrimaryKeySelective(activity); //发短信 for (WxActivityJoin join : joinList) { - sendMessage(join, activity); + if (StringUtils.isNotEmpty(join.getPhone())) { + sendMessage(join, activity); + } } Map param = new HashMap<>(2); param.put("sendMsg", EnumSendMsg.YES.getCode()); @@ -182,16 +200,21 @@ public class WxActivityJoinServiceImpl implements WxActivityJoinService { @Override public ResultData sign(WxActivityJoin wxActivityJoin) { //是否报名记录 - wxActivityJoin.setStatus(EnumActivityJoinStatus.CONFIRMED.getCode()); WxActivityJoin activityJoin = wxActivityJoinMapper.selectOne(wxActivityJoin); if (activityJoin == null) { return new ResultData(ErrorCode.ACTIVITY_JOIN_NOT_FOUND); } - activityJoin.setSignIn(EnumActivityJoinSignStatus.YES.getCode()); - wxActivityJoinMapper.updateByPrimaryKeySelective(activityJoin); - //查询活动名称 - WxActivity activity = wxActivityMapper.selectByPrimaryKey(wxActivityJoin.getActivityId()); - return new ResultData(Result.SUCCESS, "签到成功", activity.getTitle()); + if (activityJoin.getStatus().equals(EnumActivityJoinStatus.NOT_CONFIRMED.getCode())) { + return new ResultData(ErrorCode.ACTIVITY_WAIT_CONFIRMED); + } + if (activityJoin.getStatus().equals(EnumActivityJoinStatus.CONFIRMED.getCode())) { + activityJoin.setSignIn(EnumActivityJoinSignStatus.YES.getCode()); + wxActivityJoinMapper.updateByPrimaryKeySelective(activityJoin); + //查询活动名称 + WxActivity activity = wxActivityMapper.selectByPrimaryKey(wxActivityJoin.getActivityId()); + return new ResultData(Result.SUCCESS, "签到成功", activity.getTitle()); + } + return new ResultData(ErrorCode.ACTIVITY_EXPIRED); } private void sendMessage(WxActivityJoin join, WxActivity activity) { @@ -201,8 +224,8 @@ public class WxActivityJoinServiceImpl implements WxActivityJoinService { //人名 String person = join.getName(); person = StringUtils.isNotEmpty(person) ? person : ""; - //找出用户手机号 - String phone = join.getPhone(); + //找出用户手机号 联系电话为空时 使用授权手机号 + String phone = StringUtils.isNotEmpty(join.getTelphone()) ? join.getTelphone() : join.getPhone(); //活动名 String party = activity.getTitle(); String time = DateUtils.date2String(activity.getActivityStartTime()); 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 0054315da..801569480 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -1,5 +1,6 @@ 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; @@ -116,17 +117,27 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Autowired StringRedisTemplate stringRedisTemplate; + @Autowired + WxBillSettleRecordService wxBillSettleRecordService; + + @Autowired + WxBillSettleService wxBillSettleService; + @Override public Map listAsPage(WxBillAll record, Integer pageIndex, Integer pageSize) { //更新各账单状态 //updateBillStatus(record); + + if (StringUtils.isNotEmpty(record.getTypeStr())) { + List typeList = JSONArray.parseArray(record.getTypeStr(), Integer.class); + record.setTypeList(typeList); + } PageInfo pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxBillAllMapper.list(record)); Map result = new HashMap<>(); result.put("pageInfo", pageInfo); return result; } - @Override public List> listBillOweAndWaitPay(WxBillAll wxBillAll) { //更新各账单状态 @@ -163,6 +174,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillAll.setBillTypeValue(EnumBillTypeParam.ROUTINE.getCode()); } else if (wxBillAll.getBillTypeValue().equals(EnumBillType.AIR_CONDITIONING.getCode())) { wxBillAll.setBillTypeValue(EnumBillTypeParam.AIR_CONDITIONING.getCode()); + }else if (wxBillAll.getBillTypeValue().equals(EnumBillType.SETTLE.getCode())) { + wxBillAll.setBillTypeValue(EnumBillTypeParam.SETTLE.getCode()); } else { logger.info("账单不存在"); return new ResultData(ErrorCode.BILL_ROUTINE_IS_NOT_FOUND); @@ -182,40 +195,40 @@ public class WxBillAllServiceImpl implements WxBillAllService { public void updateBill(Map bill) { int billTypeValue = ((Long) bill.get("billTypeValue")).intValue(); logger.info(">>>>>>>>>>>>>>>>>>>>账单回调修改数据:" + JSONObject.toJSONString(bill)); - if (billTypeValue==EnumBillTypeParam.RENT.getCode().intValue()) { + if (billTypeValue == EnumBillTypeParam.RENT.getCode().intValue()) { logger.info("更新租金账单"); WxBillRent billRent = wxBillRentMapper.selectByPrimaryKey(bill.get("id")); - if(billRent!=null && !billRent.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (billRent != null && !billRent.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillRent(bill); } - } else if (billTypeValue==EnumBillTypeParam.RENT_DEPOSIT.getCode().intValue()) { + } else if (billTypeValue == EnumBillTypeParam.RENT_DEPOSIT.getCode().intValue()) { logger.info("更新租金押金账单"); WxBillDeposit billDeposit = wxBillDepositMapper.selectByPrimaryKey(bill.get("id")); - if(billDeposit!=null && !billDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (billDeposit != null && !billDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillRentDeposit(bill); } - } else if (billTypeValue==EnumBillTypeParam.PROPERTY.getCode().intValue()) { + } else if (billTypeValue == EnumBillTypeParam.PROPERTY.getCode().intValue()) { logger.info("更新物业账单"); WxBillProperty property = wxBillPropertyMapper.selectByPrimaryKey(bill.get("id")); - if(property!=null && !property.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (property != null && !property.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillProperty(bill); } - } else if (billTypeValue==EnumBillTypeParam.PROPERTY_DEPOSIT.getCode().intValue()) { + } else if (billTypeValue == EnumBillTypeParam.PROPERTY_DEPOSIT.getCode().intValue()) { logger.info("更新物业押金账单"); WxBillPropertyDeposit wxBillPropertyDeposit = wxBillPropertyDepositMapper.selectByPrimaryKey(bill.get("id")); - if(wxBillPropertyDeposit!=null && !wxBillPropertyDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (wxBillPropertyDeposit != null && !wxBillPropertyDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillPropertyDeposit(bill); } - } else if (billTypeValue==EnumBillTypeParam.WATER.getCode().intValue()) { + } else if (billTypeValue == EnumBillTypeParam.WATER.getCode().intValue()) { logger.info("更新水费账单"); WxBillDaily wxBillDaily = wxBillDailyMapper.selectByPrimaryKey(bill.get("id")); - if(wxBillDaily!=null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (wxBillDaily != null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillDaily(bill); } - } else if (billTypeValue==EnumBillTypeParam.POWER.getCode().intValue()) { + } else if (billTypeValue == EnumBillTypeParam.POWER.getCode().intValue()) { logger.info("更新电费账单"); WxBillDaily wxBillDaily = wxBillDailyMapper.selectByPrimaryKey(bill.get("id")); - if(wxBillDaily!=null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (wxBillDaily != null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillDaily(bill); } } else if (billTypeValue == EnumBillTypeParam.AIR_CONDITIONING.getCode().intValue()) { @@ -224,10 +237,10 @@ public class WxBillAllServiceImpl implements WxBillAllService { if (wxBillDaily != null && !wxBillDaily.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillDaily(bill); } - } else if (billTypeValue==EnumBillTypeParam.ROUTINE.getCode().intValue()) { + } else if (billTypeValue == EnumBillTypeParam.ROUTINE.getCode().intValue()) { logger.info("更新其他账单"); WxBillOther wxBillOther = wxBillOtherMapper.selectByPrimaryKey(bill.get("id")); - if(wxBillOther!=null && !wxBillOther.getStatus().equals(EnumBillRentStatus.PAID.getCode())){ + if (wxBillOther != null && !wxBillOther.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillOther(bill); } } else if (billTypeValue == EnumBillTypeParam.ATHER_DEPOSIT.getCode().intValue()) { @@ -236,7 +249,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { if (wxBillOtherDeposit != null && !wxBillOtherDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { updateBillOtherDeposit(bill); } - } else { + } else if (billTypeValue == EnumBillTypeParam.SETTLE.getCode().intValue()) { + logger.info("更新结算单"); + WxBillSettleRecord settleRecord = new WxBillSettleRecord(); + settleRecord.setSettleId((Long)bill.get("id")); + settleRecord.setSettleMoney((Long) bill.get("owe")); + settleRecord.setSettleTime(new Date()); + settleRecord.setSettleWay(EnumSettleRecordWay.WEBCAT.getCode()); + + BigDecimal money = new BigDecimal(settleRecord.getSettleMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP); + settleRecord.setDetail(EnumSettleRecordWay.getEnum(settleRecord.getSettleWay()).getMessage()+"收款"+money.toString()+"元"); + wxBillSettleRecordService.saveOrUpdate(settleRecord,null,(Long)bill.get("userId")); + }else{ logger.info("账单类型不存在"); } } @@ -313,16 +337,16 @@ public class WxBillAllServiceImpl implements WxBillAllService { } private int updateBillOther(Map bill) { - logger.info("updateBillOther params:"+bill.toString()); + logger.info("updateBillOther params:" + bill.toString()); Object id = bill.get("id"); WxBillOther wxBillOther = wxBillOtherMapper.selectByPrimaryKey(id); - if(wxBillOther==null){ + if (wxBillOther == null) { return 0; } Date date = new Date(); wxBillOther.setPayDate(date); Long owe = (Long) bill.get("owe"); - wxBillOther.setPay(wxBillOther.getPay()+owe); + wxBillOther.setPay(wxBillOther.getPay() + owe); wxBillOther.setOwe(0L); wxBillOther.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillOther.setPayDate(date); @@ -357,16 +381,16 @@ public class WxBillAllServiceImpl implements WxBillAllService { } private int updateBillDaily(Map bill) { - logger.info("updateBillDaily params:"+bill.toString()); + logger.info("updateBillDaily params:" + bill.toString()); Object id = bill.get("id"); WxBillDaily wxBillDaily = wxBillDailyMapper.selectByPrimaryKey(id); - if(wxBillDaily==null){ + if (wxBillDaily == null) { return 0; } Date date = new Date(); wxBillDaily.setPayDate(date); Long owe = (Long) bill.get("owe"); - wxBillDaily.setPay(wxBillDaily.getPay()+owe); + wxBillDaily.setPay(wxBillDaily.getPay() + owe); wxBillDaily.setOwe(0L); wxBillDaily.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillDaily.setPayDate(date); @@ -402,16 +426,16 @@ public class WxBillAllServiceImpl implements WxBillAllService { } private int updateBillPropertyDeposit(Map bill) { - logger.info("updateBillPropertyDeposit params:"+bill.toString()); + logger.info("updateBillPropertyDeposit params:" + bill.toString()); Object id = bill.get("id"); WxBillPropertyDeposit wxBillPropertyDeposit = wxBillPropertyDepositMapper.selectByPrimaryKey(id); - if(wxBillPropertyDeposit==null){ + if (wxBillPropertyDeposit == null) { return 0; } Date date = new Date(); wxBillPropertyDeposit.setPayDate(date); Long owe = (Long) bill.get("owe"); - wxBillPropertyDeposit.setPay(wxBillPropertyDeposit.getPay()+owe); + wxBillPropertyDeposit.setPay(wxBillPropertyDeposit.getPay() + owe); wxBillPropertyDeposit.setOwe(0L); wxBillPropertyDeposit.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillPropertyDeposit.setPayDate(date); @@ -447,16 +471,16 @@ public class WxBillAllServiceImpl implements WxBillAllService { } private int updateBillProperty(Map bill) { - logger.info("updateBillProperty params:"+bill.toString()); + logger.info("updateBillProperty params:" + bill.toString()); Object id = bill.get("id"); WxBillProperty property = wxBillPropertyMapper.selectByPrimaryKey(id); - if(property==null){ + if (property == null) { return 0; } Date date = new Date(); property.setPayDate(date); Long owe = (Long) bill.get("owe"); - property.setPay(property.getPay()+owe); + property.setPay(property.getPay() + owe); property.setOwe(0L); property.setStatus(EnumBillDailyStatus.PAID.getCode()); property.setPayDate(date); @@ -492,16 +516,16 @@ public class WxBillAllServiceImpl implements WxBillAllService { } private int updateBillRentDeposit(Map bill) { - logger.info("updateBillRentDeposit params:"+bill.toString()); + logger.info("updateBillRentDeposit params:" + bill.toString()); Object id = bill.get("id"); WxBillDeposit wxBillDeposit = wxBillDepositMapper.selectByPrimaryKey(id); - if(wxBillDeposit==null){ + if (wxBillDeposit == null) { return 0; } Date date = new Date(); wxBillDeposit.setPayDate(date); Long owe = (Long) bill.get("owe"); - wxBillDeposit.setPay(wxBillDeposit.getPay()+owe); + wxBillDeposit.setPay(wxBillDeposit.getPay() + owe); wxBillDeposit.setOwe(0L); wxBillDeposit.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillDeposit.setPayDate(date); @@ -537,16 +561,16 @@ public class WxBillAllServiceImpl implements WxBillAllService { } private int updateBillRent(Map bill) { - logger.info("updateBillRentDeposit params:"+bill.toString()); + logger.info("updateBillRentDeposit params:" + bill.toString()); Object id = bill.get("id"); WxBillRent wxBillRent = wxBillRentMapper.selectByPrimaryKey(id); - if(wxBillRent==null){ + if (wxBillRent == null) { return 0; } Date date = new Date(); wxBillRent.setPayDate(date); Long owe = (Long) bill.get("owe"); - wxBillRent.setPay(wxBillRent.getPay()+owe); + wxBillRent.setPay(wxBillRent.getPay() + owe); wxBillRent.setOwe(0L); wxBillRent.setStatus(EnumBillDailyStatus.PAID.getCode()); wxBillRent.setPayDate(date); @@ -659,30 +683,30 @@ public class WxBillAllServiceImpl implements WxBillAllService { List list = wxBillAllMapper.list(wxBillAll); if (!list.isEmpty()) { //租金总额 - Long rentSum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT.getCode())) + Long rentSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //物业总额 Long propertySum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.PROPERTY.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //押金总额 - Long depositSum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT_DEPOSIT.getCode()) || + Long depositSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT_DEPOSIT.getCode()) || b.getBillTypeValue().equals(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode()) || b.getBillTypeValue().equals(EnumBillTypeParam.ATHER_DEPOSIT.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //水费 - Long waterSum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.WATER.getCode())) + Long waterSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.WATER.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //电费 - Long powerSum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.POWER.getCode())) + Long powerSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.POWER.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //空调费 - Long airConditioningSum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.AIR_CONDITIONING.getCode())) + Long airConditioningSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.AIR_CONDITIONING.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //其他费用 - Long otherSum = list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.ROUTINE.getCode())) + Long otherSum = list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.ROUTINE.getCode())) .collect(Collectors.summingLong(b -> status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe())); //押金明细 StringBuffer depositDetail = new StringBuffer(); - list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT_DEPOSIT.getCode()) || + list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.RENT_DEPOSIT.getCode()) || b.getBillTypeValue().equals(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode()) || b.getBillTypeValue().equals(EnumBillTypeParam.ATHER_DEPOSIT.getCode())) .forEach(b -> { BigDecimal owe = new BigDecimal(status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe()).divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); @@ -691,7 +715,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { //其他费用明细 StringBuffer otherDetail = new StringBuffer(); - list.parallelStream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.ROUTINE.getCode())) + list.stream().filter(b -> b.getBillTypeValue().equals(EnumBillTypeParam.ROUTINE.getCode())) .forEach(b -> { BigDecimal owe = new BigDecimal(status == null && filterHasPay == null ? b.getReceivePay() : b.getOwe()).divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); otherDetail.append(b.getName()).append(":[").append(owe.toPlainString()).append("] "); @@ -726,7 +750,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { List listCVo = wxMerchantMapper.findListCVo(wxMerchantVo); wxMerchantVo = listCVo.get(0); result.put("merchant", wxMerchantVo.getMerchantName()); - WxShopVo wxShopVo = wxMerchantVo.getShopVoList().parallelStream().filter(s -> StringUtils.isNotEmpty(s.getLinkPhone())).findAny().orElse(null); + WxShopVo wxShopVo = wxMerchantVo.getShopVoList().stream() + .filter(s -> StringUtils.isNotEmpty(s.getLinkPhone()) || StringUtils.isNotEmpty(s.getLinkPerson())).findFirst().orElse(null); if (wxShopVo != null) { String linkPerson = wxShopVo.getLinkPerson(); String linkPhone = wxShopVo.getLinkPhone(); @@ -763,7 +788,71 @@ public class WxBillAllServiceImpl implements WxBillAllService { String filepath = fmUploadDir; String filename = UUID.randomUUID() + ".docx"; String exportFileName = "催缴单.docx"; - WordUtil.exportWord(templatePath, filepath, filename, exportFileName, result, request, response); + WordUtil.exportWord(templatePath, filepath, filename, exportFileName, result, request, response,null); + } + + @Override + public void exportSettleBill(WxBillSettle wxBillSettle, HttpServletRequest request, HttpServletResponse response) { + wxBillSettle = wxBillSettleService.getById(wxBillSettle.getId()); + if(wxBillSettle.getReceiveBillIds() == null) wxBillSettle.setReceiveBillIds(new ArrayList<>()); + if(wxBillSettle.getPayBillIds() == null) wxBillSettle.setPayBillIds(new ArrayList<>()); + + //映射结果 + Map result = new HashMap<>(); + + WxMall wxMall = wxMallMapper.getByTenantId(wxBillSettle.getTenantId()); + result.put("mall", wxMall.getName()); + result.put("merchant",wxMerchantMapper.selectByPrimaryKey(wxBillSettle.getMerchantId()).getName()); + result.put("num", wxBillSettle.getSettleNumber()); + result.put("cdate", DateUtils.format(wxBillSettle.getCreatetime())); + + BigDecimal receiveM = (new BigDecimal(wxBillSettle.getReceiveMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)); + BigDecimal payM = (new BigDecimal(wxBillSettle.getPayMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)); + BigDecimal bM = (new BigDecimal(wxBillSettle.getBalance()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)); + result.put("receiveM", receiveM.toString()+"元"); + result.put("payM", payM.toString()+"元"); + result.put("bM", bM.toString()+"元"); + result.put("receiveMU", PriceUtil.digitUppercase(receiveM.doubleValue())); + result.put("payMU", PriceUtil.digitUppercase(payM.doubleValue())); + result.put("bMU", PriceUtil.digitUppercase(bM.doubleValue())); + + WordDocTableVo wordDocTableVo = new WordDocTableVo(); + List> rowsParams = new ArrayList<>(); + int size = wxBillSettle.getReceiveBillIds().size() > wxBillSettle.getPayBillIds().size()?wxBillSettle.getReceiveBillIds().size():wxBillSettle.getPayBillIds().size(); + int count = 1; + for (int i = 0; i < size ; i++) { + WxBillSettleBill bill = i>wxBillSettle.getReceiveBillIds().size()-1?null:wxBillSettle.getReceiveBillIds().get(i); + List cellList = new ArrayList<>(); + cellList.add(count+""); + + if(bill != null){ + cellList.add(bill.getBillName()); + cellList.add(new BigDecimal(bill.getReceivePay()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).toString()); + }else{ + cellList.add(""); + cellList.add(""); + } + cellList.add(count+""); + WxBillSettleBill payBill = i>wxBillSettle.getPayBillIds().size()-1?null:wxBillSettle.getPayBillIds().get(i); + if(payBill != null){ + cellList.add(payBill.getBillName()); + cellList.add(new BigDecimal(payBill.getReceivePay()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).toString()); + }else{ + cellList.add(""); + cellList.add(""); + } + rowsParams.add(cellList); + count++; + } + wordDocTableVo.setParams(rowsParams); + wordDocTableVo.setTableIndex(0); + wordDocTableVo.setRowIndex(2); + + String templatePath = "contract-word-template/settle.docx"; + String filepath = fmUploadDir; + String filename = UUID.randomUUID() + ".docx"; + String exportFileName = "结算单.docx"; + WordUtil.exportWord(templatePath, filepath, filename, exportFileName, result, request, response,wordDocTableVo); } @@ -781,11 +870,11 @@ public class WxBillAllServiceImpl implements WxBillAllService { WxBillRent wxBillRent = new WxBillRent(); wxBillRent.setId(id); wxBillRent.setUpdatetime(updateDate); - if(oldLatePrice != null){ + if (oldLatePrice != null) { wxBillRent.setLatePayPrice(newLatePrice); wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); - addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY,id, oldLatePrice, newLatePrice, user); - }else{ + addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); + } else { //租赁账单更新 wxBillRent.setReceivePay(newPrice); wxBillRent.setOwe(newPrice - dbBill.getPay()); @@ -794,7 +883,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { } wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } } else if (billType.equals(EnumBillTypeParam.RENT_DEPOSIT.getCode())) { WxBillDeposit dbBill = wxBillDepositMapper.selectByPrimaryKey(id); @@ -809,18 +898,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillDeposit.setUpdatetime(updateDate); wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else if (billType.equals(EnumBillTypeParam.PROPERTY.getCode())) { WxBillProperty dbBill = wxBillPropertyMapper.selectByPrimaryKey(id); //物业账单更新 WxBillProperty wxBillProperty = new WxBillProperty(); wxBillProperty.setId(id); wxBillProperty.setUpdatetime(updateDate); - if(oldLatePrice != null){ + if (oldLatePrice != null) { wxBillProperty.setLatePayPrice(newLatePrice); wxBillPropertyMapper.updateByPrimaryKeySelective(wxBillProperty); - addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY,id, oldLatePrice, newLatePrice, user); - }else{ + addBillAction(EnumBillAction.UPDATE_LATE_PAY_MONEY, id, oldLatePrice, newLatePrice, user); + } else { wxBillProperty.setReceivePay(newPrice); wxBillProperty.setOwe(newPrice - dbBill.getPay()); if (newPrice.equals(dbBill.getPay())) { @@ -828,7 +917,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { } wxBillPropertyMapper.updateByPrimaryKeySelective(wxBillProperty); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } } else if (billType.equals(EnumBillTypeParam.PROPERTY_DEPOSIT.getCode())) { WxBillPropertyDeposit dbBill = wxBillPropertyDepositMapper.selectByPrimaryKey(id); @@ -843,22 +932,22 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillPropertyDeposit.setUpdatetime(updateDate); wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillPropertyDeposit); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else if (billType.equals(EnumBillTypeParam.WATER.getCode())) { //水费账单更新 updateDailyBill(id, newPrice, updateDate); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else if (billType.equals(EnumBillTypeParam.POWER.getCode())) { //电费账单更新 updateDailyBill(id, newPrice, updateDate); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else if (billType.equals(EnumBillTypeParam.AIR_CONDITIONING.getCode())) { //空调费账单更新 updateDailyBill(id, newPrice, updateDate); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else if (billType.equals(EnumBillTypeParam.ROUTINE.getCode())) { WxBillOther dbBill = wxBillOtherMapper.selectByPrimaryKey(id); //其他费用账单更新 @@ -872,7 +961,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillOther.setUpdatetime(updateDate); wxBillOtherMapper.updateByPrimaryKeySelective(wxBillOther); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else if (billType.equals(EnumBillTypeParam.ATHER_DEPOSIT.getCode())) { WxBillOtherDeposit dbBill = wxBillOtherDepositMapper.selectByPrimaryKey(id); //其他押金账单更新 @@ -886,7 +975,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillOtherDeposit.setUpdatetime(updateDate); wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillOtherDeposit); //账单日志 - addBillAction(EnumBillAction.UPDATE_BILL,id, oldPrice, newPrice, user); + addBillAction(EnumBillAction.UPDATE_BILL, id, oldPrice, newPrice, user); } else { logger.info("未找到账单类型"); } @@ -894,7 +983,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { } @Override - public void addBillAction(EnumBillAction billAction,Long billId, Long oldPrice, Long newPrice, MallUserInfo mallUserInfo) { + public void addBillAction(EnumBillAction billAction, Long billId, Long oldPrice, Long newPrice, MallUserInfo mallUserInfo) { WxBillAction wxBillAction = new WxBillAction(); wxBillAction.setBillId(billId); String oldPriceStr = new BigDecimal(oldPrice).divide(new BigDecimal(100)).toPlainString(); @@ -1035,7 +1124,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { dailyQuery.setReceiveDate(bill.getReceiveDate()); dailyQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); WxBillDaily daily = wxBillDailyMapper.selectOne(dailyQuery); - if (daily != null) { + if (daily != null && pay > 0) { if (!daily.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { long allPay = new BigDecimal(daily.getPay()).add(new BigDecimal(pay)).longValueExact(); WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), receivePay, allPay, false); @@ -1082,8 +1171,11 @@ public class WxBillAllServiceImpl implements WxBillAllService { WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), receivePay, pay, false); daily.setExpiredDay(expiredDayAndStatus.getExpiredDay()); daily.setStatus(expiredDayAndStatus.getStatus()); + daily.setBuildWay(EnumBillDailyBuildWay.IMPORT.getCode()); wxBillDailyMapper.insertSelective(daily); - addActionImport(daily.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + if (pay > 0) { + addActionImport(daily.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } } } } else if (billType.equals(EnumBillExcelTemplate.OTHER.getCode())) { @@ -1094,7 +1186,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherQuery.setName(bill.getBillAttr()); otherQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); WxBillOther other = wxBillOtherMapper.selectOne(otherQuery); - if (other != null) { + if (other != null && pay > 0) { if (!other.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { long allPay = new BigDecimal(other.getPay()).add(new BigDecimal(pay)).longValueExact(); WxBillRent expiredDayAndStatus = getExpiredDayAndStatus(bill.getReceiveDate(), bill.getPayDate(), receivePay, allPay, false); @@ -1145,7 +1237,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { other.setExpiredDay(expiredDayAndStatus.getExpiredDay()); other.setStatus(expiredDayAndStatus.getStatus()); wxBillOtherMapper.insertSelective(other); - addActionImport(other.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + if (pay > 0) { + addActionImport(other.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } } } } else if (billType.equals(EnumBillExcelTemplate.OTHER_DEPOSIT.getCode())) { @@ -1156,7 +1250,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherDepositQuery.setComments(bill.getBillAttr()); otherDepositQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); WxBillOtherDeposit otherDeposit = wxBillOtherDepositMapper.selectOne(otherDepositQuery); - if (otherDeposit != null) { + if (otherDeposit != null && pay > 0) { if (!otherDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode()) && !otherDeposit.getStatus().equals(EnumBillRentStatus.RETURN.getCode())) { long allPay = new BigDecimal(otherDeposit.getPay()).add(new BigDecimal(pay)).longValueExact(); otherDeposit.setExpiredDay(0L); @@ -1212,7 +1306,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherDeposit.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); } wxBillOtherDepositMapper.insertSelective(otherDeposit); - addActionImport(otherDeposit.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + if (pay > 0) { + addActionImport(otherDeposit.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } } } } else { @@ -1284,7 +1380,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { rent.setPayDate(bill.getPayDate()); rent.setReceiveDate(bill.getReceiveDate()); wxBillRentMapper.updateByPrimaryKey(rent); - addActionImport(rent.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + if (pay > 0) { + addActionImport(rent.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } } } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { WxBillProperty propertyQuery = new WxBillProperty(); @@ -1309,7 +1407,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { property.setPayDate(bill.getPayDate()); property.setReceiveDate(bill.getReceiveDate()); wxBillPropertyMapper.updateByPrimaryKey(property); - addActionImport(property.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + if (pay > 0) { + addActionImport(property.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } } } else { logger.error("账单导入失败"); @@ -1367,24 +1467,24 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public Long hasOweBill(Long contractId, Integer type) { - if(type.intValue() == 1){ - return wxBillRentMapper.oweBillCount(contractId); - }else if(type.intValue() == 2){ - return wxBillPropertyMapper.oweBillCount(contractId); + if (type.intValue() == 1) { + return wxBillRentMapper.oweBillCount(contractId); + } else if (type.intValue() == 2) { + return wxBillPropertyMapper.oweBillCount(contractId); } return 0L; } - public Map>> toMap(List> mapList){ + public Map>> toMap(List> mapList) { Map>> result = new HashMap<>(); - for (Map bill:mapList) { - Long merchantId = (Long)bill.get("merchantId"); + 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); + result.put(merchantId, currList); } return result; } @@ -1393,19 +1493,19 @@ public class WxBillAllServiceImpl implements WxBillAllService { public void sendWaitPayBillEmail() { List> waitBillListForEmail = wxBillAllMapper.getWaitPayBillForEmail(); - if(CollectionUtils.isNotEmpty(waitBillListForEmail)) { + 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)){ + 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 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); @@ -1426,8 +1526,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { 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); + map.put("linkName", manager == null ? "" : manager); + map.put("linkPhone", managerPhone == null ? "" : managerPhone); MailMsg mailMsg = new MailMsg(); mailMsg.setSubject("待缴账单通知"); mailMsg.setHtml(true); @@ -1447,20 +1547,20 @@ public class WxBillAllServiceImpl implements WxBillAllService { public void sendOweBillForEmail() { List> oweBillForEmail = wxBillAllMapper.getOweBillForEmail(); - if(CollectionUtils.isNotEmpty(oweBillForEmail)) { + 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)){ + 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"); - Long expiredDay = (Long)mapList.get(0).get("expiredDay"); + 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"); + Long expiredDay = (Long) mapList.get(0).get("expiredDay"); String billListStr = ""; BigDecimal sumNeedPay = new BigDecimal(0); @@ -1483,8 +1583,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { 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); + map.put("linkName", manager == null ? "" : manager); + map.put("linkPhone", managerPhone == null ? "" : managerPhone); MailMsg mailMsg = new MailMsg(); mailMsg.setSubject("欠缴账单通知"); mailMsg.setHtml(true); @@ -1505,12 +1605,12 @@ public class WxBillAllServiceImpl implements WxBillAllService { public Map getOweBillAsPage(WxBillAll record, Integer pageNum, Integer pageSize) { PageInfo> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxBillAllMapper.getOweBillAsPage(record)); List> list = pageInfo.getList(); - for (Map map:list) { - map.put("rentOwe",subZeroAndDot(map.get("rentOwe").toString())); - map.put("propertyOwe",subZeroAndDot(map.get("propertyOwe").toString())); - map.put("depositOwe",subZeroAndDot(map.get("depositOwe").toString())); - map.put("otherOwe",subZeroAndDot(map.get("otherOwe").toString())); - map.put("totalOwe",subZeroAndDot(map.get("totalOwe").toString())); + for (Map map : list) { + map.put("rentOwe", subZeroAndDot(map.get("rentOwe").toString())); + map.put("propertyOwe", subZeroAndDot(map.get("propertyOwe").toString())); + map.put("depositOwe", subZeroAndDot(map.get("depositOwe").toString())); + map.put("otherOwe", subZeroAndDot(map.get("otherOwe").toString())); + map.put("totalOwe", subZeroAndDot(map.get("totalOwe").toString())); } pageInfo.setList(list); Map result = new HashMap<>(); @@ -1518,13 +1618,33 @@ public class WxBillAllServiceImpl implements WxBillAllService { return result; } + @Override + public Map getReceiveAndPayBillAsPage(WxBillAll record, Integer pageNum, Integer pageSize) { + PageInfo> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxBillAllMapper.getReceiveAndPayBillAsPage(record)); + pageInfo.getList().stream().forEach(e->{ + if(e.get("receivePay") == null){ + e.put("receivePay",0); + } + if(e.get("payOut") == null){ + e.put("payOut",0); + } + if(e.get("balance") == null){ + e.put("balance",0); + } + }); + Map result = new HashMap<>(); + result.put("pageInfo", pageInfo); + return result; + } + /** * 使用java正则表达式去掉多余的.与0 + * * @param s * @return */ - public static String subZeroAndDot(String s){ - if(s.indexOf(".") > 0){ + public static String subZeroAndDot(String s) { + if (s.indexOf(".") > 0) { s = s.replaceAll("0+?$", "");//去掉多余的0 s = s.replaceAll("[.]$", "");//如最后一位是.则去掉 } @@ -1535,11 +1655,11 @@ public class WxBillAllServiceImpl implements WxBillAllService { public void exportOweMerchant(WxBillAll record, HttpServletRequest request, HttpServletResponse response) { List> data = wxBillAllMapper.getOweBillAsPage(record); List list = new ArrayList<>(); - for (Map map:data) { + for (Map map : data) { OweMerchantVo oweMerchantVo = new OweMerchantVo(); - oweMerchantVo.setLinkPerson((String)map.get("manager")); - oweMerchantVo.setName((String)map.get("merchantName")); - oweMerchantVo.setLinkPhone((String)map.get("managerPhone")); + oweMerchantVo.setLinkPerson((String) map.get("manager")); + oweMerchantVo.setName((String) map.get("merchantName")); + oweMerchantVo.setLinkPhone((String) map.get("managerPhone")); oweMerchantVo.setDepositOwe(new BigDecimal(subZeroAndDot(map.get("depositOwe").toString()))); oweMerchantVo.setOtherOwe(new BigDecimal(subZeroAndDot(map.get("otherOwe").toString()))); @@ -1552,15 +1672,39 @@ public class WxBillAllServiceImpl implements WxBillAllService { excelService.exportExcel(list, null, name, OweMerchantVo.class, name + ".xlsx", response, false); } + @Override + public void exportReceiveAndPayBillAsPage(WxBillAll record, HttpServletRequest request, HttpServletResponse response) { + List> data = wxBillAllMapper.getReceiveAndPayBillAsPage(record); + List list = new ArrayList<>(); + for (Map map : data) { + ReceivedAndPayVo oweMerchantVo = new ReceivedAndPayVo(); + oweMerchantVo.setLinkPerson((String) map.get("linkPerson")); + oweMerchantVo.setName((String) map.get("name")); + oweMerchantVo.setLinkPhone((String) map.get("linkPhone")); + oweMerchantVo.setShopNumber((String) map.get("shopNumber")); + if(EnumRentShopType.POINT.getCode().equals(map.get("type"))){ + oweMerchantVo.setShopType("多经点位"); + }else if(EnumRentShopType.SHOP.getCode().equals(map.get("type"))){ + oweMerchantVo.setShopType("商铺"); + } + oweMerchantVo.setReceivePay(map.get("receivePay")==null?"0":map.get("receivePay").toString()); + oweMerchantVo.setPayOut(map.get("payOut")==null?"0":map.get("payOut").toString()); + oweMerchantVo.setBalance(map.get("balance")==null?"0":map.get("balance").toString()); + list.add(oweMerchantVo); + } + String name = "商户账单列表"; + excelService.exportExcel(list, null, name, ReceivedAndPayVo.class, name + ".xlsx", response, false); + } + @Override public void exportWaitMerchant(WxBillAll record, HttpServletRequest request, HttpServletResponse response) { List> data = wxBillAllMapper.getOweBillAsPage(record); List list = new ArrayList<>(); - for (Map map:data) { + for (Map map : data) { WaitMerchantVo oweMerchantVo = new WaitMerchantVo(); - oweMerchantVo.setLinkPerson((String)map.get("manager")); - oweMerchantVo.setName((String)map.get("merchantName")); - oweMerchantVo.setLinkPhone((String)map.get("managerPhone")); + oweMerchantVo.setLinkPerson((String) map.get("manager")); + oweMerchantVo.setName((String) map.get("merchantName")); + oweMerchantVo.setLinkPhone((String) map.get("managerPhone")); oweMerchantVo.setRentReceivePay(new BigDecimal(subZeroAndDot(map.get("rentReceivePay").toString()))); oweMerchantVo.setPropertyReceivePay(new BigDecimal(subZeroAndDot(map.get("propertyReceivePay").toString()))); @@ -1573,4 +1717,8 @@ public class WxBillAllServiceImpl implements WxBillAllService { excelService.exportExcel(list, null, name, WaitMerchantVo.class, name + ".xlsx", response, false); } + @Override + public List> allDepositList(WxBillAll wxBillAll) { + return wxBillAllMapper.allDepositList(wxBillAll); + } } 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 2e66ed6ca..5a7672b85 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDailyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDailyServiceImpl.java @@ -178,6 +178,7 @@ public class WxBillDailyServiceImpl implements WxBillDailyService { wxBillDaily.setPayDate(record.getPayDate()); wxBillDaily.setUpdatetime(date); wxBillDaily.setPayWay(record.getPayWay()); + wxBillDaily.setPriceDetail(record.getPriceDetail()); try { wxBillDailyMapper.updateByPrimaryKeySelective(wxBillDaily); } catch (Exception e) { 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 1def3bd93..b883e5eb6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java @@ -1,5 +1,6 @@ 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; @@ -8,16 +9,19 @@ 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.RatioVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxBillActionMapper; -import com.iformall.mapper.WxBillDepositMapper; -import com.iformall.mapper.WxBillRentMapper; +import com.iformall.mapper.*; import com.iformall.service.ExcelService; import com.iformall.service.WxBillActionService; import com.iformall.service.WxBillRentService; import com.iformall.utils.DateUtils; import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; +import org.joda.time.Months; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -52,24 +58,16 @@ public class WxBillRentServiceImpl implements WxBillRentService { @Autowired WxBillActionMapper wxBillActionMapper; + @Autowired + WxRentContractMapper wxRentContractMapper; + + @Autowired + WxMerchantTradeDailyMapper wxMerchantTradeDailyMapper; + @Override public PageInfo listAsPage(WxBillRent record, Integer pageIndex, Integer pageSize) { PageHelper.startPage(pageIndex, pageSize); List billRentList = wxBillRentMapper.queryBillRentList(record); -// billRentList.stream().forEach(b -> { -// if(b.getLatePayRatio() != null && b.getLatePayRatio() > 0){ -// int latePayDay = 0; //默认第次日开始交滞纳金 -// if(b.getLatePayDay() != null){ -// latePayDay = b.getLatePayDay(); -// } -// Date startPay = DateUtils.getDaySet(b.getReceiveDate(),Calendar.DATE,latePayDay); -// long dayCount = DateUtils.startToEnd(startPay,new Date()); -// if(dayCount >0) { -// BigDecimal divide = new BigDecimal(b.getOwe()).multiply(new BigDecimal(b.getLatePayRatio())).multiply(new BigDecimal(dayCount)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP); -// b.setLatePayPrice(divide.longValue()); -// } -// } -// }); PageInfo pageInfo = new PageInfo<>(billRentList); return pageInfo; } @@ -212,6 +210,11 @@ public class WxBillRentServiceImpl implements WxBillRentService { record.setSortColumns(BaseEntity.SortField.Id_ASC); PageHelper.startPage(pageIndex, pageSize); List billRentList = wxBillRentMapper.queryBillRentList(record); + billRentList.stream().forEach(e->{ + if(e.getPayRatio() == null){ + e.setPayRatio(0l); + } + }); PageInfo pageInfo = new PageInfo<>(billRentList); return pageInfo; } @@ -252,24 +255,95 @@ public class WxBillRentServiceImpl implements WxBillRentService { Map result = new HashMap<>(3); result.put("rent", rent); result.put("deposit", deposit); + + //解单金额 + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + WxBillRent billRent = wxBillRentMapper.selectByPrimaryKey(id); + WxMerchantTradeDaily merchantTradeDaily = new WxMerchantTradeDaily(); + merchantTradeDaily.setMerchantId(billRent.getMerchantId()); + merchantTradeDaily.setStartTime(sd.format(billRent.getStarttime())); + merchantTradeDaily.setEndTime(sd.format(billRent.getEndtime())); + String money = wxMerchantTradeDailyMapper.findSumMoney(merchantTradeDaily); + result.put("solutionBillMoney", StringUtils.isBlank(money)?0:money); return result; } - @Transactional(rollbackFor = {Exception.class}) + + public static int getMonths(String startStr,String endStr){ + DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + DateTime start = formatter.parseDateTime(startStr); + DateTime end = formatter.parseDateTime(endStr); + int months = Months.monthsBetween(start, end).getMonths(); + return months; + } + @Override + @Transactional(rollbackFor = {Exception.class}) public ResultData updateRevenue(WxBillRent record, MallUserInfo user) { WxBillRent wxBillRent = wxBillRentMapper.selectByPrimaryKey(record.getId()); - Long oldPrice = wxBillRent.getReceivePay(); - Long newPrice = record.getReceivePay(); + WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(wxBillRent.getRentContractId()); + SimpleDateFormat sdD = new SimpleDateFormat("d"); + SimpleDateFormat sdM = new SimpleDateFormat("yyyy-MM"); + + int startInt = Integer.parseInt(sdD.format(wxBillRent.getStarttime())); + int endInt = Integer.parseInt(sdD.format(DateUtils.getDaySet(wxBillRent.getEndtime(),Calendar.DATE,1))); + int months = getMonths(sdM.format(wxBillRent.getStarttime())+"-01",sdM.format(DateUtils.getDaySet(wxBillRent.getEndtime(),Calendar.DATE,1))+"-01"); + wxBillRent.setRevenue(record.getRevenue()); - wxBillRent.setReceivePay(oldPrice.equals(newPrice) ? oldPrice : newPrice); - wxBillRent.setUpdatetime(new Date()); - try { - wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); - } catch (Exception e) { - logger.error("修改营业额失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "修改营业额失败"); + + Integer ratio = 0; + RatioVo ratioVo = null; + if(wxRentContract.getPayRatio() != null && wxRentContract.getPayRatio().intValue() > 0){ + ratio = wxRentContract.getPayRatio(); + }else{ + if(StringUtils.isNotBlank(wxRentContract.getBusDiscountRatio())){ + long dayCount = DateUtils.startToEnd(wxBillRent.getStarttime(),wxBillRent.getEndtime()) + 1; + if(EnumBusRatioTime.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())){ + if(startInt == endInt && months == 12){ + //刚好1年 + ratioVo = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.OTHER.getCode(),dayCount,0); + }else{ + ratioVo = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.YEAR.getCode(),dayCount,0); + } + }else if(EnumBusRatioTime.MONTH.getCode().equals(wxRentContract.getBusDiscountTime())){ + if(startInt == endInt && months == 1){ + //刚好1个月 + ratioVo = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.OTHER.getCode(),dayCount,0); + }else{ + ratioVo = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.MONTH.getCode(),dayCount,0); + } + }else if(EnumBusRatioTime.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())){ + ratioVo = WxRentContractServiceImpl.getPayRatio(EnumGetRatioFrom.BILL.getCode(),wxBillRent.getRevenue(),wxRentContract.getBusDiscountRatio(),EnumMissTimeType.PERIOD.getCode(),dayCount,wxRentContract.getReceivePeriod()); + } + } + } + + long newReceivePay; + if(ratioVo != null){ + newReceivePay = ratioVo.getPrice(); + //wxBillRent.setPayRatio(ratioVo.getRatio().longValue()); + //如果在跳点区间中,修改扣点率 + if(StringUtils.isNotBlank(wxRentContract.getBusDiscountRatio())){ + wxBillRent.setBusDiscountRatio(ratioVo.getUseRatio()); + } + }else{ + BigDecimal hundred = new BigDecimal(100); + BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred); + BigDecimal payRatio = new BigDecimal(ratio).divide(new BigDecimal(10000)); + BigDecimal price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); + newReceivePay = price.multiply(hundred).longValue(); } + wxBillRent.setJoinRentPrice(newReceivePay); + if(newReceivePay > wxBillRent.getReceivePay()){ + wxBillRent.setReceivePay(newReceivePay); + } + + Long oldPrice = wxBillRent.getReceivePay(); + Long newPrice = newReceivePay; + wxBillRent.setUpdatetime(new Date()); + + wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); + if (!oldPrice.equals(newPrice)) { //日志 WxBillAction wxBillAction = new WxBillAction(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleRecordServiceImpl.java new file mode 100644 index 000000000..ab06c0019 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleRecordServiceImpl.java @@ -0,0 +1,79 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxBillSettle; +import com.iformall.domain.po.WxBillSettleRecord; +import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.enums.EnumSettleRecordWay; +import com.iformall.enums.EnumSettleStatus; +import com.iformall.enums.EnumSettleWay; +import com.iformall.mapper.WxBillSettleMapper; +import com.iformall.mapper.WxBillSettleRecordMapper; +import com.iformall.mapper.WxMerchantBUserMapper; +import com.iformall.service.WxBillSettleRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; + +/** + * @author luozukai + * @date 2019/8/26 17:37 + */ +@Service +public class WxBillSettleRecordServiceImpl implements WxBillSettleRecordService { + @Autowired + private WxBillSettleRecordMapper wxBillSettleRecordMapper; + @Autowired + private WxBillSettleMapper wxBillSettleMapper; + @Autowired + private WxMerchantBUserMapper wxMerchantBUserMapper; + + @Override + public PageInfo listAsPage(WxBillSettleRecord record, Integer pageIndex, Integer pageSize) { + return null; + } + + @Override + public ResultData saveOrUpdate(WxBillSettleRecord record,MallUserInfo mallUserInfo,Long bUserId) { + final IdWorker idWorker = IdWorker.get(); + if (record.getId() == null) { + record.setId(idWorker.nextId()); + + //清算完成 + if(record.getSettleMoney().intValue() == abs(record.getBalance().intValue())){ + WxBillSettle wxBillSettle = new WxBillSettle(); + wxBillSettle.setId(record.getSettleId()); + wxBillSettle.setStatus(EnumSettleStatus.FINISH.getCode()); + wxBillSettleMapper.updateByPrimaryKeySelective(wxBillSettle); + } + if(record.getBalance() < 0){ + record.setSettleMoney(-record.getSettleMoney()); + } + + String str = EnumSettleRecordWay.getEnum(record.getSettleWay()).getMessage()+"收款"+new BigDecimal(record.getSettleMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)+"元"; + record.setDetail(str); + if(mallUserInfo != null) { + record.setUserid(mallUserInfo.getId()); + record.setUserName(mallUserInfo.getName()); + }else if(bUserId != null){ + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId); + record.setUserName(wxMerchantBUser.getName()); + } + wxBillSettleRecordMapper.insertSelective(record); + }else{ + wxBillSettleRecordMapper.updateByPrimaryKeySelective(record); + } + return new ResultData(); + } + + public static Integer abs(Integer a){ + return a>0?a:-a; + } + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java new file mode 100644 index 000000000..671256c4a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillSettleServiceImpl.java @@ -0,0 +1,274 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxBillSettleVo; +import com.iformall.enums.*; +import com.iformall.mapper.*; +import com.iformall.service.ExcelService; +import com.iformall.service.WxBillSettleService; +import com.iformall.service.WxFlowService; +import com.iformall.utils.DateUtils; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author luozukai + * @date 2019/8/26 17:37 + */ +@Service +public class WxBillSettleServiceImpl implements WxBillSettleService { + @Autowired + private WxBillSettleMapper wxBillSettleMapper; + @Autowired + private WxMerchantMapper wxMerchantMapper; + @Autowired + private WxFlowService wxFlowService; + @Autowired + private WxBillSettleBillMapper wxBillSettleBillMapper; + @Autowired + private WxBillRentMapper wxBillRentMapper; + @Autowired + private WxBillDepositMapper wxBillDepositMapper; + @Autowired + private WxBillPropertyMapper wxBillPropertyMapper; + @Autowired + private WxBillDailyMapper wxBillDailyMapper; + @Autowired + private WxBillOtherMapper wxBillOtherMapper; + @Autowired + private WxBillPropertyDepositMapper wxBillPropertyDepositMapper; + @Autowired + private WxBillOtherDepositMapper wxBillOtherDepositMapper; + @Autowired + private WxBillSettleRecordMapper wxBillSettleRecordMapper; + @Autowired + private WxMerchantSubsidyMapper wxMerchantSubsidyMapper; + @Autowired + private ExcelService excelService; + + @Override + public PageInfo listAsPage(WxBillSettle record, Integer pageIndex, Integer pageSize) { + record.setLimitStart(0); + record.setLimitEnd(Integer.MAX_VALUE); + List totalList = wxBillSettleMapper.findList(record); + if(CollectionUtils.isEmpty(totalList)){ + PageHelper.startPage(pageIndex, pageSize); + PageInfo pageInfo = new PageInfo(new ArrayList()); + pageInfo.setPages(0); + pageInfo.setTotal(0); + PageHelper.clearPage(); + return pageInfo; + } + + int total = totalList.size(); + int pages; + if(total % pageSize == 0){ + pages = total / pageSize; + }else{ + pages = total / pageSize +1; + } + record.setLimitStart((pageIndex -1) * pageSize); + record.setLimitEnd(pageSize); + List list = wxBillSettleMapper.findList(record); + + PageHelper.startPage(pageIndex, pageSize); + PageInfo pageInfo = new PageInfo(list); + pageInfo.setPages(pages); + pageInfo.setTotal(total); + PageHelper.clearPage(); + return pageInfo; + + } + + @Override + public WxBillSettle getById(Long id){ + WxBillSettle billSettle = wxBillSettleMapper.selectByPrimaryKey(id); + + if(billSettle != null){ + WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(billSettle.getMerchantId()); + if(merchant != null){ + billSettle.setMerchantName(merchant.getName()); + } + + //加载账单列表 + WxBillSettleBill wxBillSettleBill = new WxBillSettleBill(); + wxBillSettleBill.setTenantId(billSettle.getTenantId()); + wxBillSettleBill.setSettleId(billSettle.getId()); + wxBillSettleBill.setType(EnumSettleBillType.R.getCode()); + billSettle.setReceiveBillIds(wxBillSettleBillMapper.findBySettleId(wxBillSettleBill)); + wxBillSettleBill.setType(EnumSettleBillType.P.getCode()); + billSettle.setPayBillIds(wxBillSettleBillMapper.findBySettleId(wxBillSettleBill)); + + //加载清算历史 + WxBillSettleRecord wxBillSettleRecord = new WxBillSettleRecord(); + wxBillSettleRecord.setTenantId(billSettle.getTenantId()); + wxBillSettleRecord.setSettleId(billSettle.getId()); + billSettle.setSettleRecordList(wxBillSettleRecordMapper.findList(wxBillSettleRecord)); + + //加载应收、承付、结余 + WxBillSettle query = new WxBillSettle(); + query.setId(id); + query = wxBillSettleMapper.findList(query).get(0); + billSettle.setReceiveMoney(query.getReceiveMoney()); + billSettle.setPayMoney(query.getPayMoney()); + billSettle.setBalance(query.getBalance()); + + //清算方向 + if(billSettle.getReceiveMoney() > billSettle.getPayMoney()){ + billSettle.setSettleWay(EnumSettleWay.B.getCode()); + }else{ + billSettle.setSettleWay(EnumSettleWay.M.getCode()); + } + } + return billSettle; + } + + @Override + public void updateFreezeOrStatus(List billList,Integer freezeStatus,Integer status){ + //1租金2押金3物业4日常费用6其他8补贴 + for (WxBillSettleBill bill:billList) { + if(EnumBillType.RENT.getCode().equals(bill.getBillType())) { + WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); + }else if(EnumBillType.DEPOSIT.getCode().equals(bill.getBillType())) { + WxBillDeposit wxBillRent = new WxBillDeposit(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillDepositMapper.updateByPrimaryKeySelective(wxBillRent); + }else if(EnumBillType.PROPERTY.getCode().equals(bill.getBillType())) { + WxBillProperty wxBillRent = new WxBillProperty(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillPropertyMapper.updateByPrimaryKeySelective(wxBillRent); + + WxBillPropertyDeposit propertyDeposit = new WxBillPropertyDeposit(); + propertyDeposit.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillPropertyDepositMapper.updateByPrimaryKeySelective(propertyDeposit); + }else if(EnumBillType.ROUTINE.getCode().equals(bill.getBillType())) { + WxBillOther wxBillRent = new WxBillOther(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillOtherMapper.updateByPrimaryKeySelective(wxBillRent); + }else if(EnumBillType.OTHER_DEPOSIT.getCode().equals(bill.getBillType())) { + WxBillOtherDeposit wxBillRent = new WxBillOtherDeposit(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillRent); + + WxMerchantSubsidy wxMerchantSubsidy = new WxMerchantSubsidy(); + wxMerchantSubsidy.setId(bill.getBillId()); + if(freezeStatus != null) wxMerchantSubsidy.setFreeze(freezeStatus); + if(status != null) wxMerchantSubsidy.setStatus(status); + wxMerchantSubsidyMapper.updateByPrimaryKeySelective(wxMerchantSubsidy); + }else if(EnumBillType.OTHER_DEPOSIT.getCode().equals(bill.getBillType())) { + WxBillOtherDeposit wxBillRent = new WxBillOtherDeposit(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillRent); + }else{ + WxBillDaily wxBillRent = new WxBillDaily(); + wxBillRent.setId(bill.getBillId()); + if(freezeStatus != null) wxBillRent.setFreeze(freezeStatus); + if(status != null) wxBillRent.setStatus(status); + wxBillDailyMapper.updateByPrimaryKeySelective(wxBillRent); + } + } + } + + @Override + @Transactional + public ResultData saveOrUpdate(WxBillSettle record, MallUserInfo userInfo) { + final IdWorker idWorker = IdWorker.get(); + + if (record.getFlowParams() == null || record.getFlowParams().size() == 0) { + record.setStatus(EnumSettleStatus.NOT_FINISH.getCode()); + //选择的账单改为已结清 + updateFreezeOrStatus(record.getReceiveBillIds(), null,EnumBillRentStatus.PAID.getCode()); + updateFreezeOrStatus(record.getPayBillIds(), null,EnumBillRentStatus.PAID.getCode()); + } + if (record.getId() == null) { + record.setId(idWorker.nextId()); + wxBillSettleMapper.insertSelective(record); + }else{ + wxBillSettleMapper.updateByPrimaryKeySelective(record); + } + + wxBillSettleBillMapper.delBySettleId(record); + //保存中间表 + for (WxBillSettleBill bill:record.getReceiveBillIds()) { + bill.setId(idWorker.nextId()); + bill.setSettleId(record.getId()); + bill.setTenantId(record.getTenantId()); + bill.setType(EnumSettleBillType.R.getCode()); + wxBillSettleBillMapper.insertSelective(bill); + } + for (WxBillSettleBill bill:record.getPayBillIds()) { + bill.setId(idWorker.nextId()); + bill.setSettleId(record.getId()); + bill.setTenantId(record.getTenantId()); + bill.setType(EnumSettleBillType.P.getCode()); + wxBillSettleBillMapper.insertSelective(bill); + } + + //改为冻结状态 + if (record.getFlowParams() != null && record.getFlowParams().size() > 0) { + updateFreezeOrStatus(record.getReceiveBillIds(), EnumFreezeType.YES.getCode(),null); + updateFreezeOrStatus(record.getPayBillIds(),EnumFreezeType.YES.getCode(),null); + + //启动审批流 + record.getFlowParams().put("businessId",record.getId()); + if (record.getFlowParams() != null && record.getFlowParams().size() > 0) { + wxFlowService.start(record.getFlowParams(), userInfo.getId(), userInfo.getName(), record.getTenantId()); + } + } + return new ResultData(); + } + + @Override + public void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillSettle wxBillSettle) { + List list = wxBillSettleMapper.findList(wxBillSettle); + List voList = new ArrayList<>(); + + for (WxBillSettle s:list) { + WxBillSettleVo vo = new WxBillSettleVo(); + vo.setSettleNumber(s.getSettleNumber()); + vo.setMerchantName(s.getMerchantName()); + vo.setCreatetime(DateUtils.formatDateTime(s.getCreatetime())); + vo.setReceiveMoney(new BigDecimal(s.getReceiveMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setPayMoney(new BigDecimal(s.getPayMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setBalance(new BigDecimal(s.getReceiveMoney()).subtract(new BigDecimal(s.getPayMoney())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setSettletime(DateUtils.formatDateTime(s.getSettletime())); + vo.setStatus(EnumSettleStatus.getEnum(s.getStatus()).getMessage()); + vo.setApplyStatus(EnumRentContractAppStatus.getEnum(s.getApplyStatus()).getMessage()); + voList.add(vo); + } + excelService.exportExcel(voList, null, "结算单", WxBillSettleVo.class, "结算单.xlsx", response, false); + } + + @Override + public void downloadBill(HttpServletRequest request, HttpServletResponse response, WxBillSettle wxBillSettle) { + + } +} 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 c05d33b1b..e8eb23446 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -594,32 +594,34 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { } @Override - public void updateObj(WxCUserBasicInfo record, Long newId) { + public void updateObj(WxCUserBasicInfo record, WxCUser user) { // 1. update c_user_tags CUserTagNewIdVo userTagVo = new CUserTagNewIdVo(); userTagVo.setTenantId(record.getTenantId()); userTagVo.setUserId(record.getId()); - userTagVo.setNewUserId(newId); + userTagVo.setNewUserId(user.getId()); wxCUserTagsMapper.updateNewId(userTagVo); // 2. update score history WxScoreHistoryNewIdVo scoreHistoryNewIdVo = new WxScoreHistoryNewIdVo(); scoreHistoryNewIdVo.setTenantId(record.getTenantId()); scoreHistoryNewIdVo.setCUserId(record.getId()); - scoreHistoryNewIdVo.setNewUserId(newId); + scoreHistoryNewIdVo.setNewUserId(user.getId()); scoreHistoryMapper.updateNewId(scoreHistoryNewIdVo); // 3. update credit history WxCreditHistoryNewIdVo creditHistoryNewIdVo = new WxCreditHistoryNewIdVo(); creditHistoryNewIdVo.setTenantId(record.getTenantId()); creditHistoryNewIdVo.setCUserId(record.getId()); - creditHistoryNewIdVo.setNewUserId(newId); + creditHistoryNewIdVo.setNewUserId(user.getId()); creditHistoryMapper.updateNewId(creditHistoryNewIdVo); // 10. base info CUserBaseVo userBaseVo = new CUserBaseVo(); org.springframework.beans.BeanUtils.copyProperties(record, userBaseVo); - userBaseVo.setNewId(newId); + userBaseVo.setNewId(user.getId()); + //userBaseVo.setCredit(user.getCredit()); + userBaseVo.setPoins(user.getScore()); wxCUserBasicInfoMapper.updateNewId(userBaseVo); } @@ -980,6 +982,11 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { return wxCUserBasicInfoMapper.findCount(dto); } + @Override + public List findCountHistory(WxCUserBasicInfoDto dto) { + return wxCUserBasicInfoMapper.findCountHistory(dto); + } + @Override public void exportCarPayData(WxCarPayRecord record, HttpServletRequest request, HttpServletResponse response) { List list = wxCarPayRecordMapper.findCarPayList(record); 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 a23e2808f..c368a91fe 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCreditHistory; import com.iformall.domain.po.msg.FmInsideCLoginMsg; +import com.iformall.domain.vo.UserCountVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCUserMapper; @@ -23,6 +24,7 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; +import java.util.Map; @Service public class WxCUserServiceImpl implements WxCUserService { @@ -205,6 +207,11 @@ public class WxCUserServiceImpl implements WxCUserService { return wxCUserMapper.findCount(dto); } + @Override + public List findCountHistory(WxCUserBasicInfoDto dto) { + return wxCUserMapper.findCountHistory(dto); + } + @Override public PageInfo listByChannel(WxCUser user, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserMapper.listByChannel(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 f44822b09..e4676d717 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserTagsServiceImpl.java @@ -400,6 +400,9 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { tag = EnumTag.getEnum(EnumTag.ID_73.getCode() + (b.getId().intValue() - EnumBusiness.BUSINESS_ID7.getCode())); } + if (b.getId().intValue() == EnumBusiness.BUSINESS_ID11.getCode()){ + tag = EnumTag.ID_145; + } resList.clear(); resList.addAll(assign(user, tag)); } 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 8a3cb9819..41bc8d10c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCampaignServiceImpl.java @@ -11,16 +11,13 @@ import com.iformall.domain.po.WxActivity; import com.iformall.domain.po.WxCampaign; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponChannel; -import com.iformall.domain.vo.WxCouponChannelAddVo; import com.iformall.enums.*; import com.iformall.mapper.WxActivityMapper; import com.iformall.mapper.WxCampaignMapper; import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.service.QrCodeService; import com.iformall.service.WxCampaignService; -import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxCouponService; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -130,15 +127,13 @@ public class WxCampaignServiceImpl implements WxCampaignService { if (wxCampaign.getProduceType() == null) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "produceType不能为空"); } - if (wxCampaign.getProduceId() == null) { + if (wxCampaign.getProduceType().equals(EnumCampaignProductType.ACTIVITY_JOIN.getCode()) + && wxCampaign.getProduceId() == null) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "produceId不能为空"); } if (StringUtils.isBlank(wxCampaign.getPagePath())) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "pagePath不能为空"); } - if (StringUtils.isBlank(wxCampaign.getPageScene())) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "pageScene不能为空"); - } } else { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } 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 e7f1584cc..2c5c7e238 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -8,6 +8,7 @@ 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.vo.PromotionCalc; import com.iformall.domain.vo.WxCardSpendVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; @@ -127,7 +128,6 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { int iChargeFee = PayUtils.getPayRate(payment, payAccount.getRate()); Integer real_payment = payment - iChargeFee; Integer remain_real_pament = cardInfo.getRemainingShareFeeAmount() - real_payment; - Integer remaingAmount = cardInfo.getRemainingAmount()-record.getDeductionAmount(); if(remaingAmount.equals(0)) { // 最后一次支付时 @@ -137,6 +137,8 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { // 5 insert card_spend record.setId(idWorker.nextId()); + record.setTenantId(cardInfo.getTenantId()); + record.setPayFrom(EnumCardSpendFrom.C.getCode()); record.setPayment(payment); record.setRealPayment(real_payment); record.setCardBeforeAmount(cardInfo.getRemainingAmount()); @@ -169,18 +171,24 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } // 7. update card info - cardInfo.setRemainingAmount(remaingAmount); - cardInfo.setRemainingShareFeeAmount(remain_real_pament); - cardInfo.setUpdateDate(curDate); + WxCardInfo updateCardInfo = new WxCardInfo(); + updateCardInfo.setId(cardInfo.getId()); + updateCardInfo.setRemainingAmount(remaingAmount); + updateCardInfo.setRemainingShareFeeAmount(remain_real_pament); + updateCardInfo.setUpdateDate(curDate); + // 7.1、消费后修改卡转赠状态 + if (cardInfo.getSupportTransfer().equals(EnumCouponTransfer.YES.getCode())) { + updateCardInfo.setSupportTransfer(EnumCouponTransfer.NO.getCode()); + } try { wxCardInfoMapper.updateByPrimaryKeySelective(cardInfo); } catch (Exception e) { logger.error("card info update error"); return new ResultData(ErrorCode.DB_FAIL.getCode(), "card info 更新出错!"); } - // 7.1 update coupon card status + // 7.2 update coupon card status if(cardInfo.getRemainingAmount().equals(0)) { - if (cardFinished(order, curDate, cardInfo)) { + if (cardFinished(curDate, cardInfo)) { return new ResultData(ErrorCode.DB_FAIL.getCode(), "couponOrder status 更新出错!"); } } @@ -240,14 +248,6 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } } - //10、消费后修改卡转赠状态 - WxCardInfo wxCardInfo = new WxCardInfo(); - wxCardInfo.setId(record.getCardId()); - wxCardInfo.setSupportTransfer(EnumCouponTransfer.NO.getCode()); - if (cardInfo.getSupportTransfer().equals(EnumCouponTransfer.YES.getCode())) { - wxCardInfoMapper.updateByPrimaryKeySelective(wxCardInfo); - } - // 成长值 try { orderUpdate.setPayment(real_payment); @@ -266,8 +266,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { creditHistory.setCreateDate(new Date()); creditHistory.setTenantId(record.getTenantId()); creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); - creditHistory.setCouponId(coupon.getId()); - creditHistory.setBusinessId(Long.valueOf(coupon.getBusiness())); + creditHistory.setBusinessId(coupon.getBusiness()); creditHistory.setSpend(real_payment); //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 creditHistory.setMerchantId(record.getMerchantId()); @@ -279,11 +278,16 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { return new ResultData(record); } - private boolean cardFinished(WxOrder order, Date curDate, WxCardInfo cardInfo) { + /** + * 卡已用完 + * @param curDate + * @param cardInfo + * @return + */ + private boolean cardFinished(Date curDate, WxCardInfo cardInfo) { WxCouponOrder couponOrder = new WxCouponOrder(); couponOrder.setId(cardInfo.getId()); couponOrder.setCouponId(cardInfo.getCouponId()); - couponOrder.setOrderId(order.getId()); couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_COMPLETE.getCode()); couponOrder.setUpdateDate(curDate); try { @@ -542,4 +546,316 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { excelService.exportExcel(list, null, "卡消费记录", WxCardSpendVo.class, "卡消费记录.xlsx", response, false); } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCardSpend cardSpendForPosPrePay(WxCardSpend record) throws MallinkException { + final IdWorker idWorker = IdWorker.get(); + Date curDate = new Date(); + // 1. get card info + WxCardInfo cardInfo = wxCardInfoMapper.selectByPrimaryKey(record.getCardId()); + if (cardInfo == null) { + logger.error("card not found: " + record.getCardId()); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + // 2. coupon + Integer subsidyRate = 0; + WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(cardInfo.getCouponId()); + if (coupon == null) { + logger.error("card's coupon not found: " + cardInfo.getCouponId()); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + if (coupon.getSubsidyNum() == null) { + logger.error("卡补贴额未填写: " + cardInfo.getCouponId()); + throw new MallinkException(ErrorCode.CARD_SUBSIDY_NOT_SET); + } + + // 3. get pay account + WxPayAccount payAccount = null; + WxPayAccount payAccountQ = new WxPayAccount(); + payAccountQ.setTenantId(record.getTenantId()); + try { + payAccount = payAccountMapper.selectOne(payAccountQ); + } catch (Exception e) { + logger.error("获取payAccount error: " + record.getTenantId()); + throw new MallinkException(ErrorCode.SYS_MCH_NOT_FOUND); + } + + // 查询是否有已有的 + WxCardSpend oldCardSpend = null; + WxCardSpend cardSpendQ = new WxCardSpend(); + cardSpendQ.setCardId(record.getCardId()); + cardSpendQ.setPayFrom(EnumCardSpendFrom.POS.getCode()); + cardSpendQ.setPosOrderId(record.getPosOrderId()); + cardSpendQ.setPayStatus(EnumCardSpendStatus.PREV_PAY.getCode()); + try { + oldCardSpend = wxCardSpendMapper.selectOne(cardSpendQ); + } catch (Exception e) { + logger.error(e.getMessage()); + } + if (oldCardSpend != null) { + return oldCardSpend; + } + + // 4. 扣减计算 + Double paymentD = 1.0 * cardInfo.getSaleAmount() * record.getDeductionAmount() / cardInfo.getAmount(); + Integer payment = paymentD.intValue(); + int iChargeFee = PayUtils.getPayRate(payment, payAccount.getRate()); + Integer real_payment = payment - iChargeFee; + Integer remain_real_pament = cardInfo.getRemainingShareFeeAmount() - real_payment; + Integer remaingAmount = cardInfo.getRemainingAmount()-record.getDeductionAmount(); + if (remaingAmount.equals(0)) { + // 最后一次支付时 + real_payment = Math.min(real_payment, cardInfo.getRemainingShareFeeAmount()); + remain_real_pament = cardInfo.getRemainingShareFeeAmount() - real_payment; + } + // 4.1 TODO 是否已扣减?? + + // 5 insert card_spend + record.setId(idWorker.nextId()); + record.setTenantId(cardInfo.getTenantId()); + record.setPayment(payment); + record.setRealPayment(real_payment); + record.setCardBeforeAmount(cardInfo.getRemainingAmount()); + record.setCardRemainAmount(remaingAmount); + record.setCardBeforeRealAmount(cardInfo.getRemainingShareFeeAmount()); + record.setCardRemainRealAmount(remain_real_pament); + record.setPayStatus(EnumCardSpendStatus.PREV_PAY.getCode()); + record.setCreateDate(curDate); + record.setUpdateDate(curDate); + try { + wxCardSpendMapper.insertSelective(record); + } catch (Exception e) { + logger.error("card spend insert error"); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "卡消费插入出错"); + } + + // 7. update card info + cardInfo.setRemainingAmount(remaingAmount); + cardInfo.setRemainingShareFeeAmount(remain_real_pament); + cardInfo.setUpdateDate(curDate); + // 7.1 消费后,修改卡转赠状态 + if (cardInfo.getSupportTransfer().equals(EnumCouponTransfer.YES.getCode())) { + cardInfo.setSupportTransfer(EnumCouponTransfer.NO.getCode()); + } + try { + wxCardInfoMapper.updateByPrimaryKeySelective(cardInfo); + } catch (Exception e) { + String errMessage = "消费卡信息更新出错: " + cardInfo.getId(); + logger.error(errMessage); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), errMessage); + } + return record; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCardInfo cardSpendForPosPrePayCancel(WxCardInfo cardInfo, WxCardSpend record) throws MallinkException { + Date curDate = new Date(); + if (record.getId() == null) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (!record.getPayStatus().equals(EnumCardSpendStatus.PREV_PAY.getCode())) { + logger.error("card spend not prev pay"); + throw new MallinkException(ErrorCode.CARD_SPEND_IS_NOT_PREV); + } + // 2. coupon + Integer subsidyRate = 0; + WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(cardInfo.getCouponId()); + if (coupon == null) { + logger.error("card's coupon not found: " + cardInfo.getCouponId()); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + + // 3. get pay account + WxPayAccount payAccount = null; + WxPayAccount payAccountQ = new WxPayAccount(); + payAccountQ.setTenantId(record.getTenantId()); + try { + payAccount = payAccountMapper.selectOne(payAccountQ); + } catch (Exception e) { + logger.error("获取payAccount error: " + record.getTenantId()); + throw new MallinkException(ErrorCode.SYS_MCH_NOT_FOUND); + } + + // 4. 增加计算 + Double paymentD = 1.0 * cardInfo.getSaleAmount() * record.getDeductionAmount() / cardInfo.getAmount(); + Integer payment = paymentD.intValue(); + int iChargeFee = PayUtils.getPayRate(payment, payAccount.getRate()); + Integer real_payment = payment - iChargeFee; + Integer remain_real_pament = cardInfo.getRemainingShareFeeAmount() + real_payment; + Integer remaingAmount = cardInfo.getRemainingAmount()+record.getDeductionAmount(); + + // 5.、update card info + WxCardInfo updateCardInfo = new WxCardInfo(); + updateCardInfo.setId(record.getCardId()); + updateCardInfo.setRemainingAmount(remaingAmount); + updateCardInfo.setRemainingShareFeeAmount(remain_real_pament); + updateCardInfo.setUpdateDate(curDate); + // 5.1 如果还是原价, 卡可转增,且当前为不可转增,修改为可转增 + if (cardInfo.getAmount().equals(remaingAmount) && + cardInfo.getSupportTransfer().equals(EnumCouponTransfer.NO.getCode()) && + coupon.getSupportTransfer().equals(EnumCouponTransfer.YES.getCode())) { + updateCardInfo.setSupportTransfer(EnumCouponTransfer.YES.getCode()); + } + try { + wxCardInfoMapper.updateByPrimaryKeySelective(updateCardInfo); + } catch (Exception e) { + String errMessage = "卡信息更新出错"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), errMessage); + } + + // 100. delete prev card_spend + record.setTenantId(cardInfo.getTenantId()); + try { + wxCardSpendMapper.deleteForPrevCancel(record); + } catch (Exception e) { + String errMessage = "卡消费信息删除出错"; + logger.error(errMessage); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), errMessage); + } + + return updateCardInfo; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxCardSpend cardSpendForPosPay(PromotionCalc scoreCreditCalc, WxCardSpend record, WxMerchant merchant, WxMerchantBUser buUser) throws MallinkException { + final IdWorker idWorker = IdWorker.get(); + Date curDate = new Date(); + // 1. update card_spend + WxCardSpend updateCardSpend = new WxCardSpend(); + updateCardSpend.setId(record.getId()); + updateCardSpend.setOrderId(record.getOrderId()); + updateCardSpend.setPayStatus(EnumCardSpendStatus.NOT_PAY.getCode()); + updateCardSpend.setUpdateDate(curDate); + try { + wxCardSpendMapper.updateByPrimaryKeySelective(updateCardSpend); + } catch (Exception e) { + logger.error("card spend update error: " + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "card spend 插入出错!"); + } + + // 2. update coupon card status + WxCardInfo cardInfo = wxCardInfoMapper.selectByPrimaryKey(record.getCardId()); + if (cardInfo == null) { + logger.error("card not found: " + record.getCardId()); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + if(cardInfo.getRemainingAmount().equals(0)) { + if (cardFinished(curDate, cardInfo)) { + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "couponOrder status 更新出错!"); + } + } + + WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(cardInfo.getCouponId()); + if (coupon == null) { + logger.error("card's coupon not found: " + cardInfo.getCouponId()); + throw new MallinkException(ErrorCode.CARD_IS_NOT_FOUND); + } + + // 3. get pay account + WxPayAccount payAccount = null; + WxPayAccount payAccountQ = new WxPayAccount(); + payAccountQ.setTenantId(record.getTenantId()); + try { + payAccount = payAccountMapper.selectOne(payAccountQ); + } catch (Exception e) { + logger.error("获取payAccount error: " + record.getTenantId()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "获取payAccount失败"); + } + + // 3. 补贴 + // 补贴额 = 商城补贴总额/卡券面额 * 抵扣额(本次支付额) + Double subsidyFeeD = 1.0 * record.getDeductionAmount() * coupon.getSubsidyNum() / cardInfo.getAmount(); + Integer subsidyFee = subsidyFeeD.intValue(); + logger.info("补贴额: " + subsidyFee); + if(subsidyFee > 0) { + // 有补贴时入库 + int iSubChargeFee = PayUtils.getPayRate(subsidyFee, payAccount.getRate()); + Integer realSubsidyFee = subsidyFee - iSubChargeFee; + WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); + merchantSubsidy.setId(idWorker.nextId()); + merchantSubsidy.setTenantId(record.getTenantId()); + merchantSubsidy.setOrderId(record.getOrderId()); + merchantSubsidy.setOrderType(EnumOrderType.PREPAIDCARD.getCode()); + merchantSubsidy.setMerchantId(record.getMerchantId()); + merchantSubsidy.setCouponOrderId(cardInfo.getId()); + merchantSubsidy.setCouponType(EnumCouponType.CARD_MULTIMCH.getCode()); + merchantSubsidy.setOrderPayment(record.getDeductionAmount()); + merchantSubsidy.setReceiverPayment(record.getPayment()); + merchantSubsidy.setRealPayment(record.getRealPayment()); + merchantSubsidy.setSubsidy(subsidyFee); + merchantSubsidy.setRealSubsidy(realSubsidyFee); + if (coupon.getSubsidyType().equals(EnumCouponSubsidyType.WECHAT_COUPON.getCode())) { + // 立减领券 + merchantSubsidy.setStatus(EnumMerchantSubsidyStatus.AUTO_SUBSIDIED.getCode()); + } else if (coupon.getSubsidyType().equals(EnumCouponSubsidyType.WECHAT_MCHPAY.getCode())) { + // 转账倒现金 + } else { + // 未补贴 + merchantSubsidy.setStatus(EnumMerchantSubsidyStatus.NOT_SUBSIDY.getCode()); + } + + merchantSubsidy.setCreateDate(curDate); + merchantSubsidy.setUpdateDate(curDate); + try { + wxMerchantSubsidyMapper.insertSelective(merchantSubsidy); + } catch (Exception e) { + logger.error("merchantSubsidy info insert error"); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "merchantSubsidy info 插入出错!"); + } + } + + // 9. 分账 + try { + shareForCardPay(record.getTenantId(), record.getCardId(), record.getOrderId(), record.getId()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + if(ErrorCode.PROFIT_SHARING_NUM_UP_LIMIT.getCode() == e.getErrorCode()) { + // 分账已到20次限制,后面只记录,无法分账 + logger.error("分账已到20次限制,后面只记录,无法分账"); + } else { + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } + } + + // 成长值 + try { + WxOrder orderUpdate = new WxOrder(); + orderUpdate.setId(record.getOrderId()); + orderUpdate.setTenantId(record.getTenantId()); + orderUpdate.setCUserId(record.getOwnerId()); + orderUpdate.setPayment(record.getRealPayment()); + orderUpdate.setPaymentTime(record.getUpdateDate()); + orderUpdate.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); + int point = wxScoreRulesService.addScore2(EnumScoreType.CONSUMPTION, orderUpdate, coupon.getBusiness()); + scoreCreditCalc.setScore(scoreCreditCalc.getScore() + point); + } catch (Exception e) { + logger.error("成长值:" + e.getMessage()); + } + + // 积分 + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + creditHistory.setOperatorId(buUser.getId()); + creditHistory.setCUserId(record.getOwnerId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(record.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setBusinessId(merchant.getBusinessId()); + creditHistory.setSpend(record.getRealPayment()); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(record.getMerchantId()); + creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory); + if (creditHistory != null) { + scoreCreditCalc.setCredit(scoreCreditCalc.getCredit() + creditHistory.getCreditNum()); + } + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } + return record; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponActionLogServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponActionLogServiceImpl.java index 278118583..d927af7c9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponActionLogServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponActionLogServiceImpl.java @@ -2,9 +2,14 @@ package com.iformall.service.impl; import java.text.SimpleDateFormat; import java.util.*; + import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.BaseEntity; import com.iformall.domain.po.WxCouponActionLog; +import com.iformall.domain.vo.WxCouponActionLogVo; +import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCouponActionLogMapper; import com.iformall.service.WxCouponActionLogService; import org.slf4j.Logger; @@ -12,12 +17,13 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iformall.common.IdWorker; +import org.springframework.util.CollectionUtils; @Service public class WxCouponActionLogServiceImpl implements WxCouponActionLogService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired + + @Autowired WxCouponActionLogMapper wxCouponActionLogMapper; @@ -36,7 +42,7 @@ public class WxCouponActionLogServiceImpl implements WxCouponActionLogService { if (record.getId() == null) { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); + record.setId(idWorker.nextId()); wxCouponActionLogMapper.insertSelective(record); } else { wxCouponActionLogMapper.updateByPrimaryKeySelective(record); @@ -58,7 +64,8 @@ public class WxCouponActionLogServiceImpl implements WxCouponActionLogService { actionLog.setCouponOrderId(coupon_order_id); actionLog.setChannelType(channelType); actionLog.setCreateTime(curDate); - actionLog.setCreateTimeMd(new SimpleDateFormat("MM/dd").format(curDate));; + actionLog.setCreateTimeMd(new SimpleDateFormat("MM/dd").format(curDate)); + ; saveOrUpdate(actionLog); } @@ -67,4 +74,14 @@ public class WxCouponActionLogServiceImpl implements WxCouponActionLogService { return wxCouponActionLogMapper.getCountByChannelId(tenantId, channelType, channelId); } + @Override + public PageInfo getActionLog(Map params, Integer pageNum, Integer pageSize) { + Object channelType = params.get("channelType"); + if (CollectionUtils.isEmpty(params) || Objects.isNull(channelType)) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); + } + params.put("sortColumns", BaseEntity.SortField.CreateTime_DESC) ; + return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponActionLogMapper.getActionLog(params)); + } + } 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 03112a7e6..3b983a92b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponInjectServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponInjectServiceImpl.java @@ -272,7 +272,7 @@ public class WxCouponInjectServiceImpl implements WxCouponInjectService { // 发放免费券 WxCouponOrder couponOrder = null; try { - couponOrder = wxOrderService.sendFreeCouponToUser(tempCUser.getId(), wxCoupon.getId()); + couponOrder = wxOrderService.sendFreeCouponToUser(tempCUser.getId(), wxCoupon.getId(),null); if (couponOrder != null) { wxCouponActionLogService.addOne(tempCUser.getTenantId(), wxCoupon.getId(), couponOrder.getId(), EnumCouponSendSendType.INJECT.getCode(), couponInjectId); } 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 14416d3af..f2c0fd52f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -200,6 +200,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap); //logger.info("find " + list.size() + " coupon order from " + /startDate + " to " + new Date()); resultMap.put("amount", list.stream().mapToInt(p->p.getCouponPrice()).sum()); + resultMap.put("orderCount", list.size()); } else { if (isVerified) resultMap.put("list", PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findListOfVerifiedByDateForBUser(dateMap))); @@ -336,10 +337,15 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("已经核销过的券: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) { + logger.error("券已被预核销: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); + } int num = 0; try { couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 couponOrder.setBUserId(bUser.getId()); + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_B.getCode()); couponOrder.setUpdateDate(new Date()); num = wxCouponOrderMapper.updateVerifyCouponOrder(couponOrder); } catch (Exception e) { @@ -370,7 +376,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { creditHistory.setTenantId(couponOrder.getTenantId()); creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); creditHistory.setCouponId(wxCoupon.getId()); - creditHistory.setBusinessId(Long.valueOf(wxCoupon.getBusiness())); + creditHistory.setBusinessId(wxCoupon.getBusiness()); creditHistory.setSpend(couponOrder.getCouponPrice()); //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 creditHistory.setMerchantId(bUser.getMerchantId()); @@ -383,12 +389,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } @Override - public void sendInsideCouponVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser) { + public void sendInsideCouponVerifyMsg(String tenantId, Long couponOrderId, Long buUserId) { FmInsideCouponVerifyMsg verifyMsg = new FmInsideCouponVerifyMsg(); verifyMsg.setMsgType(EnumMsgRecordType.INSIDE_COUPON_VERIFY.getCode()); - verifyMsg.setTenantId(couponOrder.getTenantId()); - verifyMsg.setCouponOrderId(couponOrder.getId()); - verifyMsg.setBUserId(bUser.getId()); + verifyMsg.setTenantId(tenantId); + verifyMsg.setCouponOrderId(couponOrderId); + verifyMsg.setBUserId(buUserId); mqBaseProducer.sendMessage(verifyMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendConfigServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendConfigServiceImpl.java index ba434c8c1..0df169311 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendConfigServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendConfigServiceImpl.java @@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; + @Service public class WxCouponSendConfigServiceImpl implements WxCouponSendConfigService { @@ -36,8 +38,10 @@ public class WxCouponSendConfigServiceImpl implements WxCouponSendConfigService //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); + record.setCreateTime(new Date()); wxCouponSendConfigMapper.insertSelective(record); } else { + record.setUpdateTime(new Date()); wxCouponSendConfigMapper.updateByPrimaryKeySelective(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 ae18fdda8..cae8e1f06 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; +import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; import com.iformall.domain.po.msg.AppUniformMsg; @@ -16,6 +17,7 @@ import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; import com.iformall.utils.DateUtils; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,10 +27,7 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Service public class WxCouponSendServiceImpl implements WxCouponSendService { @@ -62,10 +61,46 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { WxAuthorizerInfoMapper authorizerInfoMapper; @Autowired WxMsgLimitService wxMsgLimitService; + @Autowired + WxCouponMerchantMapper wxCouponMerchantMapper; @Override public PageInfo listAsPage(WxCouponSend record, Integer pageIndex, Integer pageSize) { - return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponSendMapper.findListVo(record)); + PageInfo pageInfo; + /** + * 设置商户购买券数 + * 前端排序:时间、商户总库存、商户已发数、商户剩余 + */ + if (Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), record.getSendType())) { + String sortStr = null; + if (Objects.equals(record.getSortColumn(), WxCouponSend.SORT_MERCHANT_LNVENTORY) || + Objects.equals(record.getSortColumn(), WxCouponSend.SORT_MERCHANT_SEND) || + Objects.equals(record.getSortColumn(), WxCouponSend.SORT_REMAIN)) { + sortStr = record.getSortColumn() + " " + record.getSortOrder(); + } else if (Objects.equals(record.getSortColumn(), "createDate")) { + sortStr = "create_date" + " " + record.getSortOrder(); + } + record.setSortColumn(null); + record.setSortCol(sortStr); + pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponSendMapper.findListVoByValidType(record)); + for (WxCouponSendVo cs : pageInfo.getList()) { + JSONObject jo = JSONObject.parseObject(cs.getConditions()); + int inventory = jo.getIntValue(WxCouponSend.KEY_MERCHANT_LNVENTORY); + cs.setInventory(inventory); + int expired = 0; + if (!DateUtils.isDateBefore(cs.getValidEndDate())) { + expired = 1; + } + cs.setExpired(expired); + } + } else { + record.setStatus(EnumCouponSendStatus.VALID.getCode()); + record.setSortColumns(BaseEntity.SortField.CreateDate_DESC); + pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponSendMapper.findListVo(record)); + for (WxCouponSendVo cs:pageInfo.getList()) + cs.setSendCount(wxCouponActionLogService.getCountByChannelId(record.getTenantId(), cs.getSendType(), cs.getId())); + } + return pageInfo; } @Override @@ -73,8 +108,19 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { return wxCouponSendMapper.selectByPrimaryKey(id); } + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) @Override public void saveOrUpdate(WxCouponSend record) { + //会员生日券配置 + if (Objects.equals(record.getSendType(), EnumCouponSendSendType.BIRTHDAY.getCode())) { + WxCouponSend config = getConfig(record.getSendType(), record.getTenantId()); + if (Objects.nonNull(config)) { + record.setConditions(config.getConditions()); + } + } + if (Objects.equals(record.getSendType(), EnumCouponSendSendType.MERCHANT.getCode())) { + addForMerchant(record); + } if (record.getId() == null) { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); @@ -85,6 +131,86 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } } + private void addForMerchant(WxCouponSend record) { + //商户注券 参数校验 + int merchantLnventory = 0; + String merchantIdStr = null; + JSONObject jo; + try { + jo = JSONObject.parseObject(record.getConditions()); + merchantLnventory = jo.getIntValue(WxCouponSend.KEY_MERCHANT_LNVENTORY); + merchantIdStr = jo.getString("id"); + jo.put(WxCouponSend.KEY_MERCHANT_SEND,0) ; + jo.put(WxCouponSend.KEY_MERCHANT_REMAIN,merchantLnventory) ; + record.setConditions(jo.toJSONString()); + } catch (Exception e) { + logger.error(" updateInvalid 解析异常:{}", e.getMessage()); + } + if (Objects.isNull(merchantIdStr)) { + throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); + } + if (0 >= merchantLnventory) { + throw new MallinkException(ErrorCode.COUPON_SEND_LIMIT_VERIFY); + } + //查询总库存 + WxCoupon queryById = new WxCoupon(); + queryById.setId(record.getCouponId()); + WxCoupon wxCouponOfDb = wxCouponService.findById(queryById); + if (Objects.isNull(wxCouponOfDb)) { + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + //产品需求,暂时不约束发券商户和券所属商户 + //WxCouponMerchant couponMerchantQ = new WxCouponMerchant(); + //couponMerchantQ.setTenantId(record.getTenantId()); + //couponMerchantQ.setProductId(record.getCouponId()); + //couponMerchantQ.setMerchantId(Long.parseLong(merchantIdStr)); + //couponMerchantQ.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + //WxCouponMerchant couponMerchant = wxCouponMerchantMapper.selectOne(couponMerchantQ); + //if (Objects.isNull(couponMerchant)) { + // throw new MallinkException(ErrorCode.COUPON_MERCHANT_NOT_FOUND); + //} + + //商家购券数不能大于总库存 + if (merchantLnventory > wxCouponOfDb.getRemainInventory()) { + throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY); + } + + //更新库存 + wxCouponService.reduceRemainInventory(wxCouponOfDb.getId(), wxCouponOfDb.getRemainInventory(), merchantLnventory); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public void updateInvalid(WxCouponSend record) { + if (Objects.equals(record.getStatus(), EnumCouponSendStatus.INVALID.getCode())) { + return; + } + record.setStatus(EnumCouponSendStatus.INVALID.getCode()); + record.setUpdateDate(new Date()); + if (Objects.equals(record.getSendType(), EnumCouponSendSendType.MERCHANT.getCode())) { + //查询总库存 + WxCoupon queryById = new WxCoupon(); + queryById.setId(record.getCouponId()); + WxCoupon wxCouponOfDb = wxCouponService.findById(queryById); + if (Objects.isNull(wxCouponOfDb)) { + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + //查询商家库存和 + int merchantRemain = 0; + try { + JSONObject jo = JSONObject.parseObject(record.getConditions()); + merchantRemain = jo.getIntValue(WxCouponSend.KEY_MERCHANT_REMAIN); + } catch (Exception e) { + logger.error(" updateInvalid 解析异常:{}", e.getMessage()); + } + //退回coupon库存 + if(merchantRemain!=0) { + wxCouponService.backRemainInventory(queryById.getId(), wxCouponOfDb.getRemainInventory(), merchantRemain); + } + } + wxCouponSendMapper.updateByPrimaryKeySelective(record); + } + @Override public void deleteById(Long id) { wxCouponSendMapper.deleteByPrimaryKey(id); @@ -92,8 +218,8 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { private boolean isConditionAllowed(WxCouponSend wxCouponSend, Object param) { - if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.C_ORDER.getCode())){ - WxOrder wxOrder = (WxOrder)param; + if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.C_ORDER.getCode())) { + WxOrder wxOrder = (WxOrder) param; try { JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); @@ -104,12 +230,12 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } return false; - } else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.CAR_STOP.getCode())){ + } else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.CAR_STOP.getCode())) { try { JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); - if (DateUtils.isInDate(new Date(), jo.getString("startTime"), jo.getString("endTime"))){ + if (DateUtils.isInDate(new Date(), jo.getString("startTime"), jo.getString("endTime"))) { return true; } @@ -118,15 +244,15 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } return false; - }else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.B_MICROPAY.getCode())){ + } else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.B_MICROPAY.getCode())) { - WxOrder wxOrder = (WxOrder)param; + WxOrder wxOrder = (WxOrder) param; try { JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(wxOrder.getProductId()); - if (wxMerchantBUser.getMerchantId()!= null + if (wxMerchantBUser.getMerchantId() != null && wxMerchantBUser.getMerchantId().equals(jo.getLong("id"))) { return true; } @@ -135,8 +261,8 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } return false; - }else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.COUPON_VERIFY.getCode())){ - WxOrder wxOrder = (WxOrder)param; + } else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.COUPON_VERIFY.getCode())) { + WxOrder wxOrder = (WxOrder) param; try { JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); @@ -148,7 +274,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } return false; - }else { + } else { return false; } @@ -164,7 +290,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { case CAR_STOP: if (!param.getClass().equals(WxCUserCar.class)) return false; - WxCUserCar wxCUserCar= (WxCUserCar)param; + WxCUserCar wxCUserCar = (WxCUserCar) param; cUserId = wxCUserCar.getCUserId(); tenantId = wxCUserCar.getTenantId(); break; @@ -173,7 +299,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { case C_ORDER: if (!param.getClass().equals(WxOrder.class)) return false; - WxOrder order = (WxOrder)param; + WxOrder order = (WxOrder) param; cUserId = order.getCUserId(); tenantId = order.getTenantId(); break; @@ -225,13 +351,13 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } //检查条件 - if (!isConditionAllowed(send,param)) + if (!isConditionAllowed(send, param)) continue; // 发放免费券 WxCouponOrder couponOrder = null; try { - couponOrder = wxOrderService.sendFreeCouponToUser(cUserId, send.getCouponId()); + couponOrder = wxOrderService.sendFreeCouponToUser(cUserId, send.getCouponId(), null); if (couponOrder != null) { bRet = true; @@ -239,12 +365,12 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { // 查找cUser WxCUser user = wxCUserMapper.selectByPrimaryKey(cUserId); - if(user == null) { + if (user == null) { continue; } // 发送消息 - if(couponOrder != null) { + if (couponOrder != null) { sendMsgForSendCoupon(tenantId, send, couponOrder, user); } @@ -299,7 +425,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String gotopage = "pages/index/index?type=mc"; // 7. 公众号消息 - if(StringUtils.isNotBlank(user.getMpAppId()) && + if (StringUtils.isNotBlank(user.getMpAppId()) && StringUtils.isNotBlank(user.getMpOpenId()) && user.getMpSubscribe().equals(EnumUserIsSubscribe.YES.getCode())) { // 检查是否超限 @@ -307,7 +433,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { msgLimit.setTenantId(user.getTenantId()); msgLimit.setType(EnumMsgLimitType.WXCHAT_OPENID_SEND.getCode()); msgLimit.setLimitId(user.getMpOpenId()); - if(wxMsgLimitService.checkIsLimit(msgLimit)) { + if (wxMsgLimitService.checkIsLimit(msgLimit)) { logger.error("用户公众号模板消息超限" + user.getId()); return true; } @@ -343,7 +469,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { )); try { - mqBaseProducer.sendMessage(mpAppMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + 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); @@ -356,7 +482,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { msgLimit.setTenantId(user.getTenantId()); msgLimit.setType(EnumMsgLimitType.WEAPP_OPENID_SEND.getCode()); msgLimit.setLimitId(user.getOpenId()); - if(wxMsgLimitService.checkIsLimit(msgLimit)) { + if (wxMsgLimitService.checkIsLimit(msgLimit)) { logger.error("用户小程序统一模板消息超限:" + user.getId()); return true; } @@ -365,7 +491,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { authQ.setAuthorizerAppid(user.getAppId()); authQ.setTenantId(user.getTenantId()); WxAuthorizerInfo weappInfo = authorizerInfoMapper.findMp(authQ); - if(weappInfo != null) { + if (weappInfo != null) { AppUniformMsg appUniformMsg = new AppUniformMsg(); appUniformMsg.setMsgType(EnumMsgRecordType.SMART_APP_UNIFORM.getCode()); appUniformMsg.setAppId(user.getAppId()); @@ -383,7 +509,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { user.getNickName() )); try { - mqBaseProducer.sendMessage(appUniformMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + 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); @@ -402,4 +528,89 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { wxCouponSend.setUpdateDate(new Date()); wxCouponSendMapper.updateStatusByCouponId(wxCouponSend); } + + @Override + public void saveOrUpdateConfig(Integer beforeDays, Integer sendType, String tenantId) { + WxCouponSend config = getConfig(sendType, tenantId); + if (Objects.isNull(config)) { + WxCouponSend couponSendQuery = createCouponSendQuery(sendType, tenantId) ; + insertCouponSend(beforeDays, couponSendQuery); + } else { + JSONObject couponSendJo = JSONObject.parseObject(config.getConditions()); + if (Objects.isNull(couponSendJo)) { + couponSendJo = new JSONObject(); + } + couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, beforeDays); + config.setConditions(couponSendJo.toJSONString()); + config.setUpdateDate(new Date()); + wxCouponSendMapper.updateBirthdayConfig(config); + } + } + + private void insertCouponSend(Integer beforeDays, WxCouponSend couponSendQuery) { + couponSendQuery.setTitle(EnumCouponSendSendType.BIRTHDAY.getMessage() + "配置信息 "); + final IdWorker idWorker = IdWorker.get(); + couponSendQuery.setId(idWorker.nextId()); + couponSendQuery.setCreateDate(new Date()); + JSONObject couponSendJo = new JSONObject(); + couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, beforeDays); + couponSendQuery.setConditions(couponSendJo.toJSONString()); + wxCouponSendMapper.insertSelective(couponSendQuery); + } + + @Override + public WxCouponSend getConfig(Integer sendType, String tenantId) { + WxCouponSend couponSendQuery = createCouponSendQuery(sendType, tenantId) ; + //读取会员生日券配置信息 + List wxCouponSendList = wxCouponSendMapper.select(couponSendQuery); + if (CollectionUtils.isEmpty(wxCouponSendList)) { + //配置不存在,添加默认配置 + insertCouponSend(0, couponSendQuery); + return couponSendQuery; + } + return wxCouponSendList.get(0); + } + + private WxCouponSend createCouponSendQuery(Integer sendType, String tenantId) { + WxCouponSend couponSendQuery = new WxCouponSend(); + couponSendQuery.setSendType(sendType); + couponSendQuery.setTenantId(tenantId); + couponSendQuery.setCouponId(0L); + couponSendQuery.setStatus(EnumCouponSendStatus.INVALID.getCode()); + return couponSendQuery ; + } + + @Override + public void reduceMerchantSend(Long id, Integer merchantRemain, Integer merchantSend ,Integer number) { + int num = wxCouponSendMapper.reduceMerchantSend(id, merchantRemain, merchantSend,number); + if (num == 0) { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } + } + + @Override + public void backMerchantRemainInventory(Long id, Integer merchantRemain, Integer merchantSend, Integer number) { + int num = wxCouponSendMapper.backMerchantSend(id, merchantRemain, merchantSend,number); + if (num == 0) { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } + } + + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void handSel(WxCouponSend wxCouponSend, WxCUser user) { + List couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); + if (CollectionUtils.isEmpty(couponSendList)) { + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + couponSendList.forEach(cs -> { + // 发放免费券 + WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(user.getId(), cs.getCouponId(), cs); + wxCouponActionLogService.addOne(user.getTenantId(), cs.getCouponId(), couponOrder.getId(), cs.getSendType(), cs.getId()); + if (couponOrder != null) { + sendMsgForSendCoupon(cs.getTenantId(), cs, couponOrder, user); + } + }); + } } 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 4c1a34adf..7ce5b17f4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -14,6 +14,7 @@ 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.BizMessageException; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; @@ -28,15 +29,12 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service -public class WxCouponServiceImpl implements WxCouponService { + public class WxCouponServiceImpl implements WxCouponService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired @@ -226,8 +224,12 @@ public class WxCouponServiceImpl implements WxCouponService { } if (StringUtils.isBlank(record.getCoverPicture())) { List strList = new ArrayList(); - strList.add(record.getCoverImg()); - record.setCoverPicture(JSONArray.toJSONString(strList)); + if (StringUtils.isNotBlank(record.getCoverImg())) { + strList.add(record.getCoverImg()); + } + if (strList.size() > 1) { + record.setCoverPicture(JSONArray.toJSONString(strList)); + } } if (record.getValidType() != null) { @@ -326,11 +328,14 @@ public class WxCouponServiceImpl implements WxCouponService { if(record.getInventory() != null && record.getRemainInventory() != null) { // 库存修改检查 WxCoupon oldCoupon = wxCouponMapper.selectByPrimaryKey(record.getId()); - if(oldCoupon.getRemainInventory() == record.getRemainInventory()) { + if (Objects.equals(oldCoupon.getRemainInventory(), record.getRemainInventory())) { // 库存未变, 不更新库存 record.setRemainInventory(null); record.setInventory(null); } else { + // TODO bug记录 + logger.info("设置库存:record.getRemainInventory {},oldCoupon.getRemainInventory {},oldCoupon.getInventory {}", + record.getRemainInventory(), oldCoupon.getRemainInventory(), oldCoupon.getInventory()); // 库存增加,要同时增加, 库存减少,要同时减少 record.setInventory(oldCoupon.getInventory() + record.getRemainInventory() - oldCoupon.getRemainInventory()); } @@ -642,4 +647,22 @@ public class WxCouponServiceImpl implements WxCouponService { } return null; } + + @Override + @Transactional(isolation= Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public void reduceRemainInventory(Long id, Integer remainInventory, Integer number) { + int num = wxCouponMapper.reduceInventory(id, number, remainInventory); + if (num == 0) { + throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); + } + } + + @Override + @Transactional(isolation= Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public void backRemainInventory(Long id, Integer remainInventory, Integer number) { + int num = wxCouponMapper.backInventory(id, number, remainInventory); + if (num == 0) { + throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + } + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java index e81e7d23b..5eada198e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java @@ -8,6 +8,7 @@ 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.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxCreditHistoryVo; import com.iformall.enums.*; @@ -16,9 +17,12 @@ import com.iformall.mapper.*; import com.iformall.service.ExcelService; import com.iformall.service.WxCreditHistoryService; import com.iformall.service.WxScoreRulesService; +import com.iformall.utils.CreditUtil; import com.iformall.utils.RedisLock; import lombok.extern.slf4j.Slf4j; 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 org.springframework.transaction.annotation.Propagation; @@ -28,13 +32,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; @Service @Slf4j public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired WxCreditHistoryMapper wxCreditHistoryMapper; @@ -66,6 +73,9 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { @Autowired ExcelService excelService; + @Autowired + WxLevelConfigMapper wxLevelConfigMapper; + @Override public void clearCreditByYear() { WxScoreRules wxScoreRules = new WxScoreRules(); @@ -85,6 +95,20 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { } + @Override + public ResultData getCreditSummary(WxCreditHistory wxCreditHistory) { + long totalCreditAmount = wxCreditHistoryMapper.getTotalCreditAmount(wxCreditHistory); + long incrementCreditAmount = wxCreditHistoryMapper.getIncrementCreditAmount(wxCreditHistory); + long decrementCreditAmount = wxCreditHistoryMapper.getDecrementCreditAmount(wxCreditHistory); + long peopleCount = wxCreditHistoryMapper.getPeopleCount(wxCreditHistory); + Map result = new HashMap<>(4); + result.put("totalCreditAmount", totalCreditAmount); + result.put("incrementCreditAmount", incrementCreditAmount); + result.put("decrementCreditAmount", decrementCreditAmount); + result.put("peopleCount", peopleCount); + return new ResultData(result); + } + @Override public PageInfo listAsPage(WxCreditHistory record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCreditHistoryMapper.findList(record)); @@ -189,21 +213,38 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { } else if (wxCUserBasicInfo != null && wxCUserBasicInfo.getCredit() != null && wxCUserBasicInfo.getCredit() > 0) { currentCreditAmount = wxCUserBasicInfo.getCredit(); } + record.setCreditAmount(currentCreditAmount); + record.setCreditNum(0); + + int creditChangeNumOrigin = creditIncrement(record); + int creditChangeNum = creditChangeNumOrigin ; + //是否参与了生日积分倍率 + boolean hasBirthDateCredit = false; + if (record.getCreditType().equals(EnumScoreType.CONSUMPTION.getCode()) || record.getCreditType().equals(EnumScoreType.SPEND_CREDIT.getCode())) { + //等级积分配置 + Integer levelScale = wxLevelConfigMapper.getScale(wxCUser.getTenantId(), wxCUser.getScore()); + try { + creditChangeNum = CreditUtil.calUserCredit(creditChangeNumOrigin, wxCUser, levelScale, wxCUserBasicInfo, wxScoreRulesService); + if (Objects.nonNull(CreditUtil.getIsBirthDayScale())) { + hasBirthDateCredit = true; + } + } finally { + CreditUtil.clear(); + } + } - //计算出需要新增或减少的积分 - 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); - } + Integer total = currentCreditAmount + 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()) { + if (!Objects.equals(record.getCreditType(),EnumScoreType.MEM_IMPORT.getCode())) { record.setCreditNum(creditChangeNum); - record.setCreditAmount(currentCreditAmount + creditChangeNum); + record.setCreditAmount(total); } if (record.getId() == null) { final IdWorker idWorker = IdWorker.get(); @@ -221,8 +262,13 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { WxCUserBasicInfo wxCUserBasicInfoNew = new WxCUserBasicInfo(); wxCUserBasicInfoNew.setId(wxCUserBasicInfo.getId()); wxCUserBasicInfoNew.setCredit(record.getCreditAmount()); + //如果享受了生日积分倍率,记录日期 + if (hasBirthDateCredit) { + wxCUserBasicInfoNew.setScoreDate(new Date()); + } wxCUserBasicInfoMapper.updateByPrimaryKeySelective(wxCUserBasicInfoNew); } + } else { //wxCreditHistoryMapper.updateByPrimaryKeySelective(record); } @@ -230,25 +276,75 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { return record; } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public int cancelCredit(WxCreditHistory record) { + int num = 0; + WxCreditHistory wxCreditHistory = null; + // 1. clear history + List creditHistories = wxCreditHistoryMapper.findList(record); + if (creditHistories.size() >= 1) { + wxCreditHistory = creditHistories.get(0); + } + if (wxCreditHistory != null) { + num = wxCreditHistoryMapper.deleteByPrimaryKey(wxCreditHistory.getId()); + if (num != 1) { + String errMessage = "删除积分历史出错"; + logger.error(errMessage + wxCreditHistory.toString()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), errMessage); + } + } else { + logger.info("未找到积分历史"); + return 0; + } + // 2. user + WxCUser wxCUser = wxCUserMapper.selectByPrimaryKey(record.getCUserId()); + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectByPrimaryKey(record.getCUserId()); + if (wxCUser != null) { + WxCUser wxCUserNew = new WxCUser(); + wxCUserNew.setId(wxCUser.getId()); + wxCUserNew.setCredit(wxCUser.getCredit() - wxCreditHistory.getCreditNum()); + wxCUserNew.setUpdateDate(new Date()); + wxCUserMapper.updateByPrimaryKeySelective(wxCUserNew); + } + if (wxCUserBasicInfo != null) { + WxCUserBasicInfo wxCUserBasicInfoNew = new WxCUserBasicInfo(); + wxCUserBasicInfoNew.setId(wxCUserBasicInfo.getId()); + wxCUserBasicInfoNew.setCredit(wxCUserBasicInfo.getCredit() - wxCreditHistory.getCreditNum()); + wxCUserBasicInfoNew.setUpdateDate(new Date()); + wxCUserBasicInfoMapper.updateByPrimaryKeySelective(wxCUserBasicInfoNew); + } + return num; + } + @Override public void deleteById(Long id) { wxCreditHistoryMapper.deleteByPrimaryKey(id); } @Override - public Map findByMerchantIdAndSpend(Long merchantId, String spendStr, String tenantId) { + public Map findByMerchantIdAndSpend(Long merchantId, String spendStr, Long userId,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.setBusinessId(wxMerchant.getBusinessId()); wxCreditHistory.setTenantId(tenantId); - int credit = 0; + int credit; + int creditNew = 0 ; if (StringUtils.isNotBlank(spendStr)) { wxCreditHistory.setSpend(new BigDecimal(spendStr).multiply(new BigDecimal(100)).intValue()); credit = payAddCredit(wxCreditHistory); + if (Objects.nonNull(userId)) { + WxCUser wxCUser = wxCUserMapper.selectByPrimaryKey(userId); + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectByPrimaryKey(userId); + Integer birthdayScale = wxLevelConfigMapper.getScale(wxCUser.getTenantId(), wxCUser.getScore()); + creditNew = CreditUtil.calUserCredit(credit, wxCUser, birthdayScale, wxCUserBasicInfo, wxScoreRulesService); + } else { + creditNew = credit; + } } - creditMap.put("credit", credit); + creditMap.put("credit", creditNew); } return creditMap; } @@ -256,6 +352,7 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { //根据积分类型计算"增加积分" private int creditIncrement(WxCreditHistory record) { + //查找C端用户的成长值 if (record.getCreditType() == EnumScoreType.LOGIN.getCode()) { return loginAddCredit(record); } @@ -357,7 +454,7 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND); } //根据商户id和花费金额计算需要新增的积分 - Map map = findByMerchantIdAndSpend(record.getMerchantId(), record.getSpendStr(), record.getTenantId()); + Map map = findByMerchantIdAndSpend(record.getMerchantId(), record.getSpendStr(), null,record.getTenantId()); return map.get("credit"); } @@ -402,7 +499,7 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { int baseScore = busRule.getInteger(WxScoreRules.SCORE); // 消费增长积分 // 4. 计算积分 - if(record.getSpend() >= priceCondition.intValue()) { + if (record.getSpend() >= priceCondition.intValue()) { Double dScoreT = Math.floor(record.getSpend() * 1.0D / priceCondition * baseScore); addCreditNumber = dScoreT.intValue(); log.info("CREDIT:" + busRule.toJSONString() + "\nAddCredit: " + addCreditNumber); @@ -410,7 +507,6 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { log.info("CREDIT:" + busRule.toJSONString() + "\nAddCredit: 0, not touch credit limit"); return 0; } - return addCreditNumber; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxDataRuleTargetServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxDataRuleTargetServiceImpl.java new file mode 100644 index 000000000..d9a2b3404 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxDataRuleTargetServiceImpl.java @@ -0,0 +1,48 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxDataRuleTarget; +import com.iformall.mapper.WxDataRuleTargetMapper; +import com.iformall.service.WxDataRuleTargetService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author gongbiao + */ +@Service +public class WxDataRuleTargetServiceImpl implements WxDataRuleTargetService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxDataRuleTargetMapper wxDataRuleTargetMapper; + + @Override + public PageInfo listAsPage(WxDataRuleTarget record, Integer pageIndex, Integer pageSize) { + return null; + } + + @Override + public List findList(WxDataRuleTarget record) { + return null; + } + + @Override + public List getList() { + List wxDataRuleTargets = wxDataRuleTargetMapper.selectAll(); + List targets = wxDataRuleTargets.stream() + .filter(t -> t.getParent().equals(0L)).collect(Collectors.toList()); + for (WxDataRuleTarget parentTarget : targets) { + List children = wxDataRuleTargets.stream() + .filter(t -> t.getParent().equals(parentTarget.getId())).collect(Collectors.toList()); + parentTarget.setChildren(children); + } + return targets; + } + +} 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 fc0f9ce71..40a873e62 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java @@ -86,6 +86,10 @@ public class WxFlowServiceImpl implements WxFlowService { private WxCouponService wxCouponService; @Autowired private WxRentContractMapper wxRentContractMapper; + @Autowired + private WxBillSettleMapper wxBillSettleMapper; + @Autowired + private WxBillSettleService wxBillSettleService; /** * 获取流程key @@ -199,9 +203,9 @@ public class WxFlowServiceImpl implements WxFlowService { wxPropertyContractMapper.updateApplyStatus(wxPropertyContract); } } else if (EnumFlowKey.BILL.getCode().equals(flowType) || EnumFlowKey.NEW_BILL_CHANGE.getCode().equals(flowType)) { + Integer billType = getIngeter(getVariableByKey(variables, "billType")); if(EnumRentContractAppStatus.FINISH.getCode().intValue() == applyStatus.intValue()) { //账单审批 - Integer billType = getIngeter(getVariableByKey(variables, "billType")); MallUserInfo user = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute("userSession"); Integer billUpdateType = getIngeter(getVariableByKey(variables, "billUpdateType")); Long oldPrice = Long.parseLong(getVariableByKey(variables, "oldPrice").toString()); @@ -217,6 +221,22 @@ public class WxFlowServiceImpl implements WxFlowService { wxBillAll.setNewPrice(newPrice); } wxBillAllService.updateReceivePay(wxBillAll, user); + }else if(EnumRentContractAppStatus.APPLYING.getCode().intValue() == applyStatus.intValue()) { + //账单修改金额,冻结 + List billList = new ArrayList<>(); + WxBillSettleBill settleBill = new WxBillSettleBill(); + settleBill.setBillType(billType); + settleBill.setBillId(businessId); + billList.add(settleBill); + wxBillSettleService.updateFreezeOrStatus(billList,EnumFreezeType.YES.getCode(),null); + }else if(EnumRentContractAppStatus.SETBACK.getCode().intValue() == applyStatus.intValue() || EnumRentContractAppStatus.REJECT.getCode().intValue() == applyStatus.intValue()) { + //账单修改金额,解冻 + List billList = new ArrayList<>(); + WxBillSettleBill settleBill = new WxBillSettleBill(); + settleBill.setBillType(billType); + settleBill.setBillId(businessId); + billList.add(settleBill); + wxBillSettleService.updateFreezeOrStatus(billList,EnumFreezeType.DEF.getCode(),null); } } else if (EnumFlowKey.NEW_COUPON_UPLINE.getCode().equals(flowType) || EnumFlowKey.NEW_CARD_UPLINE.getCode().equals(flowType) @@ -270,6 +290,23 @@ public class WxFlowServiceImpl implements WxFlowService { } wxCoupon.setApprovalType(operateType); wxCouponMapper.updateByPrimaryKeySelective(wxCoupon); + }else if(EnumFlowKey.SETTLE.getCode().equals(flowType)){ + WxBillSettle wxBillSettle = new WxBillSettle(); + wxBillSettle.setId(businessId); + wxBillSettle.setApplyStatus(applyStatus); + + //审批完成,账单解冻 + WxBillSettle settle = wxBillSettleService.getById(businessId); + if(EnumRentContractAppStatus.FINISH.getCode().intValue() == applyStatus.intValue()) { + wxBillSettle.setStatus(EnumSettleStatus.NOT_FINISH.getCode()); + wxBillSettleService.updateFreezeOrStatus(settle.getReceiveBillIds(), EnumFreezeType.DEF.getCode(),EnumBillRentStatus.PAID.getCode()); + wxBillSettleService.updateFreezeOrStatus(settle.getPayBillIds(),EnumFreezeType.DEF.getCode(),EnumBillRentStatus.PAID.getCode()); + }else if(EnumRentContractAppStatus.SETBACK.getCode().intValue() == applyStatus.intValue() || EnumRentContractAppStatus.REJECT.getCode().intValue() == applyStatus.intValue()) { + //解冻 + wxBillSettleService.updateFreezeOrStatus(settle.getReceiveBillIds(), EnumFreezeType.DEF.getCode(),EnumBillRentStatus.PAID.getCode()); + wxBillSettleService.updateFreezeOrStatus(settle.getPayBillIds(),EnumFreezeType.DEF.getCode(),EnumBillRentStatus.PAID.getCode()); + } + wxBillSettleMapper.updateByPrimaryKeySelective(wxBillSettle); } } @@ -390,6 +427,9 @@ public class WxFlowServiceImpl implements WxFlowService { dynamicContentMap.put("contract", businessId.toString()); }else if(isCoupon(flowType)){ wxMsgRecord.setModelType(EnumMsgModel.FLOW_C_ASSIGNEE_NODIFY.getCode()); + }else if(isSettle(flowType)){ + dynamicContentMap.put("bustype","结算单"); + dynamicContentMap.put("contract", businessId.toString()); } wxMsgRecord.setDynamicContentMap(dynamicContentMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); @@ -468,6 +508,9 @@ public class WxFlowServiceImpl implements WxFlowService { msgReplaceMap.put("contract", businessId.toString()); }else if(isCoupon(flowType)){ mailMsg.setModelType(EnumMailMsgModel.MAIL_C_ASSIGNEE_NODIFY.getCode()); + }else if(isSettle(flowType)){ + msgReplaceMap.put("bustype","结算单"); + msgReplaceMap.put("contract", businessId.toString()); } mailMsg.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); @@ -512,6 +555,12 @@ public class WxFlowServiceImpl implements WxFlowService { } return false; } + public boolean isSettle(Integer flowType){ + if(EnumFlowKey.SETTLE.getCode().equals(flowType)){ + return true; + } + return false; + } public String variablesToJson(List> variables){ HashMap map = new HashMap<>(); @@ -908,6 +957,9 @@ public class WxFlowServiceImpl implements WxFlowService { WxCoupon wxCoupon = this.wxCouponMapper.selectByPrimaryKey(businessId); msgReplaceMap.put("type",EnumCouponType.getEnum(wxCoupon.getType()).getMessage()); msgReplaceMap.put("name",wxCoupon.getTitle()); + }else if(isSettle(flowType)){ + msgReplaceMap.put("bustype","结算单"); + msgReplaceMap.put("contract", businessId.toString()); } wxMsgRecord.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); @@ -932,6 +984,9 @@ public class WxFlowServiceImpl implements WxFlowService { WxCoupon wxCoupon = this.wxCouponMapper.selectByPrimaryKey(businessId); msgReplaceMap.put("type",EnumCouponType.getEnum(wxCoupon.getType()).getMessage()); msgReplaceMap.put("name",wxCoupon.getTitle()); + }else if(isSettle(flowType)){ + msgReplaceMap.put("bustype","结算单"); + msgReplaceMap.put("contract", businessId.toString()); } mailMsg.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); @@ -966,6 +1021,9 @@ public class WxFlowServiceImpl implements WxFlowService { WxCoupon wxCoupon = this.wxCouponMapper.selectByPrimaryKey(businessId); msgReplaceMap.put("type",EnumCouponType.getEnum(wxCoupon.getType()).getMessage()); msgReplaceMap.put("name",wxCoupon.getTitle()); + }else if(isSettle(flowType)){ + msgReplaceMap.put("bustype","结算单"); + msgReplaceMap.put("contract", businessId.toString()); } wxMsgRecord.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); @@ -990,6 +1048,9 @@ public class WxFlowServiceImpl implements WxFlowService { WxCoupon wxCoupon = this.wxCouponMapper.selectByPrimaryKey(businessId); msgReplaceMap.put("type",EnumCouponType.getEnum(wxCoupon.getType()).getMessage()); msgReplaceMap.put("name",wxCoupon.getTitle()); + }else if(isSettle(flowType)){ + msgReplaceMap.put("bustype","结算单"); + msgReplaceMap.put("contract", businessId.toString()); } mailMsg.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); @@ -1113,6 +1174,9 @@ public class WxFlowServiceImpl implements WxFlowService { WxCoupon wxCoupon = this.wxCouponMapper.selectByPrimaryKey(businessId); msgReplaceMap.put("type",EnumCouponType.getEnum(wxCoupon.getType()).getMessage()); msgReplaceMap.put("name",wxCoupon.getTitle()); + }else if (isSettle(flowType)) { + msgReplaceMap.put("bustype", "结算单"); + msgReplaceMap.put("contract", businessId.toString()); } wxMsgRecord.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); @@ -1145,6 +1209,9 @@ public class WxFlowServiceImpl implements WxFlowService { WxCoupon wxCoupon = this.wxCouponMapper.selectByPrimaryKey(businessId); msgReplaceMap.put("type",EnumCouponType.getEnum(wxCoupon.getType()).getMessage()); msgReplaceMap.put("name",wxCoupon.getTitle()); + }else if(isSettle(flowType)){ + msgReplaceMap.put("bustype","结算单"); + msgReplaceMap.put("contract", businessId.toString()); } mailMsg.setDynamicContentMap(msgReplaceMap); mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); 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 d1338af57..90baa0c1e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java @@ -17,6 +17,7 @@ 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.Transactional; import java.util.ArrayList; import java.util.Date; @@ -49,6 +50,9 @@ public class WxLevelConfigServiceImpl implements WxLevelConfigService { l.setCount(0L); } + if(l.getScale()==null) { + l.setScale(WxLevelConfig.DEFAULT_SCALE); + } WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); dto.setTenantId(l.getTenantId()); dto.setLevelStartScore(l.getPoints()); @@ -130,6 +134,7 @@ public class WxLevelConfigServiceImpl implements WxLevelConfigService { } } + @Transactional(rollbackFor = {Exception.class}) @Override public void batchSave(String tenantId, List records) { final IdWorker idWorker = IdWorker.get(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java index 80e45f051..48ddd4fa0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallBuildingServiceImpl.java @@ -10,6 +10,7 @@ import com.iformall.domain.po.WxMallFloor; import com.iformall.mapper.WxMallBuildingMapper; import com.iformall.mapper.WxMallFloorMapper; import com.iformall.service.WxMallBuildingService; +import com.iformall.utils.Constant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -82,6 +83,12 @@ public class WxMallBuildingServiceImpl implements WxMallBuildingService { WxMallFloor tempf = new WxMallFloor(); tempf.setId(f.getId()); tempf.setFloorName(f.getFloorName()); + if (f.getTotalArea() != null) { + tempf.setTotalArea(f.getTotalArea()); + } + if (f.getOperatingArea() != null) { + tempf.setOperatingArea(f.getOperatingArea()); + } return tempf; }).collect(Collectors.toList()); building.setFloors(wxMallFloors); @@ -112,10 +119,24 @@ public class WxMallBuildingServiceImpl implements WxMallBuildingService { mallFloor.setTenantId(record.getTenantId()); mallFloor.setBuildingId(mallBuilding.getId()); mallFloor.setFloorName(floor); - mallFloor.setBackgroundImg("https://s3.cn-northwest-1.amazonaws.com.cn/iformall-net/789/9eea8e0e-15ea-4be0-a43d-31e2e9d8db8c.jpg"); + mallFloor.setBackgroundImg(Constant.floor_back_img); wxMallFloorMapper.insertSelective(mallFloor); } } + @Override + public void saveFloorArea(WxMallFloor record) { + WxMallFloor mallFloor = new WxMallFloor(); + mallFloor.setId(record.getId()); + mallFloor.setTenantId(record.getTenantId()); + if (record.getTotalArea() != null) { + mallFloor.setTotalArea(record.getTotalArea()); + } + if (record.getOperatingArea() != null) { + mallFloor.setOperatingArea(record.getOperatingArea()); + } + wxMallFloorMapper.updateByPrimaryKeySelective(mallFloor); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java index b1a9cce81..2b72a7b41 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java @@ -158,6 +158,8 @@ public class WxMallServiceImpl implements WxMallService { WxMallFloor tempf = new WxMallFloor(); tempf.setId(f.getId()); tempf.setFloorName(f.getFloorName()); + tempf.setTotalArea(f.getTotalArea()); + tempf.setOperatingArea(f.getOperatingArea()); return tempf; }).collect(Collectors.toList()); building.setFloors(wxMallFloors); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantPowerBillConfigServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantPowerBillConfigServiceImpl.java new file mode 100644 index 000000000..1324873b2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantPowerBillConfigServiceImpl.java @@ -0,0 +1,95 @@ +package com.iformall.service.impl; + +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.po.WxMerchant; +import com.iformall.domain.po.WxMerchantPowerBillConfig; +import com.iformall.domain.po.WxPowerBillAutoConfig; +import com.iformall.enums.EnumPowerBillBuildWay; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.mapper.WxMerchantPowerBillConfigMapper; +import com.iformall.mapper.WxPowerBillAutoConfigMapper; +import com.iformall.service.WxMerchantPowerBillConfigService; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; + +/** + * @author gongbiao + */ +@Service +@Slf4j +public class WxMerchantPowerBillConfigServiceImpl implements WxMerchantPowerBillConfigService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxMerchantPowerBillConfigMapper wxMerchantPowerBillConfigMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; + + @Autowired + WxPowerBillAutoConfigMapper wxPowerBillAutoConfigMapper; + + + + @Override + public PageInfo listAsPage(WxMerchantPowerBillConfig record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMerchantPowerBillConfigMapper.findList(record)); + } + + @Override + public WxMerchantPowerBillConfig getById(Long id) { + return wxMerchantPowerBillConfigMapper.selectByPrimaryKey(id); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData saveOrUpdate(WxMerchantPowerBillConfig config) { + + Date date = new Date(); + if (config.getId() == null) { + //按电表计费 从配置中拉取单价 + if (config.getBuildWay().equals(EnumPowerBillBuildWay.METER.getCode())) { + WxPowerBillAutoConfig wxPowerBillAutoConfig = new WxPowerBillAutoConfig(); + wxPowerBillAutoConfig.setTenantId(config.getTenantId()); + WxPowerBillAutoConfig powerBillAutoConfig = wxPowerBillAutoConfigMapper.selectOne(wxPowerBillAutoConfig); + if (powerBillAutoConfig == null) { + return new ResultData(ErrorCode.POWER_BILL_CONFIGU_NOT_FOUND); + } + config.setPrice(powerBillAutoConfig.getUnitPrice()); + } + WxMerchant wxMerchant = wxMerchantMapper.selectByPrimaryKey(config.getMerchantId()); + if (wxMerchant == null) { + return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); + } + config.setMerchantName(wxMerchant.getName()); + config.setMerchantType(wxMerchant.getType()); + final IdWorker idWorker = IdWorker.get(); + config.setId(idWorker.nextId()); + config.setCreateDate(date); + config.setUpdateDate(date); + wxMerchantPowerBillConfigMapper.insertSelective(config); + } else { + config.setUpdateDate(date); + wxMerchantPowerBillConfigMapper.updateByPrimaryKeySelective(config); + } + return new ResultData(); + } + + @Override + public void deleteById(Long id) { + wxMerchantPowerBillConfigMapper.deleteByPrimaryKey(id); + } + + +} 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 34aa746e4..0433ed647 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -622,7 +622,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { return wxMerchantMapper.selectOne(wxMerchant); } - + @Override public void exportData(WxMerchant wxMerchant, HttpServletRequest request, HttpServletResponse response) { List list = wxMerchantMapper.findList(wxMerchant); @@ -641,8 +641,16 @@ public class WxMerchantServiceImpl implements WxMerchantService { m.setRentalStartDate(lrc.get(0).getRentalStartDate()); m.setRentalEndDate(lrc.get(0).getRentalEndDate()); } - }); + //商铺信息 + m.setShopVos(wxShopMapper.findShopVoList(m.getId())); + + //店员信息 + WxMerchantBUser wxMerchantBUser = new WxMerchantBUser(); + wxMerchantBUser.setMerchantId(m.getId()); + wxMerchantBUser.setStatus(EnumMerchantBUserStatus.VALID.getCode()); + m.setUsers(wxMerchantBUserMapper.findList(wxMerchantBUser)); + }); excelService.exportExcel(list, null, "商户信息", WxMerchant.class, "商户信息数据.xlsx", response, false); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantTradeDailyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantTradeDailyServiceImpl.java index 1eafc07b2..5c0cc42bb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantTradeDailyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantTradeDailyServiceImpl.java @@ -12,6 +12,7 @@ import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.po.WxMerchantTradeDaily; import com.iformall.domain.vo.WxMerchantTradeDailyVo; import com.iformall.mapper.WxMerchantTradeDailyMapper; +import com.iformall.mapper.WxShopMapper; import com.iformall.service.*; import com.iformall.utils.DateUtils; import org.slf4j.Logger; @@ -44,6 +45,10 @@ public class WxMerchantTradeDailyServiceImpl implements WxMerchantTradeDailyServ @Autowired ExcelService excelService; + @Autowired + WxShopMapper wxShopMapper; + + @Override public PageInfo listAsPage(WxMerchantTradeDaily record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMerchantTradeDailyMapper.findList(record)); @@ -126,74 +131,65 @@ public class WxMerchantTradeDailyServiceImpl implements WxMerchantTradeDailyServ @Override - public PageInfo listAsPageVo(WxMerchantTradeDailyVo record, Integer pageIndex, Integer pageSize) { - return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMerchantTradeDailyMapper.findListVo(record)); + public PageInfo listAsPageVo(WxMerchantTradeDaily record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMerchantTradeDailyMapper.findVoList(record)); } @Override - public ResultData update(WxMerchantTradeDailyVo tradeDailyVo) { + public ResultData update(WxMerchantTradeDaily tradeDaily) { WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setMerchantId(tradeDailyVo.getMerchantId()); - wxMerchantTradeDaily.setReportDate(tradeDailyVo.getReportDate()); + wxMerchantTradeDaily.setMerchantId(tradeDaily.getMerchantId()); + wxMerchantTradeDaily.setReportDate(tradeDaily.getReportDate()); List tradeList = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); if (tradeList.size() > 0) { wxMerchantTradeDaily = tradeList.get(0); wxMerchantTradeDaily.setUpdateDate(new Date()); - wxMerchantTradeDaily.setTradeAmt(tradeDailyVo.getTradeAmt()+""); - wxMerchantTradeDaily.setTradeCount(tradeDailyVo.getTradeCount()); - wxMerchantTradeDaily.setProof(tradeDailyVo.getProof()); + wxMerchantTradeDaily.setTradeAmt(tradeDaily.getTradeAmt()+""); + wxMerchantTradeDaily.setTradeCount(tradeDaily.getTradeCount()); + wxMerchantTradeDaily.setProof(tradeDaily.getProof()); wxMerchantTradeDailyMapper.updateByPrimaryKeySelective(wxMerchantTradeDaily); return new ResultData(wxMerchantTradeDaily); } final IdWorker idWorker = IdWorker.get(); wxMerchantTradeDaily.setId(idWorker.nextId()); - wxMerchantTradeDaily.setTenantId(tradeDailyVo.getTenantId()); - wxMerchantTradeDaily.setMerchantId(tradeDailyVo.getMerchantId()); - wxMerchantTradeDaily.setTradeAmt(tradeDailyVo.getTradeAmt()+""); + wxMerchantTradeDaily.setTenantId(tradeDaily.getTenantId()); + wxMerchantTradeDaily.setMerchantId(tradeDaily.getMerchantId()); + wxMerchantTradeDaily.setTradeAmt(tradeDaily.getTradeAmt()+""); wxMerchantTradeDaily.setCreateDate(new Date()); wxMerchantTradeDaily.setUpdateDate(new Date()); - wxMerchantTradeDaily.setTradeCount(tradeDailyVo.getTradeCount()); - wxMerchantTradeDaily.setProof(tradeDailyVo.getProof()); + wxMerchantTradeDaily.setTradeCount(tradeDaily.getTradeCount()); + wxMerchantTradeDaily.setProof(tradeDaily.getProof()); wxMerchantTradeDailyMapper.insert(wxMerchantTradeDaily); return new ResultData(Result.SUCCESS); } @Override - public ResultData queryTradeDaily(WxMerchantTradeDailyVo tradeDailyVo) { + public ResultData queryTradeDaily(WxMerchantTradeDaily tradeDaily) { WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setMerchantId(tradeDailyVo.getMerchantId()); - wxMerchantTradeDaily.setReportDate(tradeDailyVo.getReportDate()); + wxMerchantTradeDaily.setMerchantId(tradeDaily.getMerchantId()); + wxMerchantTradeDaily.setReportDate(tradeDaily.getReportDate()); List tradeList = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); wxMerchantTradeDaily = tradeList.size() > 0 ? tradeList.get(0) : new WxMerchantTradeDaily(); return new ResultData(wxMerchantTradeDaily); } @Override - public void exportData(WxMerchantTradeDailyVo wxMerchantTradeDailyVo, HttpServletRequest request, HttpServletResponse response) { + public void exportData(WxMerchantTradeDaily tradeDaily, HttpServletRequest request, HttpServletResponse response) { //没有商户ID导出全部数据 - String name = "解单数据"; - if (wxMerchantTradeDailyVo.getMerchantId() == null) { - String title = "商户解单数据"; - List list = wxMerchantTradeDailyMapper.findListVo(wxMerchantTradeDailyVo); - list.parallelStream().forEach(t -> t.setReportDate(wxMerchantTradeDailyVo.getReportDate())); - excelService.exportExcel(list, title, name, WxMerchantTradeDailyVo.class, name + ".xlsx", response, false); - } else { - WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setTenantId(wxMerchantTradeDailyVo.getTenantId()); - wxMerchantTradeDaily.setMerchantId(wxMerchantTradeDailyVo.getMerchantId()); - String starttime = DateUtils.getTimeBefore(29, new Date()); - String endtime = DateUtils.getSystemTime("yyyy-MM-dd"); - wxMerchantTradeDaily.setStarttime(starttime); - wxMerchantTradeDaily.setEndtime(endtime); - List list = wxMerchantTradeDailyMapper.findListVoOfMonth(wxMerchantTradeDaily); - String title = "近30天解单数据"; - excelService.exportExcel(list, title, name, WxMerchantTradeDailyVo.class, name + ".xlsx", response, false); - } + List list = wxMerchantTradeDailyMapper.findVoList(tradeDaily); + + list.stream().forEach(m->{ + //商铺信息 + m.setShopVos(wxShopMapper.findShopVoList(m.getMerchantId())); + }); + //商铺信息 + + excelService.exportExcel(list, "商户解单数据", "商户解单数据", WxMerchantTradeDailyVo.class, "商户解单数据.xlsx", response, false); } @Override @@ -204,8 +200,11 @@ public class WxMerchantTradeDailyServiceImpl implements WxMerchantTradeDailyServ return new ResultData(ErrorCode.MERCHANT_INFO_NOT_FOUND); WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); wxMerchantTradeDaily.setMerchantId(merchantId); - - List recordList = wxMerchantTradeDailyMapper.findListVoOfMonth(wxMerchantTradeDaily); + String startTime = DateUtils.getTimeBefore(29, new Date()); + String endTime = DateUtils.getSystemTime("yyyy-MM-dd"); + wxMerchantTradeDaily.setStartTime(startTime); + wxMerchantTradeDaily.setEndTime(endTime); + List recordList = wxMerchantTradeDailyMapper.findVoList(wxMerchantTradeDaily); Map recordMap = recordList.stream().collect(Collectors.toMap(WxMerchantTradeDailyVo::getReportDate, r -> r)); List tradeList = new ArrayList<>(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java index 8ffc70894..e2f5cd181 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java @@ -8,10 +8,7 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxOrderGroupMarketing; -import com.iformall.enums.EnumAppType; -import com.iformall.enums.EnumCouponStatus; -import com.iformall.enums.EnumOrderStatus; -import com.iformall.enums.EnumRefundStatus; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.WxOrderGroupService; @@ -66,6 +63,9 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { @Autowired RedisLock redisLock; + @Autowired + WxCouponChannelMapper wxCouponChannelMapper; + @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) public void createOrderGroup(WxOrder order, WxCoupon wxCoupon) { @@ -227,10 +227,24 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) public ResultData toOrderGroup(WxOrderGroup wxOrderGroup) { + WxOrder orderTemp = wxOrderMapper.selectByPrimaryKey(wxOrderGroup.getOrderId()); + if (orderTemp == null) { + return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); + } + if (orderTemp.getOrderGroupId().equals(notOrderGroupId)) { + return new ResultData(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + WxCouponChannel wxCouponChannel = wxCouponChannelMapper.selectByPrimaryKey(orderTemp.getCouponChannelId()); + if (wxCouponChannel.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode())) { + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); + } WxOrder wxOrder = new WxOrder(); wxOrder.setTenantId(wxOrderGroup.getTenantId()); wxOrder.setId(wxOrderGroup.getOrderId()); List> couponOrderGroupList = wxOrderGroupMapper.queryOrderGroup(wxOrder); + if (couponOrderGroupList.isEmpty()) { + return new ResultData(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } Map couponOrderGroup = couponOrderGroupList.get(0); //商场地址 WxMall wxMall = new WxMall(); 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 126ddd808..8e9da9618 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -121,6 +121,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Autowired private WxMsgLimitService wxMsgLimitService; + @Override public PageInfo listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.findList(record)); @@ -188,6 +189,30 @@ public class WxOrderServiceImpl implements WxOrderService { return new ResultData(resultMap); } + /** + * 拼团数量 + * + * @param user + * @param counpon + * @return + */ + private int getUserOrderGroupCount(WxCUser user, WxCoupon counpon) { + // + Order 待支付 + try { + WxOrder orderQ = new WxOrder(); + orderQ.setTenantId(user.getTenantId()); + orderQ.setProductId(counpon.getId()); + orderQ.setType(EnumOrderType.COUPON.getCode()); + orderQ.setCUserId(user.getId()); + orderQ.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); + return wxOrderMapper.countList(orderQ); + } catch (Exception e) { + logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } + + } + /** * 用户购买的订单数量 @@ -302,6 +327,79 @@ public class WxOrderServiceImpl implements WxOrderService { } + /** + * 商户注券减库存 + * @param user + * @param coupon + * @param couponIdStr + * @param wxCouponSendVo + */ + private void stockMerchantReduce(WxCUser user, WxCoupon coupon, String couponIdStr, WxCouponSendVo wxCouponSendVo) { + long time = System.currentTimeMillis() + RedisLock.TIMEOUT; + String timeStr = String.valueOf(time); + // 库存加锁 + if (!redisLock.lock(couponIdStr, timeStr)) { + logger.error("此券被锁定, couponId: " + couponIdStr); + throw new MallinkException(ErrorCode.TOO_MANY_REQUEST); + } + + JSONObject jo = JSONObject.parseObject(wxCouponSendVo.getConditions()) ; + int merchantSend = jo.getIntValue(WxCouponSend.KEY_MERCHANT_SEND) ; + int merchantRemain = jo.getIntValue(WxCouponSend.KEY_MERCHANT_REMAIN); + + // 检查 优惠券 库存 + if (merchantRemain <= 0) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + logger.error("此券库存为0, couponId: " + couponIdStr); + throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY); + } + + int count = 0; + // 有价券 TODO 当前只支持系统券(免费券) +// if (coupon.getSalePrice() > 0) { +// // 检查是否未支付订单 +// try { +// count = getUserOrderCount(user, coupon); +// } catch (Exception e) { +// //解锁 +// redisLock.unlock(couponIdStr, timeStr); +// throw new MallinkException(ErrorCode.DB_FAIL); +// } +// if (count > 0) { +// //解锁 +// redisLock.unlock(couponIdStr, timeStr); +// logger.error("此券有未支付的订单, couponId: " + couponIdStr + ", count: " + count); +// throw new MallinkException(ErrorCode.ORDER_UNPAID); +// } +// } + // 检查用户已购买数量 + try { + count = getUserCouponOrderCount(user, coupon); + } catch (Exception e) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + throw new MallinkException(ErrorCode.DB_FAIL); + } + if (count >= coupon.getUseLimitQuantity()) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); + throw new MallinkException(ErrorCode.ORDER_IS_LIMITED); + } + + try { + // 减库存 + wxCouponSendService.reduceMerchantSend(wxCouponSendVo.getId(), merchantRemain,merchantSend,1); + } catch (RuntimeException e) { + logger.error("此券减库存失败, couponId: {}, error: {}", couponIdStr, e.getMessage()); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } finally { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + } + } + /** * 减库存 @@ -340,10 +438,25 @@ public class WxOrderServiceImpl implements WxOrderService { if (count > 0) { //解锁 redisLock.unlock(couponIdStr, timeStr); - logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); + logger.error("此券有未支付的订单, couponId: " + couponIdStr + ", count: " + count); throw new MallinkException(ErrorCode.ORDER_UNPAID); } } + //检查拼团中的数量 + try { + count = getUserOrderGroupCount(user, coupon); + } catch (Exception e) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + throw new MallinkException(ErrorCode.DB_FAIL); + } + if (count >= coupon.getUseLimitQuantity()) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); + throw new MallinkException(ErrorCode.ORDER_IS_LIMITED); + } + // 检查用户已购买数量 try { count = getUserCouponOrderCount(user, coupon); @@ -361,7 +474,7 @@ public class WxOrderServiceImpl implements WxOrderService { try { // 减库存 - wxCouponMapper.reduceInventory(coupon.getId(), 1); + wxCouponMapper.reduceInventory(coupon.getId(), 1, coupon.getRemainInventory()); } catch (RuntimeException e) { logger.error("此券减库存失败, couponId: " + couponIdStr); throw new MallinkException(ErrorCode.ORDER_IS_FAIL); @@ -612,7 +725,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.NESTED, readOnly = false, rollbackFor = {Exception.class}) - public WxCouponOrder sendFreeCouponToUser(Long userId, Long couponId) { + public WxCouponOrder sendFreeCouponToUser(Long userId, Long couponId,WxCouponSendVo wxCouponSendVo) { // check 用户状态 WxCUser user = null; try { @@ -641,8 +754,13 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.COUPON_IS_NOT_FREE); } - // 减库存操作 - stockReduce(user, coupon, couponIdStr); + if (Objects.nonNull(wxCouponSendVo) && Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSendVo.getSendType())) { + // 商户注券减库存操作 + stockMerchantReduce(user,coupon,couponIdStr,wxCouponSendVo); + } else { + // 减库存操作 + stockReduce(user, coupon, couponIdStr); + } int payment = coupon.getSalePrice(); @@ -877,7 +995,7 @@ public class WxOrderServiceImpl implements WxOrderService { WxCouponChannel wxCouponChannel = wxCouponChannelMapper.selectByPrimaryKey(updateOrder.getCouponChannelId()); creditHistory.setCouponId(wxCouponChannel.getCouponId()); } - creditHistory.setBusinessId(Long.valueOf(wxMerchant.getBusinessId())); + creditHistory.setBusinessId(wxMerchant.getBusinessId()); creditHistory.setSpend(updateOrder.getPayment()); creditHistory.setMerchantId(wxMerchant.getId()); wxCreditHistoryService.saveOrUpdate(creditHistory); @@ -1506,8 +1624,8 @@ public class WxOrderServiceImpl implements WxOrderService { record.setCUserId(user.getId()); record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); record.setDetail(bodyStr); - record.setCreateDate(curr); record.setUpdateDate(curr); + record.setCreateDate(curr); if (isPress) { // 初始砍价信息 record.setPressCurrentNum(0); 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 52ae8f1f4..1ca3f7167 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java @@ -13,6 +13,7 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.pay.*; import com.iformall.service.WxBillAllService; +import com.iformall.service.WxBillSettleService; import com.iformall.service.WxPayBillService; import com.iformall.utils.*; import org.apache.commons.lang3.StringUtils; @@ -51,6 +52,9 @@ public class WxPayBillServiceImpl implements WxPayBillService { @Autowired WxMerchantBUserMapper wxMerchantBUserMapper; + @Autowired + private WxBillSettleService wxBillSettleService; + JSONObject errorMap = JSON.parseObject("{" + "\"NOAUTH\":{\"detail\":\"商户无此接口权限\",\"reason\":\"商户未开通此接口权限\",\"resolution\":\"请商户前往申请此接口权限\"}," + "\"NOTENOUGH\":{\"detail\":\"余额不足\",\"reason\":\"用户帐号余额不足\",\"resolution\":\"用户帐号余额不足,请用户充值或更换支付卡后再支付\"}," + @@ -98,6 +102,14 @@ public class WxPayBillServiceImpl implements WxPayBillService { //获取账单数据 Map bill = bills.get(0); Long owe = (Long) bill.get("owe"); + Integer billTypeValue = ((Long) bill.get("billTypeValue")).intValue(); + + if(EnumBillType.SETTLE.getCode().equals(billTypeValue)){ + WxBillSettle wxBillSettle = wxBillSettleService.getById(record.getBillId()); + owe = wxBillSettle.getBalance(); + bill.put("owe",owe); + logger.info("wxBillSettle.balance:{}",owe); + } if (owe.longValue() <= 0) { logger.info("账单欠缴为0"); return new ResultData(ErrorCode.BILL_OWE_ZERO); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index b6dc241cd..578b45146 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -724,7 +724,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if ("MICROPAY".equals(tradeType)) { handleMicroOrderPaySuccess(record, transactionId, openId, sub_is_subscribe); } else { - handleOrderPaySuccess(record, transactionId, EnumPayFrom.QUERY.getCode()); + handleOrderPaySuccess(record, transactionId, EnumPayEndFrom.QUERY.getCode()); } return new ResultData(Result.SUCCESS, "订单支付成功", returnMap); } else if ("REFUND".equals(trade_state)) { @@ -1125,10 +1125,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { timeEnd = new Date(); } payOrder.setPayTimeEnd(timeEnd); - payOrder.setPayEndFrom(EnumPayFrom.CALLBACK.getCode()); + payOrder.setPayEndFrom(EnumPayEndFrom.CALLBACK.getCode()); // 处理支付成功 - handleOrderPaySuccess(payOrder, paramMap.get("transaction_id"), EnumPayFrom.CALLBACK.getCode()); + handleOrderPaySuccess(payOrder, paramMap.get("transaction_id"), EnumPayEndFrom.CALLBACK.getCode()); logger.info("notify order, wxpay checksign success, paramMap:{}, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); SortedMap resultMap = new TreeMap(); resultMap.put("return_code", "SUCCESS"); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPowerBillAutoConfigServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPowerBillAutoConfigServiceImpl.java new file mode 100644 index 000000000..83c0aa9e7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPowerBillAutoConfigServiceImpl.java @@ -0,0 +1,65 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxPowerBillAutoConfig; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.mapper.WxPowerBillAutoConfigMapper; +import com.iformall.service.WxPowerBillAutoConfigService; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; + +/** + * @author gongbiao + */ +@Service +@Slf4j +public class WxPowerBillAutoConfigServiceImpl implements WxPowerBillAutoConfigService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxPowerBillAutoConfigMapper wxPowerBillAutoConfigMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; + + + @Override + public PageInfo listAsPage(WxPowerBillAutoConfig record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPowerBillAutoConfigMapper.findList(record)); + } + + @Override + public WxPowerBillAutoConfig getConfig(String tenantId) { + WxPowerBillAutoConfig wxPowerBillAutoConfig = new WxPowerBillAutoConfig(); + wxPowerBillAutoConfig.setTenantId(tenantId); + return wxPowerBillAutoConfigMapper.selectOne(wxPowerBillAutoConfig); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData modify(WxPowerBillAutoConfig config) { + Date date = new Date(); + if (config.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + config.setId(idWorker.nextId()); + config.setCreateDate(date); + config.setUpdateDate(date); + wxPowerBillAutoConfigMapper.insertSelective(config); + } else { + config.setUpdateDate(date); + wxPowerBillAutoConfigMapper.updateByPrimaryKeySelective(config); + } + return new ResultData(config); + } + +} 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 5b9c0b9cd..ffc3f5063 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java @@ -560,12 +560,16 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService priceD = priceD + priceD * integers.get(i) / 10000.0; priceArr[i] = new BigDecimal(priceD).setScale(0, RoundingMode.HALF_EVEN).longValue(); } - } else { + } else if (wxPropertyContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { long priceD = price; for (int i = 1; i < size; i++) { priceD = priceD + integers.get(i); priceArr[i] = new BigDecimal(priceD).setScale(0, RoundingMode.HALF_EVEN).longValue(); } + } else { + for (int i = 1; i < size; i++) { + priceArr[i] = new BigDecimal(integers.get(i)).setScale(0, RoundingMode.HALF_EVEN).longValue(); + } } int month = 12; @@ -654,13 +658,13 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService long needpayAfter = 0; //同一天,算一天 if(sd.format(billTimeVo.getStartDate()).equals(sd.format(billTimeVo.getEndDate()))){ - needpayFront = getNeedPayMoney(wxPropertyContract,priceArrs[index-1],billTimeVo.getStartDate(),endDate,i,billTimeVoList.size(),saveDb); + needpayFront = getNeedPayMoney(wxPropertyContract,priceArrs[index-1],billTimeVo.getStartDate(),endDate,i,billTimeVoList.size(),saveDb,dayType,receivePeriod); }else{ if(billTimeVo.getStartDate().before(endDate)){ - needpayFront = getNeedPayMoney(wxPropertyContract, priceArrs[index - 1], billTimeVo.getStartDate(), DateUtils.getDaySet(endDate,Calendar.DATE,-1), i, billTimeVoList.size(), saveDb); - needpayAfter = getNeedPayMoney(wxPropertyContract, priceArrs[index], endDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb); + needpayFront = getNeedPayMoney(wxPropertyContract, priceArrs[index - 1], billTimeVo.getStartDate(), DateUtils.getDaySet(endDate,Calendar.DATE,-1), i, billTimeVoList.size(), saveDb,dayType,receivePeriod); + needpayAfter = getNeedPayMoney(wxPropertyContract, priceArrs[index], endDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb,dayType,receivePeriod); }else{ - needpayFront = getNeedPayMoney(wxPropertyContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb); + needpayFront = getNeedPayMoney(wxPropertyContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb,dayType,receivePeriod); } } needpay = needpayFront+needpayAfter; @@ -679,7 +683,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService //计算金额 if(!flag){ - needpay = getNeedPayMoney(wxPropertyContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(),saveDb); + needpay = getNeedPayMoney(wxPropertyContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(),saveDb,dayType,receivePeriod); } WxBillProperty wxBillProperty = new WxBillProperty(); @@ -723,7 +727,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService return resultMap; } - public long getNeedPayMoney(WxPropertyContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb){ + public long getNeedPayMoney(WxPropertyContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb,int dayType,int receivePeriod){ long needpay; //按日 if (wxRentContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){ @@ -739,7 +743,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService //生成金额直接计算 if(!saveDb){ - needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); return needpay; } @@ -754,7 +758,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService months++; needpay = new Double(months * priceD).longValue(); }else { - needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); } }else if(i == 0){//第一期 if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ @@ -763,7 +767,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService months++; needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); } }else{ if(isFirstDay(startDate)){ @@ -773,7 +777,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService } needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(WxRentContractServiceImpl.getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); } } }else{//中间 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 fad09b239..9c95294c4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -10,6 +10,7 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.BillTimeVo; +import com.iformall.domain.vo.RatioVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; @@ -247,6 +248,136 @@ public class WxRentContractServiceImpl implements WxRentContractService { return result; } + /** + * 计算金额 + * @param ratio + * @param revenueLong + * @return + */ + public static Long countPrice(Integer ratio,Long revenueLong,int timeType,int period,int from){ + BigDecimal hundred = new BigDecimal(100); + BigDecimal revenue = new BigDecimal(revenueLong == null ? 0 : revenueLong).divide(hundred); + BigDecimal payRatio = new BigDecimal(ratio == null ? 0 : ratio).divide(new BigDecimal(10000)); + BigDecimal price; + if(EnumMissTimeType.YEAR.getCode().equals(timeType) && EnumGetRatioFrom.RENT.getCode().equals(from)){ + price = revenue.multiply(new BigDecimal(12)).multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);;; + }else if(EnumMissTimeType.PERIOD.getCode().equals(timeType) && EnumGetRatioFrom.RENT.getCode().equals(from)){ + price = revenue.multiply(new BigDecimal(period)).multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN);; + }else{ + price = revenue.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); + } + return price.multiply(hundred).longValue(); + } + + /** + * 获取设置的跳点率 + * ["1000-1200:10",">3000:20"] + */ + public static RatioVo getPayRatio(int from,Long revenueLong,String busDiscountRatio,int timeType,long dayCount,int period){ + RatioVo ratioVo = new RatioVo(); + if(StringUtils.isBlank(busDiscountRatio)){ + return ratioVo; + } + List ratioList = JSONArray.parseArray(busDiscountRatio, String.class); + + ratioVo.setUseRatio("["); + + for (int i = 0; i < ratioList.size(); i++) { + BigDecimal revenue = new BigDecimal(revenueLong).divide(new BigDecimal(1000000)).setScale(4, RoundingMode.HALF_EVEN); + String e = ratioList.get(i); + String[] array = e.split(":"); + Integer ratio = Integer.parseInt(array[1]); + + if(e.indexOf("-") >= 0){ + String[] revenueArray = array[0].split("-"); + BigDecimal start = new BigDecimal(revenueArray[0]); + BigDecimal end = new BigDecimal(revenueArray[1]); + + //残年 (小金额 / 365 * 账单周期天数 )--(大金额 / 365 * 账单周期天数) + if(EnumMissTimeType.YEAR.getCode().equals(timeType)){ + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.multiply(new BigDecimal(12)); + } + }else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){ + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + start = new BigDecimal(revenueArray[0]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + }else if(EnumMissTimeType.PERIOD.getCode().equals(timeType)){ + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.multiply(new BigDecimal(period)); + } + } + + if (revenue.compareTo(start) >= 0 && revenue.compareTo(end)<= 0){ + ratioVo.setRatio(ratio); + ratioVo.setPrice(countPrice(ratioVo.getRatio(),revenueLong,timeType,period,from)); + ratioVo.setUseRatio(ratioVo.getUseRatio()+e+","); + break; + } + }else if(e.indexOf(">") >= 0){ + String[] revenueArray = array[0].split(">"); + BigDecimal end = new BigDecimal(revenueArray[1]); + + //残年 (小金额 / 365 * 账单周期天数 )--(大金额 / 365 * 账单周期天数) + if(EnumMissTimeType.YEAR.getCode().equals(timeType)){ + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.multiply(new BigDecimal(12)); + } + }else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){ + if(EnumGetRatioFrom.BILL.getCode().equals(from)) { + end = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + }else if(EnumMissTimeType.PERIOD.getCode().equals(timeType)){ + if(EnumGetRatioFrom.RENT.getCode().equals(from)) { + revenue = revenue.multiply(new BigDecimal(period)); + } + } + + if (revenue.compareTo(end) >= 0){ + ratioVo.setRatio(ratio); + ratioVo.setUseRatio(ratioVo.getUseRatio()+e+","); + + //计算超出部分 + BigDecimal payRatio = new BigDecimal(ratio).divide(new BigDecimal(10000)); + BigDecimal balance = revenue.subtract(end).multiply(new BigDecimal(1000000)); + BigDecimal price = balance.multiply(payRatio).setScale(2, RoundingMode.HALF_EVEN); + + array = ratioList.get(i-1).split(":"); + Integer frontatio = Integer.parseInt(array[1]); + revenueArray = array[0].split("-"); + + BigDecimal frontEnd = new BigDecimal(0); + if(EnumGetRatioFrom.BILL.getCode().equals(from)){ + if(EnumMissTimeType.YEAR.getCode().equals(timeType)){ + frontEnd = new BigDecimal(revenueArray[1]).divide(new BigDecimal(365), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + }else if(EnumMissTimeType.MONTH.getCode().equals(timeType)){ + frontEnd = new BigDecimal(revenueArray[1]).divide(new BigDecimal(30), 10, BigDecimal.ROUND_HALF_DOWN).multiply(new BigDecimal(dayCount)); + } + }else{ + frontEnd = new BigDecimal(revenueArray[1]); + } + + BigDecimal frontRatio = new BigDecimal(frontatio).divide(new BigDecimal(10000)); + BigDecimal frontPrice = frontEnd.multiply(new BigDecimal(1000000).multiply(frontRatio).setScale(2, RoundingMode.HALF_EVEN)); + + ratioVo.setPrice(price.add(frontPrice).longValue()); + break; + } + } + } + if(!"[".equals(ratioVo.getUseRatio())) { + ratioVo.setUseRatio(ratioVo.getUseRatio().substring(0, ratioVo.getUseRatio().lastIndexOf(",")) + "]"); + } + return ratioVo; + } @Transactional(rollbackFor = {Exception.class}) @Override @@ -271,11 +402,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { } if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { - BigDecimal hundred = new BigDecimal(100); - BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred); - 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).longValue()); + if(record.getRevenue() == null || record.getRevenue().longValue() <= 0){ + record.setPrice(0l); + }else{ + if(record.getPayRatio()!=null && record.getPayRatio().intValue() > 0){ + record.setPrice(countPrice(record.getPayRatio(),record.getRevenue(),EnumMissTimeType.OTHER.getCode(),record.getAdjustPeriod(),EnumGetRatioFrom.RENT.getCode())); + }else{ + int dayCount = record.getReceivePeriod() * 30; + RatioVo ratioVo = getPayRatio(EnumGetRatioFrom.RENT.getCode(),record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount,record.getReceivePeriod()); + //record.setPayRatio(ratioVo.getRatio()); + record.setPrice(ratioVo.getPrice()); + } + } } else { if (StringUtils.isNotEmpty(record.getPriceStr())) { record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).longValue()); @@ -487,6 +625,10 @@ public class WxRentContractServiceImpl implements WxRentContractService { if (wxRentContract == null) { return new ResultData(ErrorCode.RENT_CONTRACT_IS_NOT_FOUND); } + wxRentContract.setBusDiscountTime(record.getBusDiscountTime()); + wxRentContract.setBusDiscountRatio(record.getBusDiscountRatio()); + wxRentContract.setPayRatio(record.getPayRatio()); + int dayType = wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode()) ? Calendar.DAY_OF_MONTH : Calendar.MONTH; Calendar instance = Calendar.getInstance(); @@ -494,13 +636,16 @@ public class WxRentContractServiceImpl implements WxRentContractService { instance.add(dayType, record.getLease()); instance.add(Calendar.DAY_OF_MONTH, -1); - if(from != 1){ + if(!EnumFromType.SWITCH.getCode().equals(from)){ if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { - BigDecimal hundred = new BigDecimal(100); - BigDecimal revenue = new BigDecimal(record.getRevenue() == null ? 0 : record.getRevenue()).divide(hundred); - 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).longValue()); + if(record.getPayRatio()!=null && record.getPayRatio().intValue() > 0){ + record.setPrice(countPrice(record.getPayRatio(),record.getRevenue(),EnumMissTimeType.OTHER.getCode(),record.getAdjustPeriod(),from)); + }else{ + int dayCount = record.getReceivePeriod() * 30; + RatioVo ratioVo = getPayRatio(EnumGetRatioFrom.RENT.getCode(),record.getRevenue(),record.getBusDiscountRatio(),record.getBusDiscountTime(),dayCount,record.getReceivePeriod()); + //record.setPayRatio(ratioVo.getRatio()); + record.setPrice(ratioVo.getPrice()); + } } else { if (StringUtils.isNotEmpty(record.getPriceStr())) { record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).longValue()); @@ -850,7 +995,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { for (int i = 0; i < arraySize; i++) { JSONObject rentInfoObject = rentInfoArray.getJSONObject(i); String priceStr = rentInfoObject.getString("price"); - if(priceStr.equalsIgnoreCase("NaN")) { + if (priceStr.equalsIgnoreCase("NaN")) { priceStr = "0"; } priceArr[i] = new BigDecimal(priceStr).multiply(new BigDecimal(100)).longValue(); @@ -873,7 +1018,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { } priceList.add(priceArrs); } - } else { + return priceList; + } + if (wxRentContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { for (int i = 0; i < adjustRatioSize; i++) { long[] priceArrs = new long[arraySize]; for (int j = 0; j < arraySize; j++) { @@ -884,12 +1031,24 @@ public class WxRentContractServiceImpl implements WxRentContractService { } priceList.add(priceArrs); } + return priceList; + } + if (wxRentContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.CUSTOM.getCode())) { + for (int i = 0; i < adjustRatioSize; i++) { + long[] priceArrs = new long[arraySize]; + for (int j = 0; j < arraySize; j++) { + rentInfoObject = rentInfoArray.getJSONObject(j); + adjustRatio = rentInfoObject.getJSONArray("adjustRatio"); + BigDecimal price = new BigDecimal(adjustRatio.getString(i)).multiply(new BigDecimal(100)); + priceArrs[j] = price.setScale(0, RoundingMode.HALF_EVEN).longValue(); + } + priceList.add(priceArrs); + } } - return priceList; } - public List buildRentMonth(Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Long price, Integer isPreview,boolean saveDb) { + public List buildRentMonth(Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Long price, Integer isPreview, boolean saveDb) { int size = 0; long[] priceArrs = null; List> shopInfos = new ArrayList<>(); @@ -934,11 +1093,25 @@ public class WxRentContractServiceImpl implements WxRentContractService { priceD = priceD.add(divide); priceArrs[i] = priceD.setScale(0, RoundingMode.HALF_EVEN).longValue(); } - } else { + } else if (wxRentContract.getAdjustRatioWay().equals(EnumRentContractAdjustRatioWay.MONEY.getCode())) { for (int i = 1; i < size; i++) { priceD = priceD.add(new BigDecimal(integers.get(i))); priceArrs[i] = priceD.setScale(0, RoundingMode.HALF_EVEN).longValue(); } + } else { + for (int i = 1; i < size; i++) { + if (wxRentContract.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { + priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(12)).setScale(0, RoundingMode.HALF_EVEN).longValue(); + continue; + } + if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { + priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(wxRentContract.getReceivePeriod())).setScale(0, RoundingMode.HALF_EVEN).longValue(); + continue; + } + } + priceArrs[i] = new BigDecimal(integers.get(i)).setScale(0, RoundingMode.HALF_EVEN).longValue(); + } } } @@ -1047,13 +1220,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { long needpayAfter = 0; //同一天,算一天 if(sd.format(billTimeVo.getStartDate()).equals(sd.format(billTimeVo.getEndDate()))){ - needpayFront = getNeedPayMoney(wxRentContract,priceArrs[index-1],billTimeVo.getStartDate(),endDate,i,billTimeVoList.size(),saveDb); + needpayFront = getNeedPayMoney(wxRentContract,priceArrs[index-1],billTimeVo.getStartDate(),endDate,i,billTimeVoList.size(),saveDb,dayType,receivePeriod); }else{ if(billTimeVo.getStartDate().before(endDate)){ - needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], billTimeVo.getStartDate(), DateUtils.getDaySet(endDate,Calendar.DATE,-1), i, billTimeVoList.size(), saveDb); - needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], endDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb); + if (EnumRentContractType.RENT_BY_JOINT.getCode().equals(wxRentContract.getType()) && EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { + //设置跳点率为年周期 price不变 + needpayFront = priceArrs[index - 1]; + }else { + needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], billTimeVo.getStartDate(), DateUtils.getDaySet(endDate, Calendar.DATE, -1), i, billTimeVoList.size(), saveDb, dayType, receivePeriod); + needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], endDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb, dayType, receivePeriod); + } }else{ - needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb); + needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb,dayType,receivePeriod); } } needpay = needpayFront+needpayAfter; @@ -1072,7 +1250,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { //计算金额 if(!flag){ - needpay = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(),saveDb); + needpay = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(),saveDb,dayType,receivePeriod); } WxBillRent wxBillRent = new WxBillRent(); @@ -1116,7 +1294,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { return resultMap; } - public long getNeedPayMoney(WxRentContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb){ + public long getNeedPayMoney(WxRentContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb,int dayType,int receivePeriod){ long needpay; //按日 if (wxRentContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){ @@ -1124,31 +1302,44 @@ public class WxRentContractServiceImpl implements WxRentContractService { double needpayD = WxRentContractServiceImpl.getNeedPay(0,priceD,startDate,endDate); needpay = new Double(needpayD).longValue(); }else{ - //年 需要除12 Double priceD = new Double(price); - if(EnumPriceUnit.Y.getCode().equals(wxRentContract.getPriceUnit())){ - priceD = new Double(price)/12; + if (EnumRentContractType.RENT_BY_JOINT.getCode().equals(wxRentContract.getType())) { + //设置跳点率为年周期 price不变 + if (EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { + return priceD.longValue(); + } + //年或者设置跳点率为年周期 除12 + if (EnumMissTimeType.YEAR.getCode().equals(wxRentContract.getBusDiscountTime())) { + priceD = new Double(price) / 12; + } + }else{ + //年 除12 + if(EnumPriceUnit.Y.getCode().equals(wxRentContract.getPriceUnit())){ + priceD = new Double(price)/12; + } } + //生成金额直接计算 if(!saveDb){ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); return needpay; } SimpleDateFormat sdM = new SimpleDateFormat("yyyy-MM"); - SimpleDateFormat sdD = new SimpleDateFormat("d"); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); if(i == billTimeVoListSize - 1){//最后 //判断是否满足整月 - int startInt = Integer.parseInt(sdD.format(startDate)); - int endInt = Integer.parseInt(sdD.format(DateUtils.getDaySet(endDate,Calendar.DATE,1))); - if(startInt == endInt){ + Calendar instance = Calendar.getInstance(); + instance.setTime(startDate); + instance.add(dayType, receivePeriod); + instance.add(Calendar.DATE, -1); + if(sd.format(instance.getTime()).equals(sd.format(endDate))){ int months = getMonths(sdM.format(startDate)+"-01",sdM.format(DateUtils.getDaySet(endDate,Calendar.DATE,1))+"-01"); needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); } }else if(i == 0){//第一期 if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ @@ -1157,7 +1348,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { months++; needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); } }else{ if(isFirstDay(startDate)){ @@ -1167,7 +1358,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate)).longValue(); + needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod)).longValue(); } } }else{//中间 @@ -1421,7 +1612,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { String filepath = fmUploadDir; String filename = UUID.randomUUID() + ".docx"; String exportFileName = result.get("merchantName").toString() + "合同.docx"; - WordUtil.exportWord(templatePath, filepath, filename, exportFileName, result, request, response); + WordUtil.exportWord(templatePath, filepath, filename, exportFileName, result, request, response,null); } @Override @@ -1819,7 +2010,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { String ratio = new BigDecimal(integers.get(i)).divide(new BigDecimal(100)).toPlainString(); result.put("adjustRatio" + i, ratio); result.put("adjustPeriod" + i, wxRentContract.getAdjustPeriod()); - String payRatio = new BigDecimal(wxRentContract.getPayRatio()).divide(new BigDecimal(100)).toPlainString(); + Integer tempPayRatio = Optional.ofNullable(wxRentContract.getPayRatio()).orElse(0); + String payRatio = new BigDecimal(tempPayRatio).divide(new BigDecimal(100)).toPlainString(); result.put("payRatio" + i, payRatio); } @@ -1848,7 +2040,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { result.put("rentalEndDateDay" + count, enddate.substring(8)); result.put("adjustRatio" + count, wxRentContract.getAdjustRatio()); result.put("adjustPeriod" + count, wxRentContract.getAdjustPeriod()); - String payRatio = new BigDecimal(wxRentContract.getPayRatio()).divide(new BigDecimal(100)).toPlainString(); + Integer tempPayRatio = Optional.ofNullable(wxRentContract.getPayRatio()).orElse(0); + String payRatio = new BigDecimal(tempPayRatio).divide(new BigDecimal(100)).toPlainString(); result.put("payRatio" + count, payRatio); } @@ -2015,19 +2208,13 @@ public class WxRentContractServiceImpl implements WxRentContractService { return wxRentContractMapper.getShopType(wxRentContract); } - public static double getMonthNeedPay(Double price,Date start,Date end){ + public static double getMonthNeedPay(Double price,Date start,Date end,int dayType,int receivePeriod){ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdM = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdD = new SimpleDateFormat("d"); Double total = new Double(0); int[] diff; - System.out.println(sd.format(start)); - System.out.println(sd.format(end)); - if(sd.format(end).equals("2020-08-18")){ - System.out.println(); - } - //同一天 if(sd.format(start).equals(sd.format(end))){ int dayCount = DateUtils.getMonthDayCount(start); @@ -2044,10 +2231,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //判断是否满足整月 - int startInt = Integer.parseInt(sdD.format(start)); - int endInt = Integer.parseInt(sdD.format(DateUtils.getDaySet(end,Calendar.DATE,1))); - - if(startInt == endInt){ + Calendar instance = Calendar.getInstance(); + instance.setTime(start); + instance.add(dayType, receivePeriod); + instance.add(Calendar.DATE, -1); + if(sd.format(instance.getTime()).equals(sd.format(end))){ int months = getMonths(sdM.format(start)+"-01",sdM.format(DateUtils.getDaySet(end,Calendar.DATE,1))+"-01"); return (months) * price; } 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 e44559cc1..d076227ac 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java @@ -2,11 +2,13 @@ package com.iformall.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; 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.exception.MallinkException; import com.iformall.mapper.WxCUserBasicInfoMapper; import com.iformall.mapper.WxCUserMapper; import com.iformall.mapper.WxScoreHistoryMapper; @@ -65,11 +67,12 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { } else { // 如果成长值规则不存在,启用默认值 - final IdWorker idWorker = IdWorker.get(); - scoreRules.setId(idWorker.nextId()); - scoreRules.setRules(WxScoreRules.getScoreDefaultRules()); - - wxScoreRulesMapper.insertSelective(scoreRules); + this.saveOrUpdate(scoreRules); + //final IdWorker idWorker = IdWorker.get(); + //scoreRules.setId(idWorker.nextId()); + //scoreRules.setRules(WxScoreRules.getScoreDefaultRules()); + // + //wxScoreRulesMapper.insertSelective(scoreRules); } // 插入缓存 scoreRulesRedisTemplate.opsForValue().set(key, scoreRules); @@ -142,7 +145,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { final IdWorker idWorker = IdWorker.get(); scoreRules.setId(idWorker.nextId()); scoreRules.setRules(WxScoreRules.getCreditDefaultRules()); - + scoreRules.setScale(WxScoreRules.DEFAULT_SCALE); wxScoreRulesMapper.insertSelective(scoreRules); } @@ -185,6 +188,45 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { } } + @Override + public int cancelScore(WxScoreHistory record) { + int num = 0; + WxScoreHistory history = null; + // 1. delete history + List histories = wxScoreHistoryMapper.findList(record); + if (histories.size() >= 1) { + history = histories.get(0); + } + if (history != null) { + num = wxScoreHistoryMapper.deleteByPrimaryKey(history.getId()); + if (num != 1) { + logger.error("删除成长值历史出错"+ history.toString()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "删除成长值历史出错"); + } + } else { + logger.warn("未找到成长值历史"); + return 0; + } + // 2. user score back + WxCUser wxCUser = wxCUserMapper.selectByPrimaryKey(record.getCUserId()); + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectByPrimaryKey(record.getCUserId()); + if (wxCUser != null) { + WxCUser wxCUserNew = new WxCUser(); + wxCUserNew.setId(wxCUser.getId()); + wxCUserNew.setScore(wxCUser.getScore() - history.getScoreAmount()); + wxCUserNew.setUpdateDate(new Date()); + wxCUserMapper.updateByPrimaryKeySelective(wxCUserNew); + } + if (wxCUserBasicInfo != null) { + WxCUserBasicInfo wxCUserBasicInfoNew = new WxCUserBasicInfo(); + wxCUserBasicInfoNew.setId(wxCUserBasicInfo.getId()); + wxCUserBasicInfoNew.setPoins(wxCUserBasicInfo.getPoins()-history.getScoreAmount()); + wxCUserBasicInfoNew.setUpdateDate(new Date()); + wxCUserBasicInfoMapper.updateByPrimaryKeySelective(wxCUserBasicInfoNew); + } + return num; + } + private void updateScore(Long userId, int addedScoreNumber) { // 1. 获取cUser WxCUser wxCUser = wxCUserService.getById(userId); @@ -324,11 +366,15 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { Double dScoreT = Math.floor(order.getPayment() * 1.0D / priceCondition * baseScore); addScoreNumber = dScoreT.intValue(); logger.info("RULE:" + busRule.toJSONString() + "\nAddScore: " + addScoreNumber); + if (addScoreNumber == 0) { + return 0; + } } else { logger.info("RULE:" + busRule.toJSONString() + "\nAddScore: 0, not touch score limit"); return 0; } + // 5. 增长的成长值 updateScore(order.getCUserId(), addScoreNumber); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreValidityPeriodServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreValidityPeriodServiceImpl.java deleted file mode 100644 index fc1bf536b..000000000 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreValidityPeriodServiceImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.iformall.service.impl; - -import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; -import com.iformall.domain.po.WxScoreValidityPeriod; -import com.iformall.mapper.WxScoreValidityPeriodMapper; -import com.iformall.service.WxScoreValidityPeriodService; -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; - -@Service -public class WxScoreValidityPeriodServiceImpl implements WxScoreValidityPeriodService { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - WxScoreValidityPeriodMapper wxScoreValidityPeriodMapper; - - - @Override - public PageInfo listAsPage(WxScoreValidityPeriod record, Integer pageIndex, Integer pageSize) { - return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxScoreValidityPeriodMapper.findList(record)); - } - - @Override - public WxScoreValidityPeriod getById(Long id) { - return wxScoreValidityPeriodMapper.selectByPrimaryKey(id); - } - - @Override - public void saveOrUpdate(WxScoreValidityPeriod record) { - if (record.getId() == null) { - //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); - final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); - wxScoreValidityPeriodMapper.insertSelective(record); - } else { - wxScoreValidityPeriodMapper.updateByPrimaryKeySelective(record); - } - } - - @Override - public void deleteById(Long id) { - wxScoreValidityPeriodMapper.deleteByPrimaryKey(id); - } - - - - - - - - -} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxUserDataRuleServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxUserDataRuleServiceImpl.java new file mode 100644 index 000000000..3aca66254 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxUserDataRuleServiceImpl.java @@ -0,0 +1,51 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxUserDataRule; +import com.iformall.enums.EnumUserDataRuleType; +import com.iformall.mapper.WxUserDataRuleMapper; +import com.iformall.service.WxUserDataRuleService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * @author gongbiao + */ +@Service +public class WxUserDataRuleServiceImpl implements WxUserDataRuleService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxUserDataRuleMapper wxUserDataRuleMapper; + + @Override + public void modify(WxUserDataRule record) { + Date date = new Date(); + if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(date); + record.setUpdateTime(date); + wxUserDataRuleMapper.insertSelective(record); + } else { + if (EnumUserDataRuleType.ALL.getCode().equals(record.getType())) { + wxUserDataRuleMapper.deleteByPrimaryKey(record.getId()); + } else { + record.setUpdateTime(date); + wxUserDataRuleMapper.updateByPrimaryKeySelective(record); + } + + } + } + + @Override + public WxUserDataRule findByUserId(Long userId) { + WxUserDataRule wxUserDataRule = new WxUserDataRule(); + wxUserDataRule.setUserId(userId); + return wxUserDataRuleMapper.selectOne(wxUserDataRule); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/kw/KwMerchantMeterService.java b/mallinkService/src/main/java/com/iformall/service/kw/KwMerchantMeterService.java index a7858d6a2..aba7178de 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/KwMerchantMeterService.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/KwMerchantMeterService.java @@ -2,14 +2,12 @@ package com.iformall.service.kw; import com.github.pagehelper.PageInfo; -import com.iformall.common.ResultData; import com.iformall.domain.dto.KwMerchantMeterDataDto; import com.iformall.domain.dto.KwMerchantMeterDto; import com.iformall.domain.po.KwMerchantMeter; import com.iformall.domain.vo.KwMerchantMeterDataVo; import com.iformall.domain.vo.KwMerchantMeterVo; - - +import com.iformall.domain.vo.MerchantMeterVo; import java.util.List; @@ -55,4 +53,8 @@ public interface KwMerchantMeterService { int selectCount(KwMerchantMeter record); int unbind(Long meterId); int unbindBatch(Long merchantId); + + List getMerchantMeter(String tenantId); + + } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java b/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java index a97af8e07..cc12b9e4f 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java @@ -54,6 +54,8 @@ public interface KwMeterService { */ List findList(KwMeter record); + List findVoList(KwMeter record); + int selectCount(KwMeter record); int bind(Long boxId, Long meterId); diff --git a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMerchantMeterServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMerchantMeterServiceImpl.java index b7e9089ae..04b1b0f22 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMerchantMeterServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMerchantMeterServiceImpl.java @@ -2,18 +2,13 @@ package com.iformall.service.kw.impl; 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.KwMerchantMeterDataDto; import com.iformall.domain.dto.KwMerchantMeterDto; -import com.iformall.domain.dto.KwMeterDataDto; import com.iformall.domain.po.KwMerchantMeter; import com.iformall.domain.vo.KwMerchantMeterDataVo; import com.iformall.domain.vo.KwMerchantMeterVo; -import com.iformall.domain.vo.KwMeterDataVo; -import com.iformall.enums.EnumMerchantMeterStatus; -import com.iformall.exception.MallinkException; +import com.iformall.domain.vo.MerchantMeterVo; import com.iformall.mapper.KwMerchantMeterMapper; import com.iformall.mapper.KwMeterDataMapper; import com.iformall.service.kw.KwMerchantMeterService; @@ -22,7 +17,6 @@ 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; @@ -92,4 +86,9 @@ public class KwMerchantMeterServiceImpl implements KwMerchantMeterService { return kwMerchantMeterMapper.unbindBatch(merchantId); } + @Override + public List getMerchantMeter(String tenantId) { + return kwMerchantMeterMapper.getMerchantMeter(tenantId); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java index 222a20829..890d8a038 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java @@ -26,7 +26,7 @@ public class KwMeterServiceImpl implements KwMeterService { @Override public PageInfo listAsPage(KwMeter record, Integer pageIndex, Integer pageSize) { - return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> kwMeterMapper.findList(record)); + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> kwMeterMapper.findVoList(record)); } @Override @@ -69,6 +69,11 @@ public class KwMeterServiceImpl implements KwMeterService { return kwMeterMapper.findList(record); } + @Override + public List findVoList(KwMeter record) { + return kwMeterMapper.findVoList(record); + } + @Override public int selectCount(KwMeter record) { return kwMeterMapper.selectCount(record); diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java index c76b9ea04..22698983c 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java @@ -5,6 +5,7 @@ import com.iformall.domain.po.*; import com.iformall.domain.po.msg.BaseMsg; import com.iformall.domain.po.msg.FmInsideCouponVerifyMsg; import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; +import com.iformall.enums.EnumCouponVerifyType; import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.service.msg.MsgSendService; diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index 8daefc128..3447c5646 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -31,4 +31,7 @@ public class Constant { public static final String importMemPrev = "importmem:"; public static final String adminPage = "https://admin.malls.iformall.com"; + + + public static final String floor_back_img = "https://s3.cn-northwest-1.amazonaws.com.cn/iformall-net/789/9eea8e0e-15ea-4be0-a43d-31e2e9d8db8c.jpg"; } diff --git a/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java b/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java new file mode 100644 index 000000000..a8df0dddd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java @@ -0,0 +1,128 @@ +package com.iformall.utils; + +import com.iformall.domain.po.*; +import com.iformall.service.WxScoreRulesService; +import lombok.extern.slf4j.Slf4j; + +import java.math.BigDecimal; +import java.util.Objects; + +@Slf4j +public class CreditUtil { + + private static ThreadLocal isBirthDayScale = new ThreadLocal<>(); + + /** + * 计算用户积分 + * + * @param creditOrigin 原始积分 + * @param wxCUser C端用户信息 + * @param levelScaleConfig 等级倍率配置 + * @param wxCUserBasicInfo C端用户信息 + * @param wxScoreRulesService + * @return + */ + public static int calUserCredit(int creditOrigin, WxCUser wxCUser, Integer levelScaleConfig, WxCUserBasicInfo wxCUserBasicInfo, WxScoreRulesService wxScoreRulesService) { + if (Objects.isNull(wxCUser) || Objects.isNull(wxCUserBasicInfo)) { + return 0; + } + // 获取等级积分倍率, + int levelScale = getLevelScale(wxCUser, levelScaleConfig); + + // 获取生日积分倍率: + int birthdayScale = getBirthdayScale(wxCUserBasicInfo, wxScoreRulesService); + + int creditNew = new BigDecimal(creditOrigin) + .multiply(new BigDecimal(levelScale)) + .multiply(new BigDecimal(birthdayScale)) + .divide(new BigDecimal(WxScoreRules.DEFAULT_SCALE)) + .divide(new BigDecimal(WxLevelConfig.DEFAULT_SCALE) + , BigDecimal.ROUND_HALF_UP).intValue(); + log.info("积分倍率计算, 用户:{},成长值:{},等级积分倍率:{},生日积分倍率:{},原积分:{},新积分:{}", wxCUser.getId(), wxCUser.getScore(), levelScale, birthdayScale, creditOrigin, creditNew); + return creditNew; + } + + /** + * 根据会员信息获取等级积分倍率 + * + * @param wxCUser + * @param levelScaleConfig + * @return + */ + private static int getLevelScale(WxCUser wxCUser, Integer levelScaleConfig) { + int levelScale = WxLevelConfig.DEFAULT_SCALE; + Integer score = wxCUser.getScore(); + //积分不为空时进行计算 + if (Objects.nonNull(score)) { + //等级积分配置存在时进行计算 + if (Objects.nonNull(levelScaleConfig)) { + levelScale = levelScaleConfig; + } else { + //log.info("积分倍率计算:等级积分倍率配置=null"); + } + } + log.info("积分倍率计算:会员等级积分倍率配置={}", levelScale); + return levelScale; + } + + /** + * 根据会员信息获取倍率 + * + * @param wxCUserBasicInfo + * @param wxScoreRulesService + * @return + */ + private static int getBirthdayScale(WxCUserBasicInfo wxCUserBasicInfo, WxScoreRulesService wxScoreRulesService) { + int birthdayScale = WxScoreRules.DEFAULT_SCALE; + //判断是否生日当天,一年一天有效 + //没有发过生日券的用户或者没有享受过生日积分倍率的用户 + if(Objects.isNull(wxCUserBasicInfo.getScoreDate())) { + //设置过生日的用户 + if (Objects.nonNull(wxCUserBasicInfo.getBirthdate()) && DateUtils.birthdaysBetween(wxCUserBasicInfo.getBirthdate()) == 0) { + birthdayScale = getBirthdayScoreScale(wxCUserBasicInfo.getTenantId(), wxScoreRulesService); + } else { + log.info("积分倍率计算:未设置生日或生日条件未匹配={}", wxCUserBasicInfo.getScoreDate()); + } + } else { + //发过生日券的用户或者享受过生日积分倍率的用户 + if (Objects.nonNull(wxCUserBasicInfo.getScoreDate()) && DateUtils.birthdaysBetween(wxCUserBasicInfo.getScoreDate()) == 0) { + birthdayScale = getBirthdayScoreScale(wxCUserBasicInfo.getTenantId(), wxScoreRulesService); + } + } + + //配置了生日积分倍率,保存到上下文 + if (!Objects.equals(birthdayScale, WxScoreRules.DEFAULT_SCALE)) { + isBirthDayScale.set(wxCUserBasicInfo.getId()); + } + return birthdayScale; + } + + /** + * 获取生日积分倍率 + * + * @param tenantId + * @param wxScoreRulesService + * @return + */ + public static int getBirthdayScoreScale(String tenantId, WxScoreRulesService wxScoreRulesService) { + int birthdayScale = WxScoreRules.DEFAULT_SCALE; + WxScoreRules rules = wxScoreRulesService.getCreditRules(tenantId); + if (Objects.nonNull(rules) && Objects.nonNull(rules.getScale())) { + //规则存使用积分倍率 + birthdayScale = rules.getScale(); + } else { + //没有配置积分规则 + //log.info("积分倍率计算:会员生日积分倍率配置=null"); + } + log.info("会员生日积分倍率配置:{}", birthdayScale); + return birthdayScale; + } + + public static Long getIsBirthDayScale() { + return isBirthDayScale.get(); + } + + public static void clear() { + CreditUtil.isBirthDayScale.remove(); + } +} diff --git a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java index 7375a1ad1..ea224abba 100755 --- a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java @@ -5,15 +5,9 @@ import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.Period; -import java.time.ZoneId; +import java.time.*; import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 日期处理 @@ -34,6 +28,11 @@ public class DateUtils { return format(date, DATE_PATTERN); } + public static String formatDateTime(Date date) { + return format(date, DATE_TIME_PATTERN); + } + + public static String format(Date date, String pattern) { if(date != null){ SimpleDateFormat df = new SimpleDateFormat(pattern); @@ -140,6 +139,20 @@ public class DateUtils { } } + /** + * 时间比较 系统时间早于输入时间 + * + * @param date2 + * @return + */ + public static boolean isDateBefore(Date date2) { + if(Objects.isNull(date2)) return false ; + // 获得系统时间 + Date date1 = new Date(); + DateFormat df = DateFormat.getDateTimeInstance(); + return date1.before(date2); + } + /** * 系统时间晚于输入时间 * @@ -1080,6 +1093,20 @@ public class DateUtils { return 0; } + /** + * 日期距离今天还有几天 + * @param date + * @return <0:已过n天;=0:当天 ;>0 n天前 + */ + public static int birthdaysBetween(Date date) { + Date today = new Date() ; + date.setYear(today.getYear()); + Calendar todayCal = Calendar.getInstance(); + Calendar birthdayCal = Calendar.getInstance(); + birthdayCal.setTime(date); + return birthdayCal.get(Calendar.DAY_OF_YEAR) - todayCal.get(Calendar.DAY_OF_YEAR) ; + } + /** * 获取指定日期n个月后的第一天 * @return @@ -1223,14 +1250,4 @@ public class DateUtils { LocalDate startLocalDate = LocalDate.of(startYear,startMonth,startDay); return startLocalDate.until(endLocalDate, ChronoUnit.DAYS); } - - public static void main(String[] args) throws Exception { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String feeTimeStr = "2019-08-07 12:44:41"; - String oldFeeTimeStr = "2019-08-07 12:44:28"; - Date feeTime = dateFormat.parse(feeTimeStr); - Date oldFeeTime = dateFormat.parse(oldFeeTimeStr); - System.out.println(DateUtils.isInDate15Mins(feeTime, oldFeeTime)); - } - } diff --git a/mallinkService/src/main/java/com/iformall/utils/WordUtil.java b/mallinkService/src/main/java/com/iformall/utils/WordUtil.java index 1439defc9..e37f45469 100644 --- a/mallinkService/src/main/java/com/iformall/utils/WordUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/WordUtil.java @@ -1,17 +1,18 @@ package com.iformall.utils; import cn.afterturn.easypoi.word.WordExportUtil; +import com.iformall.domain.vo.WordDocTableVo; import org.apache.commons.io.FileUtils; -import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; +import java.util.List; import java.util.Map; public class WordUtil { @@ -32,7 +33,7 @@ public class WordUtil { * @param request HttpServletRequest * @param response HttpServletResponse */ - public static void exportWord(String templatePath, String temDir, String fileName, String exportFileName, Map params, HttpServletRequest request, HttpServletResponse response) { + public static void exportWord(String templatePath, String temDir, String fileName, String exportFileName, Map params, HttpServletRequest request, HttpServletResponse response, WordDocTableVo wordDocTableVo) { Assert.notNull(templatePath, "模板路径不能为空"); Assert.notNull(temDir, "临时文件路径不能为空"); Assert.notNull(exportFileName, "导出文件名不能为空"); @@ -54,6 +55,9 @@ public class WordUtil { XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); + if(wordDocTableVo != null) + insertValueToTable(doc,wordDocTableVo); + String tmpPath = temDir + fileName; FileOutputStream fos = new FileOutputStream(tmpPath); doc.write(fos); @@ -81,7 +85,64 @@ public class WordUtil { } catch (Exception e) { e.printStackTrace(); } + } + /** + * 循环填充表格内容 + * @param xwpfDocument + * @throws Exception + */ + public static void insertValueToTable(XWPFDocument xwpfDocument, WordDocTableVo wordDocTableVo) throws Exception { + List tableList = xwpfDocument.getTables(); + XWPFTable table = tableList.get(wordDocTableVo.getTableIndex()); + + addOrRemoveRow(table,wordDocTableVo.getParams().size(),wordDocTableVo.getRowIndex()); + + int row = wordDocTableVo.getRowIndex(); + for (List stringList : wordDocTableVo.getParams()) { + row++; + for (int i = 0; i < stringList.size(); i++) { + table.getRow(row).getCell(i).setText(stringList.get(i)); + } + } + table.removeRow(wordDocTableVo.getRowIndex()); } + /* + * @param table 对应表格 + * @param add 增加或删除行数 if add>0 增加行 add<0 删除行 + * @param fromRow 添加开始行位置(fromRow-1是模版行) + */ + public static void addOrRemoveRow(XWPFTable table, int add,int fromRow) { + XWPFTableRow row = table.getRow(fromRow-1); + if(add>0) { + while(add>0) { + copyPro(row,table.insertNewTableRow(fromRow)); + add--; + } + }else { + while(add<0) { + table.removeRow(fromRow-1); + add++; + } + } + } + + public static void copyPro(XWPFTableRow sourceRow,XWPFTableRow targetRow) { + //复制行属性 + targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr()); + List cellList = sourceRow.getTableCells(); + if(null==cellList) { + return ; + } + //添加列、复制列以及列中段落属性 + XWPFTableCell targetCell = null; + for(XWPFTableCell sourceCell:cellList) { + targetCell = targetRow.addNewTableCell(); + //列属性 + targetCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr()); + //段落属性 + targetCell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr()); + } + } } \ No newline at end of file diff --git a/mallinkService/src/main/resources/contract-word-template/settle.docx b/mallinkService/src/main/resources/contract-word-template/settle.docx new file mode 100644 index 000000000..6739c66a2 Binary files /dev/null and b/mallinkService/src/main/resources/contract-word-template/settle.docx differ diff --git a/mallinkService/src/main/resources/mapper/KwMerchantMeterMapper.xml b/mallinkService/src/main/resources/mapper/KwMerchantMeterMapper.xml index b66e6e213..5860f896f 100644 --- a/mallinkService/src/main/resources/mapper/KwMerchantMeterMapper.xml +++ b/mallinkService/src/main/resources/mapper/KwMerchantMeterMapper.xml @@ -267,6 +267,18 @@ where status = 0 and `meter_id` = #{meterId} - + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/KwMeterMapper.xml b/mallinkService/src/main/resources/mapper/KwMeterMapper.xml index 6d85a1621..aaca8f973 100644 --- a/mallinkService/src/main/resources/mapper/KwMeterMapper.xml +++ b/mallinkService/src/main/resources/mapper/KwMeterMapper.xml @@ -17,71 +17,76 @@ + + + - `id`,`tenant_id`,`address`,`brand`,`model`,`place`,`last_online_time`,`total_power`,`online_status`,`config`,`create_time`,`update_time`,`box_id`,`status`,`bind_status` + `kw_meter`.`id`,`kw_meter`.`tenant_id`,`kw_meter`.`address`,`kw_meter`.`brand`,`kw_meter`.`model`, + `kw_meter`.`place`,`kw_meter`.`last_online_time`,`kw_meter`.`total_power`,`kw_meter`.`online_status`, + `kw_meter`.`config`,`kw_meter`.`create_time`,`kw_meter`.`update_time`,`kw_meter`.`box_id`,`kw_meter`.`status`,`kw_meter`.`bind_status` where 1 = 1 - and `id` = #{id} + and `kw_meter`.`id` = #{id} - and `tenant_id` = #{tenantId} + and `kw_meter`.`tenant_id` = #{tenantId} - and `address` like concat('%', #{address},'%') + and `kw_meter`.`address` like concat('%', #{address},'%') - and `brand` like concat('%', #{brand},'%') + and `kw_meter`.`brand` like concat('%', #{brand},'%') - and `place` like concat('%', #{place},'%') + and `kw_meter`.`place` like concat('%', #{place},'%') - and `model` = #{model} + and `kw_meter`.`model` = #{model} - and `online_status` = #{onlineStatus} + and `kw_meter`.`online_status` = #{onlineStatus} - and `box_id` = #{boxId} + and `kw_meter`.`box_id` = #{boxId} - and `status` = #{status} + and `kw_meter`.`status` = #{status} - and `bind_status` = #{bindStatus} + and `kw_meter`.`bind_status` = #{bindStatus} - and `id` not in (select meter_id from kw_merchant_meter where status = 0) + and `kw_meter`.`id` not in (select meter_id from kw_merchant_meter where status = 0) - and `id` in (select meter_id from kw_merchant_meter where status = 0) + and `kw_meter`.`id` in (select meter_id from kw_merchant_meter where status = 0) - and id in + and `kw_meter`.id in #{idItem} order by ${sortColumns} - + + + + update kw_meter set diff --git a/mallinkService/src/main/resources/mapper/PosActionLogMapper.xml b/mallinkService/src/main/resources/mapper/PosActionLogMapper.xml new file mode 100644 index 000000000..b4e7407b0 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/PosActionLogMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + `id`,`url`,`ip`,`method`,`start_time`,`end_time`,`cost_time`,`req_json`,`res_json` + + + + where 1 = 1 + + and `id` = #{id} + + + and `url` like concat('%', #{url},'%') + + + and `ip` like concat('%', #{ip},'%') + + + and `method` like concat('%', #{method},'%') + + + and `start_time` = #{startTime} + + + and `end_time` = #{endTime} + + + and `cost_time` = #{costTime} + + + and `req_json` like concat('%', #{reqJson},'%') + + + and `res_json` like concat('%', #{resJson},'%') + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/PosCouponOrderVerifyMapper.xml b/mallinkService/src/main/resources/mapper/PosCouponOrderVerifyMapper.xml new file mode 100644 index 000000000..7de6dec42 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/PosCouponOrderVerifyMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + `id`,`tenant_id`,`coupon_order_id`,`pos_order_id`,`state` + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` like concat('%', #{tenantId},'%') + + + and `coupon_order_id` = #{couponOrderId} + + + and `pos_order_id` = #{posOrderId} + + + and `state` = #{state} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/PosMallConfigMapper.xml b/mallinkService/src/main/resources/mapper/PosMallConfigMapper.xml new file mode 100644 index 000000000..32a58c7ab --- /dev/null +++ b/mallinkService/src/main/resources/mapper/PosMallConfigMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + `id`,`tenant_id`,`discount`,`coupon`,`card`,`create_date`,`update_date` + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `discount` = #{discount} + + + and `coupon` = #{coupon} + + + and `card` = #{card} + + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/PosOrderMapper.xml b/mallinkService/src/main/resources/mapper/PosOrderMapper.xml new file mode 100644 index 000000000..b3663fc51 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/PosOrderMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`pos_order_no`,`type`,`order_status`,`bu_user_id`,`create_date`,`update_date` + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` like concat('%', #{tenantId},'%') + + + and `pos_order_no` like concat('%', #{posOrderNo},'%') + + + and `type` = #{type} + + + and `order_status` = #{orderStatus} + + + and `bu_user_id` = #{buUserId} + + + and `payment_type` = #{paymentType} + + + and `payment` = #{payment} + + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/PosPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/PosPayOrderMapper.xml new file mode 100644 index 000000000..8b4b28166 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/PosPayOrderMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`create_time`,`update_time`,`order_id`,`bu_user_id`,`type`,`pay_from`,`pay_amount`,`pay_time_start`,`pay_time_end`,`prepay_id`,`transaction_id`,`pay_vendor`,`pay_order_no`,`pay_order_status`,`share`,`share_amount`,`rate_amount`,`fail_reason`,`auth_code`,`open_id`,`pay_end_from` + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` like concat('%', #{tenantId},'%') + + + and `create_time` = #{createTime} + + + and `update_time` = #{updateTime} + + + and `order_id` = #{orderId} + + + and `bu_user_id` = #{buUserId} + + + and `type` = #{type} + + + and `pay_from` = #{payFrom} + + + and `pay_amount` = #{payAmount} + + + and `pay_time_start` = #{payTimeStart} + + + and `pay_time_end` = #{payTimeEnd} + + + and `prepay_id` like concat('%', #{prepayId},'%') + + + and `transaction_id` like concat('%', #{transactionId},'%') + + + and `pay_vendor` = #{payVendor} + + + and `pay_order_no` like concat('%', #{payOrderNo},'%') + + + and `pay_order_status` = #{payOrderStatus} + + + and `share` = #{share} + + + and `share_amount` = #{shareAmount} + + + and `rate_amount` = #{rateAmount} + + + and `fail_reason` like concat('%', #{failReason},'%') + + + and `auth_code` like concat('%', #{authCode},'%') + + + and `open_id` like concat('%', #{openId},'%') + + + and `pay_end_from` = #{payEndFrom} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/ThDevInfoMapper.xml b/mallinkService/src/main/resources/mapper/ThDevInfoMapper.xml new file mode 100644 index 000000000..1962ae687 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/ThDevInfoMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + `id`,`dev_id`,`name`,`type`,`req_key`,`res_key`,`state`,`create_date`,`update_date` + + + + where 1 = 1 + + and `id` = #{id} + + + and `dev_id` like concat('%', #{devId},'%') + + + and `name` like concat('%', #{name},'%') + + + and `type` = #{type} + + + and `req_key` like concat('%', #{reqKey},'%') + + + and `res_key` like concat('%', #{resKey},'%') + + + and `state` = #{state} + + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxActivityMapper.xml b/mallinkService/src/main/resources/mapper/WxActivityMapper.xml index a4d458460..9cc0714c5 100644 --- a/mallinkService/src/main/resources/mapper/WxActivityMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxActivityMapper.xml @@ -25,13 +25,14 @@ + `id`,`tenant_id`,`cover_img`,`title`,`sub_title`,`detail`,`html`,`person_limit`,`activity_start_time`,`activity_end_time`, `use_credit`,`credit`,`type`,`status`,`start_time`,`end_time`,`question`,`is_expired`,`create_time`,`update_time`,`use_img`, - `img_detail`,`send_msg` + `img_detail`,`send_msg`,`selectques` diff --git a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml index 15802a180..f17c02359 100644 --- a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml @@ -35,7 +35,11 @@ - + + + + + @@ -48,42 +52,47 @@ ,bill.receive_date receiveDate, bill.pay_date payDate,expired_day 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,bill.comments + s.shop_number shopNumber, s.manager, s.manager_phone managerPhone,bill.shop_info + shopInfo,bill.comments,bill.price_detail,updatetime,bill.freeze 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,case when shop_info is null then '[]' else shop_info end shop_info,comments + bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime, + endtime,rent_shop_type,case when shop_info is null then '[]' else shop_info end shop_info,comments,'' + price_detail,updatetime,freeze from wx_bill_rent where tenant_id=#{tenantId} and is_preview = 0 union all 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,shop_info,NULL comments from wx_bill_rent_deposit where tenant_id=#{tenantId} + bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime, + endtime,rent_shop_type,shop_info,NULL comments,'' price_detail,updatetime,freeze from wx_bill_rent_deposit where + tenant_id=#{tenantId} union all 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,case when shop_info is null then '[]' else shop_info end shop_info,comments + bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime, + endtime,rent_shop_type,case when shop_info is null then '[]' else shop_info end shop_info,comments,'' + price_detail,updatetime,freeze from wx_bill_property where tenant_id=#{tenantId} and is_preview = 0 union all 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,shop_info,NULL comments from wx_bill_property_deposit where tenant_id=#{tenantId} + bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime, + endtime,rent_shop_type,shop_info,NULL comments,'' price_detail,updatetime,freeze from wx_bill_property_deposit where + tenant_id=#{tenantId} union all select id,merchant_id,shop_id,tenant_id,case when type=1 then '水费' when type=2 then '电费' else '空调费' end name, case when type=1 then 5 when type=2 then 6 else 9 end bill_type_value, case when type=1 then '水费' when type=2 then '电费' else '空调费' end bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, - rent_shop_type,'[]' shop_info,NULL comments + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime, + rent_shop_type,'[]' shop_info, NULL comments,price_detail,updatetime,freeze from wx_bill_daily where tenant_id=#{tenantId} union all select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,concat('其他费用-',name) as bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, - rent_shop_type,'[]' shop_info,comments + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime, + rent_shop_type,'[]' shop_info,comments,'' price_detail,updatetime,freeze from wx_bill_other where tenant_id=#{tenantId} union all select id,merchant_id,shop_id,tenant_id,comments as name,8 bill_type_value,concat('其他押金-',comments) as bill_type,0 as - need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime, - rent_shop_type,'[]' shop_info,comments + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime, + rent_shop_type,'[]' shop_info,comments,'' price_detail,updatetime,freeze from wx_bill_other_deposit where tenant_id=#{tenantId} ) bill left join wx_merchant m on bill.merchant_id=m.id @@ -99,7 +108,7 @@ and bill.bill_type_value = #{billTypeValue} and bill.`status` = #{status} and bill.rent_shop_type = #{rentShopType} - + and bill.receive_date between #{starttime} and #{endtime} @@ -111,6 +120,15 @@ #{status} + + + and bill.`bill_type_value` in + + #{type} + + + and bill.freeze = #{freeze} + order by ${sortColumns} order by bill.receive_date,bill.id desc,bill.merchant_id,bill.status @@ -223,52 +241,147 @@ @@ -619,5 +732,123 @@ order by totalOwe desc + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml b/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml index 91b943e01..6978678fc 100644 --- a/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillDailyMapper.xml @@ -26,13 +26,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`,`pay_way`,`price_detail`,`starttime`,`endtime` + `rent_shop_type`,`pay_way`,`price_detail`,`starttime`,`endtime`,freeze,build_way @@ -55,6 +57,8 @@ and `type` = #{type} and `rent_shop_type` = #{rentShopType} and `pay_way` = #{payWay} + and `build_way` = #{buildWay} + and id in @@ -73,10 +77,11 @@ select br.`id`,br.`receive_pay`,br.`pay`,br.`receive_date`,br.`pay_date`,br.`createtime`,br.`expired_day` , case when br.status=1 then br.owe else 0 end owe,br.`status`,m.`name` merchant_name,s.shop_number, br.`updatetime`,br.`merchant_id`,br.shop_id,br.type,br.`rent_shop_type`,br.pay_way,br.price_detail, - br.`starttime`,br.`endtime` + br.`starttime`,br.`endtime`,br.`build_way`,br.freeze from wx_bill_daily br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id + and br.`freeze` = #{freeze} and br.`id` = #{id} and br.`merchant_id` = #{merchantId} and m.`name` like concat('%',#{merchantName},'%') @@ -87,6 +92,8 @@ and br.`pay_way` = #{payWay} and br.`receive_date` between #{starttime} and #{endtime} + and br.`build_way` = #{buildWay} + diff --git a/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml b/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml index 51c4925b6..f9b23b9a6 100644 --- a/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml @@ -27,13 +27,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`,`pay_way`,`starttime`,`endtime` + `rent_shop_type`,`return_price`,`pay_way`,`starttime`,`endtime`,freeze @@ -78,23 +79,21 @@ + select + + from wx_bill_settle_bill + + + + + + + delete from wx_bill_settle_bill where settle_id = #{id} + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillSettleMapper.xml b/mallinkService/src/main/resources/mapper/WxBillSettleMapper.xml new file mode 100644 index 000000000..137cb39f8 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxBillSettleMapper.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`settle_number`,`merchant_id`,`status`,`apply_status`, + `receive_money`,`pay_money`,`settletime`,`createtime`,`updatetime` + + + + where 1=1 + and tt.`id` = #{id} + and tt.`tenant_id` = #{tenantId} + and tt.merchantName like concat('%', #{merchantName},'%') + + and tt.createtime >= #{starttime} + + + and tt.createtime <= #{endtime} + + and tt.`settle_number` = #{settleNumber} + and tt.`status` = #{status} + and tt.`apply_status` = #{applyStatus} + + and (tt.receiveMoney-tt.payMoney- + (select IFNULL(sum(settle_money),0) from wx_bill_settle_record where settle_id = tt.id) + ) >0 + + + and (tt.receiveMoney-tt.payMoney- + (select IFNULL(sum(settle_money),0) from wx_bill_settle_record where settle_id = tt.id) + ) <0 + + + order by ${sortColumns} + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillSettleRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxBillSettleRecordMapper.xml new file mode 100644 index 000000000..c3c0596d3 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxBillSettleRecordMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`settle_id`,`userid`,`user_name`,`settle_money`, + `settle_time`,`settle_way`,`balance`,detail,`createtime`,`updatetime`,`desc` + + + + where 1=1 + and `id` = #{id} + and `tenant_id` = #{tenantId} + and `settle_id` = #{settleId} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 36c6d865b..8a0a4530e 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -20,6 +20,7 @@ + @@ -126,7 +127,7 @@ - update wx_c_user_basic_info set id=#{newId} where tenant_id=#{tenantId} + update wx_c_user_basic_info set id=#{newId} , credit=#{credit} , poins=#{poins} where tenant_id=#{tenantId} and id = #{id} @@ -201,7 +202,7 @@ cub.id,cub.phone,cub.birthdate,cub.education,cub.sex,cub.email,cub.address,cub.poins,cub.tag_id, - cub.create_date,cub.update_date,cub.tenant_id,cub.name,cub.level,cub.nick_name + cub.create_date,cub.update_date,cub.tenant_id,cub.name,cub.level,cub.nick_name,cub.score_date + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml index d7d715d17..c9a5a5097 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml @@ -253,6 +253,50 @@ + + + + delete from wx_card_spend + where `tenant_id` = #{tenantId} and `id` = #{id} and `pay_status` = #{payStatus} + + select from wx_coupon_action_log @@ -206,10 +206,37 @@ WHERE a.coupon_order_id = o.id AND a.tenant_id = #{tenantId} AND o.c_user_id = #{cUserId} - AND a.coupon_id = #{couponId} + + AND a.coupon_id = #{couponId} + AND a.channel_type = #{channelType} and a.create_time >= #{startTime} and a.create_time <= #{endTime} + diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index 6015c2a50..6dccc799b 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -512,11 +512,11 @@ - update wx_coupon SET remain_inventory = remain_inventory - #{number} where id = #{id} and remain_inventory>= #{number} + update wx_coupon SET remain_inventory = remain_inventory - #{number} where id = #{id} and remain_inventory= #{remainInventory} - update wx_coupon SET remain_inventory = remain_inventory + #{number} where id = #{id} and remain_inventory>= #{remainInventory} + update wx_coupon SET remain_inventory = remain_inventory + #{number} where id = #{id} and remain_inventory= #{remainInventory} diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index fc7d92ff1..5c49d96cb 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -16,10 +16,11 @@ + - `id`,`tenant_id`,`coupon_id`,`coupon_type`,`c_user_id`,`owner_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`, `auto_refund` + `id`,`tenant_id`,`coupon_id`,`coupon_type`,`c_user_id`,`owner_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`, `auto_refund`, `verify_type` @@ -99,10 +100,38 @@ update wx_coupon_order set `coupon_order_status` = #{couponOrderStatus}, `b_user_id` = #{bUserId}, - `update_date` = #{updateDate} + `update_date` = #{updateDate}, + `verify_type` = #{verifyType} where `tenant_id`=#{tenantId} and id=#{id} and `b_user_id` is null + + update wx_coupon_order + set `coupon_order_status` = #{couponOrderStatus}, + `b_user_id` = #{bUserId}, + `update_date` = #{updateDate}, + `verify_type` = #{verifyType} + where 1=1 + and `tenant_id`=#{tenantId} + and id=#{id} + + and `b_user_id` is null + + + and `b_user_id` = #{bUserId} + + + + + + update wx_coupon_order + set `coupon_order_status` = #{couponOrderStatus}, + `b_user_id` = null, + `update_date` = #{updateDate}, + `verify_type` = null + where `tenant_id`=#{tenantId} and id=#{id} + + + + - co.id,co.coupon_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price, + co.id,co.coupon_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price,co.verify_type, c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit, json_extract(car.vendor_params,'$.id') as coupon_free_id @@ -867,6 +923,7 @@ + diff --git a/mallinkService/src/main/resources/mapper/WxCouponSendMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponSendMapper.xml index ed6e2d3a4..04910652c 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponSendMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponSendMapper.xml @@ -18,13 +18,16 @@ - - + + cs.id,cs.tenant_id,cs.coupon_id,cs.title,cs.send_type,cs.conditions,cs.status,cs.create_date,cs.update_date, + cs.conditions -> '$.merchantSend' as merchantSend, + cs.conditions -> '$.merchantLnventory' as merchantLnventory, + cs.conditions -> '$.merchantRemain' as merchantRemain, (case when (select count(*) from wx_coupon_merchant xcm where xcm.product_id = cs.coupon_id and xcm.status = 0)=1 then @@ -32,7 +35,7 @@ else '[多商户通用]' end) as merchant_name, - c.remain_inventory, c.use_limit_quantity, c.inventory, c.valid_start_date, c.valid_end_date,cs.send_sms + c.remain_inventory, c.use_limit_quantity, c.inventory, c.valid_start_date, c.valid_end_date,c.valid_type,cs.send_sms,c.valid_days @@ -77,17 +80,27 @@ and cs.update_date = #{updateDate} + + and cs.conditions -> '$.title' like concat('%',#{merchantName},'%') + + + and cs.conditions->'$.id' = concat(#{merchantId},'') + + + and cs.conditions -> '$.merchantRemain'> #{merchantRemain} + - and id in + and cs.id in #{idItem} and cs.send_sms = #{sendSms} - - order by ${sortColumns} + + order by ${sortColumns} + + update wx_coupon_send set status=#{status} where coupon_id=#{couponId} @@ -103,13 +149,31 @@ + + update wx_coupon_send + set conditions=#{conditions},update_date = #{updateDate} + where send_type = #{sendType} + and tenant_id = #{tenantId} + + update wx_coupon_send cs, wx_coupon c set cs.status=1, cs.update_date = now() where c.id = cs.coupon_id and cs.status = 0 and ((c.status = 1) or (c.valid_type = 1 and c.valid_end_date < now())) - - - + + update wx_coupon_send + SET conditions = JSON_SET(conditions, '$.merchantRemain', #{merchantRemain} - #{number} , '$.merchantSend', + #{merchantSend} + #{number}) + where id = #{id} + and conditions -> '$.merchantRemain' = #{merchantRemain} + + + update wx_coupon_send + SET conditions = JSON_SET(conditions, '$.merchantRemain', #{merchantRemain} + #{number} , '$.merchantSend', + #{merchantSend} - #{number}) + where id = #{id} + and conditions -> '$.merchantRemain' = #{merchantRemain} + diff --git a/mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml b/mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml index cf08e5116..723b3840a 100644 --- a/mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml @@ -206,4 +206,47 @@ where tenant_id=#{tenantId} and c_user_id = #{cUserId} + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxDataRuleTargetMapper.xml b/mallinkService/src/main/resources/mapper/WxDataRuleTargetMapper.xml new file mode 100644 index 000000000..89964ca47 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxDataRuleTargetMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + `id`,`parent`,`name`,`tag`,`create_time`,`update_time` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and `parent` = #{parent} + + + + and `name` like concat('%',#{name},'%') + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxLevelConfigMapper.xml b/mallinkService/src/main/resources/mapper/WxLevelConfigMapper.xml index 7d1a68fea..af9b0654c 100644 --- a/mallinkService/src/main/resources/mapper/WxLevelConfigMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxLevelConfigMapper.xml @@ -11,10 +11,11 @@ + - `id`, `tenant_id`, `points`, `level`, `description`, `create_date`, `update_date`, `discount_enable`, `capability` + `id`, `tenant_id`, `points`, `level`, `description`, `create_date`, `update_date`, `discount_enable`, `capability`,`scale` @@ -71,7 +72,7 @@ insert into wx_level_config (id, tenant_id, points, level, description, create_date, update_date, - discount_enable, capability) values + discount_enable, capability,scale) values (#{item.id,jdbcType=BIGINT}, #{item.tenantId,jdbcType=VARCHAR}, @@ -81,7 +82,8 @@ #{item.createDate,jdbcType=TIMESTAMP}, #{item.updateDate,jdbcType=TIMESTAMP}, #{item.discountEnable,jdbcType=SMALLINT}, - #{item.capability,jdbcType=VARCHAR}) + #{item.capability,jdbcType=VARCHAR}, + #{item.scale,jdbcType=INTEGER}) @@ -96,6 +98,7 @@ `update_date` = #{item.updateDate}, `discount_enable` = #{item.discountEnable}, `capability` = #{item.capability}, + `scale` = #{item.scale}, where id = ${item.id} @@ -106,8 +109,10 @@ - + SELECT `level` FROM `wx_level_config` where tenant_id=#{tenantId} and points <= #{points} ORDER BY points desc LIMIT 1 + + diff --git a/mallinkService/src/main/resources/mapper/WxMallFloorMapper.xml b/mallinkService/src/main/resources/mapper/WxMallFloorMapper.xml index e29b3da19..27e17f901 100644 --- a/mallinkService/src/main/resources/mapper/WxMallFloorMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMallFloorMapper.xml @@ -10,10 +10,12 @@ + + - `id`,`tenant_id`,`mall_id`,`building_id`,`floor_name`,`background_img`,`create_date`,`update_date` + `id`,`tenant_id`,`mall_id`,`building_id`,`floor_name`,`background_img`,`create_date`,`update_date`,`total_area`,`operating_area` diff --git a/mallinkService/src/main/resources/mapper/WxMallMapper.xml b/mallinkService/src/main/resources/mapper/WxMallMapper.xml index f1fa14138..f1aa37087 100644 --- a/mallinkService/src/main/resources/mapper/WxMallMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMallMapper.xml @@ -22,6 +22,7 @@ + @@ -31,7 +32,7 @@ `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`, - `weapp_share_title`,`weapp_share_cover_img`, + `weapp_share_title`,`weapp_share_cover_img`, `pos_qrcode_rule`, `sale_type`, `valid_start`, `valid_end` diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index a55974eb5..f60055550 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -124,19 +124,36 @@ not null and status in(1,2,3,4) ) + and id in #{idItem} + + + and id in( + select ms.merchant_id from (select merchant_id,shop_id from wx_merchant_shop where is_del=0) ms + inner join wx_merchant m on ms.merchant_id = m.id + inner join wx_shop s on s.id=ms.shop_id + where m.tenant_id=#{tenantId} and s.is_del=0 + + and m.business_id in (${businessForRule}) + + + and s.`floor` in (${floorForRule}) + + ) + + order by ${sortColumns} @@ -150,6 +167,23 @@ + + + and m.id in( + select ms.merchant_id from (select merchant_id,shop_id from wx_merchant_shop where is_del=0) ms + inner join wx_merchant m on ms.merchant_id = m.id + inner join wx_shop s on s.id=ms.shop_id + where m.tenant_id=#{tenantId} and s.is_del=0 + + and m.business_id in (${businessForRule}) + + + and s.`floor` in (${floorForRule}) + + ) + + + where m.is_del = 0 @@ -232,6 +266,8 @@ #{idItem} + + order by ${sortColumns} @@ -325,6 +361,7 @@ and m.`id` = #{id} + order by m.top_time desc diff --git a/mallinkService/src/main/resources/mapper/WxMerchantPowerBillConfigMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantPowerBillConfigMapper.xml new file mode 100644 index 000000000..2b0fe0d2f --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxMerchantPowerBillConfigMapper.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`merchant_id`,`merchant_name`,`merchant_type`,`build_way`,`price`,`create_date`,`update_date` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and `merchant_name` like concat('%', #{merchantName},'%') + + + + and `merchant_type` = #{merchantType} + + + + and `build_way` = #{buildWay} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxMerchantSubsidyMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantSubsidyMapper.xml index 0ebfeb34e..6be704f90 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantSubsidyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantSubsidyMapper.xml @@ -16,10 +16,12 @@ + + - `id`,`order_id`,`order_type`,`merchant_id`,`coupon_order_id`,`coupon_type`,`order_payment`,`receiver_payment`,`real_payment`,`subsidy`,`real_subsidy`,`status`,`create_date`,`update_date` + `id`,`order_id`,`order_type`,`merchant_id`,`coupon_order_id`,`coupon_type`,`order_payment`,`receiver_payment`,`real_payment`,`subsidy`,`real_subsidy`,`status`,`create_date`,`update_date`,freeze @@ -137,6 +139,7 @@ + @@ -144,7 +147,7 @@ ms.`order_payment`,ms.`receiver_payment`,ms.`real_payment`, ms.`subsidy`,ms.`real_subsidy`,ms.`status`,ms.`create_date`,ms.`update_date`, c.`title`,c.`sub_title`,c.`unit`,m.`name`, - cu.`nick_name`, cu.`phone` + cu.`nick_name`, cu.`phone`,ms.freeze diff --git a/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml index 336773e69..ffb45a6ab 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml @@ -23,49 +23,47 @@ and `id` = #{id} - and `tenant_id` = #{tenantId} - - and `merchant_id` = #{merchantId} - + and `merchant_id` = #{merchantId} and `b_user_id` = #{bUserId} - - and `trade_amt` = #{tradeAmt} - + and `trade_amt` = #{tradeAmt} and `create_date` = #{createDate} - + and `update_date` = #{updateDate} - + and `report_date` = #{reportDate} + and date_format(create_date,'%Y-%m')=#{month} + and id in #{idItem} + order by ${sortColumns} order by report_date desc @@ -94,7 +92,6 @@ - @@ -104,50 +101,69 @@ + + + + + + - - - mtd.id as id, - m.tenant_id as tenant_id, m.id as merchant_id,m.name as merchant_name, - mtd.b_user_id as b_user_id, mtd.trade_amt as trade_amt, mtd.create_date as create_date,mtd.update_date as update_date,mtd.report_date as report_date, - mbu.name as b_user_name, mbu.phone as b_user_phone, - trade_count,proof + mtd.id as id, mtd.b_user_id as b_user_id, mtd.trade_amt, mtd.report_date, mtd.trade_count, mtd.proof, + mtd.create_date as create_date, mtd.update_date as update_date, + m.tenant_id as tenant_id, m.id as merchant_id, m.name as merchant_name, m.business_id, m.sub_business_id, + mbu.name as b_user_name, mbu.phone as b_user_phone - select - from wx_merchant m - left join wx_merchant_trade_daily mtd on mtd.merchant_id = m.id - - and mtd.report_date = #{reportDate} - + from wx_merchant_trade_daily mtd + inner join wx_merchant m on mtd.merchant_id = m.id left join wx_merchant_b_user mbu on mtd.b_user_id = mbu.id - - where 1=1 - and m.status = 1 - - and m.name like concat('%', #{merchantName},'%') - + where 1 = 1 - and m.tenant_id = #{tenantId} + and mtd.tenant_id = #{tenantId} - and m.id = #{merchantId} + and mtd.merchant_id = #{merchantId} + + and m.name like concat('%', #{merchantName},'%') + + + + and mtd.report_date >= date_format(#{startTime},'%Y-%m-%d') + and mtd.report_date <= date_format(#{endTime},'%Y-%m-%d') + + + + and mtd.merchant_id in( + select ms.merchant_id from (select merchant_id,shop_id from wx_merchant_shop where is_del=0) ms + inner join wx_merchant m on ms.merchant_id = m.id + inner join wx_shop s on s.id=ms.shop_id + where m.tenant_id=#{tenantId} and s.is_del=0 + + and m.business_id in (${businessForRule}) + + + and s.`floor` in (${floorForRule}) + + ) + + order by ${sortColumns} - + select round(sum(mtd.trade_amt)/100,2) from wx_merchant_trade_daily mtd inner join wx_merchant m on mtd.merchant_id = m.id left join wx_merchant_b_user mbu on mtd.b_user_id = mbu.id @@ -160,12 +176,11 @@ and mtd.merchant_id = #{merchantId} - - - and mtd.report_date between #{starttime} and #{endtime} + + + and mtd.report_date >= date_format(#{startTime},'%Y-%m-%d') + and mtd.report_date <= date_format(#{endTime},'%Y-%m-%d') - - order by mtd.create_date desc LIMIT 30 diff --git a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml index 902471c98..09d1fa6b2 100644 --- a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml @@ -23,13 +23,19 @@ + + + + + `id`,`tenant_id`,`create_time`,`update_time`,`order_id`,`c_user_id`,`b_user_id`, `auth_code`,`ip`,`pay_amount`,`pay_time_start`,`pay_time_end`, `prepay_id`,`transaction_id`,`pay_vendor`,`pay_order_no`, - `pay_order_status`,`share`,`share_amount`,`rate_amount`,`fail_reason` + `pay_order_status`,`share`,`share_amount`,`rate_amount`,`fail_reason`, + `pos_pay_order_id`,`pos_pay_order_time`,`pos_payment_type`,`pos_pay_order_no`,`pos_pay_des` @@ -111,6 +117,18 @@ and `fail_reason` like concat('%', #{failReason},'%') + + and `pos_pay_order_id` = #{posPayOrderId} + + + and `pos_pay_order_time` = #{posPayOrderTime} + + + and `pos_payment_type` = #{posPaymentType} + + + and `pos_pay_order_no` = #{posPayOrderNo} + and id in diff --git a/mallinkService/src/main/resources/mapper/WxPowerBillAutoConfigMapper.xml b/mallinkService/src/main/resources/mapper/WxPowerBillAutoConfigMapper.xml new file mode 100644 index 000000000..1f6b6729e --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxPowerBillAutoConfigMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + `id`,`tenant_id`,`unit_price`,`build_day`,`receive_day`,`create_date`,`update_date` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml b/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml index f1dc89ebe..4186dc9eb 100644 --- a/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml @@ -143,6 +143,20 @@ and b.id = #{building} and f.id = #{floor} and `operation_type` = #{operationType} + + and rc.business_id in (${businessForRule}) + + + and rc.`id` in + + select id from wx_property_contract where tenant_id=#{tenantId} and + json_unquote(json_extract(json_extract(rent_info,'$[*].shopId'),concat('$[',#{idx},']'))) in(select + id from wx_shop where tenant_id=#{tenantId} and floor in (${floorForRule})) + + + + and rc.shop_id in (select id from wx_shop where tenant_id=#{tenantId} and floor in (${floorForRule})) + order by ${sortColumns} diff --git a/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml b/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml index cbd90698f..2d99a65d9 100644 --- a/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml @@ -43,7 +43,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -54,21 +73,23 @@ + + - + - `id`,`merchant_id`,`price`,`rental_start_date`,`rental_end_date`,`sign_date`,`receive_period`, - `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`,`rent_info`, `file_names`,price_unit,rent_price,`subject_name`,rent_start_type, - `rent_input_way`,`adjust_ratio_way`,`operation_type`,late_pay_ratio,late_pay_day + `id`,`merchant_id`,`price`,`rental_start_date`,`rental_end_date`,`sign_date`,`receive_period`, + `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`,`rent_info`, `file_names`,price_unit,rent_price,`subject_name`,rent_start_type, + `rent_input_way`,`adjust_ratio_way`,`operation_type`,late_pay_ratio,late_pay_day,bus_discount_ratio,bus_discount_time - - + + where 1 = 1 and `id` = #{id} @@ -102,7 +123,7 @@ and `end_date` = #{endDate} and `rent_shop_type` = #{rentShopType} and `operation_type` = #{operationType} - + and id in @@ -111,14 +132,14 @@ order by ${sortColumns} - + - + - + - + - + - + - + update wx_rent_contract set status=#{status} where tenant_id=#{tenantId} and status!=0 and status!=5 and status!=1 and status!=6 and status!=7 and DATEDIFF(rental_end_date,now()) <= 30 and rental_end_date > now() - + update wx_rent_contract set status=#{status} where tenant_id=#{tenantId} and status!=0 and status!=1 and status!=5 and status!=6 and status!=7 and rental_start_date <= now() and rental_end_date >= now() - + update wx_rent_contract set status=#{status} where tenant_id=#{tenantId} and status!=0 and status!=1 and status!=5 and status!=6 and status!=7 and rental_end_date <now() - + update wx_rent_contract set status=#{status} where tenant_id=#{tenantId} and status!=0 and status!=5 and status!=6 and status!=7 and merchant_id is null @@ -212,9 +247,9 @@ 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 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},'"')) @@ -276,9 +311,9 @@ where status in(2,3,4) and merchant_id = #{merchantId} - + - + @@ -319,15 +354,16 @@ - + + - + select * from wx_rent_contract where id in( - select rent_contract_id from wx_bill_rent id = #{id} + select rent_contract_id from wx_bill_rent id = #{id} ) + + + + diff --git a/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml b/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml index 375ae8ae7..a3e24037a 100644 --- a/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxScoreRulesMapper.xml @@ -9,10 +9,11 @@ + - `id`,`tenant_id`,`rules`,`create_date`,`update_date`,`type`,`clear_year` + `id`,`tenant_id`,`rules`,`create_date`,`update_date`,`type`,`clear_year`,`scale` @@ -38,6 +39,9 @@ and `clear_year` = #{clearYear} + + and `scale` = #{scale} + and id in diff --git a/mallinkService/src/main/resources/mapper/WxScoreValidityPeriodMapper.xml b/mallinkService/src/main/resources/mapper/WxScoreValidityPeriodMapper.xml deleted file mode 100644 index 0f1f639ab..000000000 --- a/mallinkService/src/main/resources/mapper/WxScoreValidityPeriodMapper.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - `id`,`tenant_id`,`year`,`create_date`,`update_date` - - - - where 1 = 1 - - - and `id` = #{id} - - - - - and `tenant_id` = #{tenantId} - - - - - and `year` like concat('%', #{year},'%') - - - - - and `create_date` = #{createDate} - - - - - and `update_date` = #{updateDate} - - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - - - - - - - - diff --git a/mallinkService/src/main/resources/mapper/WxShopMapper.xml b/mallinkService/src/main/resources/mapper/WxShopMapper.xml index bd66f39f4..a7ce9be39 100644 --- a/mallinkService/src/main/resources/mapper/WxShopMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxShopMapper.xml @@ -529,6 +529,7 @@ + @@ -538,7 +539,7 @@ + select + + from wx_user_data_rule + + + + diff --git a/mallinkSysAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java b/mallinkSysAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java index 805efbaa6..056d362ec 100644 --- a/mallinkSysAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java +++ b/mallinkSysAdmin/src/main/java/com/iformall/controller/basic/WxMallBuildingController.java @@ -8,6 +8,7 @@ import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.WxMallBuildingFloorDto; import com.iformall.domain.po.WxMallBuilding; +import com.iformall.domain.po.WxMallFloor; import com.iformall.service.WxMallBuildingService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -116,5 +117,24 @@ public class WxMallBuildingController extends BaseController { return new ResultData(); } + @ApiOperation("保存楼层楼座面积") + @PostMapping("saveFloorArea") + @SystemControllerLog(description = "商城-楼座/楼层-保存面积") + public ResultData saveFloorArea(@RequestBody WxMallFloor record) { + logger.debug("[" + getIpAddr() + "] WxMallBuildingController::addBuildingAndFloor"); + if(record == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (record.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (record.getTotalArea() == null && record.getOperatingArea() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + record.setTenantId(getTenantId()); + wxMallBuildingService.saveFloorArea(record); + return new ResultData(); + } + } diff --git a/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java b/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java index 375f8b83b..6bd923c5c 100644 --- a/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java +++ b/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java @@ -5,13 +5,12 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; -import com.iformall.domain.po.MallPermission; -import com.iformall.domain.po.MallRole; -import com.iformall.domain.po.MallRolePermission; -import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.*; import com.iformall.enums.EnumMenuType; import com.iformall.enums.EnumPermissionType; import com.iformall.exception.MallinkException; +import com.iformall.mapper.MallMenuMapper; +import com.iformall.mapper.MallPermissionMapper; import com.iformall.service.MallPermissionService; import com.iformall.service.MallRolePermissionService; import com.iformall.service.MallRoleService; @@ -57,6 +56,12 @@ public class SysMenuController extends BaseController { @Autowired private MallRolePermissionService mallRolePermissionService; + @Autowired + private MallMenuMapper mallMenuMapper; + + @Autowired + private MallPermissionMapper mallPermissionMapper; + @ApiOperation("导航菜单") @GetMapping("/nav") public ResultData nav(){ @@ -149,62 +154,363 @@ public class SysMenuController extends BaseController { logger.debug("[" + getIpAddr() + "] MallPermissionController::upgradeMenus"); MallUserInfo userInfo = getUser(); if(userInfo.isFmSuperAdmin()) { - // 已有Role - MallRole q = new MallRole(); - List mallRoleList = mallRoleService.getList(q); - for(MallRole mallRole: mallRoleList) { - MallRolePermission qRP = new MallRolePermission(); - qRP.setRoleId(mallRole.getId()); - List mallRolePermissionList = mallRolePermissionService.getList(qRP); - boolean isOld = mallRolePermissionList.stream().allMatch( - (rolePermission-> - (rolePermission.getPermissionId().longValue() <= (long)EnumMenuType.PAGE_MAIN.getCode()) - ) - ); - if(mallRolePermissionList.size() == 1) { - MallRolePermission mRP = mallRolePermissionList.get(0); - if(mRP.getPermissionId().longValue() == (long)EnumMenuType.MOBILE_ADMIN.getCode()) { - isOld = false; - } - if(mRP.getPermissionId().longValue() == (long)EnumMenuType.PAGE_MAIN.getCode()) { - isOld = false; - } - } - if(isOld){ - // 添加子权限给此role - List pList = new ArrayList<>(); - // 默认用户添加首页 - pList.add(Long.valueOf(EnumMenuType.PAGE_MAIN.getCode())); - // 添加原有子菜单 - for(MallRolePermission mRP: mallRolePermissionList) { - // 原有权限 - pList.add(mRP.getPermissionId()); - // 二级菜单 - List subList2 = mallPermissionService.getByParentId(mRP.getPermissionId()); - for(MallPermission mp: subList2) { - pList.add(mp.getId()); - // 三级菜单 - List subList3 = mallPermissionService.getByParentId(mp.getId()); - if(subList3.size() > 0) { - subList3.stream().forEach(smp->{ - pList.add(smp.getId()); - }); - } - } + adminMenuUpgrade(); + return new ResultData(); + } + return new ResultData(ErrorCode.USER_NO_PERMISSION); + } + + private void adminMenuUpgrade() { + // 1. 获取已有管理员 + MallRole mrQ = new MallRole(); + mrQ.setName("系统管理员"); + mrQ.setAvailable("0"); + List mallRoleList = mallRoleService.getList(mrQ); + // 2. 获取全部permission + MallPermission mpQ = new MallPermission(); + mpQ.setAvailable("Y"); + List mpList = mallPermissionService.getList(mpQ); + for(MallRole mallRole: mallRoleList) { + MallRolePermission qRP = new MallRolePermission(); + qRP.setRoleId(mallRole.getId()); + List mallRolePermissionList = mallRolePermissionService.getList(qRP); + if (mpList.size() != mallRolePermissionList.size()) { + // 3. permission不一致, 添加到mall_role_permission + for(MallPermission mp: mpList) { + if (mallRolePermissionList.stream().anyMatch(mallRolePermission -> mp.getId().equals(mallRolePermission.getPermissionId()))) + continue; + // 3.1 添加到mall_role_permission + try { + mallRolePermissionService.saveOrUpdate(new MallRolePermission(){{ + setTenantId(mallRole.getTenantId()); + setPermissionId(mp.getId()); + setRoleId(mallRole.getId()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); } - List allList = new ArrayList<>(); - List dpList = pList.stream().distinct().collect(Collectors.toList()); - allList.addAll(dpList); - Long[] idArray = new Long[allList.size()]; - allList.toArray(idArray); - mallRolePermissionService.savePermissions(mallRole.getTenantId(), mallRole.getId(), idArray); } } + } + } + + @ApiOperation("用户菜单迁移") + @GetMapping("/moveMenus") + public ResultData moveMenus() { + logger.debug("[" + getIpAddr() + "] MallPermissionController::moveMenus"); + MallUserInfo userInfo = getUser(); + if(userInfo.isFmSuperAdmin()) { + // 1. 账号->系统 + moveAccountToSys(); + // 2. 合同添加商铺+多经点位 + addMenusForContract(); + // 3. 账单 + addMenusForBills(); return new ResultData(); } return new ResultData(ErrorCode.USER_NO_PERMISSION); } + + + private void moveAccountToSys() { + Long menuId_XiTong = 50L; + Long menuId_Account = 7L; + // 1. 修改菜单名 + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("系统设置"); + setId(menuId_XiTong); + }}); + // 2. 迁移->系统设置 + MallPermission accountPermission = mallPermissionService.getById(menuId_Account); + mallMenuMapper.updatePermissionByParentId(new MallPermission() {{ + setParentId(menuId_XiTong); + setOrigParentId(menuId_Account); + }}); + // 3. 角色是否选中系统设置 + List mallRolePermissions = mallRolePermissionService.getList(new MallRolePermission(){{ + setPermissionId(menuId_Account); + }}); + for(MallRolePermission mallRolePermission: mallRolePermissions) { + List mallRolePermissionList = mallRolePermissionService.getList(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setRoleId(mallRolePermission.getRoleId()); + setPermissionId(menuId_XiTong); + }}); + if (mallRolePermissionList.size() <= 0) { + // update 7L->50L + try { + mallRolePermissionService.saveOrUpdate(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setId(mallRolePermission.getId()); + setPermissionId(menuId_XiTong); + setRoleId(mallRolePermission.getRoleId()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + // 4. 删除permission/role + mallMenuMapper.deletePermissionRole(new MallRolePermission(){{ + setPermissionId(menuId_Account); + }}); + // 5. 删除permission + mallPermissionService.deleteById(menuId_Account); + } + + private void addMenusForContract() { + + Long menuId_Shop = 299L; + Long menuId_Duojing = 300L; + // 1. add new folder + try { + mallPermissionMapper.insertSelective(new MallPermission() {{ + setId(menuId_Shop); + setName("店铺"); + setParentId(3L); + setAvailable("Y"); + setResourceType(0); + setIcon("icon-iconshangpuguanli"); + setVersionType(0); + setSort(menuId_Shop.intValue()); + }}); + mallPermissionMapper.insertSelective(new MallPermission() {{ + setId(menuId_Duojing); + setName("多经点位"); + setParentId(3L); + setAvailable("Y"); + setResourceType(0); + setIcon("icon-shanghuguanli"); + setVersionType(0); + setSort(menuId_Duojing.intValue()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + // 2. move + // 301, 302, 305 + mallMenuMapper.updatePermissionByParentId(new MallPermission() {{ + List list = new ArrayList(); + list.add(301L); + list.add(302L); + list.add(305L); + setParentId(menuId_Shop); + setIds(list); + }}); + // 303, 304, 306 + mallMenuMapper.updatePermissionByParentId(new MallPermission() {{ + List list = new ArrayList(); + list.add(303L); + list.add(304L); + list.add(306L); + setParentId(menuId_Duojing); + setIds(list); + }}); + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("租金合同"); + setId(301L); + }}); + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("物业合同"); + setId(302L); + }}); + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("租金+物业合同"); + setId(305L); + }}); + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("租金合同"); + setId(303L); + }}); + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("物业合同"); + setId(304L); + }}); + mallMenuMapper.updateMallPermission(new MallPermission() {{ + setName("租金+物业合同"); + setId(306L); + }}); + // 3. 角色是否选中商铺 + List mallRolePermissions = mallMenuMapper.getMallRolePermissions(new MallRolePermission(){{ + List list = new ArrayList(); + list.add(301L); + list.add(302L); + list.add(305L); + setPermissionIds(list); + }}); + for(MallRolePermission mallRolePermission: mallRolePermissions) { + List mallRolePermissionList = mallRolePermissionService.getList(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setRoleId(mallRolePermission.getRoleId()); + setPermissionId(menuId_Shop); + }}); + if (mallRolePermissionList.size() <= 0) { + try { + mallRolePermissionService.saveOrUpdate(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setPermissionId(menuId_Shop); + setRoleId(mallRolePermission.getRoleId()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + // 4. 角色是否选中多经点位 + mallRolePermissions = mallRolePermissionService.getList(new MallRolePermission(){{ + List list = new ArrayList(); + list.add(303L); + list.add(304L); + list.add(306L); + setPermissionIds(list); + }}); + for(MallRolePermission mallRolePermission: mallRolePermissions) { + List mallRolePermissionList = mallRolePermissionService.getList(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setRoleId(mallRolePermission.getRoleId()); + setPermissionId(menuId_Duojing); + }}); + if (mallRolePermissionList.size() <= 0) { + try { + mallRolePermissionService.saveOrUpdate(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setPermissionId(menuId_Duojing); + setRoleId(mallRolePermission.getRoleId()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + } + + private void addMenusForBills() { + // 1. 账单列表隐藏 + mallPermissionService.saveOrUpdate(new MallPermission(){{ + setId(412L); + setAvailable("N"); + }}); + addNewMunuFolder_ZhangdanList(); + addNewMenuFolder_Duizhang(); + } + + private void addNewMunuFolder_ZhangdanList() { + // 1. 新增新的账单列表folder + Long menuId_Zhangdanliebiao = 415L; + try { + mallPermissionMapper.insertSelective(new MallPermission() {{ + setId(menuId_Zhangdanliebiao); + setName("账单列表"); + setParentId(4L); + setAvailable("Y"); + setResourceType(0); + setIcon("icon-zhangdan5"); + setVersionType(0); + setSort(menuId_Zhangdanliebiao.intValue()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + // 2. 迁移到账单列表下 + mallMenuMapper.updatePermissionByParentId(new MallPermission() {{ + List list = new ArrayList(); + list.add(402L); + list.add(403L); + list.add(404L); + list.add(405L); + list.add(406L); + list.add(407L); + list.add(408L); + setParentId(menuId_Zhangdanliebiao); + setIds(list); + }}); + // 3. 角色是否选中账单列表 + List mallRolePermissions = mallMenuMapper.getMallRolePermissions(new MallRolePermission(){{ + List list = new ArrayList(); + list.add(402L); + list.add(403L); + list.add(404L); + list.add(405L); + list.add(406L); + list.add(407L); + list.add(408L); + setPermissionIds(list); + }}); + for(MallRolePermission mallRolePermission: mallRolePermissions) { + List mallRolePermissionList = mallRolePermissionService.getList(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setRoleId(mallRolePermission.getRoleId()); + setPermissionId(menuId_Zhangdanliebiao); + }}); + if (mallRolePermissionList.size() <= 0) { + try { + mallRolePermissionService.saveOrUpdate(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setPermissionId(menuId_Zhangdanliebiao); + setRoleId(mallRolePermission.getRoleId()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + } + + private void addNewMenuFolder_Duizhang() { + // 1. 新增对账管理 + Long menuId_ZhangdanMan = 416L; + try { + mallPermissionMapper.insertSelective(new MallPermission() {{ + setId(menuId_ZhangdanMan); + setName("对账管理"); + setParentId(4L); + setAvailable("Y"); + setResourceType(0); + setIcon("icon-zhangdan11"); + setVersionType(0); + setSort(menuId_ZhangdanMan.intValue()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + // 2. 迁移到对账管理下 + mallMenuMapper.updatePermissionByParentId(new MallPermission() {{ + List list = new ArrayList(); + list.add(409L); + list.add(410L); + list.add(411L); + setParentId(menuId_ZhangdanMan); + setIds(list); + }}); + // 3. 角色是否选中对账管理 + List mallRolePermissions = mallMenuMapper.getMallRolePermissions(new MallRolePermission(){{ + List list = new ArrayList(); + list.add(409L); + list.add(410L); + list.add(411L); + setPermissionIds(list); + }}); + for(MallRolePermission mallRolePermission: mallRolePermissions) { + List mallRolePermissionList = mallRolePermissionService.getList(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setRoleId(mallRolePermission.getRoleId()); + setPermissionId(menuId_ZhangdanMan); + }}); + if (mallRolePermissionList.size() <= 0) { + try { + mallRolePermissionService.saveOrUpdate(new MallRolePermission(){{ + setTenantId(mallRolePermission.getTenantId()); + setPermissionId(menuId_ZhangdanMan); + setRoleId(mallRolePermission.getRoleId()); + }}); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + } + @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; diff --git a/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java b/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java index ad49857f9..4a84c9237 100644 --- a/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java +++ b/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java @@ -8,9 +8,7 @@ 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.amazonaws.services.s3.model.*; import com.iformall.common.ResultData; import com.iformall.config.AwsProperty; import com.iformall.controller.base.BaseController; @@ -24,10 +22,7 @@ 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.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.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.*; @@ -288,4 +283,28 @@ public class UploadController extends BaseController { return data; } + /** + * AWS + * @return + * @throws Exception + */ + @GetMapping(value = "/lists") + @ApiOperation("aws列举文件") + public ResultData awsList() throws Exception { + logger.info("[" + getIpAddr() + "] UploadController::cimgUpload"); + + try{ + ObjectListing ol = s3.listObjects(awsProperty.getBucketName()); + List objects = ol.getObjectSummaries(); + for (S3ObjectSummary os: objects) { + logger.info(os.toString()); + break; + } + }catch (Exception e){ + e.printStackTrace(); + } + + return new ResultData(); + } + } diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java b/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java index edb551fb7..9d64c38ec 100644 --- a/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkWebSocketServer/src/main/java/com/iformall/controller/BaseController.java @@ -137,7 +137,7 @@ public class BaseController { if (basicInfo.getPoins() == null) { basicInfo.setPoins(user.getScore()); } - wxCUserBasicInfoService.updateObj(basicInfo, user.getId()); + wxCUserBasicInfoService.updateObj(basicInfo, user); } else { Date cur = new Date(); WxCUserBasicInfo basicInfo = new WxCUserBasicInfo(); diff --git a/pom.xml b/pom.xml index d18d6fd50..2e36ba0a1 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ mallinkSysAdmin mallinkCApi mallinkBApi + mallinkPosApi mallinkSchedule mallinkMQConsumer mallinkWebSocketServer @@ -375,4 +376,4 @@ --> - \ No newline at end of file +