Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.api.business; |
| | | |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.core.annotation.pr.PreventRepeat; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.dao.business.model.Coupon; |
| | | import com.doumee.service.business.CouponService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.shiro.authz.annotation.RequiresPermissions; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @Api(tags = "伿 å¸ç®¡ç") |
| | | @RestController |
| | | @RequestMapping("/business/coupon") |
| | | public class CouponController extends BaseController { |
| | | |
| | | @Autowired |
| | | private CouponService couponService; |
| | | |
| | | @PreventRepeat |
| | | @ApiOperation("æ°å»º") |
| | | @PostMapping("/create") |
| | | @RequiresPermissions("business:coupon:create") |
| | | public ApiResponse create(@RequestBody Coupon coupon) { |
| | | return ApiResponse.success(couponService.create(coupon)); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDå é¤") |
| | | @GetMapping("/delete/{id}") |
| | | @RequiresPermissions("business:coupon:delete") |
| | | public ApiResponse deleteById(@PathVariable Integer id) { |
| | | couponService.deleteById(id); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ¹éå é¤") |
| | | @GetMapping("/delete/batch") |
| | | @RequiresPermissions("business:coupon:delete") |
| | | public ApiResponse deleteByIdInBatch(@RequestParam String ids) { |
| | | String[] idArray = ids.split(","); |
| | | List<Integer> idList = new ArrayList<>(); |
| | | for (String id : idArray) { |
| | | idList.add(Integer.valueOf(id)); |
| | | } |
| | | couponService.deleteByIdInBatch(idList); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDä¿®æ¹") |
| | | @PostMapping("/updateById") |
| | | @RequiresPermissions("business:coupon:update") |
| | | public ApiResponse updateById(@RequestBody Coupon coupon) { |
| | | couponService.updateById(coupon); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("ä¿®æ¹ç¶æ") |
| | | @PostMapping("/updateStatus") |
| | | @RequiresPermissions("business:coupon:update") |
| | | public ApiResponse updateStatus(@RequestBody Coupon coupon) { |
| | | couponService.updateStatus(coupon); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("å页æ¥è¯¢") |
| | | @PostMapping("/page") |
| | | @RequiresPermissions("business:coupon:query") |
| | | public ApiResponse<PageData<Coupon>> findPage(@RequestBody PageWrap<Coupon> pageWrap) { |
| | | return ApiResponse.success(couponService.findPage(pageWrap)); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDæ¥è¯¢") |
| | | @GetMapping("/{id}") |
| | | @RequiresPermissions("business:coupon:query") |
| | | public ApiResponse findById(@PathVariable Integer id) { |
| | | return ApiResponse.success(couponService.findById(id)); |
| | | } |
| | | |
| | | @ApiOperation("ææä¼æ å¸å表") |
| | | @GetMapping("/validList") |
| | | public ApiResponse<List<Coupon>> validList() { |
| | | return ApiResponse.success(couponService.findValidList()); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.api.business; |
| | | |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.dao.dto.DataBoardQueryDTO; |
| | | import com.doumee.dao.vo.*; |
| | | import com.doumee.service.business.DataBoardService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | 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 java.util.List; |
| | | |
| | | @Api(tags = "æ°æ®çæ¿") |
| | | @RestController |
| | | @RequestMapping("/business/dataBoard") |
| | | public class DataBoardController extends BaseController { |
| | | |
| | | @Autowired |
| | | private DataBoardService dataBoardService; |
| | | |
| | | @ApiOperation("ç»è¥çæ¿") |
| | | @PostMapping("/overview") |
| | | public ApiResponse<DataBoardVO> overview(@RequestBody DataBoardQueryDTO query) { |
| | | return ApiResponse.success(dataBoardService.overview(query)); |
| | | } |
| | | |
| | | @ApiOperation("è¿30天ä¼å注åè¶å¿") |
| | | @PostMapping("/memberTrend") |
| | | public ApiResponse<List<MemberTrendVO>> memberTrend() { |
| | | return ApiResponse.success(dataBoardService.memberTrend()); |
| | | } |
| | | |
| | | @ApiOperation("è¿30天订åè¶å¿") |
| | | @PostMapping("/orderTrend") |
| | | public ApiResponse<List<OrderTrendVO>> orderTrend() { |
| | | return ApiResponse.success(dataBoardService.orderTrend()); |
| | | } |
| | | |
| | | @ApiOperation("è¿30å¤©è¥æ¶è¶å¿") |
| | | @PostMapping("/revenueTrend") |
| | | public ApiResponse<List<RevenueTrendVO>> revenueTrend() { |
| | | return ApiResponse.success(dataBoardService.revenueTrend()); |
| | | } |
| | | |
| | | @ApiOperation("é¨åºä¸ç»©ç»è®¡") |
| | | @PostMapping("/shopPerformance") |
| | | public ApiResponse<ShopPerformanceVO> shopPerformance(@RequestBody DataBoardQueryDTO query) { |
| | | return ApiResponse.success(dataBoardService.shopPerformance(query)); |
| | | } |
| | | } |
| | |
| | | DriverInfo query = new DriverInfo(); |
| | | query.setAuditStatus(3); |
| | | query.setDeleted(0); |
| | | query.setVersionType(0); |
| | | return ApiResponse.success(driverInfoService.findList(query)); |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.api.business; |
| | | |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.core.annotation.pr.PreventRepeat; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.dao.business.model.MemberCoupon; |
| | | import com.doumee.service.business.MemberCouponService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.shiro.authz.annotation.RequiresPermissions; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @Api(tags = "ç¨æ·ä¼æ å¸ç®¡ç") |
| | | @RestController |
| | | @RequestMapping("/business/memberCoupon") |
| | | public class MemberCouponController extends BaseController { |
| | | |
| | | @Autowired |
| | | private MemberCouponService memberCouponService; |
| | | |
| | | @PreventRepeat |
| | | @ApiOperation("æ°å»º") |
| | | @PostMapping("/create") |
| | | @RequiresPermissions("business:memberCoupon:create") |
| | | public ApiResponse create(@RequestBody MemberCoupon memberCoupon) { |
| | | return ApiResponse.success(memberCouponService.create(memberCoupon)); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDå é¤") |
| | | @GetMapping("/delete/{id}") |
| | | @RequiresPermissions("business:memberCoupon:delete") |
| | | public ApiResponse deleteById(@PathVariable Integer id) { |
| | | memberCouponService.deleteById(id); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ¹éå é¤") |
| | | @GetMapping("/delete/batch") |
| | | @RequiresPermissions("business:memberCoupon:delete") |
| | | public ApiResponse deleteByIdInBatch(@RequestParam String ids) { |
| | | String[] idArray = ids.split(","); |
| | | List<Integer> idList = new ArrayList<>(); |
| | | for (String id : idArray) { |
| | | idList.add(Integer.valueOf(id)); |
| | | } |
| | | memberCouponService.deleteByIdInBatch(idList); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDä¿®æ¹") |
| | | @PostMapping("/updateById") |
| | | @RequiresPermissions("business:memberCoupon:update") |
| | | public ApiResponse updateById(@RequestBody MemberCoupon memberCoupon) { |
| | | memberCouponService.updateById(memberCoupon); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("å页æ¥è¯¢") |
| | | @PostMapping("/page") |
| | | @RequiresPermissions("business:memberCoupon:query") |
| | | public ApiResponse<PageData<MemberCoupon>> findPage(@RequestBody PageWrap<MemberCoupon> pageWrap) { |
| | | return ApiResponse.success(memberCouponService.findPage(pageWrap)); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDæ¥è¯¢") |
| | | @GetMapping("/{id}") |
| | | @RequiresPermissions("business:memberCoupon:query") |
| | | public ApiResponse findById(@PathVariable Integer id) { |
| | | return ApiResponse.success(memberCouponService.findById(id)); |
| | | } |
| | | } |
| | |
| | | @Autowired |
| | | private PricingRuleService pricingRuleService; |
| | | |
| | | /*@PreventRepeat |
| | | @ApiOperation("æ°å»º") |
| | | @PostMapping("/create") |
| | | @RequiresPermissions("business:pricingRule:create") |
| | | public ApiResponse create(@RequestBody PricingRule pricingRule) { |
| | | return ApiResponse.success(pricingRuleService.create(pricingRule)); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDå é¤") |
| | | @GetMapping("/delete/{id}") |
| | | @RequiresPermissions("business:pricingRule:delete") |
| | | public ApiResponse deleteById(@PathVariable Integer id) { |
| | | pricingRuleService.deleteById(id); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ¹éå é¤") |
| | | @GetMapping("/delete/batch") |
| | | @RequiresPermissions("business:pricingRule:delete") |
| | | public ApiResponse deleteByIdInBatch(@RequestParam String ids) { |
| | | String[] idArray = ids.split(","); |
| | | List<Integer> idList = new ArrayList<>(); |
| | | for (String id : idArray) { |
| | | idList.add(Integer.valueOf(id)); |
| | | } |
| | | pricingRuleService.deleteByIdInBatch(idList); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDä¿®æ¹") |
| | | @PostMapping("/updateById") |
| | | @RequiresPermissions("business:pricingRule:update") |
| | | public ApiResponse updateById(@RequestBody PricingRule pricingRule) { |
| | | pricingRuleService.updateById(pricingRule); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("å页æ¥è¯¢") |
| | | @PostMapping("/page") |
| | | @RequiresPermissions("business:pricingRule:query") |
| | | public ApiResponse<PageData<PricingRule>> findPage(@RequestBody PageWrap<PricingRule> pageWrap) { |
| | | return ApiResponse.success(pricingRuleService.findPage(pageWrap)); |
| | | } |
| | | |
| | | @ApiOperation("导åºExcel") |
| | | @PostMapping("/exportExcel") |
| | | @RequiresPermissions("business:pricingRule:exportExcel") |
| | | public void exportExcel(@RequestBody PageWrap<PricingRule> pageWrap, HttpServletResponse response) { |
| | | List<PricingRule> pricingRuleList = pricingRuleService.findPage(pageWrap).getRecords(); |
| | | ExcelExporter.build(PricingRule.class).export(pricingRuleList, "计价è§åé
ç½®", response); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDæ¥è¯¢") |
| | | @GetMapping("/{id}") |
| | | @RequiresPermissions("business:pricingRule:query") |
| | | public ApiResponse findById(@PathVariable Integer id) { |
| | | return ApiResponse.success(pricingRuleService.findById(id)); |
| | | }*/ |
| | | |
| | | @PreventRepeat |
| | | @ApiOperation("æ¹éä¿åå°±å°ååè§å") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.job; |
| | | |
| | | import com.doumee.core.job.BaseJob; |
| | | import com.doumee.core.job.JobContext; |
| | | import com.doumee.core.job.JobParam; |
| | | import com.doumee.service.business.OrdersService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * å³å°å°è¾¾åä»¶æ¶é´çä¿¡éç¥ |
| | | * @author rk |
| | | * @date 2026/05/07 |
| | | */ |
| | | @Slf4j |
| | | @Component("arrivalPickUpNotifyJob") |
| | | public class ArrivalPickUpNotifyJob extends BaseJob { |
| | | |
| | | @Autowired |
| | | private OrdersService ordersService; |
| | | |
| | | @Override |
| | | public JobContext execute(JobParam param) { |
| | | JobContext jobContext = new JobContext(); |
| | | try { |
| | | int count = ordersService.notifyArrivalPickUp(); |
| | | jobContext.setHandleSuccessSize(count); |
| | | jobContext.setHandleTotalSize(count); |
| | | jobContext.setContext("å³å°å°è¾¾åä»¶æ¶é´éç¥å®æï¼å
±éç¥" + count + "å"); |
| | | } catch (Exception e) { |
| | | log.error("å³å°å°è¾¾åä»¶æ¶é´éç¥ä»»å¡å¼å¸¸", e); |
| | | } |
| | | return jobContext; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.job; |
| | | |
| | | import com.doumee.core.job.BaseJob; |
| | | import com.doumee.core.job.JobContext; |
| | | import com.doumee.core.job.JobParam; |
| | | import com.doumee.service.business.MemberService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Slf4j |
| | | @Component("registerCouponGiftJob") |
| | | public class RegisterCouponGiftJob extends BaseJob { |
| | | |
| | | @Autowired |
| | | private MemberService memberService; |
| | | |
| | | @Override |
| | | public JobContext execute(JobParam param) { |
| | | JobContext jobContext = new JobContext(); |
| | | try { |
| | | memberService.giftRegisterCoupon(); |
| | | jobContext.setContext("æ³¨åæ»¡å¹´èµ é伿 å¸ä»»å¡æ§è¡å®æ"); |
| | | } catch (Exception e) { |
| | | log.error("æ³¨åæ»¡å¹´èµ é伿 å¸ä»»å¡å¼å¸¸", e); |
| | | jobContext.setContext("æ³¨åæ»¡å¹´èµ é伿 å¸ä»»å¡å¼å¸¸ï¼" + e.getMessage()); |
| | | } |
| | | return jobContext; |
| | | } |
| | | } |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: pro |
| | | active: dev |
| | | # JSONè¿åé
ç½® |
| | | jackson: |
| | | # é»è®¤æ¶åº |
| | |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/13 æ³¨åæ»¡å¹´èµ é伿 å¸å®æ¶ä»»å¡ |
| | | -- ============================================================ |
| | | INSERT INTO `system_job` (`JOB_NAME`, `HANDLER`, `CRON`, `WITH_LOG`, `WITH_ASYNC`, `STATUS`, `REMARK`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) |
| | | VALUES ('æ³¨åæ»¡å¹´èµ é伿 å¸', 'registerCouponGiftJob', '0 0 3 * * ?', 1, 0, 1, 'æ ¹æ®è¿è¥é
ç½®ï¼æ¥è¯¢æ³¨å满Xå¹´çä¼åèµ é伿 å¸', 1, NOW(), 1, NOW(), 0); |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/13 è¿è¥é
ç½®å¢å 伿 å¸èµ éè§å |
| | | -- ============================================================ |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'ORDER_COUPON_ORDER_COUNT', 'ä¸åèµ é-è®¢åæ¬¡æ°', 0, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'ORDER_COUPON_GIFT_COUNT', 'ä¸åèµ é-è³å¤èµ 鿬¡æ°', 1, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'ORDER_COUPON_ID', 'ä¸åèµ é-伿 å¸ID', 2, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_COUPON_YEARS', '注åèµ é-注åå¹´æ°', 3, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_COUPON_GIFT_COUNT', '注åèµ é-è³å¤èµ 鿬¡æ°', 4, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_COUPON_ID', '注åèµ é-伿 å¸ID', 5, 0, 1, NOW(), 0); |
| | | INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'REGISTER_GIFT_COUPON_IDS', 'æ°æ³¨åèµ é-伿 å¸IDs(å¤é,åå²)', 6, 0, 1, NOW(), 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/13 ä¼åå¢å 伿 å¸èµ 鿬¡æ°å段 |
| | | -- ============================================================ |
| | | ALTER TABLE `member` ADD COLUMN `ORDER_COUPON_GIFT_COUNT` INT DEFAULT 0 COMMENT 'ä¸åèµ é伿 å¸å·²èµ 鿬¡æ°' AFTER `TYPE`; |
| | | ALTER TABLE `member` ADD COLUMN `REGISTER_COUPON_GIFT_COUNT` INT DEFAULT 0 COMMENT 'æ³¨åæ»¡å¹´èµ é伿 å¸å·²èµ 鿬¡æ°' AFTER `ORDER_COUPON_GIFT_COUNT`; |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/13 伿 å¸ä¿¡æ¯è¡¨ |
| | | -- ============================================================ |
| | | CREATE TABLE `coupon` ( |
| | | `ID` int NOT NULL AUTO_INCREMENT COMMENT '主é®', |
| | | `CREATOR` int DEFAULT NULL COMMENT 'å建人ç¼ç ', |
| | | `CREATE_DATE` datetime DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | `EDITOR` int DEFAULT NULL COMMENT 'æ´æ°äººç¼ç ', |
| | | `EDIT_DATE` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´', |
| | | `ISDELETED` int DEFAULT NULL COMMENT 'æ¯å¦å é¤0å¦ 1æ¯', |
| | | `STATUS` int DEFAULT NULL COMMENT 'ç¶æ 0å¯ç¨ 1ç¦ç¨', |
| | | `REMARK` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `NAME` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'åç§°', |
| | | `INFO` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '说æ', |
| | | `TYPE` int DEFAULT NULL COMMENT 'ç±»å0å¹³å°ä¼æ å¸ ', |
| | | `LIMIT_PRICE` BIGINT DEFAULT NULL COMMENT '满é¢ï¼åï¼', |
| | | `PRICE` BIGINT DEFAULT NULL COMMENT '伿 éé¢ï¼åï¼', |
| | | `PUSH_DAYS` int DEFAULT NULL COMMENT 'æ¨éåé¢åææå¤©æ°', |
| | | `VALID_DAYS` int DEFAULT NULL COMMENT 'é¢å忿天æ°', |
| | | `GET_METHOD` int DEFAULT NULL COMMENT 'é¢åæ¹å¼ 0é¢å', |
| | | `USE_TYPE` int DEFAULT NULL COMMENT '使ç¨ç±»åï¼0=åºå®æ¶é¿ï¼', |
| | | `COUPON_TYPE` int DEFAULT NULL COMMENT '伿 å¸ç±»åï¼0=满åå¸ï¼', |
| | | PRIMARY KEY (`ID`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='伿 å¸ä¿¡æ¯è¡¨'; |
| | | |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:coupon:create', 'æ°å»ºä¼æ å¸', '伿 å¸ç®¡ç', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:coupon:delete', 'å é¤ä¼æ å¸', '伿 å¸ç®¡ç', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:coupon:update', 'ä¿®æ¹ä¼æ å¸', '伿 å¸ç®¡ç', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:coupon:query', 'æ¥è¯¢ä¼æ å¸', '伿 å¸ç®¡ç', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/13 ç¨æ·ä¼æ å¸è¡¨ |
| | | -- ============================================================ |
| | | CREATE TABLE `member_coupon` ( |
| | | `ID` int NOT NULL AUTO_INCREMENT COMMENT '主é®', |
| | | `CREATOR` int DEFAULT NULL COMMENT 'å建人ç¼ç ', |
| | | `CREATE_DATE` datetime DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | `EDITOR` int DEFAULT NULL COMMENT 'æ´æ°äººç¼ç ', |
| | | `EDIT_DATE` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´', |
| | | `ISDELETED` int DEFAULT NULL COMMENT 'æ¯å¦å é¤0å¦ 1æ¯', |
| | | `REMARK` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `COUPON_ID` int DEFAULT NULL COMMENT '伿 å¸ä¸»é®å
³è表', |
| | | `MEMBER_ID` int DEFAULT NULL COMMENT 'ç¨æ·ç¼ç ï¼å
³èmember表ï¼', |
| | | `STATUS` int DEFAULT NULL COMMENT 'ç¶æï¼0=å¾
é¢åï¼1=å·²é¢åï¼2=已使ç¨ï¼98=æªé¢åå·²è¿æï¼99=å·²è¿æï¼', |
| | | `VALID_DATE` datetime DEFAULT NULL COMMENT 'é¢åææææ¶é´', |
| | | `START_DATE` datetime DEFAULT NULL COMMENT 'æææå¼å§æ¶é´', |
| | | `END_DATE` datetime DEFAULT NULL COMMENT 'æææç»ææ¶é´', |
| | | `USE_DATE` datetime DEFAULT NULL COMMENT 'ä½¿ç¨æ¶é´', |
| | | `ORDER_ID` int DEFAULT NULL COMMENT 'å
³è订å主é®', |
| | | `NAME` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'åç§°', |
| | | `INFO` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '说æ', |
| | | `TYPE` int DEFAULT NULL COMMENT 'ç±»å 0å¹³å°ä¼æ å¸ ', |
| | | `LIMIT_PRICE` BIGINT DEFAULT NULL COMMENT '满é¢ï¼åï¼', |
| | | `PRICE` BIGINT DEFAULT NULL COMMENT '伿 éé¢ï¼åï¼', |
| | | `GET_METHOD` int DEFAULT NULL COMMENT 'é¢åæ¹å¼ 0é¢å', |
| | | `COUPON_TYPE` int DEFAULT NULL COMMENT '伿 å¸ç±»åï¼0=满åå¸ï¼', |
| | | `PUSH_DAYS` int DEFAULT NULL COMMENT 'æ¨éåé¢åææå¤©æ°', |
| | | `VALID_DAYS` int DEFAULT NULL COMMENT 'é¢å忿天æ°', |
| | | PRIMARY KEY (`ID`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ç¨æ·ä¼æ å¸'; |
| | | |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberCoupon:create', 'æ°å»ºç¨æ·ä¼æ å¸', 'ç¨æ·ä¼æ å¸', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberCoupon:delete', 'å é¤ç¨æ·ä¼æ å¸', 'ç¨æ·ä¼æ å¸', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberCoupon:update', 'ä¿®æ¹ç¨æ·ä¼æ å¸', 'ç¨æ·ä¼æ å¸', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:memberCoupon:query', 'æ¥è¯¢ç¨æ·ä¼æ å¸', 'ç¨æ·ä¼æ å¸', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0); |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/12 订åå¢å æ¯å¦è½¬æ¢è®¢ååæ®µ |
| | | -- ============================================================ |
| | | ALTER TABLE `orders` ADD COLUMN `IS_CONVERTED` INT DEFAULT 0 COMMENT 'æ¯å¦è½¬æ¢è®¢åï¼0=å¦ï¼1=æ¯ï¼å¼å°è½¬å°±å°ï¼' AFTER `TYPE`; |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/11 叿ºçæ¬ç±»ååæ®µ |
| | | -- ============================================================ |
| | | ALTER TABLE `driver_info` ADD COLUMN `VERSION_TYPE` INT DEFAULT 0 COMMENT '叿ºçæ¬ç±»åï¼0=æ£å¼çæ¬ï¼1=åæ´çæ¬'; |
| | | ALTER TABLE `driver_info` ADD COLUMN `RELATION_DRIVER_ID` INT DEFAULT NULL COMMENT 'å
³èæ£å¼çæ¬å¸æºä¸»é®ï¼åæ´çæ¬ä½¿ç¨ï¼'; |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/09 é¨åºæ¶çæ¯ä¾é
ç½®åæ®µ |
| | | -- ============================================================ |
| | | ALTER TABLE `shop_info` ADD COLUMN `REVENUE_SHARE_CONFIG` TEXT COMMENT 'æ¶çæ¯ä¾é
ç½®(JSON): remoteCompanyDeposit/remotePersonalDeposit/remoteCompanyTake/remotePersonalTake/localCompanyDeposit/localPersonalDeposit'; |
| | | |
| | | ALTER TABLE `member` ADD COLUMN `LOGIN_SHOP_ID` INT COMMENT 'å·²ç»å½çé¨åºä¸»é®'; |
| | | |
| | | ALTER TABLE `shop_info` ADD COLUMN `VERSION_TYPE` INT DEFAULT 0 COMMENT 'é¨åºçæ¬ç±»åï¼0=æ£å¼çæ¬ï¼1=åæ´çæ¬'; |
| | | ALTER TABLE `shop_info` ADD COLUMN `RELATION_SHOP_ID` INT COMMENT 'å
³èæ£å¼çæ¬é¨åºä¸»é®ï¼åæ´çæ¬ä½¿ç¨ï¼'; |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/07 æä½å徿 ¡éªé
ç½® |
| | | -- ============================================================ |
| | | INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OPERATION_CONFIG'), '500', 'OPERATION_RADIUS', 'å
许æä½åå¾(m)', 0, 0, 1, NOW(), 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/05/07 å³å°å°è¾¾åä»¶æ¶é´éç¥ç¸å
³åæ´ |
| | | -- ============================================================ |
| | | -- 订å表å¢å åä»¶éç¥ç¶æå段 |
| | | ALTER TABLE `orders` ADD COLUMN `PICK_UP_NOTIFY_STATUS` INT DEFAULT 0 COMMENT 'åä»¶æ¶é´å³å°å°è¾¾éç¥ç¶æï¼0=æªéç¥ï¼1=å·²éç¥'; |
| | | |
| | | -- è¿è¥é
ç½®ï¼å³å°å°è¾¾åä»¶æ¶é´æåéç¥(åé) |
| | | INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OPERATION_CONFIG'), '30', 'ARRIVAL_PICK_UP_TIME', 'å³å°å°è¾¾åä»¶æ¶é´æåéç¥(åé)', 0, 0, 1, NOW(), 0); |
| | | |
| | | -- 宿¶ä»»å¡ï¼å³å°å°è¾¾åä»¶æ¶é´éç¥ï¼æ¯5åéæ§è¡ä¸æ¬¡ï¼ |
| | | INSERT INTO `system_job` (`JOB_NAME`, `HANDLER`, `CRON`, `WITH_LOG`, `WITH_ASYNC`, `STATUS`, `REMARK`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('å³å°å°è¾¾åä»¶æ¶é´éç¥', 'arrivalPickUpNotifyJob', '0 */5 * * * ?', 1, 0, 1, 'æ¥è¯¢å³å°å°è¾¾åä»¶æ¶é´ç订åï¼åéçä¿¡éç¥ä¼å', 1, NOW(), 1, NOW(), 0); |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- 2026/04/30 APPçæ¬æä»¶ä¸ä¼ åå
¸é
ç½® |
| | | -- ============================================================ |
| | | INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OSS'), '', 'APP_FILES', 'APPçæ¬æä»¶åå¨è·¯å¾', 0, 0, 1, NOW(), 0); |
| | |
| | | dto.setNoGrabNotifyTime(getValue(Constants.OP_NO_GRAB_NOTIFY_TIME)); |
| | | dto.setNoGrabNotifyUsers(getValue(Constants.OP_NO_GRAB_NOTIFY_USERS)); |
| | | dto.setDefaultDeliveryRange(getValue(Constants.OP_DEFAULT_DELIVERY_RANGE)); |
| | | dto.setArrivalPickUpTime(getValue(Constants.OP_ARRIVAL_PICK_UP_TIME)); |
| | | dto.setOperationRadius(getValue(Constants.OP_OPERATION_RADIUS)); |
| | | dto.setOrderCouponOrderCount(getValue(Constants.OP_ORDER_COUPON_ORDER_COUNT)); |
| | | dto.setOrderCouponGiftCount(getValue(Constants.OP_ORDER_COUPON_GIFT_COUNT)); |
| | | dto.setOrderCouponId(getValue(Constants.OP_ORDER_COUPON_ID)); |
| | | dto.setRegisterCouponYears(getValue(Constants.OP_REGISTER_COUPON_YEARS)); |
| | | dto.setRegisterCouponGiftCount(getValue(Constants.OP_REGISTER_COUPON_GIFT_COUNT)); |
| | | dto.setRegisterCouponId(getValue(Constants.OP_REGISTER_COUPON_ID)); |
| | | dto.setRegisterGiftCouponIds(getValue(Constants.OP_REGISTER_GIFT_COUPON_IDS)); |
| | | return dto; |
| | | } |
| | | |
| | |
| | | saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_TIME, "æ 人æ¢åéç¥æ¶é´", dto.getNoGrabNotifyTime()); |
| | | saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_USERS, "æ 人æ¢åçä¿¡éç¥äººå", dto.getNoGrabNotifyUsers()); |
| | | saveOrUpdate(Constants.OP_DEFAULT_DELIVERY_RANGE, "é»è®¤é
éèå´", dto.getDefaultDeliveryRange()); |
| | | saveOrUpdate(Constants.OP_ARRIVAL_PICK_UP_TIME, "å³å°å°è¾¾åä»¶æ¶é´éç¥", dto.getArrivalPickUpTime()); |
| | | // saveOrUpdate(Constants.OP_OPERATION_RADIUS, "å
许æä½åå¾", dto.getOperationRadius()); |
| | | saveOrUpdate(Constants.OP_ORDER_COUPON_ORDER_COUNT, "ä¸åèµ é-è®¢åæ¬¡æ°", dto.getOrderCouponOrderCount()); |
| | | saveOrUpdate(Constants.OP_ORDER_COUPON_GIFT_COUNT, "ä¸åèµ é-è³å¤èµ 鿬¡æ°", dto.getOrderCouponGiftCount()); |
| | | saveOrUpdate(Constants.OP_ORDER_COUPON_ID, "ä¸åèµ é-伿 å¸ID", dto.getOrderCouponId()); |
| | | saveOrUpdate(Constants.OP_REGISTER_COUPON_YEARS, "注åèµ é-注åå¹´æ°", dto.getRegisterCouponYears()); |
| | | saveOrUpdate(Constants.OP_REGISTER_COUPON_GIFT_COUNT, "注åèµ é-è³å¤èµ 鿬¡æ°", dto.getRegisterCouponGiftCount()); |
| | | saveOrUpdate(Constants.OP_REGISTER_COUPON_ID, "注åèµ é-伿 å¸ID", dto.getRegisterCouponId()); |
| | | saveOrUpdate(Constants.OP_REGISTER_GIFT_COUPON_IDS, "æ°æ³¨åèµ é-伿 å¸IDs", dto.getRegisterGiftCouponIds()); |
| | | } |
| | | |
| | | private String getValue(String label) { |
| | |
| | | public static String generateTokenForRedis(Integer userId, Integer userType, String userInfo, RedisTemplate<String,Object> redisTemplate) { |
| | | // å é¤è¯¥ç¨æ·ä¹åç»å½çtoken |
| | | String userTokenMappingKey = Constants.REDIS_TOKEN_KEY + "user_" + userType + "_" + userId; |
| | | |
| | | String oldToken = (String) redisTemplate.opsForValue().get(userTokenMappingKey); |
| | | if (StringUtils.isNotBlank(oldToken)) { |
| | | redisTemplate.delete(Constants.REDIS_TOKEN_KEY + oldToken); |
| | |
| | | } |
| | | |
| | | |
| | | public static String generateShopTokenForRedis(Integer userId, String userInfo, RedisTemplate<String,Object> redisTemplate) { |
| | | // å é¤è¯¥ç¨æ·ä¹åç»å½çtoken |
| | | String userTokenMappingKey = Constants.REDIS_TOKEN_KEY + "user_" + Constants.TWO + "_" + userId; |
| | | String oldToken = (String) redisTemplate.opsForValue().get(userTokenMappingKey); |
| | | if (StringUtils.isNotBlank(oldToken)) { |
| | | redisTemplate.delete(Constants.REDIS_TOKEN_KEY + oldToken); |
| | | } |
| | | // çææ°token |
| | | String tokenKey = Constants.TWO +""+ UUID.randomUUID() + "_" + userId; |
| | | redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY + tokenKey, userInfo, redisExpire, TimeUnit.DAYS); |
| | | // è®°å½ç¨æ·ä¸tokençæ å°å
³ç³» |
| | | redisTemplate.opsForValue().set(userTokenMappingKey, tokenKey, redisExpire, TimeUnit.DAYS); |
| | | return tokenKey; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å·æ°ä»¤ç |
| | | * |
| | |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.dao.business.model.DriverInfo; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.ShopInfo; |
| | | import io.jsonwebtoken.JwtException; |
| | |
| | | throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE); |
| | | } |
| | | String openid = shop.getOpenid(); |
| | | Integer shopId = getTokenId(token); |
| | | Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,0) from shop_info where id = ?", Integer.class, shopId); |
| | | Integer shopId = shop.getId();//getTokenId(token); |
| | | Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,0) from shop_info where VERSION_TYPE = 0 and id = ?", Integer.class, shopId); |
| | | if(isDeleted== Constants.ONE){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"åæ·å·²å é¤,请è系管çå"); |
| | | } |
| | | Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0) from shop_info where id = ?", Integer.class, shopId); |
| | | Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0) from shop_info where VERSION_TYPE = 0 and id = ?", Integer.class, shopId); |
| | | if(isForbidden == Constants.ONE){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"åæ·å·²ç¦ç¨,请è系管çå"); |
| | | } |
| | | Integer count = dao.queryForObject("select count(1) from shop_info where id = ?", Integer.class, shopId); |
| | | Integer count = dao.queryForObject("select count(1) from shop_info where VERSION_TYPE = 0 and id = ?", Integer.class, shopId); |
| | | if (count != null && count > 0) { |
| | | request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId()); |
| | | return true; |
| | |
| | | if(StringUtils.isBlank(tokenRedis)){ |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE); |
| | | } |
| | | Integer memberId = getTokenId(token); |
| | | Integer driverId = getTokenId(token); |
| | | //æ¥è¯¢å¸æºä¿¡æ¯ |
| | | Integer memberId = dao.queryForObject(" select COALESCE(member_id,0) from driver_info where VERSION_TYPE = 0 and id = ?", Integer.class, driverId); |
| | | if(Objects.isNull(memberId)||Constants.equalsInteger(memberId,Constants.ZERO)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"叿ºä¿¡æ¯ä¿¡æ¯åºé"); |
| | | } |
| | | Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,1) from member where user_type = 1 and id = ?", Integer.class, memberId); |
| | | if(isDeleted== Constants.ONE){ |
| | | if(isDeleted == Constants.ONE){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"叿ºä¿¡æ¯å·²å é¤,请è系管çå"); |
| | | } |
| | | Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0) from member where user_type = 1 and id = ?", Integer.class, memberId); |
| | |
| | | } |
| | | Integer count = dao.queryForObject("select count(1) from member where user_type = 1 and id = ?", Integer.class, memberId); |
| | | if (count != null && count > 0) { |
| | | request.setAttribute(JwtTokenUtil.DRIVER_ID, memberId); |
| | | request.setAttribute(JwtTokenUtil.DRIVER_ID, driverId); |
| | | return true; |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"叿ºä¿¡æ¯åºé"); |
| | |
| | | |
| | | com.wechat.pay.java.service.payments.jsapi.model.Amount amount = |
| | | new com.wechat.pay.java.service.payments.jsapi.model.Amount(); |
| | | amount.setTotal(totalCents.intValue()); |
| | | amount.setTotal(1);//totalCents.intValue()); |
| | | amount.setCurrency("CNY"); |
| | | request.setAmount(amount); |
| | | |
| | |
| | | request.setNotifyUrl(notifyUrl); |
| | | |
| | | AmountReq amount = new AmountReq(); |
| | | amount.setRefund(refundCents); |
| | | amount.setTotal(totalCents); |
| | | amount.setRefund(1L);//refundCents); |
| | | amount.setTotal(1L);//totalCents); |
| | | amount.setCurrency("CNY"); |
| | | request.setAmount(amount); |
| | | |
| | |
| | | public static final String FEE_STANDARDS ="FEE_STANDARDS" ; |
| | | public static final String ABOUT_US ="ABOUT_US" ; |
| | | public static final String SERVER_PHONE ="SERVER_PHONE" ; |
| | | public static final String ARRIVAL_PICK_UP_TIME ="ARRIVAL_PICK_UP_TIME" ;//å³å°å°è¾¾åä»¶æ¶é´é
ç½®(åé) |
| | | |
| | | public static final String USER_AGREEMENT ="USER_AGREEMENT" ; |
| | | public static final String PRIVACY_AGREEMENT ="PRIVACY_AGREEMENT" ; |
| | | |
| | |
| | | public static final String OP_NO_GRAB_NOTIFY_TIME = "NO_GRAB_NOTIFY_TIME"; |
| | | public static final String OP_NO_GRAB_NOTIFY_USERS = "NO_GRAB_NOTIFY_USERS"; |
| | | public static final String OP_DEFAULT_DELIVERY_RANGE = "DEFAULT_DELIVERY_RANGE"; |
| | | public static final String OP_ARRIVAL_PICK_UP_TIME = "ARRIVAL_PICK_UP_TIME"; |
| | | public static final String OP_OPERATION_RADIUS = "OPERATION_RADIUS"; |
| | | public static final String OP_ORDER_COUPON_ORDER_COUNT = "ORDER_COUPON_ORDER_COUNT"; |
| | | public static final String OP_ORDER_COUPON_GIFT_COUNT = "ORDER_COUPON_GIFT_COUNT"; |
| | | public static final String OP_ORDER_COUPON_ID = "ORDER_COUPON_ID"; |
| | | public static final String OP_REGISTER_COUPON_YEARS = "REGISTER_COUPON_YEARS"; |
| | | public static final String OP_REGISTER_COUPON_GIFT_COUNT = "REGISTER_COUPON_GIFT_COUNT"; |
| | | public static final String OP_REGISTER_COUPON_ID = "REGISTER_COUPON_ID"; |
| | | public static final String OP_REGISTER_GIFT_COUPON_IDS = "REGISTER_GIFT_COUPON_IDS"; |
| | | |
| | | // è¯ç¨äºæå°æºé
ç½® |
| | | public static final String XPYUN_CONFIG = "XPYUN_CONFIG"; |
| | |
| | | public enum OrderLogType { |
| | | createOrder(1, "å建订å", "ä¼åå建å¯å订åï¼è®¢åç¼å·ã{param}ã"), |
| | | payOrder(1, "è®¢åæ¯ä»", "ä¼åæ¯ä»æåï¼æ¯ä»éé¢ã{param}ãå
"), |
| | | urgent(2, "å¹³å°å æ¥", "å¹³å°å æ¥ï¼å¥å±éã{param}ãå
"), |
| | | assignDriver(3, "å¹³å°ææ´¾", "å¹³å°ææ´¾å¸æºã{param}ãæ¥åï¼å¥å±éã{param1}ãå
"), |
| | | urgent(2, "å¹³å°å æ¥", "å¹³å°å æ¥ï¼å æ¥è´¹ã{param}ãå
"), |
| | | assignDriver(3, "å¹³å°ææ´¾", "å¹³å°ææ´¾å¸æºã{param}ãæ¥åï¼å æ¥è´¹ã{param1}ãå
"), |
| | | memberCancel(4, "ä¼ååæ¶è®¢å", "{param}"), |
| | | driverCancel(4, "叿ºåæ¶è®¢å", "{param}"), |
| | | systemCancel(4, "ç³»ç»èªå¨åæ¶", "{param}"), |
| | |
| | | |
| | | |
| | | /** |
| | | * 伿 å¸ç¶æ |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum CouponStatus { |
| | | waitClaim(0, "å¾
é¢å"), |
| | | claimed(1, "å·²é¢å"), |
| | | used(2, "已使ç¨"), |
| | | expiredUnclaimed(98, "æªé¢åå·²è¿æ"), |
| | | expired(99, "å·²è¿æ") |
| | | ; |
| | | private final int status; |
| | | private final String desc; |
| | | |
| | | public int getKey() { return status; } |
| | | public String getValue() { return desc; } |
| | | } |
| | | |
| | | /** |
| | | * 订åç¶æï¼å°±å°/å¼å°ç»ä¸ï¼ |
| | | * å°±å°å¯å: 0â1â2â3â(6)â7 / 96~99 |
| | | * å¼å°å¯å: 0â1â2â3â4â5â(6)â7 / 96~99 |
| | |
| | | deposited(2, "å·²å¯å"), |
| | | accepted(3, "å·²æ¥å"), |
| | | delivering(4, "æ´¾éä¸"), |
| | | arrived(5, "å·²å°åº/å·²éè¾¾/å¾
åä»¶"), |
| | | arrived(5, "å·²å°åº/å·²éè¾¾"), |
| | | overdue(6, "åå¨é¾æ"), //å¼ç¨ |
| | | finished(7, "已宿"), |
| | | cancelled(99, "已忶") |
| | |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum SmsNotify { |
| | | PLATFORM_WAIT_GRAB("SMS_505865290", "å¹³å°ç«¯-å¾
æ¢å", "æ¨å¥½ï¼è®¢åï¼{orderNo}å·²è¶
è¿{time}åéæ å¸æºæ¢åï¼è¯·å°½å¿«å æ¥æ´¾åï¼é¿å
客æ·è¿ä¹
çå¾
ã"), |
| | | SHOP_REFUNDING("SMS_505905263", "é¨åºç«¯-鿬¾ä¸", "è¡æè®¢åï¼{orderNo}客æ·å·²æäº¤é款ç³è¯·ï¼è¯·å°½å¿«å¤çã"), |
| | | SHOP_WAIT_VERIFY("SMS_505915292", "é¨åºç«¯-å¾
æ ¸éª", "æ°è¡æè®¢åï¼{orderNo}客æ·å·²æ¯ä»ï¼è¯·å°½å¿«æ ¸éªç¨æ·ç©åä¿¡æ¯ã"), |
| | | DRIVER_REFUNDING("SMS_505905264", "叿ºç«¯-鿬¾ä¸", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²æäº¤é款ç³è¯·ï¼è¯¥è®¢åä»»å¡å·²åæ¶ï¼è¯·å¿åå¾ã"), |
| | | DRIVER_WAIT_PICKUP("SMS_505960277", "叿ºç«¯-å¾
åä»¶", "æ¨å·²æ¢åæåï¼è®¢å{orderNo}ï¼è¯·ææ¶å°{address}åä»¶ã"), |
| | | MEMBER_CANCELLED("SMS_505615328", "ä¼å端-已忶", "æ¨çè¡æè®¢åï¼{orderNo}å·²åæ¶ï¼æè°¢æ¨çæ¯æï¼æ¬¢è¿ä¸æ¬¡åä¼ã"), |
| | | MEMBER_REFUNDED("SMS_505850299", "ä¼å端-已鿬¾", "æ¨çè¡æè®¢åï¼{orderNo}鿬¾å·²å®æï¼éé¢{money}å
å°åè·¯éåï¼è¯·æ³¨ææ¥æ¶ã"), |
| | | MEMBER_ARRIVED("SMS_505645328", "ä¼å端-å·²éè¾¾", "æ¨çè¡æè®¢åï¼{orderNo}å·²éå°{address}ï¼è¯·åæ¶åä»¶ï¼åä»¶ç ï¼{code}ã"), |
| | | MEMBER_DELIVERING("SMS_505715321", "ä¼å端-é
éä¸", "æ¨çè¡æè®¢åï¼{orderNo}å·²ç±å¸æº{name}åä»¶ï¼æ£è¿å¾ç®çå°ã"), |
| | | VERIFY_CODE("SMS_333770877", "éªè¯ç çä¿¡", "æ¨çéªè¯ç 为ï¼{code}ï¼è¯·å¿æ³é²äºä»äººï¼"), |
| | | DRIVER_AUTH_REJECTED("SMS_505790115", "叿ºç«¯-叿ºè®¤è¯è¢«æç»", "å°æ¬ç{driver}ï¼å¾éæ¾ï¼æ¨ç叿ºè®¤è¯æªéè¿å®¡æ ¸ãåå ï¼{reason}ãæ¨å¯ä¿®æ¹èµæåéæ°æäº¤ã"), |
| | | DRIVER_AUTH_APPROVED("SMS_505885083", "叿ºç«¯-叿ºè®¤è¯éè¿", "å°æ¬ç{driver}ï¼æåæ¨å·²éè¿å¹³å°å¸æºè®¤è¯å®¡æ ¸ãæ¨å¯ç»å½å¸æºç«¯APPå¼å§æ¥åï¼é
éè¿ç¨ä¸è¯·æ³¨æå®å
¨ï¼ç¥æ¨æ¥å顺å©ï¼"), |
| | | DRIVER_URGENT_DISPATCH("SMS_505940293", "叿ºç«¯-å æ¥æ´¾å", "æ¨å¥½ï¼æ¨æä¸ä¸ªæ°çè¡æè®¢åï¼ç¼å·ï¼{orderNo}ï¼ãèµ·ç¹ï¼{address1}ï¼ç»ç¹ï¼{address2}ï¼é
éè´¹{money1}å
ï¼å«å æ¥è´¹{money2}å
ï¼ã请尽快确认订åä»»å¡ã"), |
| | | SHOP_AUTH_REJECTED("SMS_505925106", "é¨åºç«¯-èµæå®¡æ ¸è¢«æç»", "å¾éæ¾ï¼æ¨çé¨åº\"{storeName}\"æªéè¿å®¡æ ¸ï¼åå ï¼{reason}ï¼æ¨å¯ä¿®æ¹èµæåéæ°æäº¤ã"), |
| | | SHOP_AUTH_APPROVED_DEPOSIT("SMS_505705111", "é¨åºç«¯-å®¡æ ¸éè¿é缴纳æ¼é", "æåæ¨ï¼æ¨çé¨åº\"{storeName}\"å·²éè¿åæ¥å®¡æ ¸ã请æ¯ä»æ¼é{money}å
以宿å
¥é©»ï¼æ¯ä»åå³å¯ç»å½é¨åºåå°æ£å¼æ¥åã"), |
| | | SHOP_AUTH_SUCCESS("SMS_505915289", "é¨åºç«¯-æåå
¥é©»éç¥", "æåæ¨ï¼æ¨çé¨åº\"{storeName}\"å·²éè¿å¹³å°å®¡æ ¸ï¼æ£å¼å
¥é©»æåã æ¨å¯ç»å½åå®¶åå°å¼å§æ¥åï¼è´¦å·ï¼æ³¨åææºå·ï¼åå§å¯ç ï¼ï¼{password}ï¼å»ºè®®é¦æ¬¡ç»å½åä¿®æ¹ï¼ã"), |
| | | PLATFORM_WAIT_GRAB("SMS_505865290", "å¹³å°ç«¯-å¾
æ¢å", "æ¨å¥½ï¼è®¢åï¼{orderNo}å·²è¶
è¿{time}åéæ å¸æºæ¢åï¼è¯·å°½å¿«å æ¥æ´¾åï¼é¿å
客æ·è¿ä¹
çå¾
ã", true), |
| | | SHOP_REFUNDING("SMS_505905263", "é¨åºç«¯-鿬¾ä¸", "è¡æè®¢åï¼{orderNo}客æ·å·²æäº¤é款ç³è¯·ï¼è¯·å°½å¿«å¤çã", false), |
| | | SHOP_WAIT_VERIFY("SMS_505915292", "é¨åºç«¯-å¾
æ ¸éª", "æ°è¡æè®¢åï¼{orderNo}客æ·å·²æ¯ä»ï¼è¯·å°½å¿«æ ¸éªç¨æ·ç©åä¿¡æ¯ã", false), |
| | | DRIVER_REFUNDING("SMS_505905264", "叿ºç«¯-鿬¾ä¸", "è¡æè®¢åï¼{orderNo}ç¨æ·å·²æäº¤é款ç³è¯·ï¼è¯¥è®¢åä»»å¡å·²åæ¶ï¼è¯·å¿åå¾ã", true), |
| | | DRIVER_WAIT_PICKUP("SMS_505960277", "叿ºç«¯-å¾
åä»¶", "æ¨å·²æ¢åæåï¼è®¢å{orderNo}ï¼è¯·ææ¶å°{address}åä»¶ã", true), |
| | | MEMBER_CANCELLED("SMS_505615328", "ä¼å端-已忶", "æ¨çè¡æè®¢åï¼{orderNo}å·²åæ¶ï¼æè°¢æ¨çæ¯æï¼æ¬¢è¿ä¸æ¬¡åä¼ã", true), |
| | | MEMBER_REFUNDED("SMS_505850299", "ä¼å端-已鿬¾", "æ¨çè¡æè®¢åï¼{orderNo}鿬¾å·²å®æï¼éé¢{money}å
å°åè·¯éåï¼è¯·æ³¨ææ¥æ¶ã", true), |
| | | MEMBER_ARRIVED("SMS_505645328", "ä¼å端-å·²éè¾¾", "æ¨çè¡æè®¢åï¼{orderNo}å·²éå°{address}ï¼è¯·åæ¶åä»¶ï¼åä»¶ç ï¼{code}ã", true), |
| | | MEMBER_DELIVERING("SMS_505715321", "ä¼å端-é
éä¸", "æ¨çè¡æè®¢åï¼{orderNo}å·²ç±å¸æº{name}åä»¶ï¼æ£è¿å¾ç®çå°ã", true), |
| | | VERIFY_CODE("SMS_333770877", "éªè¯ç çä¿¡", "æ¨çéªè¯ç 为ï¼{code}ï¼è¯·å¿æ³é²äºä»äººï¼", true), |
| | | DRIVER_AUTH_REJECTED("SMS_505790115", "叿ºç«¯-叿ºè®¤è¯è¢«æç»", "å°æ¬ç{driver}ï¼å¾éæ¾ï¼æ¨ç叿ºè®¤è¯æªéè¿å®¡æ ¸ãåå ï¼{reason}ãæ¨å¯ä¿®æ¹èµæåéæ°æäº¤ã", true), |
| | | DRIVER_AUTH_APPROVED("SMS_505885083", "叿ºç«¯-叿ºè®¤è¯éè¿", "å°æ¬ç{driver}ï¼æåæ¨å·²éè¿å¹³å°å¸æºè®¤è¯å®¡æ ¸ãæ¨å¯ç»å½å¸æºç«¯APPå¼å§æ¥åï¼é
éè¿ç¨ä¸è¯·æ³¨æå®å
¨ï¼ç¥æ¨æ¥å顺å©ï¼", true), |
| | | DRIVER_URGENT_DISPATCH("SMS_505940293", "叿ºç«¯-å æ¥æ´¾å", "æ¨å¥½ï¼æ¨æä¸ä¸ªæ°çè¡æè®¢åï¼ç¼å·ï¼{orderNo}ï¼ãèµ·ç¹ï¼{address1}ï¼ç»ç¹ï¼{address2}ï¼é
éè´¹{money1}å
ï¼å«å æ¥è´¹{money2}å
ï¼ã请尽快确认订åä»»å¡ã", true), |
| | | SHOP_AUTH_REJECTED("SMS_505925106", "é¨åºç«¯-èµæå®¡æ ¸è¢«æç»", "å¾éæ¾ï¼æ¨çé¨åº\"{storeName}\"æªéè¿å®¡æ ¸ï¼åå ï¼{reason}ï¼æ¨å¯ä¿®æ¹èµæåéæ°æäº¤ã", true), |
| | | SHOP_AUTH_APPROVED_DEPOSIT("SMS_506135030", "é¨åºç«¯-å®¡æ ¸éè¿é缴纳æ¼é", "æåæ¨ï¼æ¨çé¨åº\"{storeName}\"å·²éè¿åæ¥å®¡æ ¸ã请æ¯ä»æ¼é{money}å
以宿å
¥é©»ï¼æ¯ä»åå³å¯ç»å½é¨åºåå°æ£å¼æ¥åã", true), |
| | | SHOP_AUTH_SUCCESS("SMS_505885083", "é¨åºç«¯-æåå
¥é©»éç¥", "æåæ¨ï¼æ¨çé¨åº\"{storeName}\"å·²éè¿å¹³å°å®¡æ ¸ï¼æ£å¼å
¥é©»æåã æ¨å¯ç»å½åå®¶åå°å¼å§æ¥åï¼è´¦å·ï¼æ³¨åææºå·ï¼åå§å¯ç ï¼ï¼{password}ï¼å»ºè®®é¦æ¬¡ç»å½åä¿®æ¹ï¼ã", true), |
| | | MEMBER_TIME_OUT("SMS_506190182", "ä¼å端-å³å°è¶
æ¶", "æ¨çè¡æè®¢åï¼{orderNo}å³å°å°è¾¾é¢è®¡åä»¶æ¶é´ï¼è¯·å°½å¿«åä»¶ï¼è¶
æ¶å°äº§çé¾æè´¹ç¨ï¼è¯·ç¥æã", true), |
| | | ; |
| | | |
| | | private final String templateCode; |
| | | private final String title; |
| | | private final String content; |
| | | private final boolean enabled; |
| | | |
| | | public String format(String... params) { |
| | | String result = this.content; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.business; |
| | | |
| | | import com.doumee.dao.business.model.Coupon; |
| | | import com.github.yulichang.base.MPJBaseMapper; |
| | | |
| | | public interface CouponMapper extends MPJBaseMapper<Coupon> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.business; |
| | | |
| | | import com.doumee.dao.business.model.MemberCoupon; |
| | | import com.github.yulichang.base.MPJBaseMapper; |
| | | |
| | | public interface MemberCouponMapper extends MPJBaseMapper<MemberCoupon> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.business.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.doumee.core.annotation.excel.ExcelColumn; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @ApiModel("伿 å¸ä¿¡æ¯è¡¨") |
| | | @TableName("`coupon`") |
| | | public class Coupon { |
| | | |
| | | @TableId(type = IdType.AUTO) |
| | | @ApiModelProperty(value = "主é®", example = "1") |
| | | @ExcelColumn(name = "主é®") |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value = "å建人ç¼ç ", example = "1") |
| | | @ExcelColumn(name = "å建人ç¼ç ") |
| | | private Integer creator; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | @ExcelColumn(name = "å建æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createDate; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°äººç¼ç ", example = "1") |
| | | @ExcelColumn(name = "æ´æ°äººç¼ç ") |
| | | private Integer editor; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°æ¶é´") |
| | | @ExcelColumn(name = "æ´æ°æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date editDate; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å é¤ 0å¦ 1æ¯", example = "0") |
| | | @ExcelColumn(name = "æ¯å¦å é¤") |
| | | private Integer isdeleted; |
| | | |
| | | @ApiModelProperty(value = "ç¶æ 0å¯ç¨ 1ç¦ç¨", example = "0") |
| | | @ExcelColumn(name = "ç¶æ") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "夿³¨") |
| | | @ExcelColumn(name = "夿³¨") |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "åç§°") |
| | | @ExcelColumn(name = "åç§°") |
| | | private String name; |
| | | |
| | | @ApiModelProperty(value = "说æ") |
| | | @ExcelColumn(name = "说æ") |
| | | private String info; |
| | | |
| | | @ApiModelProperty(value = "ç±»å 0å¹³å°ä¼æ å¸", example = "0") |
| | | @ExcelColumn(name = "ç±»å") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "满é¢ï¼åï¼") |
| | | @ExcelColumn(name = "满é¢") |
| | | private Long limitPrice; |
| | | |
| | | @ApiModelProperty(value = "伿 éé¢ï¼åï¼") |
| | | @ExcelColumn(name = "伿 éé¢") |
| | | private Long price; |
| | | |
| | | @ApiModelProperty(value = "æ¨éåé¢åææå¤©æ°", example = "7") |
| | | @ExcelColumn(name = "æ¨éåé¢åææå¤©æ°") |
| | | private Integer pushDays; |
| | | |
| | | @ApiModelProperty(value = "é¢å忿天æ°", example = "30") |
| | | @ExcelColumn(name = "é¢å忿天æ°") |
| | | private Integer validDays; |
| | | |
| | | @ApiModelProperty(value = "é¢åæ¹å¼ 0é¢å", example = "0") |
| | | @ExcelColumn(name = "é¢åæ¹å¼") |
| | | private Integer getMethod; |
| | | |
| | | @ApiModelProperty(value = "使ç¨ç±»åï¼0=åºå®æ¶é¿", example = "0") |
| | | @ExcelColumn(name = "使ç¨ç±»å") |
| | | private Integer useType; |
| | | |
| | | @ApiModelProperty(value = "伿 å¸ç±»åï¼0=满åå¸", example = "0") |
| | | @ExcelColumn(name = "伿 å¸ç±»å") |
| | | private Integer couponType; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ä¿®æ¹äººåç§°") |
| | | private String editorName; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "é¢åæ°é") |
| | | private Long claimCount; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ä½¿ç¨æ°é") |
| | | private Long usedCount; |
| | | } |
| | |
| | | @ApiModelProperty(value = "æå
æ¨éå«å") |
| | | private String jpushAlias; |
| | | |
| | | @ApiModelProperty(value = "叿ºçæ¬ç±»åï¼0=æ£å¼çæ¬ï¼1=åæ´çæ¬", example = "0") |
| | | private Integer versionType; |
| | | |
| | | @ApiModelProperty(value = "å
³èæ£å¼çæ¬å¸æºä¸»é®ï¼åæ´çæ¬ä½¿ç¨ï¼", example = "1") |
| | | private Integer relationDriverId; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "æ¯å¦åå¨å®¡æ¹éè¿çæ£å¼çæ¬:true=æï¼false=æ ") |
| | | private Boolean hasApprovedOfficial; |
| | | } |
| | |
| | | @ApiModelProperty(value = "ç¨æ·ç±»åï¼0=ä¼åç¨æ·ï¼1=叿ºï¼2=åºéºäººåï¼(叿ºä¸åºéºååä¼å表使ç¨å主é®å¼)", example = "1") |
| | | private Integer userType; |
| | | |
| | | @ApiModelProperty(value = "å·²ç»å½çé¨åºä¸»é®", example = "1") |
| | | private Integer loginShopId; |
| | | |
| | | @ApiModelProperty(value = "ä¸å¡ç¶æï¼0=æªè®¤è¯ï¼1=认è¯éè¿ï¼2=è®¤è¯æªéè¿ ï¼3=å·²æ¯ä»æ¼é", example = "1") |
| | | private Integer businessStatus; |
| | | |
| | |
| | | @TableField(exist = false) |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "ä¸åèµ é伿 å¸å·²èµ 鿬¡æ°", example = "0") |
| | | private Integer orderCouponGiftCount; |
| | | |
| | | @ApiModelProperty(value = "æ³¨åæ»¡å¹´èµ é伿 å¸å·²èµ 鿬¡æ°", example = "0") |
| | | private Integer registerCouponGiftCount; |
| | | |
| | | @ApiModelProperty(value = "头åå
¨è·¯å¾") |
| | | @TableField(exist = false) |
| | | private String fullCoverImage; |
| | | |
| | | @ApiModelProperty(value = "æ¥åæé", example = "1") |
| | | @TableField(exist = false) |
| | | private Integer level; |
| | | |
| | | @ApiModelProperty(value = "è·ç¦»", example = "1") |
| | | @TableField(exist = false) |
| | | private BigDecimal distance; |
| | | |
| | | @ApiModelProperty(value = "身份信æ¯", example = "1") |
| | | @TableField(exist = false) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.business.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.doumee.core.annotation.excel.ExcelColumn; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @ApiModel("ç¨æ·ä¼æ å¸") |
| | | @TableName("`member_coupon`") |
| | | public class MemberCoupon { |
| | | |
| | | @TableId(type = IdType.AUTO) |
| | | @ApiModelProperty(value = "主é®", example = "1") |
| | | @ExcelColumn(name = "主é®") |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value = "å建人ç¼ç ", example = "1") |
| | | @ExcelColumn(name = "å建人ç¼ç ") |
| | | private Integer creator; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | @ExcelColumn(name = "å建æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createDate; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°äººç¼ç ", example = "1") |
| | | @ExcelColumn(name = "æ´æ°äººç¼ç ") |
| | | private Integer editor; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°æ¶é´") |
| | | @ExcelColumn(name = "æ´æ°æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date editDate; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å é¤ 0å¦ 1æ¯", example = "0") |
| | | @ExcelColumn(name = "æ¯å¦å é¤") |
| | | private Integer isdeleted; |
| | | |
| | | @ApiModelProperty(value = "夿³¨") |
| | | @ExcelColumn(name = "夿³¨") |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "伿 å¸ä¸»é®å
³è表", example = "1") |
| | | @ExcelColumn(name = "伿 å¸ä¸»é®") |
| | | private Integer couponId; |
| | | |
| | | @ApiModelProperty(value = "ç¨æ·ç¼ç ï¼å
³èmember表ï¼", example = "1") |
| | | @ExcelColumn(name = "ç¨æ·ç¼ç ") |
| | | private Integer memberId; |
| | | |
| | | @ApiModelProperty(value = "ç¶æï¼0=å¾
é¢åï¼1=å·²é¢åï¼2=已使ç¨ï¼98=æªé¢åå·²è¿æï¼99=å·²è¿æ", example = "0") |
| | | @ExcelColumn(name = "ç¶æ") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "é¢åææææ¶é´") |
| | | @ExcelColumn(name = "é¢åææææ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date validDate; |
| | | |
| | | @ApiModelProperty(value = "æææå¼å§æ¶é´") |
| | | @ExcelColumn(name = "æææå¼å§æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date startDate; |
| | | |
| | | @ApiModelProperty(value = "æææç»ææ¶é´") |
| | | @ExcelColumn(name = "æææç»ææ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date endDate; |
| | | |
| | | @ApiModelProperty(value = "ä½¿ç¨æ¶é´") |
| | | @ExcelColumn(name = "ä½¿ç¨æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date useDate; |
| | | |
| | | @ApiModelProperty(value = "å
³è订å主é®", example = "1") |
| | | @ExcelColumn(name = "å
³è订å主é®") |
| | | private Integer orderId; |
| | | |
| | | @ApiModelProperty(value = "åç§°") |
| | | @ExcelColumn(name = "åç§°") |
| | | private String name; |
| | | |
| | | @ApiModelProperty(value = "说æ") |
| | | @ExcelColumn(name = "说æ") |
| | | private String info; |
| | | |
| | | @ApiModelProperty(value = "ç±»å 0å¹³å°ä¼æ å¸", example = "0") |
| | | @ExcelColumn(name = "ç±»å") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "满é¢ï¼åï¼") |
| | | @ExcelColumn(name = "满é¢") |
| | | private Long limitPrice; |
| | | |
| | | @ApiModelProperty(value = "伿 éé¢ï¼åï¼") |
| | | @ExcelColumn(name = "伿 éé¢") |
| | | private Long price; |
| | | |
| | | @ApiModelProperty(value = "é¢åæ¹å¼ 0é¢å", example = "0") |
| | | @ExcelColumn(name = "é¢åæ¹å¼") |
| | | private Integer getMethod; |
| | | |
| | | @ApiModelProperty(value = "伿 å¸ç±»åï¼0=满åå¸", example = "0") |
| | | @ExcelColumn(name = "伿 å¸ç±»å") |
| | | private Integer couponType; |
| | | |
| | | @ApiModelProperty(value = "æ¨éåé¢åææå¤©æ°", example = "7") |
| | | @ExcelColumn(name = "æ¨éåé¢åææå¤©æ°") |
| | | private Integer pushDays; |
| | | |
| | | @ApiModelProperty(value = "é¢å忿天æ°", example = "30") |
| | | @ExcelColumn(name = "é¢å忿天æ°") |
| | | private Integer validDays; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ä¼åå§å") |
| | | private String memberName; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ä¼åçµè¯") |
| | | private String memberTelephone; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "ä¼åæµç§°") |
| | | private String memberNickName; |
| | | } |
| | |
| | | @ExcelColumn(name = "å¯åæ¹å¼", valueMapping = "0=å°±å°åå;1=å¼å°åå;") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦è½¬æ¢è®¢åï¼0=å¦ï¼1=æ¯ï¼å¼å°è½¬å°±å°ï¼", example = "0") |
| | | private Integer isConverted; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å¿
é¡»æ¬äººç¾æ¶ï¼0=å¦ï¼1=æ¯", example = "0") |
| | | @ExcelColumn(name = "æ¬äººç¾æ¶", valueMapping = "0=å¦;1=æ¯;") |
| | | private Integer selfTake; |
| | |
| | | private Long declaredFee; |
| | | |
| | | @ApiModelProperty(value = "å æ¥è´¹ç¨ï¼åï¼") |
| | | @ExcelColumn(name = "å æ¥è´¹ç¨") |
| | | private Long urgentAmount; |
| | | |
| | | @ApiModelProperty(value = "å¹³å°å¥å±å¸æºè´¹ç¨ï¼åï¼") |
| | | @ExcelColumn(name = "å¹³å°å¥å±å¸æºè´¹ç¨") |
| | | @ExcelColumn(name = "å æ¥è´¹ç¨") |
| | | private Long platformRewardAmount; |
| | | |
| | | @ApiModelProperty(value = "ææ´¾å¸æºç¨æ·ä¸»é®ï¼member:idï¼") |
| | |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "å建å¼å§æ¶é´(æ¥è¯¢ç¨)", example = "2026-01-01 00:00:00") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date createStartTime; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "åå»ºç»ææ¶é´(æ¥è¯¢ç¨)", example = "2026-12-31 23:59:59") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date createEndTime; |
| | | |
| | | @TableField(exist = false) |
| | |
| | | private Integer shopId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "åºéºè®¢ååºå·") |
| | | private Long autoNum; |
| | | |
| | | @ApiModelProperty(value = "åä»¶æ¶é´å³å°å°è¾¾éç¥ç¶æï¼0=æªéç¥ï¼1=å·²éç¥") |
| | | private Integer pickUpNotifyStatus; |
| | | |
| | | @ApiModelProperty(value = "åºå·") |
| | | @TableField(exist = false) |
| | | private Integer sortNum; |
| | |
| | | @ApiModelProperty(value = "è¯ç¨äºæå°æºSNç¼å·") |
| | | private String printerSn; |
| | | |
| | | @ApiModelProperty(value = "æ¶çæ¯ä¾é
ç½®(JSON)", notes = "{\n" + |
| | | " \"localDeposit\": 5,\n" + |
| | | " \"remoteDeposit\": 5,\n" + |
| | | " \"remoteTake\": 5\n" + |
| | | "}") |
| | | private String revenueShareConfig; |
| | | |
| | | @ApiModelProperty(value = "é¨åºçæ¬ç±»åï¼0=æ£å¼çæ¬ï¼1=åæ´çæ¬", example = "0") |
| | | private Integer versionType; |
| | | |
| | | @ApiModelProperty(value = "å
³èæ£å¼çæ¬é¨åºä¸»é®ï¼åæ´çæ¬ä½¿ç¨ï¼", example = "1") |
| | | private Integer relationShopId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "å½åç»å½çä¼å主é®", hidden = true) |
| | | @TableField(exist = false) |
| | | private Integer memberId; |
| | | |
| | | |
| | | // éæä¹
åï¼éä»¶å表 |
| | | @TableField(exist = false) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @ApiModel("æ°æ®çæ¿æ¥è¯¢æ¡ä»¶") |
| | | public class DataBoardQueryDTO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "å¼å§æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date startDate; |
| | | |
| | | @ApiModelProperty(value = "ç»ææ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date endDate; |
| | | |
| | | @ApiModelProperty(value = "é¨åºä¸»é®ï¼å¯éï¼") |
| | | private Integer shopId; |
| | | } |
| | |
| | | @ApiModelProperty(value = "订åç¶æï¼3=å·²æ¢åï¼4=æ´¾éä¸", example = "3", required = true) |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "æç´¢å
³é®è¯ï¼æ¶ä»¶äºº/æ¶ä»¶äººçµè¯æ¨¡ç³/订åå·ç²¾åï¼") |
| | | private String keyword; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | |
| | | /** |
| | | * 叿ºæ ¡éªæä½åå¾è¯·æ± |
| | | * @author rk |
| | | * @date 2026/05/08 |
| | | */ |
| | | @Data |
| | | @ApiModel("叿ºæ ¡éªæä½åå¾è¯·æ±") |
| | | public class DriverCheckRadiusDTO { |
| | | |
| | | @NotNull(message = "订å主é®ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "订å主é®", example = "1", required = true) |
| | | private Integer orderId; |
| | | |
| | | @NotNull(message = "å½åç»åº¦ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "å½åç»åº¦", example = "116.404", required = true) |
| | | private Double lng; |
| | | |
| | | @NotNull(message = "å½å纬度ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "å½å纬度", example = "39.915", required = true) |
| | | private Double lat; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "åå¹¶ç¶æï¼å¯éï¼ä¸ä¼ æ¥å
¨é¨ï¼: 0=å¾
æ¯ä» 1=å¾
æ ¸éª 2=å¾
é
é 3=å¾
æ¶è´§ 4=已宿 5=鿬¾ 6ä¼åé¦é¡µ 7é¨åºå¾
å¤ç订å", example = "0") |
| | | private Integer combinedStatus; |
| | | |
| | | @ApiModelProperty(value = "æç´¢å
³é®è¯ï¼æ¶ä»¶äºº/æ¶ä»¶äººçµè¯æ¨¡ç³/订åå·ç²¾åï¼") |
| | | private String keyword; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "é»è®¤é
éèå´(km)", required = true) |
| | | private String defaultDeliveryRange; |
| | | |
| | | @ApiModelProperty(value = "å³å°å°è¾¾åä»¶æ¶é´æåéç¥(åé)", required = true) |
| | | private String arrivalPickUpTime; |
| | | |
| | | @ApiModelProperty(value = "å
许æä½åå¾(m)", required = true) |
| | | private String operationRadius; |
| | | |
| | | @ApiModelProperty(value = "ä¸å满Xæ¬¡èµ é伿 å¸-è®¢åæ¬¡æ°") |
| | | private String orderCouponOrderCount; |
| | | |
| | | @ApiModelProperty(value = "ä¸å满Xæ¬¡èµ é伿 å¸-è³å¤èµ 鿬¡æ°") |
| | | private String orderCouponGiftCount; |
| | | |
| | | @ApiModelProperty(value = "ä¸å满Xæ¬¡èµ é伿 å¸-èµ é伿 å¸IDï¼å¤ä¸ªä»¥,åå²ï¼") |
| | | private String orderCouponId; |
| | | |
| | | @ApiModelProperty(value = "æ³¨åæ»¡Xå¹´èµ é伿 å¸-注åå¹´æ°") |
| | | private String registerCouponYears; |
| | | |
| | | @ApiModelProperty(value = "æ³¨åæ»¡Xå¹´èµ é伿 å¸-è³å¤èµ 鿬¡æ°") |
| | | private String registerCouponGiftCount; |
| | | |
| | | @ApiModelProperty(value = "æ³¨åæ»¡Xå¹´èµ é伿 å¸-èµ é伿 å¸IDï¼å¤ä¸ªä»¥,åå²ï¼") |
| | | private String registerCouponId; |
| | | |
| | | @ApiModelProperty(value = "æ°æ³¨åç¨æ·èµ é伿 å¸IDï¼å¤ä¸ªä»¥,åå²ï¼") |
| | | private String registerGiftCouponIds; |
| | | |
| | | } |
| | |
| | | @ApiModel("åææ¯ä¾è§å项") |
| | | public class RevenueShareItemDTO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "ç±»å(0=ä¼ä¸å¯, 1=个人å¯, 2=ä¼ä¸å, 3=个人å, 4=é
éå)", required = true, example = "0") |
| | | @ApiModelProperty(value = "ç±»å(0=å¼å°ä¼ä¸å¯, 1=å¼å°ä¸ªäººå¯, 2=å¼å°ä¼ä¸å, 3=å¼å°ä¸ªäººå, 4=é
éå, 5=å°±å°ä¼ä¸å, 6=å°±å°ä¸ªäººå)", required = true, example = "0") |
| | | @NotNull(message = "ç±»åä¸è½ä¸ºç©º") |
| | | private Integer fieldType; |
| | | |
| | |
| | | @NotNull(message = "åå¸ä¸»é®ä¸è½ä¸ºç©º") |
| | | private Integer cityId; |
| | | |
| | | @ApiModelProperty(value = "è§åæç»å表(ä¼ä¸å¯/个人å¯/ä¼ä¸å/个人å/é
éåå
±5æ¡)", required = true) |
| | | @ApiModelProperty(value = "è§åæç»å表(å¼å°ä¼ä¸å¯/å¼å°ä¸ªäººå¯/å¼å°ä¼ä¸å/å¼å°ä¸ªäººå/é
éå/å°±å°ä¼ä¸å/å°±å°ä¸ªäººåå
±7æ¡)", required = true) |
| | | @NotEmpty(message = "è§åæç»ä¸è½ä¸ºç©º") |
| | | @Valid |
| | | private List<RevenueShareItemDTO> items; |
| | |
| | | @ApiModelProperty(value = "æ¯ä»å®å®åå§å", required = true) |
| | | @NotBlank(message = "æ¯ä»å®å®åå§åä¸è½ä¸ºç©º") |
| | | private String aliName; |
| | | |
| | | @ApiModelProperty(value = "å°±å°å¯ååæå æ¯(%)", required = true, example = "5.5") |
| | | private Double localDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", required = true, example = "5.5") |
| | | private Double remoteDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", required = true, example = "5.5") |
| | | private Double remoteTake; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | |
| | | /** |
| | | * é¨åºæ ¡éªæä½åå¾è¯·æ± |
| | | * @author rk |
| | | * @date 2026/05/08 |
| | | */ |
| | | @Data |
| | | @ApiModel("é¨åºæ ¡éªæä½åå¾è¯·æ±") |
| | | public class ShopCheckRadiusDTO { |
| | | |
| | | @NotNull(message = "订å主é®ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "订å主é®", example = "1", required = true) |
| | | private Integer orderId; |
| | | |
| | | @NotNull(message = "å½åç»åº¦ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "å½åç»åº¦", example = "116.404", required = true) |
| | | private Double lng; |
| | | |
| | | @NotNull(message = "å½å纬度ä¸è½ä¸ºç©º") |
| | | @ApiModelProperty(value = "å½å纬度", example = "39.915", required = true) |
| | | private Double lat; |
| | | |
| | | } |
| | |
| | | @ApiModel("é¨åºç»å½è¯·æ±å¯¹è±¡") |
| | | public class ShopLoginDTO { |
| | | |
| | | @ApiModelProperty(value = "openid") |
| | | private String openid; |
| | | @ApiModelProperty(value = "ä¼å主é®") |
| | | private Integer memberId; |
| | | |
| | | @ApiModelProperty(value = "ç»å½ææºå·") |
| | | private String telephone; |
| | |
| | | @NotBlank(message = "æ¯ä»å®å®åå§åä¸è½ä¸ºç©º") |
| | | private String aliName; |
| | | |
| | | @ApiModelProperty(value = "å°±å°å¯ååæå æ¯(%)", required = true, example = "5.5") |
| | | @NotNull(message = "å°±å°å¯ååæå æ¯ä¸è½ä¸ºç©º") |
| | | private Double localDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", required = true, example = "5.5") |
| | | @NotNull(message = "å¼å°åä»¶åæå æ¯ä¸è½ä¸ºç©º") |
| | | private Double remoteDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", required = true, example = "5.5") |
| | | @NotNull(message = "å¼å°åä»¶åæå æ¯ä¸è½ä¸ºç©º") |
| | | private Double remoteTake; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @ApiModel("ç»è¥çæ¿æ°æ®") |
| | | public class DataBoardVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "ä¼åæ»æ°") |
| | | private Long memberCount; |
| | | |
| | | @ApiModelProperty(value = "é¨åºæ»æ°") |
| | | private Long shopCount; |
| | | |
| | | @ApiModelProperty(value = "叿ºæ»æ°") |
| | | private Long driverCount; |
| | | |
| | | @ApiModelProperty(value = "卿æ»è®¢åæ°") |
| | | private Long orderCount; |
| | | |
| | | @ApiModelProperty(value = "å¨æè¥æ¶æ»éé¢ï¼å
ï¼") |
| | | private BigDecimal totalRevenue; |
| | | |
| | | @ApiModelProperty(value = "è¡æç±»åå æ¯") |
| | | private List<LuggageTypeItem> luggageTypeList; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel("è¡æç±»åå æ¯é¡¹") |
| | | public class LuggageTypeItem implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "ç±»ååç§°") |
| | | private String luggageName; |
| | | |
| | | @ApiModelProperty(value = "è®¢åæ°") |
| | | private Long orderCount; |
| | | |
| | | @ApiModelProperty(value = "è¡ææ°") |
| | | private Long luggageCount; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel("ç¨æ·æ¶ä»¶ä¿¡æ¯") |
| | | public class MemberContactVO { |
| | | |
| | | @ApiModelProperty(value = "å§å") |
| | | private String name; |
| | | |
| | | @ApiModelProperty(value = "ææºå·") |
| | | private String phone; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel("ä¼å注åè¶å¿é¡¹") |
| | | public class MemberTrendVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "æ¥æ") |
| | | private String date; |
| | | |
| | | @ApiModelProperty(value = "æ³¨åæ°é") |
| | | private Long count; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel("订åè¶å¿é¡¹") |
| | | public class OrderTrendVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "æ¥æ") |
| | | private String date; |
| | | |
| | | @ApiModelProperty(value = "å°±å°å¯åæ°é") |
| | | private Long localCount; |
| | | |
| | | @ApiModelProperty(value = "å¼å°å¯åæ°é") |
| | | private Long remoteCount; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "ç¦å¯ç©å") |
| | | private String prohibitedItems; |
| | | |
| | | @ApiModelProperty(value = "æå¡çµè¯") |
| | | private String serverPhone; |
| | | } |
| | |
| | | @ApiModelProperty(value = "åå¸ä¸»é®") |
| | | private Integer cityId; |
| | | |
| | | @ApiModelProperty(value = "ç±»å(0=ä¼ä¸å¯, 1=个人å¯, 2=ä¼ä¸å, 3=个人å, 4=é
éå)") |
| | | @ApiModelProperty(value = "ç±»å(0=å¼å°ä¼ä¸å¯, 1=å¼å°ä¸ªäººå¯, 2=å¼å°ä¼ä¸å, 3=å¼å°ä¸ªäººå, 4=é
éå, 5=å°±å°ä¼ä¸å, 6=å°±å°ä¸ªäººå)") |
| | | private Integer fieldType; |
| | | |
| | | @ApiModelProperty(value = "ç±»ååç§°") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel("è¥æ¶è¶å¿é¡¹") |
| | | public class RevenueTrendVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "æ¥æ") |
| | | private String date; |
| | | |
| | | @ApiModelProperty(value = "å°±å°å¯åè¥æ¶éé¢ï¼å
ï¼") |
| | | private BigDecimal localRevenue; |
| | | |
| | | @ApiModelProperty(value = "å¼å°å¯åè¥æ¶éé¢ï¼å
ï¼") |
| | | private BigDecimal remoteRevenue; |
| | | } |
| | |
| | | @ApiModelProperty(value = "é¨åºè¯å") |
| | | private BigDecimal score; |
| | | |
| | | @ApiModelProperty(value = "é
éè·ç¦»") |
| | | private BigDecimal deliveryRange; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | private Date createTime; |
| | | |
| | |
| | | |
| | | @ApiModelProperty(value = "é¨åºå¤´åï¼å
¨è·¯å¾ï¼") |
| | | private String shopAvatar; |
| | | |
| | | @ApiModelProperty(value = "å°±å°å¯ååæå æ¯(%)", example = "5.5") |
| | | private Double localDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", example = "5.5") |
| | | private Double remoteDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", example = "5.5") |
| | | private Double remoteTake; |
| | | |
| | | @ApiModelProperty(value = "é¨åºçæ¬ç±»åï¼0=æ£å¼çæ¬ï¼1=åæ´çæ¬", example = "0") |
| | | private Integer versionType; |
| | | |
| | | @ApiModelProperty(value = "å
³èæ£å¼çæ¬é¨åºä¸»é®") |
| | | private Integer relationShopId; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel("é¨åºä¸ç»©æ¥è¡¨") |
| | | public class ShopPerformanceVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "æ»è®¢åæ°ï¼ç¶æ1-6ï¼") |
| | | private Long totalOrderCount; |
| | | |
| | | @ApiModelProperty(value = "è¥æ¶æ»éé¢ï¼å
ï¼") |
| | | private BigDecimal totalRevenue; |
| | | |
| | | @ApiModelProperty(value = "å·²å®æè®¢åæ°ï¼ç¶æ=7ï¼") |
| | | private Long completedCount; |
| | | |
| | | @ApiModelProperty(value = "已鿬¾è®¢åæ°") |
| | | private Long refundedCount; |
| | | |
| | | @ApiModelProperty(value = "订å宿çï¼å¦44.32表示44.32%ï¼") |
| | | private BigDecimal completionRate; |
| | | |
| | | @ApiModelProperty(value = "订å鿬¾çï¼å¦44.32表示44.32%ï¼") |
| | | private BigDecimal refundRate; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.dao.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * é¨åºæ¶çæ¯ä¾é
ç½®è¿å |
| | | * @author rk |
| | | * @date 2026/05/09 |
| | | */ |
| | | @Data |
| | | @ApiModel("é¨åºæ¶çæ¯ä¾é
ç½®") |
| | | public class ShopRevenueShareVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "å°±å°å¯ååæå æ¯(%)", example = "5.5") |
| | | private Double localDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", example = "5.5") |
| | | private Double remoteDeposit; |
| | | |
| | | @ApiModelProperty(value = "å¼å°åä»¶åæå æ¯(%)", example = "5.5") |
| | | private Double remoteTake; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "ææ³¨åçé¨åºä¸»é®ï¼é¨åºç¨æ·æ¶è¿åï¼") |
| | | private Integer shopId; |
| | | |
| | | @ApiModelProperty(value = "ææ³¨åçé¨åºå®¡æ ¸ç¶æï¼é¨åºç¨æ·æ¶è¿åï¼: 0=å¾
å®¡æ ¸ 1=å·²éè¿ 2=已驳å 3=已缴纳ä¿è¯é") |
| | | @ApiModelProperty(value = "ææ³¨åçé¨åºå®¡æ ¸ç¶æ: 0=å¾
å®¡æ¹ 1=å·²éè¿ 2=已驳å 3=å·²æ¯ä»æ¼é 4=åæ´ä¸ 5=åæ´æªéè¿") |
| | | private Integer shopAuditStatus; |
| | | |
| | | @ApiModelProperty(value = "æå½åç»å®çé¨åº") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.service.business; |
| | | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.dao.business.model.Coupon; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface CouponService { |
| | | |
| | | Integer create(Coupon coupon); |
| | | |
| | | void deleteById(Integer id); |
| | | |
| | | void deleteByIdInBatch(List<Integer> ids); |
| | | |
| | | void updateById(Coupon coupon); |
| | | |
| | | void updateStatus(Coupon coupon); |
| | | |
| | | Coupon findById(Integer id); |
| | | |
| | | List<Coupon> findList(Coupon coupon); |
| | | |
| | | PageData<Coupon> findPage(PageWrap<Coupon> pageWrap); |
| | | |
| | | long count(Coupon coupon); |
| | | |
| | | List<Coupon> findValidList(); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.service.business; |
| | | |
| | | import com.doumee.dao.dto.DataBoardQueryDTO; |
| | | import com.doumee.dao.vo.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface DataBoardService { |
| | | |
| | | DataBoardVO overview(DataBoardQueryDTO query); |
| | | |
| | | List<MemberTrendVO> memberTrend(); |
| | | |
| | | List<OrderTrendVO> orderTrend(); |
| | | |
| | | List<RevenueTrendVO> revenueTrend(); |
| | | |
| | | ShopPerformanceVO shopPerformance(DataBoardQueryDTO query); |
| | | } |
| | |
| | | */ |
| | | void registerJpushAlias(Integer driverId, String jpushAlias); |
| | | |
| | | /** |
| | | * åå§ååå²å¸æºåæ´çæ¬æ°æ® |
| | | * @return å¤çæ°é |
| | | */ |
| | | int initChangeVersions(); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.service.business; |
| | | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.dao.business.model.MemberCoupon; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface MemberCouponService { |
| | | |
| | | Integer create(MemberCoupon memberCoupon); |
| | | |
| | | void deleteById(Integer id); |
| | | |
| | | void deleteByIdInBatch(List<Integer> ids); |
| | | |
| | | void updateById(MemberCoupon memberCoupon); |
| | | |
| | | MemberCoupon findById(Integer id); |
| | | |
| | | List<MemberCoupon> findList(MemberCoupon memberCoupon); |
| | | |
| | | PageData<MemberCoupon> findPage(PageWrap<MemberCoupon> pageWrap); |
| | | |
| | | long count(MemberCoupon memberCoupon); |
| | | } |
| | |
| | | import com.doumee.dao.dto.UpdMobileRequest; |
| | | import com.doumee.dao.dto.WxPhoneRequest; |
| | | import com.doumee.dao.vo.AccountResponse; |
| | | import com.doumee.dao.vo.MemberContactVO; |
| | | import com.doumee.dao.vo.MemberDetailVO; |
| | | import com.doumee.dao.vo.MemberListVO; |
| | | import com.doumee.dao.vo.PlatformAboutVO; |
| | |
| | | |
| | | void logOff(String token,Integer memberId); |
| | | |
| | | MemberContactVO getContactInfo(Integer memberId); |
| | | |
| | | |
| | | /** |
| | | * éªè¯ææºå· |
| | |
| | | * @return MemberDetailVO |
| | | */ |
| | | MemberDetailVO findMemberDetail(Integer id); |
| | | } |
| | | |
| | | void giftRegisterCoupon(); |
| | | } |
| | |
| | | */ |
| | | void printOrderLabel(Integer orderId, Integer shopId); |
| | | |
| | | /** |
| | | * å³å°å°è¾¾åä»¶æ¶é´éç¥ |
| | | * @return éç¥æ°é |
| | | */ |
| | | int notifyArrivalPickUp(); |
| | | |
| | | /** |
| | | * æ ¡éªæä½åå¾ |
| | | * @param orderId 订åä¸»é® |
| | | * @param userId æä½ç¨æ·ä¸»é® |
| | | * @param userType ç¨æ·ç±»åï¼0=é¨åºï¼1=叿º |
| | | * @param lng æä½äººç»åº¦ |
| | | * @param lat æä½äººçº¬åº¦ |
| | | * @return true=å¨å
许æä½èå´å
ï¼false=è¶
åºå
许æä½èå´ |
| | | */ |
| | | Boolean checkOperationRadius(Integer orderId, Integer userId, Integer userType, Double lng, Double lat); |
| | | |
| | | } |
| | |
| | | */ |
| | | void maintainPrinterSn(ShopPrinterDTO dto); |
| | | |
| | | /** |
| | | * åå§ååå²é¨åºåæ´çæ¬æ°æ® |
| | | * @return å¤çæ°é |
| | | */ |
| | | int initChangeVersions(); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.CouponMapper; |
| | | import com.doumee.dao.business.model.Coupon; |
| | | import com.doumee.service.business.CouponService; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | @Service |
| | | public class CouponServiceImpl implements CouponService { |
| | | |
| | | @Autowired |
| | | private CouponMapper couponMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public Integer create(Coupon coupon) { |
| | | validateCoupon(coupon); |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | coupon.setIsdeleted(Constants.ZERO); |
| | | coupon.setCreateDate(new Date()); |
| | | coupon.setCreator(loginUserInfo.getId()); |
| | | coupon.setEditDate(new Date()); |
| | | coupon.setEditor(loginUserInfo.getId()); |
| | | // é»è®¤é¡¹ |
| | | coupon.setType(Constants.ZERO); |
| | | coupon.setCouponType(Objects.isNull(coupon.getCouponType()) ? Constants.ZERO : coupon.getCouponType()); |
| | | coupon.setGetMethod(Objects.isNull(coupon.getGetMethod()) ? Constants.ZERO : coupon.getGetMethod()); |
| | | couponMapper.insert(coupon); |
| | | return coupon.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteById(Integer id) { |
| | | couponMapper.update(new UpdateWrapper<Coupon>().lambda() |
| | | .set(Coupon::getIsdeleted, Constants.ONE) |
| | | .eq(Coupon::getId, id)); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteByIdInBatch(List<Integer> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | return; |
| | | } |
| | | for (Integer id : ids) { |
| | | this.deleteById(id); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void updateById(Coupon coupon) { |
| | | if (Objects.isNull(coupon) || Objects.isNull(coupon.getId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | validateCoupon(coupon); |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | coupon.setEditDate(new Date()); |
| | | coupon.setEditor(loginUserInfo.getId()); |
| | | couponMapper.updateById(coupon); |
| | | } |
| | | |
| | | @Override |
| | | public void updateStatus(Coupon coupon) { |
| | | if (Objects.isNull(coupon) || Objects.isNull(coupon.getId()) || Objects.isNull(coupon.getStatus())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | Coupon update = new Coupon(); |
| | | update.setId(coupon.getId()); |
| | | update.setStatus(coupon.getStatus()); |
| | | update.setEditDate(new Date()); |
| | | update.setEditor(loginUserInfo.getId()); |
| | | couponMapper.updateById(update); |
| | | } |
| | | |
| | | @Override |
| | | public Coupon findById(Integer id) { |
| | | MPJLambdaWrapper<Coupon> wrapper = new MPJLambdaWrapper<>(); |
| | | wrapper.selectAll(Coupon.class) |
| | | .select("(SELECT COUNT(*) FROM member_coupon mc WHERE mc.COUPON_ID = t.ID AND mc.ISDELETED = 0 AND mc.STATUS IN (1,2,99)) AS CLAIM_COUNT") |
| | | .select("(SELECT COUNT(*) FROM member_coupon mc WHERE mc.COUPON_ID = t.ID AND mc.ISDELETED = 0 AND mc.STATUS = 2) AS USED_COUNT") |
| | | .eq(Coupon::getId, id) |
| | | .eq(Coupon::getIsdeleted, Constants.ZERO); |
| | | Coupon coupon = couponMapper.selectJoinOne(Coupon.class, wrapper); |
| | | if (Objects.isNull(coupon)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | return coupon; |
| | | } |
| | | |
| | | @Override |
| | | public List<Coupon> findList(Coupon coupon) { |
| | | QueryWrapper<Coupon> wrapper = new QueryWrapper<>(coupon); |
| | | return couponMapper.selectList(wrapper); |
| | | } |
| | | |
| | | @Override |
| | | public PageData<Coupon> findPage(PageWrap<Coupon> pageWrap) { |
| | | IPage<Coupon> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<Coupon> wrapper = new MPJLambdaWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | pageWrap.getModel().setIsdeleted(Constants.ZERO); |
| | | wrapper.selectAll(Coupon.class) |
| | | .select("u.USERNAME AS EDITOR_NAME") |
| | | .select("(SELECT COUNT(*) FROM member_coupon mc WHERE mc.COUPON_ID = t.ID AND mc.ISDELETED = 0 AND mc.STATUS IN (1,2,99)) AS CLAIM_COUNT") |
| | | .select("(SELECT COUNT(*) FROM member_coupon mc WHERE mc.COUPON_ID = t.ID AND mc.ISDELETED = 0 AND mc.STATUS = 2) AS USED_COUNT") |
| | | .innerJoin("system_user u ON u.ID = t.EDITOR") |
| | | .eq(Coupon::getIsdeleted, Constants.ZERO); |
| | | if (pageWrap.getModel().getStatus() != null) { |
| | | wrapper.eq(Coupon::getStatus, pageWrap.getModel().getStatus()); |
| | | } |
| | | if (pageWrap.getModel().getName() != null) { |
| | | wrapper.like(Coupon::getName, pageWrap.getModel().getName()); |
| | | } |
| | | wrapper.orderByDesc(Coupon::getId); |
| | | return PageData.from(couponMapper.selectJoinPage(page, Coupon.class, wrapper)); |
| | | } |
| | | |
| | | @Override |
| | | public long count(Coupon coupon) { |
| | | QueryWrapper<Coupon> wrapper = new QueryWrapper<>(coupon); |
| | | return couponMapper.selectCount(wrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<Coupon> findValidList() { |
| | | return couponMapper.selectList(new QueryWrapper<Coupon>().lambda() |
| | | .eq(Coupon::getIsdeleted, Constants.ZERO) |
| | | .eq(Coupon::getStatus, Constants.ZERO) |
| | | .orderByDesc(Coupon::getId)); |
| | | } |
| | | |
| | | private void validateCoupon(Coupon coupon) { |
| | | if (Objects.isNull(coupon) || StringUtils.isBlank(coupon.getName())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "伿 å¸åç§°ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (Objects.isNull(coupon.getLimitPrice()) || coupon.getLimitPrice() <= 0) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "满é¢å¿
须大äº0"); |
| | | } |
| | | if (Objects.isNull(coupon.getPrice()) || coupon.getPrice() <= 0) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "伿 éé¢å¿
须大äº0"); |
| | | } |
| | | if (coupon.getPrice() >= coupon.getLimitPrice()) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "伿 éé¢å¿
é¡»å°äºæ»¡é¢"); |
| | | } |
| | | if (Objects.isNull(coupon.getPushDays()) || coupon.getPushDays() < 1) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ¨éåé¢åææå¤©æ°å¿
须大äºçäº1天"); |
| | | } |
| | | if (Objects.isNull(coupon.getValidDays()) || coupon.getValidDays() < 1) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "é¢å忿天æ°å¿
须大äºçäº1天"); |
| | | } |
| | | if (Objects.isNull(coupon.getStatus())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ç¶æä¸è½ä¸ºç©º"); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.dto.DataBoardQueryDTO; |
| | | import com.doumee.dao.vo.*; |
| | | import com.doumee.service.business.DataBoardService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class DataBoardServiceImpl implements DataBoardService { |
| | | |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private ShopInfoMapper shopInfoMapper; |
| | | @Autowired |
| | | private DriverInfoMapper driverInfoMapper; |
| | | @Autowired |
| | | private OrdersMapper ordersMapper; |
| | | @Autowired |
| | | private OrdersDetailMapper ordersDetailMapper; |
| | | @Autowired |
| | | private OtherOrdersMapper otherOrdersMapper; |
| | | @Autowired |
| | | private OrdersRefundMapper ordersRefundMapper; |
| | | |
| | | @Override |
| | | public DataBoardVO overview(DataBoardQueryDTO query) { |
| | | DataBoardVO vo = new DataBoardVO(); |
| | | // ä¼åæ»æ°ï¼ä¸åæ¶é´/é¨åºå½±åï¼ |
| | | vo.setMemberCount(memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getDeleted, Constants.ZERO) |
| | | .eq(Member::getStatus, Constants.ZERO))); |
| | | // é¨åºæ»æ°ï¼auditStatus=3 æ£å¼çæ¬ï¼ |
| | | vo.setShopCount(shopInfoMapper.selectCount(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getAuditStatus, Constants.THREE) |
| | | .eq(ShopInfo::getVersionType, Constants.ZERO) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO))); |
| | | // 叿ºæ»æ°ï¼auditStatus=3 æ£å¼çæ¬ï¼ |
| | | vo.setDriverCount(driverInfoMapper.selectCount(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getAuditStatus, Constants.THREE) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO))); |
| | | |
| | | // 卿æ»è®¢åæ° |
| | | vo.setOrderCount(ordersMapper.selectCount(buildOrderQueryWrapper(query))); |
| | | |
| | | // å¨æè¥æ¶ |
| | | List<Orders> orders = ordersMapper.selectList(buildOrderQueryWrapper(query)); |
| | | long orderRevenue = 0L; |
| | | for (Orders o : orders) { |
| | | long pay = o.getPayAmount() != null ? o.getPayAmount() : 0L; |
| | | long refund = o.getRefundAmount() != null ? o.getRefundAmount() : 0L; |
| | | long overdue = (o.getOverdueStatus() != null && o.getOverdueStatus() == 2 && o.getOverdueAmount() != null) |
| | | ? o.getOverdueAmount() : 0L; |
| | | orderRevenue += pay - refund + overdue; |
| | | } |
| | | // å ä¸é¾æè´¹ç¨è®¢åï¼OtherOrders type=2ï¼ |
| | | QueryWrapper<OtherOrders> otherQw = new QueryWrapper<>(); |
| | | otherQw.lambda() |
| | | .eq(OtherOrders::getType, 2) |
| | | .eq(OtherOrders::getPayStatus, Constants.ONE) |
| | | .eq(OtherOrders::getDeleted, Constants.ZERO); |
| | | if (query.getStartDate() != null) { |
| | | otherQw.lambda().ge(OtherOrders::getPayTime, query.getStartDate()); |
| | | } |
| | | if (query.getEndDate() != null) { |
| | | otherQw.lambda().le(OtherOrders::getPayTime, Utils.Date.getEnd(query.getEndDate())); |
| | | } |
| | | List<OtherOrders> otherOrders = otherOrdersMapper.selectList(otherQw); |
| | | long otherRevenue = otherOrders.stream() |
| | | .mapToLong(o -> o.getPayAccount() != null ? o.getPayAccount() : 0L).sum(); |
| | | vo.setTotalRevenue(BigDecimal.valueOf(orderRevenue + otherRevenue) |
| | | .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); |
| | | |
| | | // è¡æç±»åå æ¯ |
| | | List<Integer> orderIds = orders.stream().map(Orders::getId).collect(Collectors.toList()); |
| | | List<LuggageTypeItem> luggageTypeList = new ArrayList<>(); |
| | | if (!orderIds.isEmpty()) { |
| | | List<OrdersDetail> details = ordersDetailMapper.selectList(new QueryWrapper<OrdersDetail>().lambda() |
| | | .in(OrdersDetail::getOrderId, orderIds) |
| | | .eq(OrdersDetail::getDeleted, Constants.ZERO)); |
| | | Map<String, List<OrdersDetail>> grouped = details.stream() |
| | | .filter(d -> StringUtils.isNotBlank(d.getLuggageName())) |
| | | .collect(Collectors.groupingBy(OrdersDetail::getLuggageName)); |
| | | for (Map.Entry<String, List<OrdersDetail>> entry : grouped.entrySet()) { |
| | | LuggageTypeItem item = new LuggageTypeItem(); |
| | | item.setLuggageName(entry.getKey()); |
| | | item.setOrderCount((long) entry.getValue().stream().map(OrdersDetail::getOrderId).distinct().count()); |
| | | item.setLuggageCount((long) entry.getValue().stream() |
| | | .mapToInt(d -> d.getNum() != null ? d.getNum() : 0).sum()); |
| | | luggageTypeList.add(item); |
| | | } |
| | | } |
| | | vo.setLuggageTypeList(luggageTypeList); |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public List<MemberTrendVO> memberTrend() { |
| | | Date startDate = get30DaysAgoStart(); |
| | | List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getDeleted, Constants.ZERO) |
| | | .eq(Member::getStatus, Constants.ZERO) |
| | | .ge(Member::getCreateTime, startDate)); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Map<String, Long> map = members.stream() |
| | | .collect(Collectors.groupingBy(m -> sdf.format(m.getCreateTime()), Collectors.counting())); |
| | | |
| | | return buildDailyList(startDate, (date) -> { |
| | | MemberTrendVO vo = new MemberTrendVO(); |
| | | vo.setDate(date); |
| | | vo.setCount(map.getOrDefault(date, 0L)); |
| | | return vo; |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public List<OrderTrendVO> orderTrend() { |
| | | Date startDate = get30DaysAgoStart(); |
| | | List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .in(Orders::getStatus, |
| | | Constants.OrderStatus.waitDeposit.getKey(), |
| | | Constants.OrderStatus.deposited.getKey(), |
| | | Constants.OrderStatus.accepted.getKey(), |
| | | Constants.OrderStatus.delivering.getKey(), |
| | | Constants.OrderStatus.arrived.getKey(), |
| | | Constants.OrderStatus.overdue.getKey()) |
| | | .ge(Orders::getCreateTime, startDate)); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Map<String, List<Orders>> grouped = orders.stream() |
| | | .collect(Collectors.groupingBy(o -> sdf.format(o.getCreateTime()))); |
| | | |
| | | return buildDailyList(startDate, (date) -> { |
| | | List<Orders> dayOrders = grouped.getOrDefault(date, Collections.emptyList()); |
| | | OrderTrendVO vo = new OrderTrendVO(); |
| | | vo.setDate(date); |
| | | vo.setLocalCount(dayOrders.stream().filter(o -> Constants.equalsInteger(o.getType(), Constants.ZERO)).count()); |
| | | vo.setRemoteCount(dayOrders.stream().filter(o -> Constants.equalsInteger(o.getType(), Constants.ONE)).count()); |
| | | return vo; |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public List<RevenueTrendVO> revenueTrend() { |
| | | Date startDate = get30DaysAgoStart(); |
| | | |
| | | List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .in(Orders::getStatus, |
| | | Constants.OrderStatus.waitDeposit.getKey(), |
| | | Constants.OrderStatus.deposited.getKey(), |
| | | Constants.OrderStatus.accepted.getKey(), |
| | | Constants.OrderStatus.delivering.getKey(), |
| | | Constants.OrderStatus.arrived.getKey(), |
| | | Constants.OrderStatus.overdue.getKey()) |
| | | .ge(Orders::getCreateTime, startDate)); |
| | | |
| | | List<OtherOrders> otherOrders = otherOrdersMapper.selectList(new QueryWrapper<OtherOrders>().lambda() |
| | | .eq(OtherOrders::getType, 2) |
| | | .eq(OtherOrders::getPayStatus, Constants.ONE) |
| | | .eq(OtherOrders::getDeleted, Constants.ZERO) |
| | | .ge(OtherOrders::getPayTime, startDate)); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Map<String, Long> localOrderRevenue = new HashMap<>(); |
| | | Map<String, Long> remoteOrderRevenue = new HashMap<>(); |
| | | for (Orders o : orders) { |
| | | String date = sdf.format(o.getCreateTime()); |
| | | long pay = o.getPayAmount() != null ? o.getPayAmount() : 0L; |
| | | long refund = o.getRefundAmount() != null ? o.getRefundAmount() : 0L; |
| | | long overdue = (o.getOverdueStatus() != null && o.getOverdueStatus() == 2 && o.getOverdueAmount() != null) |
| | | ? o.getOverdueAmount() : 0L; |
| | | long rev = pay - refund + overdue; |
| | | if (Constants.equalsInteger(o.getType(), Constants.ZERO)) { |
| | | localOrderRevenue.merge(date, rev, Long::sum); |
| | | } else { |
| | | remoteOrderRevenue.merge(date, rev, Long::sum); |
| | | } |
| | | } |
| | | |
| | | Map<String, Long> otherRevenueMap = new HashMap<>(); |
| | | for (OtherOrders oo : otherOrders) { |
| | | String date = sdf.format(oo.getPayTime()); |
| | | long amt = oo.getPayAccount() != null ? oo.getPayAccount() : 0L; |
| | | otherRevenueMap.merge(date, amt, Long::sum); |
| | | } |
| | | |
| | | return buildDailyList(startDate, (date) -> { |
| | | RevenueTrendVO vo = new RevenueTrendVO(); |
| | | vo.setDate(date); |
| | | long local = localOrderRevenue.getOrDefault(date, 0L) + otherRevenueMap.getOrDefault(date, 0L); |
| | | long remote = remoteOrderRevenue.getOrDefault(date, 0L); |
| | | vo.setLocalRevenue(BigDecimal.valueOf(local).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); |
| | | vo.setRemoteRevenue(BigDecimal.valueOf(remote).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); |
| | | return vo; |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public ShopPerformanceVO shopPerformance(DataBoardQueryDTO query) { |
| | | ShopPerformanceVO vo = new ShopPerformanceVO(); |
| | | |
| | | // 1. æ»è®¢åæ° + è¥æ¶ï¼status 1-6ï¼ |
| | | QueryWrapper<Orders> qw = buildOrderQueryWrapper(query); |
| | | List<Orders> orders = ordersMapper.selectList(qw); |
| | | vo.setTotalOrderCount((long) orders.size()); |
| | | |
| | | long revenue = 0L; |
| | | for (Orders o : orders) { |
| | | long pay = o.getPayAmount() != null ? o.getPayAmount() : 0L; |
| | | long overdue = o.getOverdueAmount() != null ? o.getOverdueAmount() : 0L; |
| | | long refund = o.getRefundAmount() != null ? o.getRefundAmount() : 0L; |
| | | revenue += pay + overdue - refund; |
| | | } |
| | | vo.setTotalRevenue(BigDecimal.valueOf(Math.max(revenue, 0L)) |
| | | .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); |
| | | |
| | | // 2. å·²å®æè®¢åæ°ï¼status=7ï¼åççéæ¡ä»¶ï¼ |
| | | QueryWrapper<Orders> completedQw = new QueryWrapper<>(); |
| | | completedQw.lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getStatus, Constants.OrderStatus.finished.getKey()); |
| | | if (query.getStartDate() != null) { |
| | | completedQw.lambda().ge(Orders::getCreateTime, query.getStartDate()); |
| | | } |
| | | if (query.getEndDate() != null) { |
| | | completedQw.lambda().le(Orders::getCreateTime, Utils.Date.getEnd(query.getEndDate())); |
| | | } |
| | | if (query.getShopId() != null) { |
| | | completedQw.lambda().and(w -> w.eq(Orders::getDepositShopId, query.getShopId()) |
| | | .or().eq(Orders::getTakeShopId, query.getShopId())); |
| | | } |
| | | vo.setCompletedCount(ordersMapper.selectCount(completedQw)); |
| | | |
| | | // 3. 已鿬¾è®¢åæ°ï¼orders_refund status=1 çå»éè®¢åæ°ï¼ |
| | | List<Integer> orderIds = orders.stream().map(Orders::getId).collect(Collectors.toList()); |
| | | if (!orderIds.isEmpty()) { |
| | | QueryWrapper<OrdersRefund> refundQw = new QueryWrapper<>(); |
| | | refundQw.lambda() |
| | | .in(OrdersRefund::getOrderId, orderIds) |
| | | .eq(OrdersRefund::getStatus, Constants.ONE) |
| | | .eq(OrdersRefund::getDeleted, Constants.ZERO); |
| | | List<OrdersRefund> refundRecords = ordersRefundMapper.selectList(refundQw); |
| | | long refundedOrderCount = refundRecords.stream() |
| | | .map(OrdersRefund::getOrderId).distinct().count(); |
| | | vo.setRefundedCount(refundedOrderCount); |
| | | } else { |
| | | vo.setRefundedCount(0L); |
| | | } |
| | | |
| | | // 4. 订å宿ç & 鿬¾çï¼åæ¯ = status 1-6 + status 7ï¼ |
| | | long totalCount = vo.getTotalOrderCount() + vo.getCompletedCount(); |
| | | if (totalCount > 0) { |
| | | BigDecimal hundred = BigDecimal.valueOf(100); |
| | | vo.setCompletionRate(BigDecimal.valueOf(vo.getCompletedCount()) |
| | | .multiply(hundred).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP)); |
| | | vo.setRefundRate(BigDecimal.valueOf(vo.getRefundedCount()) |
| | | .multiply(hundred).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP)); |
| | | } else { |
| | | vo.setCompletionRate(BigDecimal.ZERO); |
| | | vo.setRefundRate(BigDecimal.ZERO); |
| | | } |
| | | |
| | | return vo; |
| | | } |
| | | |
| | | // ========== ç§ææ¹æ³ ========== |
| | | |
| | | private QueryWrapper<Orders> buildOrderQueryWrapper(DataBoardQueryDTO query) { |
| | | QueryWrapper<Orders> qw = new QueryWrapper<>(); |
| | | qw.lambda() |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .in(Orders::getStatus, |
| | | Constants.OrderStatus.waitDeposit.getKey(), |
| | | Constants.OrderStatus.deposited.getKey(), |
| | | Constants.OrderStatus.accepted.getKey(), |
| | | Constants.OrderStatus.delivering.getKey(), |
| | | Constants.OrderStatus.arrived.getKey(), |
| | | Constants.OrderStatus.overdue.getKey()); |
| | | if (query.getStartDate() != null) { |
| | | qw.lambda().ge(Orders::getCreateTime, query.getStartDate()); |
| | | } |
| | | if (query.getEndDate() != null) { |
| | | qw.lambda().le(Orders::getCreateTime, Utils.Date.getEnd(query.getEndDate())); |
| | | } |
| | | if (query.getShopId() != null) { |
| | | qw.lambda().and(w -> w.eq(Orders::getDepositShopId, query.getShopId()) |
| | | .or().eq(Orders::getTakeShopId, query.getShopId())); |
| | | } |
| | | return qw; |
| | | } |
| | | |
| | | private Date get30DaysAgoStart() { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.set(Calendar.HOUR_OF_DAY, 0); |
| | | cal.set(Calendar.MINUTE, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | cal.add(Calendar.DAY_OF_MONTH, -29); |
| | | return cal.getTime(); |
| | | } |
| | | |
| | | @FunctionalInterface |
| | | private interface DailyVOBuilder<T> { |
| | | T build(String date); |
| | | } |
| | | |
| | | private <T> List<T> buildDailyList(Date startDate, DailyVOBuilder<T> builder) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | List<T> result = new ArrayList<>(); |
| | | Calendar loop = Calendar.getInstance(); |
| | | loop.setTime(startDate); |
| | | Calendar end = Calendar.getInstance(); |
| | | while (!loop.after(end)) { |
| | | result.add(builder.build(sdf.format(loop.getTime()))); |
| | | loop.add(Calendar.DAY_OF_MONTH, 1); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | |
| | | if (pageWrap.getModel().getStatus() != null) { |
| | | queryWrapper.eq(DriverInfo::getStatus, pageWrap.getModel().getStatus()); |
| | | } |
| | | // çæ¬ |
| | | if (pageWrap.getModel().getVersionType() != null) { |
| | | queryWrapper.eq(DriverInfo::getVersionType, pageWrap.getModel().getVersionType()); |
| | | } |
| | | // 审æ¹ç¶æ |
| | | if (pageWrap.getModel().getAuditStatus() != null) { |
| | | queryWrapper.eq(DriverInfo::getAuditStatus, pageWrap.getModel().getAuditStatus()); |
| | |
| | | String code = RandomStringUtils.randomNumeric(6); |
| | | // åéçä¿¡ |
| | | String templateParam = "{\"code\":\"" + code + "\"}"; |
| | | AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam); |
| | | if (Constants.SmsNotify.VERIFY_CODE.isEnabled()) { |
| | | AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam); |
| | | } |
| | | // ä¿åçä¿¡è®°å½ |
| | | Smsrecord smsrecord = new Smsrecord(); |
| | | smsrecord.setDeleted(Constants.ZERO); |
| | |
| | | |
| | | Date now = new Date(); |
| | | Member member; |
| | | |
| | | DriverInfo driverInfo = new DriverInfo(); |
| | | if (Objects.nonNull(existMember)) { |
| | | // å·²æå¸æºè´¦å·ï¼ç´æ¥ç»å½ |
| | | if (!Constants.equalsInteger(existMember.getStatus(), Constants.ZERO)) { |
| | |
| | | memberMapper.insert(member); |
| | | |
| | | // åå»ºå¸æºåºç¡ä¿¡æ¯ |
| | | DriverInfo driverInfo = new DriverInfo(); |
| | | driverInfo.setId(member.getId()); |
| | | driverInfo.setDeleted(Constants.ZERO); |
| | | driverInfo.setCreateTime(now); |
| | | driverInfo.setUpdateTime(now); |
| | |
| | | driverInfo.setMemberId(member.getId()); |
| | | driverInfo.setStatus(Constants.ZERO); |
| | | driverInfo.setAuditStatus(99); |
| | | driverInfo.setVersionType(Constants.ZERO); |
| | | driverInfo.setJpushAlias(org.springframework.util.DigestUtils.md5DigestAsHex(telephone.getBytes())); |
| | | driverInfoMapper.insert(driverInfo); |
| | | } |
| | | |
| | | // 3. çætokenè¿å |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate)); |
| | | accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(driverInfo.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate)); |
| | | accountResponse.setMember(member); |
| | | return accountResponse; |
| | | } |
| | |
| | | if (!Constants.equalsInteger(member.getStatus(), Constants.ZERO)) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "è´¦å·å·²åç¨ï¼è¯·è系管çå"); |
| | | } |
| | | // è·å叿ºè¡¨ä¿¡æ¯ |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda().eq(DriverInfo::getMemberId, member.getId()) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO).eq(DriverInfo::getVersionType,Constants.ZERO).last("limit 1") |
| | | ); |
| | | if(Objects.isNull(driverInfo)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "叿ºè´¦å·ä¸åå¨"); |
| | | } |
| | | // æ ¡éªå¯ç |
| | | String encryptPwd = secure.encryptPassword(password, member.getSalt()); |
| | | if (!encryptPwd.equals(member.getPassword())) { |
| | |
| | | .set(Member::getLoginTime, new Date()) |
| | | .setSql("login_times = login_times + 1") |
| | | .eq(Member::getId, member.getId())); |
| | | |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate)); |
| | | accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(driverInfo.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate)); |
| | | accountResponse.setMember(member); |
| | | return accountResponse; |
| | | } |
| | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void submitVerify(Integer memberId, DriverVerifyRequest request) { |
| | | public void submitVerify(Integer driverId, DriverVerifyRequest request) { |
| | | // åæ°åºç¡æ ¡éª |
| | | if (StringUtils.isAnyBlank(request.getName(), request.getIdcard(), request.getLivePlace(), |
| | | request.getCarCode(), request.getIdcardImg(), request.getIdcardImgBack())) { |
| | |
| | | // 身份è¯å·æ ¼å¼æ ¡éªï¼18ä½ï¼æåä¸ä½å¯ä¸ºXï¼ |
| | | if (!request.getIdcard().matches("^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$")) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "身份è¯å·æ ¼å¼ä¸æ£ç¡®"); |
| | | } |
| | | // æ¥è¯¢å¸æºä¿¡æ¯ |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (Objects.isNull(driverInfo)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // ç¶ææ ¡éªï¼auditStatus=null(æªæäº¤)æauditStatus=2(审æ¹é©³å)å¯æäº¤è®¤è¯ |
| | | if (driverInfo.getAuditStatus() != null |
| | | && !(Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.TWO)||Constants.equalsInteger(driverInfo.getAuditStatus(), 99))) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å½åç¶æä¸å
许æäº¤è®¤è¯"); |
| | | } |
| | | // æ ¹æ®è½¦è¾ç±»å夿æ¯å¦éè¦é©¾é©¶è¯ |
| | | Category category = categoryMapper.selectById(request.getCarType()); |
| | |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å
¶ä»èµæç
§çæå¤ä¸ä¼ 3å¼ "); |
| | | } |
| | | |
| | | // æ´æ°å¸æºä¿¡æ¯ |
| | | // æ¥è¯¢æ£å¼çæ¬å¸æº |
| | | DriverInfo official = driverInfoMapper.selectById(driverId); |
| | | if (Objects.isNull(official) || Constants.equalsInteger(official.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | Integer memberId = official.getMemberId(); |
| | | |
| | | Date now = new Date(); |
| | | |
| | | // æ¥è¯¢è¯¥ä¼åææ°çåæ´çæ¬ |
| | | QueryWrapper<DriverInfo> changeQw = new QueryWrapper<>(); |
| | | changeQw.lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ONE) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .orderByDesc(DriverInfo::getCreateTime) |
| | | .last("limit 1"); |
| | | DriverInfo changeVersion = driverInfoMapper.selectOne(changeQw); |
| | | |
| | | if (changeVersion == null) { |
| | | // 馿¬¡è®¤è¯ï¼æ´æ°æ£å¼çæ¬ + åå»ºåæ´çæ¬ |
| | | applyDriverFieldsFromUpdate(official.getId(), request, now); |
| | | deleteDriverAttachments(official.getId()); |
| | | saveDriverAttachments(official.getId(), request, now); |
| | | // éæ°è¯»åæ´æ°åçæ£å¼çæ¬ï¼ååå»ºåæ´çæ¬ |
| | | DriverInfo updatedOfficial = driverInfoMapper.selectById(official.getId()); |
| | | createDriverChangeVersion(updatedOfficial, official.getId(), now); |
| | | } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) { |
| | | // auditStatus=3ï¼çææ°çåæ´çæ¬ |
| | | Integer relationId = changeVersion.getRelationDriverId() != null |
| | | ? changeVersion.getRelationDriverId() : official.getId(); |
| | | DriverInfo newChange = new DriverInfo(); |
| | | applyDriverFieldsFromNew(newChange, request, official, now); |
| | | newChange.setVersionType(Constants.ONE); |
| | | newChange.setRelationDriverId(relationId); |
| | | newChange.setAuditStatus(Constants.ZERO); |
| | | newChange.setStatus(Constants.ZERO); |
| | | newChange.setDeleted(Constants.ZERO); |
| | | newChange.setCreateTime(now); |
| | | newChange.setUpdateTime(now); |
| | | newChange.setMemberId(memberId); |
| | | newChange.setTelephone(official.getTelephone()); |
| | | newChange.setJpushAlias(official.getJpushAlias()); |
| | | driverInfoMapper.insert(newChange); |
| | | saveDriverAttachments(newChange.getId(), request, now); |
| | | } else { |
| | | // auditStatus=0/2ï¼ç´æ¥æ´æ°åæ´çæ¬ |
| | | applyDriverFieldsFromUpdate(changeVersion.getId(), request, now); |
| | | deleteDriverAttachments(changeVersion.getId()); |
| | | saveDriverAttachments(changeVersion.getId(), request, now); |
| | | } |
| | | |
| | | // æ´æ°ä¼å叿ºè®¤è¯ç¶æä¸ºè®¤è¯ä¸ |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getBusinessStatus, Constants.ONE) |
| | | .set(Member::getUpdateTime, now) |
| | | .eq(Member::getId, memberId)); |
| | | } |
| | | |
| | | private void applyDriverFieldsFromUpdate(Integer driverId, DriverVerifyRequest request, Date now) { |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getName, request.getName()) |
| | | .set(DriverInfo::getIdcard, request.getIdcard()) |
| | |
| | | .set(DriverInfo::getAuditStatus, Constants.ZERO) |
| | | .set(DriverInfo::getAuditRemark, null) |
| | | .set(DriverInfo::getAuditTime, null) |
| | | .eq(DriverInfo::getId, driverInfo.getId())); |
| | | .eq(DriverInfo::getId, driverId)); |
| | | } |
| | | |
| | | // å 餿§çç
§çè®°å½ |
| | | multifileMapper.delete(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, driverInfo.getId()) |
| | | .in(Multifile::getObjType, 6, 7, 8)); |
| | | private void applyDriverFieldsFromNew(DriverInfo driver, DriverVerifyRequest request, DriverInfo official, Date now) { |
| | | driver.setName(request.getName()); |
| | | driver.setIdcard(request.getIdcard()); |
| | | driver.setMaritalStatus(request.getMaritalStatus()); |
| | | driver.setAreaId(request.getAreaId()); |
| | | driver.setLivePlace(request.getLivePlace()); |
| | | driver.setCarCode(request.getCarCode()); |
| | | driver.setCarType(request.getCarType()); |
| | | driver.setCarColor(request.getCarColor()); |
| | | driver.setCardStartDate(request.getCardStartDate()); |
| | | driver.setCardEndDate(request.getCardEndDate()); |
| | | driver.setIdcardImg(request.getIdcardImg()); |
| | | driver.setIdcardImgBack(request.getIdcardImgBack()); |
| | | driver.setAliAccount(request.getAliAccount()); |
| | | driver.setAliName(request.getAliName()); |
| | | } |
| | | |
| | | // ä¿å车è¾ç
§ç objType=6 |
| | | saveMultifileList(driverInfo.getId(), 6, request.getCarImgUrls(), now); |
| | | // ä¿å驾驶è¯ç
§ç objType=7 |
| | | private void saveDriverAttachments(Integer driverId, DriverVerifyRequest request, Date now) { |
| | | saveMultifileList(driverId, 6, request.getCarImgUrls(), now); |
| | | if (!CollectionUtils.isEmpty(request.getLicenseImgUrls())) { |
| | | saveMultifileList(driverInfo.getId(), 7, request.getLicenseImgUrls(), now); |
| | | saveMultifileList(driverId, 7, request.getLicenseImgUrls(), now); |
| | | } |
| | | // ä¿åå
¶ä»èµæç
§ç objType=8 |
| | | if (!CollectionUtils.isEmpty(request.getOtherImgUrls())) { |
| | | saveMultifileList(driverInfo.getId(), 8, request.getOtherImgUrls(), now); |
| | | saveMultifileList(driverId, 8, request.getOtherImgUrls(), now); |
| | | } |
| | | } |
| | | |
| | | // æ´æ°ä¼å叿ºè®¤è¯ç¶æä¸ºè®¤è¯ä¸ |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getBusinessStatus, Constants.ONE) |
| | | .set(Member::getUpdateTime, now) |
| | | .eq(Member::getId, memberId)); |
| | | private void deleteDriverAttachments(Integer driverId) { |
| | | multifileMapper.delete(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, driverId) |
| | | .in(Multifile::getObjType, 6, 7, 8)); |
| | | } |
| | | |
| | | private void createDriverChangeVersion(DriverInfo official, Integer officialId, Date now) { |
| | | DriverInfo change = new DriverInfo(); |
| | | change.setName(official.getName()); |
| | | change.setIdcard(official.getIdcard()); |
| | | change.setMaritalStatus(official.getMaritalStatus()); |
| | | change.setAreaId(official.getAreaId()); |
| | | change.setLivePlace(official.getLivePlace()); |
| | | change.setImgurl(official.getImgurl()); |
| | | change.setCarType(official.getCarType()); |
| | | change.setCarCode(official.getCarCode()); |
| | | change.setCarColor(official.getCarColor()); |
| | | change.setCardStartDate(official.getCardStartDate()); |
| | | change.setCardEndDate(official.getCardEndDate()); |
| | | change.setIdcardImg(official.getIdcardImg()); |
| | | change.setIdcardImgBack(official.getIdcardImgBack()); |
| | | change.setAliAccount(official.getAliAccount()); |
| | | change.setAliName(official.getAliName()); |
| | | change.setVersionType(Constants.ONE); |
| | | change.setRelationDriverId(officialId); |
| | | change.setMemberId(official.getMemberId()); |
| | | change.setTelephone(official.getTelephone()); |
| | | change.setOpenid(official.getOpenid()); |
| | | change.setUnionid(official.getUnionid()); |
| | | change.setJpushAlias(official.getJpushAlias()); |
| | | change.setScore(official.getScore()); |
| | | change.setDriverLevel(official.getDriverLevel()); |
| | | change.setBalance(official.getBalance()); |
| | | change.setTotalBalance(official.getTotalBalance()); |
| | | change.setLongitude(official.getLongitude()); |
| | | change.setLatitude(official.getLatitude()); |
| | | change.setAuditStatus(official.getAuditStatus()); |
| | | change.setStatus(official.getStatus()); |
| | | change.setDeleted(official.getDeleted()); |
| | | change.setCreateTime(now); |
| | | change.setUpdateTime(now); |
| | | driverInfoMapper.insert(change); |
| | | |
| | | // æ·è´éä»¶ |
| | | List<Multifile> originFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, officialId) |
| | | .eq(Multifile::getIsdeleted, Constants.ZERO) |
| | | .in(Multifile::getObjType, 6, 7, 8)); |
| | | for (Multifile f : originFiles) { |
| | | Multifile copy = new Multifile(); |
| | | copy.setCreator(f.getCreator()); |
| | | copy.setCreateDate(now); |
| | | copy.setIsdeleted(Constants.ZERO); |
| | | copy.setName(f.getName()); |
| | | copy.setInfo(f.getInfo()); |
| | | copy.setObjId(change.getId()); |
| | | copy.setType(f.getType()); |
| | | copy.setObjType(f.getObjType()); |
| | | copy.setFileurl(f.getFileurl()); |
| | | copy.setSortnum(f.getSortnum()); |
| | | multifileMapper.insert(copy); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public DriverInfo getVerifyDetail(Integer memberId) { |
| | | // ä¼å
æ¥è¯¢ææ°çåæ´çæ¬ |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getRelationDriverId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ONE) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .orderByDesc(DriverInfo::getCreateTime) |
| | | .last("limit 1")); |
| | | if (Objects.isNull(driverInfo)) { |
| | | // æ åæ´çæ¬åæ¥æ£å¼çæ¬ |
| | | driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | } |
| | | if (Objects.isNull(driverInfo)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // æ è®°æ¯å¦åå¨å®¡æ¹éè¿çæ£å¼çæ¬ |
| | | if (driverInfo.getRelationDriverId() != null) { |
| | | DriverInfo official = driverInfoMapper.selectById(driverInfo.getRelationDriverId()); |
| | | driverInfo.setHasApprovedOfficial(official != null |
| | | && Constants.equalsInteger(official.getAuditStatus(), Constants.THREE)); |
| | | } else if (Constants.equalsInteger(driverInfo.getVersionType(), Constants.ZERO)) { |
| | | driverInfo.setHasApprovedOfficial(Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.THREE)); |
| | | } else { |
| | | driverInfo.setHasApprovedOfficial(false); |
| | | } |
| | | // æ¼æ¥å¾çåç¼ |
| | | String imgPrefix = ""; |
| | |
| | | if (Objects.isNull(auditDTO.getId()) || Objects.isNull(auditDTO.getAuditStatus())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | DriverInfo driverInfo = driverInfoMapper.selectById(auditDTO.getId()); |
| | | if (Objects.isNull(driverInfo)) { |
| | | // 审æ¹çæ¯åæ´çæ¬ |
| | | DriverInfo changeVersion = driverInfoMapper.selectById(auditDTO.getId()); |
| | | if (Objects.isNull(changeVersion) || Constants.equalsInteger(changeVersion.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | // åªæå®¡æ¹ç¶æä¸º0(å¾
审æ¹)ä¸å·²å¡«å认è¯ä¿¡æ¯æè½å®¡æ¹ |
| | | if (!Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.ZERO) |
| | | || StringUtils.isBlank(driverInfo.getIdcard())) { |
| | | if (!Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO) |
| | | || StringUtils.isBlank(changeVersion.getIdcard())) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å½åç¶æä¸å
许审æ¹"); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | // 审æ¹ç»æï¼auditDTO.auditStatus 0=éè¿âauditStatus=1ï¼1=æç»âauditStatus=2 |
| | | // auditDTO.auditStatus: 0=éè¿â3, 1=驳åâ2 |
| | | Integer newAuditStatus; |
| | | if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO)) { |
| | | newAuditStatus = Constants.THREE; // 审æ¹éè¿ |
| | | // 审æ¹éè¿æ¶å¸æºå®çº§ä¸ºå¿
å¡« |
| | | newAuditStatus = Constants.THREE; |
| | | if (auditDTO.getDriverLevel() == null || auditDTO.getDriverLevel() < 1 || auditDTO.getDriverLevel() > 5) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "审æ¹éè¿æ¶å¿
须填å叿ºå®çº§"); |
| | | } |
| | | } else if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ONE)) { |
| | | newAuditStatus = Constants.TWO; // 审æ¹é©³å |
| | | newAuditStatus = Constants.TWO; |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "审æ¹ç¶æåæ°é误"); |
| | | } |
| | | // æ´æ°å¸æºå®¡æ¹ç¶æ |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getAuditStatus, newAuditStatus) |
| | | .set(DriverInfo::getAuditTime, now) |
| | | .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark()) |
| | | .set(DriverInfo::getAuditUser, auditDTO.getAuditUser()) |
| | | .set(auditDTO.getDriverLevel() != null, DriverInfo::getDriverLevel, auditDTO.getDriverLevel()) |
| | | .set(DriverInfo::getUpdateTime, now) |
| | | .eq(DriverInfo::getId, auditDTO.getId())); |
| | | // æ´æ°ä¼å叿ºè®¤è¯ç¶æï¼éè¿=2ï¼é©³å=3 |
| | | Integer driverStatus = Constants.equalsInteger(newAuditStatus, Constants.ONE) ? Constants.TWO : Constants.THREE; |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getBusinessStatus, driverStatus) |
| | | .set(Member::getUpdateTime, now) |
| | | .eq(Member::getId, driverInfo.getMemberId())); |
| | | |
| | | // çä¿¡éç¥ |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | // 审æ¹éè¿ |
| | | // æ¥æ¾æ£å¼çæ¬ |
| | | Integer officialId = changeVersion.getRelationDriverId(); |
| | | DriverInfo official = officialId != null ? driverInfoMapper.selectById(officialId) : null; |
| | | boolean hasApprovedOfficial = official != null |
| | | && Constants.equalsInteger(official.getAuditStatus(), Constants.THREE); |
| | | |
| | | if (!hasApprovedOfficial) { |
| | | // åºæ¯1ï¼æ£å¼çæ¬æªå®¡æ¹éè¿ï¼é¦æ¬¡å®¡æ¹ï¼ |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getAuditStatus, newAuditStatus) |
| | | .set(DriverInfo::getAuditTime, now) |
| | | .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark()) |
| | | .set(DriverInfo::getAuditUser, auditDTO.getAuditUser()) |
| | | .set(auditDTO.getDriverLevel() != null, DriverInfo::getDriverLevel, auditDTO.getDriverLevel()) |
| | | .set(DriverInfo::getUpdateTime, now) |
| | | .eq(DriverInfo::getId, changeVersion.getId())); |
| | | |
| | | // åæ¥æ´æ°æ£å¼çæ¬ï¼å®¡æ¹ç¶æ + æ°æ®åæ®µï¼ |
| | | if (official != null) { |
| | | syncDriverChangeToOfficial(changeVersion, official, auditDTO.getDriverLevel(), now); |
| | | } |
| | | |
| | | // æ´æ°ä¼åç¶æ |
| | | Integer driverStatus = Constants.equalsInteger(newAuditStatus, Constants.THREE) ? Constants.TWO : Constants.THREE; |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getBusinessStatus, driverStatus) |
| | | .set(Member::getUpdateTime, now) |
| | | .eq(Member::getId, changeVersion.getMemberId())); |
| | | |
| | | // çä¿¡éç¥ |
| | | sendDriverAuditSms(changeVersion, newAuditStatus, auditDTO.getAuditRemark()); |
| | | } else { |
| | | // åºæ¯2ï¼æ£å¼çæ¬å·²å®¡æ¹éè¿ï¼åæ´å®¡æ¹ï¼ |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.THREE)) { |
| | | // 审æ¹éè¿ï¼åæ´çæ¬æ è®°auditStatus=3ï¼åæ¥æ°æ®å°æ£å¼çæ¬ |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getAuditStatus, Constants.THREE) |
| | | .set(DriverInfo::getAuditTime, now) |
| | | .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark()) |
| | | .set(DriverInfo::getAuditUser, auditDTO.getAuditUser()) |
| | | .set(DriverInfo::getDriverLevel, auditDTO.getDriverLevel()) |
| | | .set(DriverInfo::getUpdateTime, now) |
| | | .eq(DriverInfo::getId, changeVersion.getId())); |
| | | |
| | | // åæ¥åæ´çæ¬æ°æ®å°æ£å¼çæ¬ |
| | | syncDriverChangeToOfficial(changeVersion, official, auditDTO.getDriverLevel(), now); |
| | | } else { |
| | | // 审æ¹é©³åï¼ä»
æ è®°åæ´çæ¬ |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getAuditStatus, Constants.TWO) |
| | | .set(DriverInfo::getAuditTime, now) |
| | | .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark()) |
| | | .set(DriverInfo::getAuditUser, auditDTO.getAuditUser()) |
| | | .set(DriverInfo::getUpdateTime, now) |
| | | .eq(DriverInfo::getId, changeVersion.getId())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void syncDriverChangeToOfficial(DriverInfo changeVersion, DriverInfo official, Integer driverLevel, Date now) { |
| | | official.setName(changeVersion.getName()); |
| | | official.setIdcard(changeVersion.getIdcard()); |
| | | official.setMaritalStatus(changeVersion.getMaritalStatus()); |
| | | official.setAreaId(changeVersion.getAreaId()); |
| | | official.setLivePlace(changeVersion.getLivePlace()); |
| | | official.setCarType(changeVersion.getCarType()); |
| | | official.setCarCode(changeVersion.getCarCode()); |
| | | official.setCarColor(changeVersion.getCarColor()); |
| | | official.setCardStartDate(changeVersion.getCardStartDate()); |
| | | official.setCardEndDate(changeVersion.getCardEndDate()); |
| | | official.setIdcardImg(changeVersion.getIdcardImg()); |
| | | official.setIdcardImgBack(changeVersion.getIdcardImgBack()); |
| | | official.setAliAccount(changeVersion.getAliAccount()); |
| | | official.setAliName(changeVersion.getAliName()); |
| | | if (driverLevel != null) { |
| | | official.setDriverLevel(driverLevel); |
| | | } |
| | | official.setUpdateTime(now); |
| | | driverInfoMapper.updateById(official); |
| | | |
| | | // 忥éä»¶ï¼å
å æ£å¼çæ¬æ§éä»¶ï¼åä»åæ´çæ¬æ·è´ |
| | | deleteDriverAttachments(official.getId()); |
| | | List<Multifile> changeFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, changeVersion.getId()) |
| | | .eq(Multifile::getIsdeleted, Constants.ZERO) |
| | | .in(Multifile::getObjType, 6, 7, 8)); |
| | | for (Multifile f : changeFiles) { |
| | | Multifile copy = new Multifile(); |
| | | copy.setCreator(f.getCreator()); |
| | | copy.setCreateDate(now); |
| | | copy.setIsdeleted(Constants.ZERO); |
| | | copy.setName(f.getName()); |
| | | copy.setInfo(f.getInfo()); |
| | | copy.setObjId(official.getId()); |
| | | copy.setType(f.getType()); |
| | | copy.setObjType(f.getObjType()); |
| | | copy.setFileurl(f.getFileurl()); |
| | | copy.setSortnum(f.getSortnum()); |
| | | multifileMapper.insert(copy); |
| | | } |
| | | } |
| | | |
| | | private void sendDriverAuditSms(DriverInfo driverInfo, Integer newAuditStatus, String auditRemark) { |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.THREE)) { |
| | | sendSmsNotify(driverInfo.getTelephone(), |
| | | Constants.SmsNotify.DRIVER_AUTH_APPROVED, |
| | | "driver", driverInfo.getName()); |
| | | } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) { |
| | | // 审æ¹é©³å |
| | | sendSmsNotify(driverInfo.getTelephone(), |
| | | Constants.SmsNotify.DRIVER_AUTH_REJECTED, |
| | | "driver", driverInfo.getName(), |
| | | "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : ""); |
| | | "reason", auditRemark != null ? auditRemark : ""); |
| | | } |
| | | } |
| | | |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void updateLocation(Integer memberId, Double longitude, Double latitude) { |
| | | public void updateLocation(Integer driverId, Double longitude, Double latitude) { |
| | | if (longitude == null || latitude == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ç»çº¬åº¦ä¸è½ä¸ºç©º"); |
| | | } |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getId, driverId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public DriverCenterVO getDriverCenterInfo(Integer memberId) { |
| | | public DriverCenterVO getDriverCenterInfo(Integer driveId) { |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getId, driveId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null) { |
| | |
| | | public com.doumee.dao.vo.DriverStatsVO getDriverStats(Integer memberId) { |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null) { |
| | |
| | | |
| | | // 1. è·å叿ºå®ä½ |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null || driver.getLatitude() == null || driver.getLongitude() == null) { |
| | |
| | | |
| | | // è·å叿ºä¿¡æ¯ |
| | | DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, memberId) |
| | | .eq(DriverInfo::getId, memberId) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driver == null) { |
| | |
| | | .eq(Objects.nonNull(dto.getStatus()),Orders::getStatus, dto.getStatus()) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .orderByAsc(Orders::getAcceptTime); |
| | | // å
³é®è¯æç´¢ï¼æ¶ä»¶äºº/æ¶ä»¶äººçµè¯æ¨¡ç³ã订åå·ç²¾å |
| | | if (StringUtils.isNotBlank(dto.getKeyword())) { |
| | | String kw = dto.getKeyword().trim(); |
| | | wrapper.and(w -> w.like(Orders::getTakeUser, kw) |
| | | .or().like(Orders::getTakePhone, kw) |
| | | .or().eq(Orders::getCode, kw)); |
| | | } |
| | | |
| | | List<Orders> ordersList = ordersMapper.selectJoinList(Orders.class, wrapper); |
| | | |
| | |
| | | if (StringUtils.isBlank(phone)) { |
| | | return; |
| | | } |
| | | if (!smsNotify.isEnabled()) { |
| | | return; |
| | | } |
| | | String content = smsNotify.format(paramPairs); |
| | | try { |
| | | JSONObject templateParam = new JSONObject(); |
| | |
| | | .select("s1.name", Orders::getDepositShopName) |
| | | .select("s1.address", Orders::getDepositShopAddress) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getDepositShopAddress) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s1.link_phone as takeShopLinkPhone") |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | .select("c2.other_field as c2OtherField") |
| | |
| | | } |
| | | try { |
| | | int lastIndex = token.lastIndexOf("_") + 1; |
| | | Integer memberId = Integer.valueOf(token.substring(lastIndex)); |
| | | Member member = memberMapper.selectById(memberId); |
| | | Integer driverId = Integer.valueOf(token.substring(lastIndex)); |
| | | DriverInfo driverInfo = driverInfoMapper.selectById(driverId); |
| | | if(Objects.isNull(driverInfo)){ |
| | | return false; |
| | | } |
| | | Member member = memberMapper.selectById(driverInfo.getMemberId()); |
| | | return member != null |
| | | && !Constants.ONE.equals(member.getDeleted()) |
| | | && !Constants.ONE.equals(member.getStatus()) |
| | |
| | | driverInfoMapper.updateById(update); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int initChangeVersions() { |
| | | Date now = new Date(); |
| | | // 1. è¡¥å
¨ version_type 为 NULL çè®°å½ |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getVersionType, Constants.ZERO) |
| | | .isNull(DriverInfo::getVersionType)); |
| | | |
| | | // 2. æ¥è¯¢ææå·²æåæ´çæ¬ç relationDriverId |
| | | List<DriverInfo> changeVersions = driverInfoMapper.selectList(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getVersionType, Constants.ONE) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .ne(DriverInfo::getAuditStatus,99) |
| | | .select(DriverInfo::getRelationDriverId) |
| | | .isNotNull(DriverInfo::getRelationDriverId)); |
| | | Set<Integer> existingRelationIds = changeVersions.stream() |
| | | .map(DriverInfo::getRelationDriverId) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | // 3. æ¥è¯¢æææ²¡æåæ´çæ¬çæ£å¼çæ¬å¸æº |
| | | QueryWrapper<DriverInfo> qw = new QueryWrapper<>(); |
| | | qw.lambda() |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO); |
| | | List<DriverInfo> officialList = driverInfoMapper.selectList(qw); |
| | | |
| | | int count = 0; |
| | | for (DriverInfo official : officialList) { |
| | | if (existingRelationIds.contains(official.getId())) { |
| | | continue; |
| | | } |
| | | createDriverChangeVersion(official, official.getId(), now); |
| | | count++; |
| | | } |
| | | return count; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.MemberCouponMapper; |
| | | import com.doumee.dao.business.model.MemberCoupon; |
| | | import com.doumee.dao.system.model.SystemUser; |
| | | import com.doumee.service.business.MemberCouponService; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | @Service |
| | | public class MemberCouponServiceImpl implements MemberCouponService { |
| | | |
| | | @Autowired |
| | | private MemberCouponMapper memberCouponMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public Integer create(MemberCoupon memberCoupon) { |
| | | if (Objects.isNull(memberCoupon) || Objects.isNull(memberCoupon.getCouponId()) || Objects.isNull(memberCoupon.getMemberId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | memberCoupon.setIsdeleted(Constants.ZERO); |
| | | memberCoupon.setCreateDate(new Date()); |
| | | memberCoupon.setCreator(loginUserInfo.getId()); |
| | | memberCoupon.setEditDate(new Date()); |
| | | memberCoupon.setEditor(loginUserInfo.getId()); |
| | | memberCouponMapper.insert(memberCoupon); |
| | | return memberCoupon.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteById(Integer id) { |
| | | memberCouponMapper.update(new UpdateWrapper<MemberCoupon>().lambda() |
| | | .set(MemberCoupon::getIsdeleted, Constants.ONE) |
| | | .eq(MemberCoupon::getId, id)); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteByIdInBatch(List<Integer> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | return; |
| | | } |
| | | for (Integer id : ids) { |
| | | this.deleteById(id); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void updateById(MemberCoupon memberCoupon) { |
| | | if (Objects.isNull(memberCoupon) || Objects.isNull(memberCoupon.getId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | memberCoupon.setEditDate(new Date()); |
| | | memberCoupon.setEditor(loginUserInfo.getId()); |
| | | memberCouponMapper.updateById(memberCoupon); |
| | | } |
| | | |
| | | @Override |
| | | public MemberCoupon findById(Integer id) { |
| | | MemberCoupon memberCoupon = memberCouponMapper.selectById(id); |
| | | if (Objects.isNull(memberCoupon)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | return memberCoupon; |
| | | } |
| | | |
| | | @Override |
| | | public List<MemberCoupon> findList(MemberCoupon memberCoupon) { |
| | | QueryWrapper<MemberCoupon> wrapper = new QueryWrapper<>(memberCoupon); |
| | | return memberCouponMapper.selectList(wrapper); |
| | | } |
| | | |
| | | @Override |
| | | public PageData<MemberCoupon> findPage(PageWrap<MemberCoupon> pageWrap) { |
| | | IPage<MemberCoupon> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<MemberCoupon> queryWrapper = new MPJLambdaWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | pageWrap.getModel().setIsdeleted(Constants.ZERO); |
| | | queryWrapper.selectAll(MemberCoupon.class) |
| | | .select("m.NAME AS MEMBER_NAME") |
| | | .select("m.TELEPHONE AS MEMBER_TELEPHONE") |
| | | .select("m.NICK_NAME AS MEMBER_NICK_NAME") |
| | | .leftJoin("member m ON m.ID = t.MEMBER_ID"); |
| | | if (pageWrap.getModel().getId() != null) { |
| | | queryWrapper.eq(MemberCoupon::getId, pageWrap.getModel().getId()); |
| | | } |
| | | if (pageWrap.getModel().getIsdeleted() != null) { |
| | | queryWrapper.eq(MemberCoupon::getIsdeleted, pageWrap.getModel().getIsdeleted()); |
| | | } |
| | | if (pageWrap.getModel().getStatus() != null) { |
| | | queryWrapper.eq(MemberCoupon::getStatus, pageWrap.getModel().getStatus()); |
| | | } |
| | | if (pageWrap.getModel().getCouponId() != null) { |
| | | queryWrapper.eq(MemberCoupon::getCouponId, pageWrap.getModel().getCouponId()); |
| | | } |
| | | if (pageWrap.getModel().getMemberId() != null) { |
| | | queryWrapper.eq(MemberCoupon::getMemberId, pageWrap.getModel().getMemberId()); |
| | | } |
| | | if (pageWrap.getModel().getOrderId() != null) { |
| | | queryWrapper.eq(MemberCoupon::getOrderId, pageWrap.getModel().getOrderId()); |
| | | } |
| | | if (pageWrap.getModel().getType() != null) { |
| | | queryWrapper.eq(MemberCoupon::getType, pageWrap.getModel().getType()); |
| | | } |
| | | if (pageWrap.getModel().getCouponType() != null) { |
| | | queryWrapper.eq(MemberCoupon::getCouponType, pageWrap.getModel().getCouponType()); |
| | | } |
| | | if (pageWrap.getModel().getGetMethod() != null) { |
| | | queryWrapper.eq(MemberCoupon::getGetMethod, pageWrap.getModel().getGetMethod()); |
| | | } |
| | | if (pageWrap.getModel().getName() != null) { |
| | | queryWrapper.like(MemberCoupon::getName, pageWrap.getModel().getName()); |
| | | } |
| | | if (pageWrap.getModel().getCreateDate() != null) { |
| | | queryWrapper.ge(MemberCoupon::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); |
| | | queryWrapper.le(MemberCoupon::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); |
| | | } |
| | | queryWrapper.orderByDesc(MemberCoupon::getId); |
| | | return PageData.from(memberCouponMapper.selectJoinPage(page, MemberCoupon.class, queryWrapper)); |
| | | } |
| | | |
| | | @Override |
| | | public long count(MemberCoupon memberCoupon) { |
| | | QueryWrapper<MemberCoupon> wrapper = new QueryWrapper<>(memberCoupon); |
| | | return memberCouponMapper.selectCount(wrapper); |
| | | } |
| | | } |
| | |
| | | import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; |
| | | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.doumee.biz.system.OperationConfigBiz; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.config.jwt.JwtTokenUtil; |
| | | import com.doumee.config.wx.WxMiniConfig; |
| | |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.CouponMapper; |
| | | import com.doumee.dao.business.MemberCouponMapper; |
| | | import com.doumee.dao.business.OrdersMapper; |
| | | import com.doumee.dao.business.ShopInfoMapper; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Coupon; |
| | | import com.doumee.dao.business.model.MemberCoupon; |
| | | import com.doumee.dao.business.model.Orders; |
| | | import com.doumee.dao.business.model.ShopInfo; |
| | | import com.doumee.dao.business.model.MemberRevenue; |
| | | import com.doumee.dao.business.model.Smsrecord; |
| | | import com.doumee.dao.dto.MemberListQueryDTO; |
| | | import com.doumee.dao.dto.OperationConfigDTO; |
| | | import com.doumee.dao.dto.UpdMobileRequest; |
| | | import com.doumee.dao.dto.WxPhoneRequest; |
| | | import com.doumee.dao.vo.AccountResponse; |
| | | import com.doumee.dao.vo.MemberContactVO; |
| | | import com.doumee.dao.vo.MemberDetailVO; |
| | | import com.doumee.dao.vo.MemberListVO; |
| | | import com.doumee.dao.vo.PlatformAboutVO; |
| | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import me.chanjar.weixin.common.error.WxErrorException; |
| | | import nonapi.io.github.classgraph.json.Id; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | |
| | | * @author æ±è¹è¹ |
| | | * @date 2025/07/09 12:00 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class MemberServiceImpl implements MemberService { |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private OrdersMapper ordersMapper; |
| | | |
| | | @Autowired |
| | | private OperationConfigBiz operationConfigBiz; |
| | | |
| | | @Autowired |
| | | private CouponMapper couponMapper; |
| | | |
| | | @Autowired |
| | | private MemberCouponMapper memberCouponMapper; |
| | | |
| | | |
| | | @Override |
| | |
| | | * é¨åºç¨æ·èº«ä»½æ¶ï¼å¡«å
é¨åºå®¡æ ¸ç¶æ |
| | | */ |
| | | private void fillShopInfo(UserCenterVO userCenterVO, Member member) { |
| | | ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | // æ¥è¯¢æ£å¼çæ¬é¨åº |
| | | ShopInfo official = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getRegionMemberId, member.getId()) |
| | | .eq(ShopInfo::getVersionType, Constants.ZERO) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (shopInfo != null) { |
| | | userCenterVO.setShopId(shopInfo.getId()); |
| | | userCenterVO.setShopAuditStatus(shopInfo.getAuditStatus()); |
| | | if (official != null) { |
| | | userCenterVO.setShopId(official.getId()); |
| | | if (Constants.equalsInteger(official.getAuditStatus(), Constants.THREE)) { |
| | | // æ£å¼çæ¬å·²æ¯ä»æ¼éï¼æ¥è¯¢ææ°åæ´çæ¬ç¶æ |
| | | ShopInfo changeVersion = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getRelationShopId, official.getId()) |
| | | .eq(ShopInfo::getVersionType, Constants.ONE) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .orderByDesc(ShopInfo::getCreateTime) |
| | | .last("limit 1")); |
| | | if (changeVersion != null) { |
| | | if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) { |
| | | userCenterVO.setShopAuditStatus(Constants.THREE); |
| | | } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO)) { |
| | | userCenterVO.setShopAuditStatus(4); // åæ´ä¸ |
| | | } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.TWO)) { |
| | | userCenterVO.setShopAuditStatus(5); // åæ´æªéè¿ |
| | | } else { |
| | | userCenterVO.setShopAuditStatus(Constants.THREE); |
| | | } |
| | | } else { |
| | | // æ åæ´çæ¬ï¼ä¿ææ£å¼çæ¬ç¶æ |
| | | userCenterVO.setShopAuditStatus(Constants.THREE); |
| | | } |
| | | } else { |
| | | // æ£å¼çæ¬æªæ¯ä»æ¼éï¼ç´æ¥è¿åå½åç¶æ |
| | | userCenterVO.setShopAuditStatus(official.getAuditStatus()); |
| | | } |
| | | } |
| | | // æ ¹æ®openidæ¥è¯¢å½åç»å®çé¨åº |
| | | if (StringUtils.isNotBlank(member.getOpenid())) { |
| | |
| | | vo.setDriverPrivacyPolicy(getDictValue(Constants.DRIVER_PRIVACY_POLICY)); |
| | | vo.setPriceDescription(getDictValue(Constants.PRICE_DESCRIPTION)); |
| | | vo.setProhibitedItems(getDictValue(Constants.PROHIBITED_ITEMS)); |
| | | vo.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SERVER_PHONE).getCode())); |
| | | return vo; |
| | | } |
| | | |
| | |
| | | public void logOut(String token,Integer userId,Integer userType){ |
| | | if(Constants.equalsInteger(userType,Constants.ZERO)){ |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,userId)); |
| | | }else if(Constants.equalsInteger(userType,Constants.TWO)){ |
| | | shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda().setSql(" openid = null ").eq(ShopInfo::getId,userId)); |
| | | }else if (Constants.equalsInteger(userType,Constants.TWO)){ |
| | | try { |
| | | Integer lastIndex = token.lastIndexOf("_")+1; |
| | | Integer tokenId = Integer.valueOf(token.substring(lastIndex)); |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" LOGIN_SHOP_ID = null ").eq(Member::getId,tokenId)); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | } |
| | | jwtTokenUtil.logout(token); |
| | | } |
| | |
| | | ); |
| | | } |
| | | redisTemplate.delete(token); |
| | | } |
| | | |
| | | @Override |
| | | public MemberContactVO getContactInfo(Integer memberId) { |
| | | MemberContactVO vo = new MemberContactVO(); |
| | | // ä¼å
ä»åå²è®¢ååæ¶ä»¶äººä¿¡æ¯ |
| | | Orders lastOrder = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getMemberId, memberId) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .isNotNull(Orders::getTakeUser) |
| | | .ne(Orders::getTakeUser, "") |
| | | .orderByDesc(Orders::getId) |
| | | .last("limit 1")); |
| | | if (lastOrder != null && StringUtils.isNotBlank(lastOrder.getTakeUser())) { |
| | | vo.setName(lastOrder.getTakeUser()); |
| | | vo.setPhone(lastOrder.getTakePhone()); |
| | | return vo; |
| | | } |
| | | // åç¨æ·ä¿¡æ¯ |
| | | Member member = memberMapper.selectById(memberId); |
| | | if (member != null) { |
| | | vo.setName(member.getName() != null ? member.getName() : ""); |
| | | vo.setPhone(member.getTelephone() != null ? member.getTelephone() : ""); |
| | | } |
| | | return vo; |
| | | } |
| | | |
| | | |
| | |
| | | ); |
| | | } |
| | | |
| | | @Override |
| | | public void giftRegisterCoupon() { |
| | | // 1. 读åé
ç½® |
| | | OperationConfigDTO config = operationConfigBiz.getConfig(); |
| | | String yearsStr = config.getRegisterCouponYears(); |
| | | String maxGiftStr = config.getRegisterCouponGiftCount(); |
| | | String couponIdsStr = config.getRegisterCouponId(); |
| | | if (StringUtils.isBlank(yearsStr) || StringUtils.isBlank(maxGiftStr) || StringUtils.isBlank(couponIdsStr)) { |
| | | return; |
| | | } |
| | | int configYears = Integer.parseInt(yearsStr); |
| | | int maxGiftCount = Integer.parseInt(maxGiftStr); |
| | | if (configYears <= 0 || maxGiftCount <= 0) { |
| | | return; |
| | | } |
| | | |
| | | // 2. è§£æä¼æ å¸IDåè¡¨ï¼æ¥è¯¢ææä¼æ å¸ |
| | | List<Integer> couponIdList = Arrays.stream(couponIdsStr.split(",")) |
| | | .map(String::trim).filter(StringUtils::isNotBlank) |
| | | .map(Integer::parseInt).collect(Collectors.toList()); |
| | | List<Coupon> validCoupons = couponMapper.selectList(new QueryWrapper<Coupon>().lambda() |
| | | .in(Coupon::getId, couponIdList) |
| | | .eq(Coupon::getIsdeleted, Constants.ZERO) |
| | | .eq(Coupon::getStatus, Constants.ZERO)); |
| | | if (CollectionUtils.isEmpty(validCoupons)) { |
| | | return; |
| | | } |
| | | |
| | | // 3. æ¥è¯¢æææ®éä¼å |
| | | List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getDeleted, Constants.ZERO) |
| | | .eq(Member::getStatus, Constants.ZERO) |
| | | .eq(Member::getUserType, Constants.ZERO) |
| | | .isNotNull(Member::getCreateTime)); |
| | | |
| | | Date now = new Date(); |
| | | long msPerYear = 365L * 24 * 60 * 60 * 1000; |
| | | int giftedMemberCount = 0; |
| | | |
| | | for (Member member : members) { |
| | | int alreadyGifted = member.getRegisterCouponGiftCount() != null ? member.getRegisterCouponGiftCount() : 0; |
| | | int registeredYears = (int) ((now.getTime() - member.getCreateTime().getTime()) / msPerYear); |
| | | int shouldGiftTotal = registeredYears / configYears; |
| | | int remainGift = Math.min(shouldGiftTotal, maxGiftCount) - alreadyGifted; |
| | | if (remainGift <= 0) { |
| | | continue; |
| | | } |
| | | |
| | | // 4. æ¯æ¬¡èµ éææææä¼æ å¸ |
| | | for (int i = 0; i < remainGift; i++) { |
| | | for (Coupon coupon : validCoupons) { |
| | | MemberCoupon mc = new MemberCoupon(); |
| | | mc.setCouponId(coupon.getId()); |
| | | mc.setMemberId(member.getId()); |
| | | mc.setStatus(Constants.CouponStatus.waitClaim.getKey()); |
| | | Calendar validCal = Calendar.getInstance(); |
| | | validCal.add(Calendar.DAY_OF_MONTH, coupon.getPushDays() != null ? coupon.getPushDays() : 7); |
| | | mc.setValidDate(validCal.getTime()); |
| | | mc.setName(coupon.getName()); |
| | | mc.setInfo(coupon.getInfo()); |
| | | mc.setType(coupon.getType()); |
| | | mc.setLimitPrice(coupon.getLimitPrice()); |
| | | mc.setPrice(coupon.getPrice()); |
| | | mc.setGetMethod(coupon.getGetMethod()); |
| | | mc.setCouponType(coupon.getCouponType()); |
| | | mc.setPushDays(coupon.getPushDays()); |
| | | mc.setValidDays(coupon.getValidDays()); |
| | | mc.setIsdeleted(Constants.ZERO); |
| | | mc.setCreateDate(now); |
| | | mc.setEditDate(now); |
| | | memberCouponMapper.insert(mc); |
| | | } |
| | | } |
| | | |
| | | // 5. æ´æ°ä¼åå·²èµ éæ¬¡æ° |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getRegisterCouponGiftCount, alreadyGifted + remainGift) |
| | | .eq(Member::getId, member.getId())); |
| | | giftedMemberCount++; |
| | | } |
| | | log.info("æ³¨åæ»¡å¹´èµ é伿 å¸å®æï¼å
±å¤ç{}åä¼å", giftedMemberCount); |
| | | } |
| | | |
| | | } |
| | |
| | | wrapper.ge(OrdersRefund::getCreateTime, model.getCreateStartTime()); |
| | | } |
| | | if (model.getCreateEndTime() != null) { |
| | | wrapper.le(OrdersRefund::getCreateTime, model.getCreateEndTime()); |
| | | wrapper.le(OrdersRefund::getCreateTime, Utils.Date.getEnd(model.getCreateEndTime())); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.GeoUtils; |
| | | import com.doumee.core.utils.ID; |
| | | import com.doumee.core.utils.geocode.MapUtil; |
| | | import com.doumee.core.utils.Utils; |
| | |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo()); |
| | | queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime()); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime()); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime())); |
| | | queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId()); |
| | | queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType()); |
| | | queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus()); |
| | |
| | | if (o.getStatus() != null) { |
| | | Constants.OrderStatus os = Constants.OrderStatus.getByKey(o.getStatus()); |
| | | o.setStatusDesc(os != null ? os.getValue() : ""); |
| | | } |
| | | if(Constants.equalsInteger(o.getIsUrgent(),Constants.ZERO)){ |
| | | o.setUrgentAmount(Constants.ZERO.longValue()); |
| | | } |
| | | } |
| | | return pageData; |
| | |
| | | // 3. é项计ç®è¿è´¹ï¼èµ·æ¥ä»· + è¶
åºé¨åé¶æ¢¯ä»· |
| | | List<ItemPriceVO> itemList = new ArrayList<>(); |
| | | long itemPriceTotal = 0L; |
| | | long maxExtraFeeTotal = 0L; // æå¤§è¶
åºè·ç¦»è´¹ç¨ï¼åä»·Ãæ°éï¼ |
| | | |
| | | for (OrderItemDTO item : dto.getItems()) { |
| | | PricingRule rule = ruleMap.get(String.valueOf(item.getCategoryId())); |
| | |
| | | long extraPricePerUnit = Long.parseLong(rule.getFieldE()); |
| | | |
| | | // é¶æ¢¯è®¡ä»·ï¼è·ç¦» ⤠起æ¥è·ç¦»åèµ·æ¥ä»·ï¼è¶
åºæ ceil(è¶
åºè·ç¦»/åä½) à åä»·ç´¯å |
| | | long extraFee = 0L; |
| | | long unitPrice; |
| | | if (distanceKm.compareTo(startDistance) <= 0) { |
| | | unitPrice = startPrice; |
| | | } else { |
| | | BigDecimal extraKm = distanceKm.subtract(startDistance); |
| | | BigDecimal extraCount = extraKm.divide(extraDistanceUnit, 0, RoundingMode.CEILING); |
| | | unitPrice = startPrice + extraCount.longValue() * extraPricePerUnit; |
| | | extraFee = extraCount.longValue() * extraPricePerUnit; |
| | | unitPrice = startPrice + extraFee; |
| | | } |
| | | |
| | | long subtotal = unitPrice * item.getQuantity(); |
| | |
| | | vo.setExtraPrice(extraPricePerUnit); |
| | | itemList.add(vo); |
| | | |
| | | itemPriceTotal += subtotal; |
| | | // ææç©åçèµ·æ¥ä»·Ãæ°é ç´¯å |
| | | itemPriceTotal += startPrice * item.getQuantity(); |
| | | // è®°å½æå¤§çè¶
åºè·ç¦»è´¹ç¨ |
| | | long extraFeeTotal = extraFee * item.getQuantity(); |
| | | if (extraFeeTotal > maxExtraFeeTotal) { |
| | | maxExtraFeeTotal = extraFeeTotal; |
| | | } |
| | | } |
| | | |
| | | // å¤ç©åæ¶åªå æå¤§çè¶
åºè·ç¦»è´¹ç¨ |
| | | itemPriceTotal += maxExtraFeeTotal; |
| | | |
| | | // 4. ä¿ä»·è´¹ç¨ï¼æ¥ä»·éé¢ Ã ä¿ä»·è´¹ç(åå
¸ INSURANCE_RATE)ï¼å
âåï¼ä¿ä»·éé¢>0æ¶è®¡è´¹ï¼ |
| | | long insuranceFeeFen = 0L; |
| | |
| | | orders.setDeleted(Constants.ZERO); |
| | | orders.setCreateTime(now); |
| | | orders.setUpdateTime(now); |
| | | orders.setIsConverted(Constants.ZERO); |
| | | |
| | | // å¯ä»¶ä¿¡æ¯ |
| | | orders.setDepositShopId(dto.getDepositShopId()); |
| | |
| | | com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<Orders> updateWrapper = |
| | | new UpdateWrapper<Orders>().lambda() |
| | | .eq(Orders::getId, order.getId()) |
| | | .set(Orders::getIsUrgent, Constants.ONE) |
| | | .set(Orders::getPlatformRewardAmount, urgentFeeFen) |
| | | .set(Orders::getPlatformSmsNotified, Constants.ZERO) // éç½®éç¥ç¶æä¸ºæªéç¥ |
| | | .set(Orders::getPlatformSmsNotifiedTime, new Date()) // éç½®éç¥åºåæ¶é´ä¸ºå½å |
| | |
| | | if (dto.getDriverId() != null) { |
| | | // æ ¡éªå¸æºä¿¡æ¯ |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, dto.getDriverId()) |
| | | .eq(DriverInfo::getId, dto.getDriverId()) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driverInfo == null) { |
| | |
| | | updateWrapper.set(Orders::getAcceptType, 1); // 1=ç³»ç»æ´¾å |
| | | updateWrapper.set(Orders::getStatus, Constants.OrderStatus.accepted.getStatus()); |
| | | |
| | | Member driver = memberMapper.selectById(dto.getDriverId()); |
| | | String driverName = driver != null ? driver.getName() : String.valueOf(dto.getDriverId()); |
| | | |
| | | OrderLog driverLog = new OrderLog(); |
| | | driverLog.setOrderId(order.getId()); |
| | | driverLog.setTitle(Constants.OrderLogType.assignDriver.getTitle()); |
| | | driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverName, dto.getUrgentFee().toPlainString())); |
| | | driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverInfo.getName(), dto.getUrgentFee().toPlainString())); |
| | | driverLog.setObjType(Constants.OrderLogType.assignDriver.getStatus()); |
| | | driverLog.setOrderStatus(Constants.OrderStatus.accepted.getStatus()); |
| | | driverLog.setOptUserType(3); |
| | |
| | | return; |
| | | } |
| | | Integer cityId = Integer.valueOf(orders.getCityId()); |
| | | boolean isRemote = Constants.equalsInteger(orders.getType(), Constants.ONE); |
| | | boolean isCompany = Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE); |
| | | |
| | | // 叿ºå æ¯ï¼fieldA=4ï¼é
éåï¼ |
| | | // 叿ºå æ¯ï¼fieldA=4ï¼é
éåï¼ï¼å§ç»ä»åå¸é
ç½®å |
| | | BigDecimal driverRata = getRevenueShareRata(cityId, Constants.FOUR); |
| | | // å¯ä»¶é¨åºå æ¯ï¼fieldA=0(ä¼ä¸å¯)/1(个人å¯) |
| | | int depositFieldA = Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE) ? Constants.ZERO : Constants.ONE; |
| | | BigDecimal depositShopRata = getRevenueShareRata(cityId, depositFieldA); |
| | | // åä»¶é¨åºå æ¯ï¼æ åä»¶é¨åºæ¶æ¯ä¾ä¸º0 |
| | | BigDecimal takeShopRata = BigDecimal.ZERO; |
| | | if (takeShop != null) { |
| | | int takeFieldA = Constants.equalsInteger(takeShop.getCompanyType(), Constants.ONE) ? Constants.TWO : Constants.THREE; |
| | | takeShopRata = getRevenueShareRata(cityId, takeFieldA); |
| | | |
| | | // åä»¶é¨åºå æ¯ |
| | | BigDecimal depositShopRata; |
| | | if (isRemote) { |
| | | int fallbackFieldA = isCompany ? Constants.ZERO : Constants.ONE; |
| | | depositShopRata = getShopRevenueShare(depositShop, "remoteDeposit", cityId, fallbackFieldA); |
| | | } else { |
| | | int fallbackFieldA = isCompany ? Constants.FIVE : Constants.SIX; |
| | | depositShopRata = getShopRevenueShare(depositShop, "localDeposit", cityId, fallbackFieldA); |
| | | } |
| | | |
| | | // 计ç®èªé
¬ï¼åï¼ï¼totalAmount 为åï¼rata 为æ¯ä¾å¼ï¼å¦ 0.15 表示 15%ï¼ |
| | | // åä»¶é¨åºå æ¯ |
| | | BigDecimal takeShopRata = BigDecimal.ZERO; |
| | | if (isRemote && takeShop != null) { |
| | | boolean takeIsCompany = Constants.equalsInteger(takeShop.getCompanyType(), Constants.ONE); |
| | | int fallbackFieldA = takeIsCompany ? Constants.TWO : Constants.THREE; |
| | | takeShopRata = getShopRevenueShare(takeShop, "remoteTake", cityId, fallbackFieldA); |
| | | } |
| | | |
| | | // 计ç®èªé
¬ï¼åï¼ |
| | | long driverFee = new BigDecimal(totalAmount).multiply(driverRata).longValue(); |
| | | long depositShopFee = new BigDecimal(totalAmount).multiply(depositShopRata).longValue(); |
| | | long takeShopFee = new BigDecimal(totalAmount).multiply(takeShopRata).longValue(); |
| | |
| | | * ä» pricing_rule 表è·ååææ¯ä¾ï¼type=4ï¼ |
| | | * |
| | | * @param cityId åå¸ä¸»é® |
| | | * @param fieldA ç±»åï¼0=ä¼ä¸å¯, 1=个人å¯, 2=ä¼ä¸å, 3=个人å, 4=é
éå |
| | | * @param fieldA ç±»åï¼0=å¼å°ä¼ä¸å¯, 1=å¼å°ä¸ªäººå¯, 2=å¼å°ä¼ä¸å, 3=å¼å°ä¸ªäººå, 4=é
éå, 5=å°±å°ä¼ä¸å, 6=å°±å°ä¸ªäººå |
| | | * @return åææ¯ä¾ï¼å¦ 0.15 表示 15%ï¼ |
| | | */ |
| | | private BigDecimal getRevenueShareRata(Integer cityId, int fieldA) { |
| | |
| | | .eq(PricingRule::getFieldA, String.valueOf(fieldA)) |
| | | .last("limit 1")); |
| | | if (rule != null && StringUtils.isNotBlank(rule.getFieldB())) { |
| | | // fieldB åå¨çæ¯ç¾åæ¯æ´æ°ï¼å¦15表示15%ï¼ï¼è½¬æ¢ä¸ºå°æ°æ¯ä¾ï¼0.15ï¼ |
| | | // fieldB åå¨çæ¯ç¾åæ¯æ°åï¼å¦15表示15%ï¼ï¼è½¬æ¢ä¸ºå°æ°æ¯ä¾ï¼0.15ï¼ |
| | | return new BigDecimal(rule.getFieldB()).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP); |
| | | } |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | /** |
| | | * è·åé¨åºæ¶çå æ¯ï¼ä¼å
ä»é¨åº revenueShareConfig åï¼æ åå
åºåå¸ pricing_rule |
| | | * |
| | | * @param shop é¨åºä¿¡æ¯ |
| | | * @param jsonKey revenueShareConfig ä¸çé®å |
| | | * @param cityId åå¸ä¸»é®ï¼å
åºç¨ï¼ |
| | | * @param fallbackFieldA å
åº pricing_rule fieldA å¼ |
| | | * @return åææ¯ä¾ |
| | | */ |
| | | private BigDecimal getShopRevenueShare(ShopInfo shop, String jsonKey, Integer cityId, int fallbackFieldA) { |
| | | if (shop != null && StringUtils.isNotBlank(shop.getRevenueShareConfig())) { |
| | | try { |
| | | JSONObject config = JSONObject.parseObject(shop.getRevenueShareConfig()); |
| | | if (config != null && config.containsKey(jsonKey)) { |
| | | Double value = config.getDouble(jsonKey); |
| | | if (value != null) { |
| | | return new BigDecimal(value).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP); |
| | | } |
| | | } |
| | | } catch (Exception ignored) { |
| | | } |
| | | } |
| | | return getRevenueShareRata(cityId, fallbackFieldA); |
| | | } |
| | | |
| | | @Override |
| | |
| | | .eq(status != null, Orders::getStatus, status) |
| | | .in(statusList != null, Orders::getStatus, statusList) |
| | | .orderByDesc(Orders::getCreateTime); |
| | | // å
³é®è¯æç´¢ï¼æ¶ä»¶äºº/æ¶ä»¶äººçµè¯æ¨¡ç³ã订åå·ç²¾å |
| | | if (model != null && StringUtils.isNotBlank(model.getKeyword())) { |
| | | String kw = model.getKeyword().trim(); |
| | | wrapper.and(w -> w.like(Orders::getTakeUser, kw) |
| | | .or().like(Orders::getTakePhone, kw) |
| | | .or().eq(Orders::getCode, kw)); |
| | | } |
| | | |
| | | IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper); |
| | | List<MyOrderVO> voList = new ArrayList<>(); |
| | |
| | | } |
| | | |
| | | wrapper.eq(status != null, Orders::getStatus, status) |
| | | .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList) |
| | | .orderByDesc(Orders::getId); |
| | | .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList); |
| | | if(Objects.nonNull(model.getCombinedStatus())&&Constants.equalsInteger(model.getCombinedStatus(),Constants.OrderCombinedStatus.finished.getKey())){ |
| | | wrapper.orderByDesc(Orders::getFinishTime); |
| | | }else{ |
| | | wrapper.orderByDesc(Orders::getId); |
| | | } |
| | | // å
³é®è¯æç´¢ï¼æ¶ä»¶äºº/æ¶ä»¶äººçµè¯æ¨¡ç³ã订åå·ç²¾å |
| | | MyOrderDTO shopModel = pageWrap.getModel(); |
| | | if (shopModel != null && StringUtils.isNotBlank(shopModel.getKeyword())) { |
| | | String kw = shopModel.getKeyword().trim(); |
| | | wrapper.and(w -> w.like(Orders::getTakeUser, kw) |
| | | .or().like(Orders::getTakePhone, kw) |
| | | .or().eq(Orders::getCode, kw)); |
| | | } |
| | | |
| | | IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper); |
| | | List<MyOrderVO> voList = new ArrayList<>(); |
| | |
| | | DriverInfo originalDriver = originalDriverId != null ? driverInfoMapper.selectById(originalDriverId) : null; |
| | | |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | // åä»¶ç¹ä¿¡æ¯æ´æ°ä¸ºåä»¶é¨åºï¼ä½¿ç¨ UpdateWrapper ç¡®ä¿ null åæ®µä¹è½çæ |
| | | |
| | | // 计ç®å°±å°å¯ååä»¶é¨åºåææ¯ä¾ |
| | | Integer cityId = Integer.valueOf(order.getCityId()); |
| | | boolean isCompany = depositShop != null && Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE); |
| | | int fallbackFieldA = isCompany ? Constants.FIVE : Constants.SIX; |
| | | BigDecimal localDepositRata = getShopRevenueShare(depositShop, "localDeposit", cityId, fallbackFieldA); |
| | | Long totalAmount = order.getTotalAmount() != null ? order.getTotalAmount() : 0L; |
| | | Long localDepositFee = new BigDecimal(totalAmount).multiply(localDepositRata) |
| | | .setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | |
| | | // åä»¶ç¹ä¿¡æ¯æ´æ°ä¸ºåä»¶é¨åºï¼éç®åæ |
| | | UpdateWrapper<Orders> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.lambda() |
| | | .eq(Orders::getId, order.getId()) |
| | | .set(Orders::getType, Constants.ZERO) |
| | | .set(Orders::getStatus, Constants.OrderStatus.arrived.getKey()) |
| | | .set(Orders::getIsConverted, Constants.ONE) |
| | | .set(Orders::getTakeShopId, order.getDepositShopId()) |
| | | .set(Orders::getTakeShopName, order.getDepositShopName()) |
| | | .set(Orders::getTakeShopAddress, order.getDepositShopAddress()) |
| | | .set(Orders::getTakeShopLinkPhone, order.getDepositShopLinkPhone()) |
| | | .set(Orders::getTakeLocation, order.getDepositLocation()) |
| | | .set(Orders::getTakeLocationRemark, order.getDepositLocationRemark()) |
| | | .set(Orders::getTakeLat, order.getDepositLat()) |
| | | .set(Orders::getTakeLgt, order.getDepositLgt()) |
| | | .set(Orders::getExpectedTakeTime, new Date()); |
| | | .set(Orders::getExpectedTakeTime, new Date()) |
| | | // åä»¶é¨åºåææå°±å°å¯åéç® |
| | | .set(Orders::getDepositShopFeeRata, localDepositRata) |
| | | .set(Orders::getDepositShopFee, localDepositFee) |
| | | // 叿ºãåä»¶é¨åºåæå½é¶ |
| | | .set(Orders::getDriverFeeRata, BigDecimal.ZERO) |
| | | .set(Orders::getDriverFee, 0L) |
| | | .set(Orders::getTakeShopFeeRata, BigDecimal.ZERO) |
| | | .set(Orders::getTakeShopFee, 0L); |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | updateWrapper.lambda() |
| | | .set(Orders::getAcceptDriver, null) |
| | |
| | | order.setWxExternalNo(wxTradeNo); |
| | | order.setPayAmount(order.getTotalAmount()); |
| | | order.setUpdateTime(now); |
| | | // 计ç®åºéºè®¢ååºå·ï¼å½ååä»¶é¨åºå½å¤©å·²æ¯ä»è®¢åæ° + 1 |
| | | Date todayStart = DateUtil.getStartOfDay(now); |
| | | Long currentCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getDepositShopId, order.getDepositShopId()) |
| | | .eq(Orders::getPayStatus, Constants.ONE) |
| | | .ge(Orders::getPayTime, todayStart) |
| | | .eq(Orders::getDeleted, Constants.ZERO)); |
| | | order.setAutoNum(currentCount + 1); |
| | | // çæä¼åæ ¸éç |
| | | order.setMemberVerifyCode(generateVerifyCode()); |
| | | // å¼å°å¯åï¼è®¡ç®é¢è®¡éè¾¾æ¶é´ |
| | |
| | | otherOrders.setUpdateTime(now); |
| | | otherOrdersMapper.updateById(otherOrders); |
| | | |
| | | // 4. æ¥è¯¢é¨åºä¿¡æ¯ï¼éè¿æ³¨åä¼å主é®å
³èï¼ |
| | | // 4. æ¥è¯¢åæ´çæ¬é¨åºä¿¡æ¯ï¼éè¿æ³¨åä¼å主é®å
³èï¼ |
| | | ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getRegionMemberId, otherOrders.getMemberId()) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .eq(ShopInfo::getVersionType, Constants.ONE) |
| | | .last("limit 1")); |
| | | if (shopInfo == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "é¨åºä¸åå¨"); |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "é¨åºåæ´è®°å½ä¸åå¨"); |
| | | } |
| | | // 5. æ´æ°é¨åºç¶æï¼å·²æ¯ä»æ¼é |
| | | shopInfo.setAuditStatus(Constants.THREE); // 3=å·²æ¯ä»æ¼é |
| | | // 5. æ´æ°åæ´çæ¬æ¯ä»ç¶æ |
| | | Member member = memberMapper.selectById(otherOrders.getMemberId()); |
| | | shopInfo.setAuditStatus(Constants.THREE); |
| | | shopInfo.setPayStatus(Constants.ONE); |
| | | shopInfo.setPayTime(now); |
| | | shopInfo.setWxExternalNo(wxTradeNo); |
| | | shopInfo.setCode(otherOrders.getCode()); |
| | | Member member = memberMapper.selectById(otherOrders.getMemberId()); |
| | | if (member != null) { |
| | | shopInfo.setPayMemberOpenId(member.getOpenid()); |
| | | } |
| | | shopInfo.setUpdateTime(now); |
| | | shopInfoMapper.updateById(shopInfo); |
| | | |
| | | // 6. åæ¥æ´æ°æ£å¼çæ¬ç¶æä¸ºå·²æ¯ä»æ¼é |
| | | if (shopInfo.getRelationShopId() != null) { |
| | | ShopInfo officialShop = shopInfoMapper.selectById(shopInfo.getRelationShopId()); |
| | | if (officialShop != null) { |
| | | officialShop.setAuditStatus(Constants.THREE); |
| | | officialShop.setUpdateTime(now); |
| | | shopInfoMapper.updateById(officialShop); |
| | | } |
| | | } |
| | | |
| | | // çä¿¡éç¥é¨åºï¼æåå
¥é©» |
| | | String rawPassword = shopInfo.getTelephone() != null && shopInfo.getTelephone().length() >= 6 |
| | |
| | | } |
| | | order.setMemberVerifyCode(generateVerifyCode()); |
| | | ordersMapper.updateById(order); |
| | | // å¯åæ¶å¾çå¿
å¡« |
| | | if (images == null || images.isEmpty()) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请ä¸ä¼ å¯åå¾ç"); |
| | | } |
| | | // ä¿åå¯åå¾çï¼obj_type=2 订åå¯åå¾çï¼æå¤3å¼ ï¼ |
| | | saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId); |
| | | // è®°å½è®¢åæ¥å¿ |
| | |
| | | order.setStatus(Constants.OrderStatus.finished.getStatus()); |
| | | order.setConfirmArriveTime(now); |
| | | ordersMapper.updateById(order); |
| | | // å°±å°å¯å(type=0)åä»¶æ¶å¾çä¸å¿
å¡«ï¼å
¶ä»ç±»ååä»¶å¿
å¡« |
| | | if (!Constants.equalsInteger(order.getType(), Constants.ZERO)) { |
| | | if (images == null || images.isEmpty()) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请ä¸ä¼ åä»¶å¾ç"); |
| | | } |
| | | } |
| | | // 订å宿ï¼éæ¾æ ¸éç |
| | | String verifyCode = order.getMemberVerifyCode(); |
| | | if (StringUtils.isNotBlank(verifyCode)) { |
| | |
| | | new QueryWrapper<OrdersDetail>().lambda() |
| | | .eq(OrdersDetail::getOrderId, orderId) |
| | | .eq(OrdersDetail::getDeleted, Constants.ZERO)); |
| | | |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | |
| | | Date now = new Date(); |
| | |
| | | int actualDays = calcActualDepositDays(now, order.getDepositTime()); |
| | | order.setDepositDays(actualDays); |
| | | |
| | | int estimatedDays = order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1; |
| | | int refundDays = estimatedDays - actualDays; |
| | | if (refundDays > 0) { |
| | | // 鿬¾éé¢ = 鿬¾å¤©æ° à Σ(ç©ååä»· à æ°é) |
| | | long dailyBaseFee = 0L; |
| | | for (OrdersDetail d : details) { |
| | | dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L) |
| | | * (d.getNum() != null ? d.getNum() : 0); |
| | | long dailyBaseFee = 0L; |
| | | for (OrdersDetail d : details) { |
| | | dailyBaseFee += (d.getLocallyPrice() != null ? d.getLocallyPrice() : 0L) |
| | | * (d.getNum() != null ? d.getNum() : 0); |
| | | } |
| | | |
| | | if (Constants.equalsInteger(order.getIsConverted(), Constants.ONE)) { |
| | | // 转æ¢è®¢åï¼å®é
è´¹ç¨ä¸å·²ä»éé¢å¯¹æ¯ |
| | | long actualFee = (long) actualDays * dailyBaseFee; |
| | | long payAmount = order.getPayAmount() != null ? order.getPayAmount() : 0L; |
| | | if (actualFee < payAmount) { |
| | | order.setRefundAmount(payAmount - actualFee); |
| | | } |
| | | long refundAmount = (long) refundDays * dailyBaseFee; |
| | | order.setRefundAmount(refundAmount); |
| | | } else { |
| | | // æ®é订åï¼æé¢è®¡å¤©æ°ä¸å®é
天æ°å·®è®¡ç®é款 |
| | | int estimatedDays = order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1; |
| | | int refundDays = estimatedDays - actualDays; |
| | | if (refundDays > 0) { |
| | | order.setRefundAmount((long) refundDays * dailyBaseFee); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | return "叿ºå·²åä»¶ï¼æ£è¿å¾ç®çå°"; |
| | | } |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) { |
| | | return "è¡æå·²éè¾¾æå¡ç¹ï¼è¯·åæ¶åå¾åä»¶"; |
| | | if(Constants.equalsInteger(order.getType(),Constants.ZERO)){ |
| | | return "è¡æå·²å¯åï¼è¯·ååä»¶ç å徿å®é¨åºåä»¶~"; |
| | | }else{ |
| | | return "è¡æå·²éè¾¾æå¡ç¹ï¼è¯·åæ¶åå¾åä»¶"; |
| | | } |
| | | |
| | | } |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.finished.getStatus())) { |
| | | if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) { |
| | |
| | | |
| | | if (Constants.equalsInteger(order.getType(), Constants.ZERO)) { |
| | | // ========== å°±å°å¯å ========== |
| | | |
| | | // 转æ¢è®¢åï¼å¼å°è½¬å°±å°ï¼ï¼æå¯åæ¶é´å°å½åæ¶é´è®¡ç®å®é
è´¹ç¨ |
| | | if (Constants.equalsInteger(order.getIsConverted(), Constants.ONE)) { |
| | | int actualDays = calcActualDepositDays(now, order.getDepositTime()); |
| | | long actualFee = (long) actualDays * dailyBaseFee; |
| | | long payAmount = order.getPayAmount() != null ? order.getPayAmount() : 0L; |
| | | |
| | | OverdueFeeVO vo = new OverdueFeeVO(); |
| | | vo.setDailyBaseFee(dailyBaseFee); |
| | | if (actualFee <= payAmount) { |
| | | // å®é
è´¹ç¨ <= å·²ä»éé¢ï¼æªé¾æ |
| | | vo.setOverdue(false); |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } else { |
| | | // å®é
è´¹ç¨ > å·²ä»éé¢ï¼é¾æï¼å·®ä»·ä¸ºé¾æè´¹ç¨ |
| | | int overDays = actualDays - (order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1); |
| | | vo.setOverdue(true); |
| | | vo.setOverdueDays(Math.max(overDays, 1)); |
| | | vo.setOverdueFee(actualFee - payAmount); |
| | | } |
| | | return vo; |
| | | } |
| | | |
| | | // æ®éå°±å°å¯å |
| | | overdueDays = calcLocalOverdueDays(now, order.getExpectedTakeTime()); |
| | | overdueFee = (long) overdueDays * dailyBaseFee; |
| | | |
| | |
| | | "time", String.valueOf(noGrabMinutes)); |
| | | } |
| | | // æ è®°å·²éç¥ + è®°å½éç¥æ¶é´ |
| | | order.setPlatformSmsNotified(Constants.ONE); |
| | | order.setPlatformSmsNotifiedTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | |
| | | if (StringUtils.isBlank(phone)) { |
| | | return; |
| | | } |
| | | if (!smsNotify.isEnabled()) { |
| | | return; |
| | | } |
| | | String content = smsNotify.format(paramPairs); |
| | | try { |
| | | JSONObject templateParam = new JSONObject(); |
| | |
| | | } |
| | | } |
| | | |
| | | //åºå· |
| | | String sort = Constants.formatIntegerNum(shopId)+"-"+orders.getId(); |
| | | //åºå·ï¼åéºID-æ¥æ-èªå¢é¿åºå·ï¼å¦ 32-06-001ï¼ |
| | | String dateStr = new SimpleDateFormat("dd").format(orders.getPayTime() != null ? orders.getPayTime() : new Date()); |
| | | String autoNumStr = String.format("%03d", orders.getAutoNum() != null ? orders.getAutoNum() : 0); |
| | | String sort = shopId + "-" + dateStr + "-" + autoNumStr; |
| | | // String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), orders.getRemark(), |
| | | String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), sort, |
| | | orders.getTakeLocationRemark(), |
| | |
| | | JPushUtil.sendByAliases(aliases, title, content, extras); |
| | | } |
| | | |
| | | @Override |
| | | public int notifyArrivalPickUp() { |
| | | String timeStr = operationConfigBiz.getConfig().getArrivalPickUpTime(); |
| | | if (StringUtils.isBlank(timeStr)) { |
| | | return 0; |
| | | } |
| | | int minutes; |
| | | try { |
| | | minutes = Integer.parseInt(timeStr); |
| | | } catch (NumberFormatException e) { |
| | | log.warn("å³å°å°è¾¾åä»¶æ¶é´é
ç½®å¼å¸¸: {}", timeStr); |
| | | return 0; |
| | | } |
| | | if (minutes <= 0) { |
| | | return 0; |
| | | } |
| | | // è®¡ç®æ¶é´çªå£ï¼å½åæ¶é´ + minutes å°±æ¯"å³å°å°è¾¾"ç临çç¹ |
| | | Date now = new Date(); |
| | | Date threshold = new Date(now.getTime() + (long) minutes * 60 * 1000); |
| | | // æ¥è¯¢ï¼status=5ãæªéç¥ãå°±å°å¯å or å¼å°(æåä»¶é¨åº)ãé¢è®¡åä»¶æ¶é´å¨ now~threshold ä¹é´ |
| | | List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus()) |
| | | .eq(Orders::getPayStatus, Constants.ONE) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .and(w -> w |
| | | .eq(Orders::getType, Constants.ZERO) |
| | | .or(w2 -> w2.eq(Orders::getType, Constants.ONE).isNotNull(Orders::getTakeShopId)) |
| | | ) |
| | | .ne(Orders::getPickUpNotifyStatus, Constants.ONE) |
| | | .isNotNull(Orders::getExpectedTakeTime) |
| | | .ge(Orders::getExpectedTakeTime, now) |
| | | .le(Orders::getExpectedTakeTime, threshold)); |
| | | if (orders == null || orders.isEmpty()) { |
| | | return 0; |
| | | } |
| | | int count = 0; |
| | | for (Orders order : orders) { |
| | | Member member = memberMapper.selectById(order.getMemberId()); |
| | | if (member != null && StringUtils.isNotBlank(member.getTelephone())) { |
| | | sendSmsNotify(member.getTelephone(), Constants.SmsNotify.MEMBER_TIME_OUT, |
| | | "orderNo", order.getCode()); |
| | | } |
| | | order.setPickUpNotifyStatus(Constants.ONE); |
| | | ordersMapper.updateById(order); |
| | | count++; |
| | | } |
| | | return count; |
| | | } |
| | | |
| | | @Override |
| | | public Boolean checkOperationRadius(Integer orderId, Integer userId, Integer userType, Double lng, Double lat) { |
| | | String radiusStr = operationConfigBiz.getConfig().getOperationRadius(); |
| | | if (StringUtils.isBlank(radiusStr)) { |
| | | return true; |
| | | } |
| | | double radiusM; |
| | | try { |
| | | radiusM = Double.parseDouble(radiusStr); |
| | | } catch (NumberFormatException e) { |
| | | return true; |
| | | } |
| | | if (radiusM <= 0) { |
| | | return true; |
| | | } |
| | | Orders order = ordersMapper.selectById(orderId); |
| | | if (order == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "订åä¸åå¨"); |
| | | } |
| | | BigDecimal targetLat; |
| | | BigDecimal targetLgt; |
| | | if (Constants.equalsInteger(userType, Constants.ZERO)) { |
| | | // é¨åºæä½ |
| | | if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.waitDeposit.getStatus())) { |
| | | // status=1 é¨åºå¯åæ ¸éª |
| | | if (!Constants.equalsInteger(order.getDepositShopId(), userId)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ææä½è¯¥è®¢å"); |
| | | } |
| | | targetLat = order.getDepositLat(); |
| | | targetLgt = order.getDepositLgt(); |
| | | } else if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) { |
| | | // status=5 é¨åºå®ææ ¸é |
| | | if (Constants.equalsInteger(order.getType(), Constants.ZERO)) { |
| | | // å°±å°åå â 对æ¯åä»¶é¨åº |
| | | if (!Constants.equalsInteger(order.getDepositShopId(), userId)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ææä½è¯¥è®¢å"); |
| | | } |
| | | targetLat = order.getDepositLat(); |
| | | targetLgt = order.getDepositLgt(); |
| | | } else { |
| | | // å¼å°åå â 对æ¯åä»¶é¨åº |
| | | if (!Constants.equalsInteger(order.getTakeShopId(), userId)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ææä½è¯¥è®¢å"); |
| | | } |
| | | targetLat = order.getTakeLat(); |
| | | targetLgt = order.getTakeLgt(); |
| | | } |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "订åç¶æä¸å
è®¸æ¤æä½"); |
| | | } |
| | | } else if (Constants.equalsInteger(userType, Constants.ONE)) { |
| | | // 叿ºæä½ |
| | | if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.deposited.getStatus())) { |
| | | // status=2 叿ºåä»¶ |
| | | if (!Constants.equalsInteger(order.getAcceptDriver(), userId)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ææä½è¯¥è®¢å"); |
| | | } |
| | | targetLat = order.getDepositLat(); |
| | | targetLgt = order.getDepositLgt(); |
| | | } else if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) { |
| | | // status=4 叿ºéè¾¾ |
| | | if (!Constants.equalsInteger(order.getAcceptDriver(), userId)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ ææä½è¯¥è®¢å"); |
| | | } |
| | | targetLat = order.getTakeLat(); |
| | | targetLgt = order.getTakeLgt(); |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "订åç¶æä¸å
è®¸æ¤æä½"); |
| | | } |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ç¨æ·ç±»åä¸åæ³"); |
| | | } |
| | | if (targetLat == null || targetLgt == null) { |
| | | return true; |
| | | } |
| | | double distanceKm = GeoUtils.haversineDistance(lat, lng, targetLat.doubleValue(), targetLgt.doubleValue()); |
| | | return distanceKm * 1000 <= radiusM; |
| | | } |
| | | |
| | | } |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void batchSaveRevenueShare(RevenueShareSaveDTO request) { |
| | | // æ ¡éªï¼å¿
é¡»å
å« fieldType 0-4 å䏿¡ |
| | | // æ ¡éªï¼å¿
é¡»å
å« fieldType 0-6 å䏿¡ |
| | | Set<Integer> fieldTypes = request.getItems().stream() |
| | | .map(RevenueShareItemDTO::getFieldType) |
| | | .collect(Collectors.toSet()); |
| | | if (fieldTypes.size() != Constants.FIVE) { |
| | | if (fieldTypes.size() != Constants.SEVEN) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), |
| | | "å¿
é¡»å
å«ä¼ä¸å¯(0)ã个人å¯(1)ãä¼ä¸å(2)ã个人å(3)ãé
éå(4)å
±5æ¡æ°æ®"); |
| | | "å¿
é¡»å
å«å¼å°ä¼ä¸å¯(0)ãå¼å°ä¸ªäººå¯(1)ãå¼å°ä¼ä¸å(2)ãå¼å°ä¸ªäººå(3)ãé
éå(4)ãå°±å°ä¼ä¸å(5)ãå°±å°ä¸ªäººå(6)å
±7æ¡æ°æ®"); |
| | | } |
| | | for (int i = 0; i <= Constants.FOUR; i++) { |
| | | for (int i = 0; i <= Constants.SIX; i++) { |
| | | if (!fieldTypes.contains(i)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), |
| | | "缺å°ç±»å" + i + "çæ°æ®"); |
| | |
| | | Map<String, PricingRule> existingMap = rules.stream() |
| | | .collect(Collectors.toMap(PricingRule::getFieldA, r -> r)); |
| | | |
| | | // åºå®è¿å5æ¡ï¼ä¼ä¸å¯(0)ã个人å¯(1)ãä¼ä¸å(2)ã个人å(3)ãé
éå(4) |
| | | // åºå®è¿å7æ¡ï¼å¼å°ä¼ä¸å¯(0)ãå¼å°ä¸ªäººå¯(1)ãå¼å°ä¼ä¸å(2)ãå¼å°ä¸ªäººå(3)ãé
éå(4)ãå°±å°ä¼ä¸å(5)ãå°±å°ä¸ªäººå(6) |
| | | List<RevenueShareVO> result = new ArrayList<>(); |
| | | String[] typeNames = {"ä¼ä¸å¯", "个人å¯", "ä¼ä¸å", "个人å", "é
éå"}; |
| | | for (int i = 0; i <= Constants.FOUR; i++) { |
| | | String[] typeNames = {"å¼å°ä¼ä¸å¯ä»¶", "å¼å°ä¸ªäººå¯ä»¶", "å¼å°ä¼ä¸åä»¶", "å¼å°ä¸ªäººåä»¶", "é
éå", "å°±å°ä¼ä¸åä»¶", "å°±å°ä¸ªäººåä»¶"}; |
| | | for (int i = 0; i <= Constants.SIX; i++) { |
| | | RevenueShareVO vo = new RevenueShareVO(); |
| | | vo.setFieldType(i); |
| | | vo.setFieldTypeName(typeNames[i]); |
| | |
| | | if (pageWrap.getModel().getUpdateUser() != null) { |
| | | queryWrapper.lambda().eq(ShopInfo::getUpdateUser, pageWrap.getModel().getUpdateUser()); |
| | | } |
| | | if (pageWrap.getModel().getVersionType() != null) { |
| | | queryWrapper.lambda().eq(ShopInfo::getVersionType, pageWrap.getModel().getVersionType()); |
| | | } |
| | | if (pageWrap.getModel().getUpdateTime() != null) { |
| | | queryWrapper.lambda().ge(ShopInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); |
| | | queryWrapper.lambda().le(ShopInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); |
| | |
| | | public void applyShop(ShopApplyDTO request) { |
| | | Member member = memberMapper.selectById(request.getMemberId()); |
| | | |
| | | // æ ¹æ®ç±»åæ ¡éªéä»¶ |
| | | validateCompanyTypeFields(request); |
| | | |
| | | // 2. æ ¹æ®ç±»åæ ¡éªéä»¶ |
| | | Date now = new Date(); |
| | | |
| | | // æ¥è¯¢è¯¥ä¼åææ°çåæ´çæ¬è®°å½ |
| | | QueryWrapper<ShopInfo> changeQw = new QueryWrapper<>(); |
| | | changeQw.lambda() |
| | | .eq(ShopInfo::getRegionMemberId, member.getId()) |
| | | .eq(ShopInfo::getVersionType, Constants.ONE) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .orderByDesc(ShopInfo::getCreateTime) |
| | | .last("limit 1"); |
| | | ShopInfo changeVersion = shopInfoMapper.selectOne(changeQw); |
| | | |
| | | if (changeVersion == null) { |
| | | // 馿¬¡ç³è¯·ï¼å建æ£å¼çæ¬ + åæ´çæ¬ |
| | | checkTelephoneUnique(request.getTelephone(), null); |
| | | |
| | | String rawPassword = generateDefaultPassword(request.getTelephone()); |
| | | String salt = RandomStringUtils.randomAlphabetic(6); |
| | | String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt); |
| | | |
| | | // æ£å¼çæ¬ |
| | | ShopInfo official = new ShopInfo(); |
| | | applyFieldsFromRequest(official, request, member, encryptedPassword, salt, now); |
| | | official.setVersionType(Constants.ZERO); |
| | | official.setAuditStatus(Constants.ZERO); |
| | | official.setStatus(Constants.ZERO); |
| | | official.setDeleted(Constants.ZERO); |
| | | official.setCreateTime(now); |
| | | official.setUpdateTime(now); |
| | | official.setRegionMemberId(member.getId()); |
| | | setDepositAmountFromPricingRule(official); |
| | | setDefaultDeliveryRange(official); |
| | | shopInfoMapper.insert(official); |
| | | |
| | | // ä¿åæ£å¼çæ¬éä»¶ |
| | | saveShopAttachments(official.getId(), request, now); |
| | | |
| | | // åå»ºåæ´çæ¬ï¼æ·è´æ£å¼çæ¬æ°æ®ï¼ |
| | | createChangeVersion(official, official.getId(), now); |
| | | } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ONE)) { |
| | | // 审æ¹éè¿å¾
æ¯ä»æ¼é |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "é¨åºå·²å®¡æ¹éè¿ï¼è¯·å®ææ¼éæ¯ä»"); |
| | | } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) { |
| | | // ææ°åæ´çæ¬å·²æ¯ä»æ¼é(status=3)ï¼çææ°çåæ´çæ¬ |
| | | Integer relationShopId = changeVersion.getRelationShopId(); |
| | | |
| | | String rawPassword = generateDefaultPassword(request.getTelephone()); |
| | | String salt = RandomStringUtils.randomAlphabetic(6); |
| | | String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt); |
| | | |
| | | ShopInfo newChange = new ShopInfo(); |
| | | applyFieldsFromRequest(newChange, request, member, encryptedPassword, salt, now); |
| | | newChange.setVersionType(Constants.ONE); |
| | | newChange.setRelationShopId(relationShopId); |
| | | newChange.setAuditStatus(Constants.ZERO); |
| | | newChange.setStatus(Constants.ZERO); |
| | | newChange.setDeleted(Constants.ZERO); |
| | | newChange.setCreateTime(now); |
| | | newChange.setUpdateTime(now); |
| | | newChange.setRegionMemberId(member.getId()); |
| | | setDepositAmountFromPricingRule(newChange); |
| | | shopInfoMapper.insert(newChange); |
| | | |
| | | // ä¿åæ°åæ´çæ¬éä»¶ |
| | | saveShopAttachments(newChange.getId(), request, now); |
| | | } else { |
| | | // ææ°åæ´çæ¬ status=0(å¾
审æ¹) æ 2(被驳å)ï¼ç´æ¥æ´æ° |
| | | String rawPassword = generateDefaultPassword(request.getTelephone()); |
| | | String salt = RandomStringUtils.randomAlphabetic(6); |
| | | String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt); |
| | | |
| | | applyFieldsFromRequest(changeVersion, request, member, encryptedPassword, salt, now); |
| | | changeVersion.setAuditStatus(Constants.ZERO); |
| | | changeVersion.setAuditRemark(null); |
| | | changeVersion.setAuditTime(null); |
| | | changeVersion.setAuditUserId(null); |
| | | changeVersion.setUpdateTime(now); |
| | | setDepositAmountFromPricingRule(changeVersion); |
| | | shopInfoMapper.updateById(changeVersion); |
| | | |
| | | // å 餿§éä»¶ + ä¿åæ°éä»¶ |
| | | deleteShopAttachments(changeVersion.getId()); |
| | | saveShopAttachments(changeVersion.getId(), request, now); |
| | | } |
| | | } |
| | | |
| | | private void validateCompanyTypeFields(ShopApplyDTO request) { |
| | | if (Constants.equalsInteger(request.getCompanyType(), Constants.ZERO)) { |
| | | // 个人类åï¼å¿
é¡»ä¸ä¼ å³å¨ååå社ä¿è¯æ |
| | | if (CollectionUtils.isEmpty(request.getLaborContractImgs())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "个人类åå¿
é¡»ä¸ä¼ ææå³å¨åå"); |
| | | } |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "个人类åå¿
é¡»ä¸ä¼ 社ä¿ç¼´çº³è¯æ"); |
| | | } |
| | | } else if (Constants.equalsInteger(request.getCompanyType(), Constants.ONE)) { |
| | | // ä¼ä¸ç±»åï¼å¿
é¡»å¡«åæ³äººä¿¡æ¯åè¥ä¸æ§ç
§ |
| | | if (StringUtils.isBlank(request.getBusinessImg())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ä¼ä¸ç±»åå¿
é¡»ä¸ä¼ è¥ä¸æ§ç
§"); |
| | | } |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ä¼ä¸ç±»åå¿
é¡»å¡«åæ³äººèº«ä»½è¯å·ç "); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | String rawPassword = generateDefaultPassword(request.getTelephone()); |
| | | String salt = RandomStringUtils.randomAlphabetic(6); |
| | | String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt); |
| | | private void applyFieldsFromRequest(ShopInfo shop, ShopApplyDTO request, Member member, |
| | | String password, String salt, Date now) { |
| | | shop.setCompanyType(request.getCompanyType()); |
| | | shop.setName(request.getName()); |
| | | shop.setTelephone(request.getTelephone()); |
| | | shop.setLinkName(request.getLinkName()); |
| | | shop.setLinkPhone(request.getLinkPhone()); |
| | | shop.setIdcard(request.getIdcard()); |
| | | shop.setAreaId(request.getAreaId()); |
| | | shop.setLongitude(request.getLongitude()); |
| | | shop.setLatitude(request.getLatitude()); |
| | | shop.setAddress(request.getAddress()); |
| | | shop.setIdcardImg(request.getIdcardImg()); |
| | | shop.setIdcardImgBack(request.getIdcardImgBack()); |
| | | shop.setBusinessImg(request.getBusinessImg()); |
| | | shop.setLegalPersonName(request.getLegalPersonName()); |
| | | shop.setLegalPersonPhone(request.getLegalPersonPhone()); |
| | | shop.setLegalPersonCard(request.getLegalPersonCard()); |
| | | shop.setPassword(password); |
| | | shop.setSalt(salt); |
| | | shop.setAliAccount(request.getAliAccount()); |
| | | shop.setAliName(request.getAliName()); |
| | | shop.setRevenueShareConfig(buildRevenueShareConfig(request.getLocalDeposit(), request.getRemoteDeposit(), request.getRemoteTake())); |
| | | shop.setOpenid(member.getOpenid()); |
| | | } |
| | | |
| | | // 3. æ¥è¯¢è¯¥ä¼åæ¯å¦å·²æé¨åºè®°å½ |
| | | QueryWrapper<ShopInfo> existQw = new QueryWrapper<>(); |
| | | existQw.lambda() |
| | | .eq(ShopInfo::getRegionMemberId, member.getId()) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1"); |
| | | ShopInfo existing = shopInfoMapper.selectOne(existQw); |
| | | private void saveShopAttachments(Integer shopId, ShopApplyDTO request, Date now) { |
| | | saveMultifileList(shopId, Constants.FileType.STORE_FRONT.getKey(), request.getStoreFrontImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.STORE_INTERIOR.getKey(), request.getStoreInteriorImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.OTHER_MATERIAL.getKey(), request.getOtherMaterialImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.LABOR_CONTRACT.getKey(), request.getLaborContractImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.SOCIAL_SECURITY.getKey(), request.getSocialSecurityImgs(), now); |
| | | } |
| | | |
| | | Integer shopId; |
| | | if (existing != null) { |
| | | // æ ¡éªç¶æï¼åªæå¾
审æ¹(0)å被驳å(2)å¯ä¿®æ¹ |
| | | if (!Constants.equalsInteger(existing.getAuditStatus(), Constants.TWO)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å½åé¨åºç¶æä¸å
许修æ¹"); |
| | | } |
| | | // æ ¡éªopenidå¹é
ï¼å½åç»å½ä¼åçopenidå¿
é¡»ä¸é¨åºçopenidä¸è´ |
| | | if (existing.getOpenid() != null && !existing.getOpenid().equals(member.getOpenid())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "æ æéæä½å½åé¨åºä¿¡æ¯"); |
| | | } |
| | | // æ ¡éªææºå·å¯ä¸æ§ï¼æé¤èªèº«ï¼ |
| | | if (!request.getTelephone().equals(existing.getTelephone())) { |
| | | checkTelephoneUnique(request.getTelephone(), existing.getId()); |
| | | } |
| | | // æ´æ° |
| | | existing.setCompanyType(request.getCompanyType()); |
| | | existing.setName(request.getName()); |
| | | existing.setTelephone(request.getTelephone()); |
| | | existing.setLinkName(request.getLinkName()); |
| | | existing.setLinkPhone(request.getLinkPhone()); |
| | | existing.setIdcard(request.getIdcard()); |
| | | existing.setAreaId(request.getAreaId()); |
| | | existing.setLongitude(request.getLongitude()); |
| | | existing.setLatitude(request.getLatitude()); |
| | | existing.setAddress(request.getAddress()); |
| | | existing.setIdcardImg(request.getIdcardImg()); |
| | | existing.setIdcardImgBack(request.getIdcardImgBack()); |
| | | existing.setBusinessImg(request.getBusinessImg()); |
| | | existing.setLegalPersonName(request.getLegalPersonName()); |
| | | existing.setLegalPersonPhone(request.getLegalPersonPhone()); |
| | | existing.setLegalPersonCard(request.getLegalPersonCard()); |
| | | existing.setPassword(encryptedPassword); |
| | | existing.setSalt(salt); |
| | | existing.setAliAccount(request.getAliAccount()); |
| | | existing.setAliName(request.getAliName()); |
| | | existing.setUpdateTime(now); |
| | | existing.setAuditRemark(null); |
| | | existing.setAuditTime(null); |
| | | existing.setAuditUserId(null); |
| | | existing.setAuditStatus(Constants.ZERO); |
| | | // è¯»åæ¼ééé¢ |
| | | setDepositAmountFromPricingRule(existing); |
| | | shopInfoMapper.updateById(existing); |
| | | shopId = existing.getId(); |
| | | } else { |
| | | // 1. æ ¡éªé¨åºææºå·å¯ä¸æ§ï¼shop_info.telephoneï¼ |
| | | checkTelephoneUnique(request.getTelephone(), null); |
| | | // æ°å»º |
| | | ShopInfo shopInfo = new ShopInfo(); |
| | | shopInfo.setCompanyType(request.getCompanyType()); |
| | | shopInfo.setName(request.getName()); |
| | | shopInfo.setTelephone(request.getTelephone()); |
| | | shopInfo.setLinkName(request.getLinkName()); |
| | | shopInfo.setLinkPhone(request.getLinkPhone()); |
| | | shopInfo.setIdcard(request.getIdcard()); |
| | | shopInfo.setAreaId(request.getAreaId()); |
| | | shopInfo.setLongitude(request.getLongitude()); |
| | | shopInfo.setLatitude(request.getLatitude()); |
| | | shopInfo.setAddress(request.getAddress()); |
| | | shopInfo.setIdcardImg(request.getIdcardImg()); |
| | | shopInfo.setIdcardImgBack(request.getIdcardImgBack()); |
| | | shopInfo.setBusinessImg(request.getBusinessImg()); |
| | | shopInfo.setLegalPersonName(request.getLegalPersonName()); |
| | | shopInfo.setLegalPersonPhone(request.getLegalPersonPhone()); |
| | | shopInfo.setLegalPersonCard(request.getLegalPersonCard()); |
| | | shopInfo.setPassword(encryptedPassword); |
| | | shopInfo.setSalt(salt); |
| | | shopInfo.setAliAccount(request.getAliAccount()); |
| | | shopInfo.setAliName(request.getAliName()); |
| | | shopInfo.setAuditStatus(Constants.ZERO); |
| | | shopInfo.setStatus(Constants.ZERO); |
| | | shopInfo.setDeleted(Constants.ZERO); |
| | | shopInfo.setCreateTime(now); |
| | | shopInfo.setUpdateTime(now); |
| | | shopInfo.setRegionMemberId(member.getId()); |
| | | // è¯»åæ¼ééé¢ |
| | | setDepositAmountFromPricingRule(shopInfo); |
| | | // 设置é»è®¤é
éèå´ |
| | | setDefaultDeliveryRange(shopInfo); |
| | | shopInfoMapper.insert(shopInfo); |
| | | shopId = shopInfo.getId(); |
| | | } |
| | | |
| | | // 4. å 餿§éä»¶è®°å½ |
| | | private void deleteShopAttachments(Integer shopId) { |
| | | multifileMapper.delete(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, shopId) |
| | | .in(Multifile::getObjType, |
| | |
| | | Constants.FileType.OTHER_MATERIAL.getKey(), |
| | | Constants.FileType.LABOR_CONTRACT.getKey(), |
| | | Constants.FileType.SOCIAL_SECURITY.getKey())); |
| | | |
| | | // 5. ä¿åæ°éä»¶è®°å½ |
| | | saveMultifileList(shopId, Constants.FileType.STORE_FRONT.getKey(), request.getStoreFrontImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.STORE_INTERIOR.getKey(), request.getStoreInteriorImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.OTHER_MATERIAL.getKey(), request.getOtherMaterialImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.LABOR_CONTRACT.getKey(), request.getLaborContractImgs(), now); |
| | | saveMultifileList(shopId, Constants.FileType.SOCIAL_SECURITY.getKey(), request.getSocialSecurityImgs(), now); |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public ShopDetailVO getMyShop(Integer memberId) { |
| | | // æ¥è¯¢ææ°çåæ´çæ¬ |
| | | QueryWrapper<ShopInfo> qw = new QueryWrapper<>(); |
| | | qw.lambda() |
| | | .eq(ShopInfo::getRegionMemberId, memberId) |
| | | .eq(ShopInfo::getVersionType, Constants.ONE) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .orderByDesc(ShopInfo::getCreateTime) |
| | | .last("limit 1"); |
| | | ShopInfo shopInfo = shopInfoMapper.selectOne(qw); |
| | | if (shopInfo == null) { |
| | | // æ åæ´çæ¬åæ¥æ£å¼çæ¬ |
| | | QueryWrapper<ShopInfo> officialQw = new QueryWrapper<>(); |
| | | officialQw.lambda() |
| | | .eq(ShopInfo::getRegionMemberId, memberId) |
| | | .eq(ShopInfo::getVersionType, Constants.ZERO) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1"); |
| | | shopInfo = shopInfoMapper.selectOne(officialQw); |
| | | } |
| | | if (shopInfo == null) { |
| | | return null; |
| | | } |
| | |
| | | || (auditDTO.getAuditStatus() != 0 && auditDTO.getAuditStatus() != 1)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "审æ¹ç¶æåæ°é误"); |
| | | } |
| | | ShopInfo shopInfo = shopInfoMapper.selectById(auditDTO.getId()); |
| | | if (shopInfo == null || Constants.equalsInteger(shopInfo.getDeleted(), Constants.ONE)) { |
| | | // 审æ¹çæ¯åæ´çæ¬ |
| | | ShopInfo changeVersion = shopInfoMapper.selectById(auditDTO.getId()); |
| | | if (changeVersion == null || Constants.equalsInteger(changeVersion.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | if (!Constants.equalsInteger(shopInfo.getAuditStatus(), Constants.ZERO)) { |
| | | if (!Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "å½åç¶æä¸å
许审æ¹"); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | // auditDTO.auditStatus: 0=éè¿ â auditStatus=1, 1=驳å â auditStatus=2 |
| | | // auditDTO.auditStatus: 0=éè¿ â 1, 1=驳å â 2 |
| | | Integer newAuditStatus = Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO) ? Constants.ONE : Constants.TWO; |
| | | shopInfo.setAuditStatus(newAuditStatus); |
| | | shopInfo.setAuditTime(now); |
| | | shopInfo.setAuditRemark(auditDTO.getAuditRemark()); |
| | | shopInfo.setAuditUserId(auditDTO.getAuditUser()); |
| | | shopInfo.setUpdateTime(now); |
| | | // 审æ¹éè¿æ¶ï¼æ ¡éªåå¸pricing_ruleé
ç½®ï¼è¯»åæ¼ééé¢ |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | // 1. è§£æé¨åºæå¨åå¸ |
| | | Areas area = areasBiz.resolveArea(shopInfo.getAreaId()); |
| | | if (area == null || area.getParentId() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "é¨åºåºåä¿¡æ¯å¼å¸¸ï¼æ æ³ç¡®å®æå¨åå¸"); |
| | | } |
| | | Integer cityId = area.getParentId(); |
| | | |
| | | // 2. æ ¡éª pricing_rule é
ç½®ï¼åå¸å¼é卿¼éæ¯ä»å®æåå¤çï¼ |
| | | Areas cityArea = areasService.findById(cityId, Constants.ONE); |
| | | if (cityArea == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "åå¸ä¿¡æ¯ä¸åå¨"); |
| | | // æ¥æ¾æ£å¼çæ¬ |
| | | Integer officialId = changeVersion.getRelationShopId(); |
| | | ShopInfo official = officialId != null ? shopInfoMapper.selectById(officialId) : null; |
| | | boolean hasPaidOfficial = official != null |
| | | && Constants.equalsInteger(official.getAuditStatus(), Constants.THREE); |
| | | |
| | | if (!hasPaidOfficial) { |
| | | // åºæ¯1ï¼ä¸åå¨auditStatus=3çæ£å¼çæ¬ï¼é¦æ¬¡å®¡æ¹ï¼ |
| | | changeVersion.setAuditStatus(newAuditStatus); |
| | | changeVersion.setAuditTime(now); |
| | | changeVersion.setAuditRemark(auditDTO.getAuditRemark()); |
| | | changeVersion.setAuditUserId(auditDTO.getAuditUser()); |
| | | changeVersion.setUpdateTime(now); |
| | | |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | validateCityAndSetDeposit(changeVersion); |
| | | } |
| | | if (!Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) { |
| | | List<String> errors = validateCityPricingRules(cityId); |
| | | if (!errors.isEmpty()) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), |
| | | "åå¸[" + cityArea.getName() + "]å°æªå¼éï¼å®ä»·è§åæªé
ç½®å®æ´ï¼" + String.join("ï¼", errors)); |
| | | shopInfoMapper.updateById(changeVersion); |
| | | |
| | | // åæ¥æ´æ°æ£å¼çæ¬å®¡æ¹ç¶æ |
| | | if (official != null) { |
| | | official.setAuditStatus(newAuditStatus); |
| | | official.setAuditTime(now); |
| | | official.setAuditRemark(auditDTO.getAuditRemark()); |
| | | official.setAuditUserId(auditDTO.getAuditUser()); |
| | | official.setUpdateTime(now); |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | official.setDepositAmount(changeVersion.getDepositAmount()); |
| | | } |
| | | shopInfoMapper.updateById(official); |
| | | } |
| | | |
| | | // 3. ä»PricingRuleè¯»åæ¼ééé¢ï¼å®¡æ¹æ¶æ´æ°ï¼ |
| | | setDepositAmountFromPricingRule(shopInfo); |
| | | } |
| | | shopInfoMapper.updateById(shopInfo); |
| | | // çä¿¡éç¥ |
| | | sendAuditSms(changeVersion, newAuditStatus, auditDTO.getAuditRemark()); |
| | | } else { |
| | | // åºæ¯2ï¼åå¨auditStatus=3çæ£å¼çæ¬ï¼åæ´å®¡æ¹ï¼ |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | // 审æ¹éè¿ï¼åæ´çæ¬ç´æ¥æ è®°auditStatus=3ï¼åæ¥æ°æ®å°æ£å¼çæ¬ |
| | | changeVersion.setAuditStatus(Constants.THREE); |
| | | changeVersion.setAuditTime(now); |
| | | changeVersion.setAuditRemark(auditDTO.getAuditRemark()); |
| | | changeVersion.setAuditUserId(auditDTO.getAuditUser()); |
| | | changeVersion.setUpdateTime(now); |
| | | shopInfoMapper.updateById(changeVersion); |
| | | |
| | | // çä¿¡éç¥ |
| | | // åæ¥åæ´çæ¬æ°æ®å°æ£å¼çæ¬ |
| | | syncChangeToOfficial(changeVersion, official, now); |
| | | } else { |
| | | // 审æ¹é©³åï¼ä»
æ è®°åæ´çæ¬ç¶æ |
| | | changeVersion.setAuditStatus(Constants.TWO); |
| | | changeVersion.setAuditTime(now); |
| | | changeVersion.setAuditRemark(auditDTO.getAuditRemark()); |
| | | changeVersion.setAuditUserId(auditDTO.getAuditUser()); |
| | | changeVersion.setUpdateTime(now); |
| | | shopInfoMapper.updateById(changeVersion); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void validateCityAndSetDeposit(ShopInfo shopInfo) { |
| | | Areas area = areasBiz.resolveArea(shopInfo.getAreaId()); |
| | | if (area == null || area.getParentId() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "é¨åºåºåä¿¡æ¯å¼å¸¸ï¼æ æ³ç¡®å®æå¨åå¸"); |
| | | } |
| | | Integer cityId = area.getParentId(); |
| | | Areas cityArea = areasService.findById(cityId, Constants.ONE); |
| | | if (cityArea == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "åå¸ä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | if (!Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) { |
| | | List<String> errors = validateCityPricingRules(cityId); |
| | | if (!errors.isEmpty()) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), |
| | | "åå¸[" + cityArea.getName() + "]å°æªå¼éï¼å®ä»·è§åæªé
ç½®å®æ´ï¼" + String.join("ï¼", errors)); |
| | | } |
| | | } |
| | | setDepositAmountFromPricingRule(shopInfo); |
| | | } |
| | | |
| | | private void syncChangeToOfficial(ShopInfo changeVersion, ShopInfo official, Date now) { |
| | | official.setCompanyType(changeVersion.getCompanyType()); |
| | | official.setName(changeVersion.getName()); |
| | | official.setTelephone(changeVersion.getTelephone()); |
| | | official.setLinkName(changeVersion.getLinkName()); |
| | | official.setLinkPhone(changeVersion.getLinkPhone()); |
| | | official.setIdcard(changeVersion.getIdcard()); |
| | | official.setAreaId(changeVersion.getAreaId()); |
| | | official.setLongitude(changeVersion.getLongitude()); |
| | | official.setLatitude(changeVersion.getLatitude()); |
| | | official.setAddress(changeVersion.getAddress()); |
| | | official.setIdcardImg(changeVersion.getIdcardImg()); |
| | | official.setIdcardImgBack(changeVersion.getIdcardImgBack()); |
| | | official.setBusinessImg(changeVersion.getBusinessImg()); |
| | | official.setLegalPersonName(changeVersion.getLegalPersonName()); |
| | | official.setLegalPersonPhone(changeVersion.getLegalPersonPhone()); |
| | | official.setLegalPersonCard(changeVersion.getLegalPersonCard()); |
| | | official.setPassword(changeVersion.getPassword()); |
| | | official.setSalt(changeVersion.getSalt()); |
| | | official.setAliAccount(changeVersion.getAliAccount()); |
| | | official.setAliName(changeVersion.getAliName()); |
| | | official.setRevenueShareConfig(changeVersion.getRevenueShareConfig()); |
| | | official.setDepositAmount(changeVersion.getDepositAmount()); |
| | | official.setUpdateTime(now); |
| | | shopInfoMapper.updateById(official); |
| | | |
| | | // 忥éä»¶ï¼å
å æ£å¼çæ¬æ§éä»¶ï¼åä»åæ´çæ¬æ·è´ |
| | | deleteShopAttachments(official.getId()); |
| | | List<Multifile> changeFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, changeVersion.getId()) |
| | | .eq(Multifile::getIsdeleted, Constants.ZERO) |
| | | .in(Multifile::getObjType, |
| | | Constants.FileType.STORE_FRONT.getKey(), |
| | | Constants.FileType.STORE_INTERIOR.getKey(), |
| | | Constants.FileType.OTHER_MATERIAL.getKey(), |
| | | Constants.FileType.LABOR_CONTRACT.getKey(), |
| | | Constants.FileType.SOCIAL_SECURITY.getKey())); |
| | | for (Multifile f : changeFiles) { |
| | | Multifile copy = new Multifile(); |
| | | copy.setCreator(f.getCreator()); |
| | | copy.setCreateDate(now); |
| | | copy.setIsdeleted(Constants.ZERO); |
| | | copy.setName(f.getName()); |
| | | copy.setInfo(f.getInfo()); |
| | | copy.setObjId(official.getId()); |
| | | copy.setType(f.getType()); |
| | | copy.setObjType(f.getObjType()); |
| | | copy.setFileurl(f.getFileurl()); |
| | | copy.setSortnum(f.getSortnum()); |
| | | multifileMapper.insert(copy); |
| | | } |
| | | } |
| | | |
| | | private void sendAuditSms(ShopInfo shopInfo, Integer newAuditStatus, String auditRemark) { |
| | | if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) { |
| | | // å®¡æ ¸éè¿ â éç¥ç¼´çº³æ¼é |
| | | String depositMoney = shopInfo.getDepositAmount() != null |
| | | ? new java.math.BigDecimal(shopInfo.getDepositAmount()) |
| | | .divide(new java.math.BigDecimal(100), 2, java.math.RoundingMode.HALF_UP).toPlainString() : "0"; |
| | |
| | | "storeName", shopInfo.getName(), |
| | | "money", depositMoney); |
| | | } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) { |
| | | // å®¡æ ¸é©³å |
| | | sendSmsNotify(shopInfo.getTelephone(), |
| | | Constants.SmsNotify.SHOP_AUTH_REJECTED, |
| | | "storeName", shopInfo.getName(), |
| | | "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : ""); |
| | | "reason", auditRemark != null ? auditRemark : ""); |
| | | } |
| | | } |
| | | |
| | |
| | | shopInfo.setLegalPersonCard(request.getLegalPersonCard()); |
| | | shopInfo.setAliAccount(request.getAliAccount()); |
| | | shopInfo.setAliName(request.getAliName()); |
| | | shopInfo.setRevenueShareConfig(buildRevenueShareConfig(request.getLocalDeposit(), request.getRemoteDeposit(), request.getRemoteTake())); |
| | | shopInfo.setUpdateTime(now); |
| | | shopInfoMapper.updateById(shopInfo); |
| | | |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "ææºå·æ ¼å¼å¼å¸¸ï¼æ æ³çæé»è®¤å¯ç "); |
| | | } |
| | | return telephone.substring(telephone.length() - 6) + "@123456"; |
| | | } |
| | | |
| | | private String buildRevenueShareConfig(Double localDeposit, Double remoteDeposit, Double remoteTake) { |
| | | if (localDeposit == null && remoteDeposit == null && remoteTake == null) { |
| | | return null; |
| | | } |
| | | JSONObject config = new JSONObject(); |
| | | if (localDeposit != null) { |
| | | config.put("localDeposit", localDeposit); |
| | | } |
| | | if (remoteDeposit != null) { |
| | | config.put("remoteDeposit", remoteDeposit); |
| | | } |
| | | if (remoteTake != null) { |
| | | config.put("remoteTake", remoteTake); |
| | | } |
| | | return config.toJSONString(); |
| | | } |
| | | |
| | | private void createChangeVersion(ShopInfo origin, Integer originShopId, Date now) { |
| | | ShopInfo changeShop = new ShopInfo(); |
| | | changeShop.setCompanyType(origin.getCompanyType()); |
| | | changeShop.setName(origin.getName()); |
| | | changeShop.setTelephone(origin.getTelephone()); |
| | | changeShop.setLinkName(origin.getLinkName()); |
| | | changeShop.setLinkPhone(origin.getLinkPhone()); |
| | | changeShop.setIdcard(origin.getIdcard()); |
| | | changeShop.setAreaId(origin.getAreaId()); |
| | | changeShop.setLongitude(origin.getLongitude()); |
| | | changeShop.setLatitude(origin.getLatitude()); |
| | | changeShop.setAddress(origin.getAddress()); |
| | | changeShop.setIdcardImg(origin.getIdcardImg()); |
| | | changeShop.setIdcardImgBack(origin.getIdcardImgBack()); |
| | | changeShop.setBusinessImg(origin.getBusinessImg()); |
| | | changeShop.setLegalPersonName(origin.getLegalPersonName()); |
| | | changeShop.setLegalPersonPhone(origin.getLegalPersonPhone()); |
| | | changeShop.setLegalPersonCard(origin.getLegalPersonCard()); |
| | | changeShop.setAliAccount(origin.getAliAccount()); |
| | | changeShop.setAliName(origin.getAliName()); |
| | | changeShop.setDepositAmount(origin.getDepositAmount()); |
| | | changeShop.setRevenueShareConfig(origin.getRevenueShareConfig()); |
| | | changeShop.setDeliveryArea(origin.getDeliveryArea()); |
| | | changeShop.setScore(origin.getScore()); |
| | | changeShop.setBalance(origin.getBalance()); |
| | | changeShop.setTotalBalance(origin.getTotalBalance()); |
| | | changeShop.setPayStatus(origin.getPayStatus()); |
| | | changeShop.setVersionType(Constants.ONE); |
| | | changeShop.setRelationShopId(originShopId); |
| | | changeShop.setAuditStatus(origin.getAuditStatus()); |
| | | changeShop.setRegionMemberId(origin.getRegionMemberId()); |
| | | changeShop.setOpenid(origin.getOpenid()); |
| | | changeShop.setStatus(origin.getStatus()); |
| | | changeShop.setDeleted(origin.getDeleted()); |
| | | changeShop.setCreateTime(now); |
| | | changeShop.setUpdateTime(now); |
| | | shopInfoMapper.insert(changeShop); |
| | | |
| | | // æ·è´éä»¶å°åæ´çæ¬ |
| | | List<Multifile> originFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, originShopId) |
| | | .eq(Multifile::getIsdeleted, Constants.ZERO) |
| | | .in(Multifile::getObjType, |
| | | Constants.FileType.STORE_FRONT.getKey(), |
| | | Constants.FileType.STORE_INTERIOR.getKey(), |
| | | Constants.FileType.OTHER_MATERIAL.getKey(), |
| | | Constants.FileType.LABOR_CONTRACT.getKey(), |
| | | Constants.FileType.SOCIAL_SECURITY.getKey())); |
| | | for (Multifile f : originFiles) { |
| | | Multifile copy = new Multifile(); |
| | | copy.setCreator(f.getCreator()); |
| | | copy.setCreateDate(now); |
| | | copy.setIsdeleted(Constants.ZERO); |
| | | copy.setName(f.getName()); |
| | | copy.setInfo(f.getInfo()); |
| | | copy.setObjId(changeShop.getId()); |
| | | copy.setType(f.getType()); |
| | | copy.setObjType(f.getObjType()); |
| | | copy.setFileurl(f.getFileurl()); |
| | | copy.setSortnum(f.getSortnum()); |
| | | multifileMapper.insert(copy); |
| | | } |
| | | } |
| | | |
| | | private void checkTelephoneUnique(String telephone, Integer excludeId) { |
| | |
| | | vo.setAliAccount(shopInfo.getAliAccount()); |
| | | vo.setAliName(shopInfo.getAliName()); |
| | | vo.setDepositAmount(shopInfo.getDepositAmount()); |
| | | vo.setDeliveryRange(shopInfo.getDeliveryArea()); |
| | | vo.setVersionType(shopInfo.getVersionType()); |
| | | vo.setRelationShopId(shopInfo.getRelationShopId()); |
| | | // è§£ææ¶çæ¯ä¾é
ç½® |
| | | if (StringUtils.isNotBlank(shopInfo.getRevenueShareConfig())) { |
| | | try { |
| | | JSONObject config = JSONObject.parseObject(shopInfo.getRevenueShareConfig()); |
| | | if (config != null) { |
| | | vo.setLocalDeposit(config.getDouble("localDeposit")); |
| | | vo.setRemoteDeposit(config.getDouble("remoteDeposit")); |
| | | vo.setRemoteTake(config.getDouble("remoteTake")); |
| | | } |
| | | } catch (Exception ignored) { |
| | | } |
| | | } |
| | | |
| | | // æ¼æ¥å¾çåç¼ |
| | | String imgPrefix = ""; |
| | |
| | | qw.lambda() |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .eq(ShopInfo::getStatus, Constants.ZERO) |
| | | .eq(ShopInfo::getVersionType, Constants.ZERO) |
| | | .eq(ShopInfo::getAuditStatus, Constants.THREE); |
| | | |
| | | // é¨åºè¥ä¸ç±»åçé |
| | |
| | | @Override |
| | | public ShopWebDetailVO getShopWebDetail(ShopDetailQueryDTO dto) { |
| | | ShopInfo shop = shopInfoMapper.selectById(dto.getId()); |
| | | if (Objects.isNull(shop) || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) { |
| | | if (Objects.isNull(shop) || Constants.equalsInteger(shop.getDeleted(), Constants.ONE) || Constants.equalsInteger(shop.getVersionType(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public ShopCenterVO getShopCenterInfo(Integer shopId) { |
| | | ShopInfo shop = shopInfoMapper.selectById(shopId); |
| | | if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) { |
| | | if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE) || Constants.equalsInteger(shop.getVersionType(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | ShopCenterVO vo = new ShopCenterVO(); |
| | |
| | | } |
| | | ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda().eq(ShopInfo::getTelephone, dto.getTelephone()) |
| | | .eq(ShopInfo::getDeleted,Constants.ZERO) |
| | | .eq(ShopInfo::getVersionType,Constants.ZERO) |
| | | .last("limit 1") |
| | | ); |
| | | if(shop==null){ |
| | |
| | | if(!pwd.equals(shop.getPassword())){ |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); |
| | | } |
| | | |
| | | // æ´æ°å½åç»å½ä¼åçopenidå°é¨åº |
| | | if(StringUtils.isNotBlank(dto.getOpenid())){ |
| | | shopInfoMapper.update(null,new UpdateWrapper<ShopInfo>().lambda() |
| | | .set(ShopInfo::getOpenid,dto.getOpenid()) |
| | | .eq(ShopInfo::getId,shop.getId()) |
| | | ); |
| | | // æ¸
空å
¶ä»é¨åºçåä¸openidï¼ä¿è¯å¯ä¸ |
| | | shopInfoMapper.update(null,new UpdateWrapper<ShopInfo>().lambda() |
| | | .set(ShopInfo::getOpenid,null) |
| | | .eq(ShopInfo::getOpenid,dto.getOpenid()) |
| | | .ne(ShopInfo::getId,shop.getId()) |
| | | ); |
| | | shop.setOpenid(dto.getOpenid()); |
| | | if(Objects.nonNull(dto.getMemberId())){ |
| | | Member member = memberMapper.selectById(dto.getMemberId()); |
| | | if(Objects.nonNull(member)){ |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getLoginShopId,shop.getId()) |
| | | .eq(Member::getId,member.getId()) |
| | | ); |
| | | shop.setMemberId(member.getId()); |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ä¼åä¿¡æ¯å¼å¸¸ï¼è¯·è系管çå"); |
| | | } |
| | | } |
| | | |
| | | // å建tokenï¼generateTokenForRedis å·²èªå¨æ¸
é¤è¯¥ç¨æ·æ§tokenï¼ä¿è¯å¯ä¸ææï¼ |
| | | String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.TWO, JSONObject.toJSONString(shop), redisTemplate); |
| | | String token = JwtTokenUtil.generateShopTokenForRedis(shop.getMemberId(), JSONObject.toJSONString(shop), redisTemplate); |
| | | // æå»ºååº |
| | | ShopLoginVO vo = new ShopLoginVO(); |
| | | vo.setToken(token); |
| | | vo.setShopId(shop.getId()); |
| | | vo.setShopName(shop.getName()); |
| | | vo.setCompanyType(shop.getCompanyType()); |
| | | |
| | | // æå±åå¸åç§° |
| | | Areas area = areasBiz.resolveArea(shop.getAreaId()); |
| | | if (area != null) { |
| | |
| | | @Override |
| | | public ShopLoginVO shopSilentLogin(Integer memberId) { |
| | | Member member = memberMapper.selectById(memberId); |
| | | if(Objects.isNull(member)||StringUtils.isBlank(member.getOpenid())){ |
| | | if(Objects.isNull(member)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å½åç»å½ä¼å身份å¼å¸¸,请è系管çå!"); |
| | | } |
| | | if (Objects.isNull(member.getLoginShopId())) { |
| | | return null; |
| | | } |
| | | ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getOpenid, member.getOpenid()) |
| | | .eq(ShopInfo::getId, member.getLoginShopId()) |
| | | .eq(ShopInfo::getVersionType,Constants.ZERO) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (shop == null) { |
| | |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"é¨åºå·²ç¦ç¨ï¼è¯·è系管çå"); |
| | | } |
| | | // å建tokenï¼generateTokenForRedis å·²èªå¨æ¸
é¤è¯¥ç¨æ·æ§tokenï¼ä¿è¯å¯ä¸ææï¼ |
| | | String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.TWO, JSONObject.toJSONString(shop), redisTemplate); |
| | | String token = JwtTokenUtil.generateShopTokenForRedis(member.getId(), JSONObject.toJSONString(shop), redisTemplate); |
| | | |
| | | ShopLoginVO vo = new ShopLoginVO(); |
| | | vo.setToken(token); |
| | |
| | | if (shopInfo.getCompanyType() == null) { |
| | | return; |
| | | } |
| | | Areas areas = areasService.findById(shopInfo.getAreaId()); |
| | | Areas areas = areasService.getById(shopInfo.getAreaId()); |
| | | PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda() |
| | | .eq(PricingRule::getDeleted, Constants.ZERO) |
| | | .eq(PricingRule::getType, Constants.THREE) |
| | |
| | | */ |
| | | private void sendSmsNotify(String phone, Constants.SmsNotify smsNotify, String... paramPairs) { |
| | | if (StringUtils.isBlank(phone)) { |
| | | return; |
| | | } |
| | | if (!smsNotify.isEnabled()) { |
| | | return; |
| | | } |
| | | String content = smsNotify.format(paramPairs); |
| | |
| | | log.info("è§£ç»æåï¼{}", sn); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int initChangeVersions() { |
| | | Date now = new Date(); |
| | | // 1. è¡¥å
¨ version_type 为 NULL çè®°å½ |
| | | shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda() |
| | | .set(ShopInfo::getVersionType, Constants.ZERO) |
| | | .isNull(ShopInfo::getVersionType)); |
| | | |
| | | // 2. æ¥è¯¢ææå·²æåæ´çæ¬ç relationShopId |
| | | List<ShopInfo> changeVersions = shopInfoMapper.selectList(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getVersionType, Constants.ONE) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .select(ShopInfo::getRelationShopId) |
| | | .isNotNull(ShopInfo::getRelationShopId)); |
| | | Set<Integer> existingRelationIds = changeVersions.stream() |
| | | .map(ShopInfo::getRelationShopId) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | // 3. æ¥è¯¢æææ²¡æåæ´çæ¬çæ£å¼çæ¬é¨åº |
| | | QueryWrapper<ShopInfo> qw = new QueryWrapper<>(); |
| | | qw.lambda() |
| | | .eq(ShopInfo::getVersionType, Constants.ZERO) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO); |
| | | List<ShopInfo> officialList = shopInfoMapper.selectList(qw); |
| | | |
| | | int count = 0; |
| | | for (ShopInfo official : officialList) { |
| | | if (existingRelationIds.contains(official.getId())) { |
| | | continue; |
| | | } |
| | | createChangeVersion(official, official.getId(), now); |
| | | count++; |
| | | } |
| | | return count; |
| | | } |
| | | |
| | | } |
| | |
| | | String digits = Strings.randomNumeric(4); |
| | | //åééªè¯ç |
| | | String templateParam = "{\"code\":\"" + digits + "\"}"; |
| | | String error = AliSmsService.sendSms(phone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam); |
| | | String error = null; |
| | | if (Constants.SmsNotify.VERIFY_CODE.isEnabled()) { |
| | | error = AliSmsService.sendSms(phone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam); |
| | | } |
| | | if (error != null) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "çä¿¡åé失败ï¼è¯·ç¨åéè¯"); |
| | | } |
| | |
| | | apiV3Key: NJTLJSTZYXZRGScaiwubuzichanbu666 #apiV3Key |
| | | serialNumer: 25D19D18217F4588841E5CD1AA0D1533DE8AF84A #åæ·è¯ä¹¦åºåå· |
| | | privateKeyPath: pay/pro/wx/apiclient_key.pem |
| | | v3NotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayV3Notify |
| | | v3RefundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxRefundV3Notify |
| | | v3NotifyUrl: https://test.doumee.cn/gtzxljc_web/web/api/wxPayV3Notify |
| | | v3RefundNotifyUrl: https://test.doumee.cn/gtzxljc_web/web/api/wxRefundV3Notify |
| | | |
| | | |
| | | alipay: |
| | |
| | | } |
| | | |
| | | |
| | | @LoginRequired |
| | | @ApiOperation(value = "é¨åºè´¦å·å¯ç ç»å½", notes = "å°ç¨åºç«¯ï¼é¨åºç¨æ·éè¿ææºå·+å¯ç ç»å½") |
| | | @PostMapping("/shopLogin") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), |
| | | }) |
| | | public ApiResponse<ShopLoginVO> shopLogin(@RequestBody @Validated ShopLoginDTO dto) { |
| | | dto.setMemberId(getMemberId()); |
| | | return ApiResponse.success("æä½æå", shopInfoService.shopPasswordLogin(dto)); |
| | | } |
| | | |
| | |
| | | import com.doumee.dao.dto.AreasDto; |
| | | import com.doumee.dao.dto.CalculateLocalPriceDTO; |
| | | import com.doumee.dao.dto.CalculateRemotePriceDTO; |
| | | import com.doumee.dao.dto.DriverCheckRadiusDTO; |
| | | import com.doumee.dao.dto.ShopCheckRadiusDTO; |
| | | import com.doumee.dao.dto.DirectionInfoDTO; |
| | | import com.doumee.dao.dto.SameCityCheckDTO; |
| | | import com.doumee.dao.vo.PriceCalculateVO; |
| | |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | @Autowired |
| | | private ShopInfoService shopInfoService; |
| | | |
| | | @Autowired |
| | | private DriverInfoService driverInfoService; |
| | | |
| | | @ApiOperation("åå§ååå²é¨åº/叿ºåæ´çæ¬æ°æ®") |
| | | @PostMapping("/initChangeVersions") |
| | | public ApiResponse<String> initChangeVersions() { |
| | | int shopCount = shopInfoService.initChangeVersions(); |
| | | int driverCount = driverInfoService.initChangeVersions(); |
| | | return ApiResponse.success("é¨åºåå§å " + shopCount + " æ¡ï¼å¸æºåå§å " + driverCount + " æ¡"); |
| | | } |
| | | |
| | | @ApiOperation("å
¨é¨åºåæ å½¢æ¥è¯¢") |
| | | @PostMapping("/treeList") |
| | |
| | | return ApiResponse.success("æ¥è¯¢æå", appVersion); |
| | | } |
| | | |
| | | @LoginShopRequired |
| | | @ApiOperation(value = "é¨åºæ ¡éªæä½åå¾", notes = "æ ¡éªé¨åºæä½äººå½åä½ç½®æ¯å¦å¨ç®æ ç¹å
许æä½åå¾å
") |
| | | @PostMapping("/checkShopOperationRadius") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<Boolean> checkShopOperationRadius(@RequestBody @Valid ShopCheckRadiusDTO dto) { |
| | | Boolean result = ordersService.checkOperationRadius(dto.getOrderId(), this.getShopId(), Constants.ZERO, dto.getLng(), dto.getLat()); |
| | | return ApiResponse.success("æä½æå", result); |
| | | } |
| | | |
| | | @LoginDriverRequired |
| | | @ApiOperation(value = "叿ºæ ¡éªæä½åå¾", notes = "æ ¡éªå¸æºå½åä½ç½®æ¯å¦å¨ç®æ ç¹å
许æä½åå¾å
") |
| | | @PostMapping("/checkDriverOperationRadius") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<Boolean> checkDriverOperationRadius(@RequestBody @Valid DriverCheckRadiusDTO dto) { |
| | | Boolean result = ordersService.checkOperationRadius(dto.getOrderId(), this.getDriverId(), Constants.ONE, dto.getLng(), dto.getLat()); |
| | | return ApiResponse.success("æä½æå", result); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.dto.UpdMobileRequest; |
| | | import com.doumee.dao.vo.MemberContactVO; |
| | | import com.doumee.dao.vo.UserCenterVO; |
| | | import com.doumee.service.business.MemberService; |
| | | import com.doumee.service.business.SmsrecordService; |
| | |
| | | return ApiResponse.success("æä½æå"); |
| | | } |
| | | |
| | | @LoginRequired |
| | | @ApiOperation("è·åç¨æ·æ¶ä»¶ä¿¡æ¯") |
| | | @GetMapping("/getContactInfo") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true) |
| | | }) |
| | | public ApiResponse<MemberContactVO> getContactInfo() { |
| | | return ApiResponse.success("æ¥è¯¢æå", memberService.getContactInfo(getMemberId())); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | templateParam.put("orderNo", refundOrder.getCode()); |
| | | templateParam.put("money", String.valueOf(Constants.getFormatMoney( |
| | | refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))); |
| | | String smsError = AliSmsService.sendSms(refundMember.getTelephone(), |
| | | Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | String smsError = null; |
| | | if (Constants.SmsNotify.MEMBER_REFUNDED.isEnabled()) { |
| | | smsError = AliSmsService.sendSms(refundMember.getTelephone(), |
| | | Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | } |
| | | if (smsError == null) { |
| | | log.info("鿬¾çä¿¡åéæå: phone={}", refundMember.getTelephone()); |
| | | } else { |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: pro |
| | | active: dev |
| | | # JSONè¿åé
ç½® |
| | | jackson: |
| | | # é»è®¤æ¶åº |