소스 검색

银行账户

FengChaoYu 9 달 전
부모
커밋
f4f9801379

+ 13 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/settle/repair/DailyBankAccountBean.java

@@ -0,0 +1,13 @@
+package com.gree.mall.manager.bean.settle.repair;
+
+import com.gree.mall.manager.plus.entity.SettleDailyBankAccount;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@ApiModel
+@Data
+public class DailyBankAccountBean extends SettleDailyBankAccount {
+
+}

+ 62 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/settle/repair/DailyBankAccountVO.java

@@ -0,0 +1,62 @@
+package com.gree.mall.manager.bean.settle.repair;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.gree.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel
+@ZfireField(tbName = "a")
+public class DailyBankAccountVO {
+
+    @ApiModelProperty(value = "银行账户id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "服务人员名称")
+    private String workerName;
+
+    @ApiModelProperty(value = "身份证")
+    private String idcard;
+
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+    @ApiModelProperty(value = "银行卡号")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "户名")
+    private String bankAccountName;
+
+    @ApiModelProperty(value = "开户行")
+    private String depositBank;
+
+    @ApiModelProperty(value = "开户行地址")
+    private String bankAddr;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "操作人")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+}

+ 9 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/CommonMapper.java

@@ -28,6 +28,7 @@ import com.gree.mall.manager.bean.settle.SettleExpenseItemVO;
 import com.gree.mall.manager.bean.settle.SettleExpenseVO;
 import com.gree.mall.manager.bean.settle.SettleMonthWagesVO;
 import com.gree.mall.manager.bean.settle.SettleMonthWagesWorkerVO;
+import com.gree.mall.manager.bean.settle.repair.DailyBankAccountVO;
 import com.gree.mall.manager.bean.workorder.*;
 import com.gree.mall.manager.enums.UserTypeEnum;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
@@ -619,4 +620,12 @@ public interface CommonMapper {
      * @return
      */
     IPage<AdminCompanyPayConfigVO> adminCompanyPayConfigList(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+    /**
+     * 维修日结银行账户列表
+     * @param page
+     * @param zfireParamBean
+     * @return
+     */
+    IPage<DailyBankAccountVO> repairSettleBankAccountList(Page page, @Param("ex") ZfireParamBean zfireParamBean);
 }

+ 3 - 0
mall-server-api/src/main/java/com/gree/mall/manager/constant/Constant.java

@@ -61,6 +61,9 @@ public class Constant {
 
         // 接口令牌
         public final static String INF_TOKEN = "jsm:sxb:token:inf";
+
+        //维修日结汇总
+        public final static String LOCK_DAILY_BANKACCOUNT = "jsm:SETTLE:LOCK:BANKACCOUNT:";
     }
     public class ChatMessage {
         public final static String MSG_TYPE_DOC = "docmsg";

+ 212 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/settle/repair/BankAccountController.java

@@ -0,0 +1,212 @@
+package com.gree.mall.manager.controller.settle.repair;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.manager.annotation.ZfireList;
+import com.gree.mall.manager.bean.material.base.WebsitNormChargeVO;
+import com.gree.mall.manager.bean.settle.repair.DailyBankAccountBean;
+import com.gree.mall.manager.bean.settle.repair.DailyBankAccountVO;
+import com.gree.mall.manager.constant.Constant;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.helper.ResponseHelper;
+import com.gree.mall.manager.logic.settle.repair.RepairSettleAccountLogic;
+import com.gree.mall.manager.plus.entity.SettleDailyBankAccount;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Slf4j
+@RestController
+@Api(value = "银行卡API", tags = {"银行卡API"})
+@RequestMapping(value = "/daily/bank", produces = "application/json; charset=utf-8")
+@RequiredArgsConstructor
+public class BankAccountController {
+
+    private final RepairSettleAccountLogic repairSettleAccountLogic;
+    private final RedisLockRegistry redisLockRegistry;
+
+    @ZfireList
+    @PostMapping("/list")
+    @ApiOperation(value = "列表")
+    public ResponseHelper<IPage<DailyBankAccountVO>> page(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) {
+        IPage<DailyBankAccountVO> page = repairSettleAccountLogic.page(zfireParamBean);
+        return ResponseHelper.success(page, new TypeReference<DailyBankAccountVO>() {
+        });
+    }
+
+    @PostMapping("/list/export")
+    @ApiOperation("导出")
+    public void listExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //2.查询要导出的内容
+        IPage<DailyBankAccountVO> page = repairSettleAccountLogic.page(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(page.getRecords(), zfireParamBean.getExportFields(), request, response);
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation("详情")
+    public ResponseHelper<SettleDailyBankAccount> detail(
+            @ApiParam(required = true) @RequestParam String id
+    ) {
+        SettleDailyBankAccount detail = repairSettleAccountLogic.detail(id);
+        return ResponseHelper.success(detail);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation(value = "新增")
+    public ResponseHelper add(
+            @RequestBody SettleDailyBankAccount dailyBankAccount
+    ) throws InterruptedException {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_DAILY_BANKACCOUNT + dailyBankAccount.getIdcard() + dailyBankAccount.getBankAccount());
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("请勿频繁操作,稍后再试");
+        }
+        try {
+            repairSettleAccountLogic.add(dailyBankAccount);
+            return ResponseHelper.success();
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "银行卡信息-修改")
+    public ResponseHelper update(
+            @RequestBody SettleDailyBankAccount dailyBankAccount
+    ) throws InterruptedException {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_DAILY_BANKACCOUNT + dailyBankAccount.getIdcard() + dailyBankAccount.getBankAccount());
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("请勿频繁操作,稍后再试");
+        }
+        try {
+            repairSettleAccountLogic.update(dailyBankAccount);
+            return ResponseHelper.success();
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "银行卡信息-删除")
+    public ResponseHelper getAccountBalance(
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) Integer id
+    ) {
+        repairSettleAccountLogic.delete(id);
+        return ResponseHelper.success();
+    }
+//
+//    @GetMapping("/transfer/list")
+//    @ApiOperation(value = "转帐记录列表")
+//    public ResponseHelper<IPage<DailyBankTransferRecord>> transferList(
+//            @ApiParam(required = false, value = "服务人员编号") @RequestParam(required = false) String workerNumber,
+//            @ApiParam(required = false, value = "批次号") @RequestParam(required = false) String batchNo,
+//            @ApiParam(value = "开始日期", required = false) @RequestParam(required = false) String startTime,
+//            @ApiParam(value = "结束日期", required = false) @RequestParam(required = false) String endTime,
+//            @ApiParam(required = true, value = "页号") @RequestParam(required = true) Integer pageNo,
+//            @ApiParam(required = true, value = "页大小") @RequestParam(required = true) Integer pageSize,
+//            HttpServletRequest request
+//    ) {
+//        IPage<DailyBankTransferRecord> list = repairSettleAccountLogic.transferList(workerNumber, startTime, endTime, batchNo, pageNo, pageSize);
+//        return ResponseHelper.success(list);
+//    }
+//
+//
+//    @GetMapping("/company/account/list")
+//    @ApiOperation(value = "公司卡号余额列表")
+//    public ResponseHelper<IPage<DailyBankCardBalance>> companyAccountList(
+//            @ApiParam(required = true, value = "页号") @RequestParam(required = true) Integer pageNo,
+//            @ApiParam(required = true, value = "页大小") @RequestParam(required = true) Integer pageSize
+//    ) {
+//        IPage<DailyBankCardBalance> list = repairSettleAccountLogic.companyAccountList(pageNo, pageSize);
+//        return ResponseHelper.success(list);
+//    }
+//
+//
+//    @GetMapping("/send/msg")
+//    @ApiOperation(value = "查询余额/(发放工资)发送验证码")
+//    public ResponseHelper sendMsg(
+//            @ApiParam(required = true, value = "手机号") @RequestParam(required = true) String mobile,
+//            @ApiParam(required = false, value = "类型 发放:issue , 余额:balance") @RequestParam(required = false) String type
+//    ) throws Exception {
+//        repairSettleAccountLogic.sendMsg(mobile,type);
+//        return ResponseHelper.success();
+//    }
+//
+//
+//
+//    @GetMapping("/company/account/balance")
+//    @ApiOperation(value = "查询公司卡余额")
+//    public ResponseHelper<DailyBankCardBalance> selBankCardBalance(
+//            @ApiParam(required = true, value = "id") @RequestParam(required = true) Integer id,
+//            @ApiParam(required = true, value = "手机号") @RequestParam(required = true) String mobile,
+//            @ApiParam(required = true, value = "验证码") @RequestParam(required = true) String code
+//    ) throws Exception {
+//        DailyBankCardBalance  bean =  repairSettleAccountLogic.selBankCardBalance(id,mobile,code);
+//        return ResponseHelper.success(bean);
+//    }
+//
+//    @GetMapping("/template/download")
+//    @ApiOperation("下载银行账户模板")
+//    public void downloadTemplate(HttpServletResponse response) throws IOException {
+//        String fileName = "银行账户模板.xlsx";
+//        CommonUtils.downloadFile(fileName,response);
+//    }
+//
+//
+//    @PostMapping("/template/import")
+//    @ApiOperation("导入银行账户")
+//    public ResponseHelper importData(MultipartFile file) throws IOException {
+//        repairSettleAccountLogic.importData(file);
+//        return ResponseHelper.success();
+//    }
+//
+//
+//    @Autowired
+//    DailyTransferLogic dailyTransferLogic;
+//
+//    @GetMapping("/excute")
+//    @ApiOperation("查询转账结果")
+//    public ResponseHelper excute(){
+//        dailyTransferLogic.excute();
+//        return ResponseHelper.success();
+//    }
+//
+//    @GetMapping("/template/export")
+//    @ApiOperation("银行账号信息-导出")
+//    public void exportRepairLevel(
+//            @ApiParam(required = false, value = "服务人员编号") @RequestParam(required = false) String workerNumber,
+//            @ApiParam(required = false, value = "服务人员名称") @RequestParam(required = false) String workerName,
+//            @ApiParam(required = false, value = "所属网点编号") @RequestParam(required = false) String websitNumber,
+//            @ApiParam(required = false, value = "身份证") @RequestParam(required = false) String idcard,
+//            @ApiParam(required = false, value = "手机号") @RequestParam(required = false) String mobile,
+//            HttpServletRequest request,
+//            HttpServletResponse response
+//    ) throws Exception {
+//        IPage<DailyBankAccountBean> list = repairSettleAccountLogic.list(workerNumber, workerName, websitNumber, idcard, mobile, 1, -1);
+//        ExcelData excelData = repairSettleAccountLogic.exportData(list.getRecords());
+//        ExcelUtils.exportExcel(request,response,"银行账号信息.xlsx",excelData);
+//    }
+
+
+}

+ 124 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/settle/repair/RepairSettleAccountLogic.java

@@ -0,0 +1,124 @@
+package com.gree.mall.manager.logic.settle.repair;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.manager.bean.admin.AdminUserCom;
+import com.gree.mall.manager.bean.settle.repair.DailyBankAccountVO;
+import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.enums.ExamineStatusEnum;
+import com.gree.mall.manager.enums.UserTypeEnum;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.logic.common.CommonLogic;
+import com.gree.mall.manager.plus.entity.AdminWebsit;
+import com.gree.mall.manager.plus.entity.SettleDailyBankAccount;
+import com.gree.mall.manager.plus.entity.User;
+import com.gree.mall.manager.plus.entity.WebsitUser;
+import com.gree.mall.manager.plus.service.AdminWebsitService;
+import com.gree.mall.manager.plus.service.SettleDailyBankAccountService;
+import com.gree.mall.manager.plus.service.UserService;
+import com.gree.mall.manager.plus.service.WebsitUserService;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class RepairSettleAccountLogic {
+    private final CommonLogic commonLogic;
+    private final CommonMapper commonMapper;
+    private final SettleDailyBankAccountService settleDailyBankAccountService;
+    private final UserService userService;
+    private final WebsitUserService websitUserService;
+    private final AdminWebsitService adminWebsitService;
+
+    public IPage<DailyBankAccountVO> page(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.supplyParam(zfireParamBean, DailyBankAccountVO.class, adminUser);
+
+        return commonMapper.repairSettleBankAccountList(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+    }
+
+    public SettleDailyBankAccount detail(String id) {
+        return settleDailyBankAccountService.getById(id);
+    }
+
+
+    public void add(SettleDailyBankAccount dailyBankAccount) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        if (adminUser.getType() == 2) {
+            throw new RemoteServiceException("平台账号禁止操作");
+        }
+
+        String idcard = dailyBankAccount.getIdcard();
+        List<SettleDailyBankAccount> count = settleDailyBankAccountService.lambdaQuery().eq(SettleDailyBankAccount::getIdcard, idcard).list();
+        if (count.size() > 0) {
+            if (count.get(0).getIdcard().equals(dailyBankAccount.getIdcard())) {
+                throw new RemoteServiceException("身份证已存在:" + idcard);
+            }
+
+            if (count.get(0).getBankAccount().equals(dailyBankAccount.getBankAccount())) {
+                throw new RemoteServiceException("银行卡已存在:" + idcard);
+            }
+        }
+
+        List<User> userList = userService.lambdaQuery()
+                .eq(User::getCompanyWechatId, adminUser.getAdminCompanyWechat().getCompanyWechatId())
+                .eq(User::getIdCard, dailyBankAccount.getIdcard())
+                .eq(User::getType, UserTypeEnum.WORKER.getKey())
+                .list();
+        if (CollectionUtil.isEmpty(userList)) {
+            throw new RemoteServiceException("身份证在系统不存在:" + idcard);
+        }
+        if (!dailyBankAccount.getDepositBank().contains("招商银行") && StringUtils.isBlank(dailyBankAccount.getBankAddr())) {
+            throw new RemoteServiceException("卡号【" + dailyBankAccount.getBankAccount() + "】非招商银行,请补充开户行地址");
+        }
+        dailyBankAccount.setBankAccount(dailyBankAccount.getBankAccount().replaceAll(" ", ""));
+
+        List<SettleDailyBankAccount> accountList = new ArrayList<>();
+        // 检查师傅已入驻网点并创建相应网点记录
+        final List<WebsitUser> websitUserList = websitUserService.lambdaQuery()
+                .eq(WebsitUser::getCompanyWechatId, adminUser.getAdminCompanyWechat().getCompanyWechatId())
+                .eq(WebsitUser::getExamineStatus, ExamineStatusEnum.OK.getKey())
+                .in(WebsitUser::getUserId, userList.stream().map(User::getUserId).distinct().collect(Collectors.toList()))
+                .list();
+
+        final List<String> websits = websitUserList.stream().map(WebsitUser::getWebsitId).distinct().collect(Collectors.toList());
+
+        final List<AdminWebsit> adminWebsits = adminWebsitService.lambdaQuery()
+                .eq(AdminWebsit::getCompanyWechatId, adminUser.getAdminCompanyWechat().getCompanyWechatId())
+                .in(AdminWebsit::getWebsitId, websits)
+                .list();
+
+        final Map<String, String> websitMap = adminWebsits.stream()
+                .collect(Collectors.toMap(AdminWebsit::getWebsitId, AdminWebsit::getName));
+
+        for (String websit : websits) {
+            final String websitName = websitMap.get(websit);
+            SettleDailyBankAccount account = new SettleDailyBankAccount();
+            BeanUtils.copyProperties(dailyBankAccount, account);
+            account.setCompanyWechatId(adminUser.getAdminCompanyWechat().getCompanyWechatId())
+                    .setCompanyName(adminUser.getAdminCompanyWechat().getCompanyName())
+                    .setWebsitId(websit)
+                    .setWebsitName(websitName);
+            accountList.add(account);
+        }
+    }
+
+    public void update(SettleDailyBankAccount dailyBankAccount) {
+    }
+
+    public void delete(Integer id) {
+    }
+}