package com.yami.trading.admin.controller.c2c; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yami.trading.admin.controller.c2c.model.BankCardOrderModel; import com.yami.trading.admin.controller.c2c.model.C2cOrderPayModel; import com.yami.trading.admin.controller.c2c.model.GetOrderPaymentsModel; import com.yami.trading.admin.model.ManualReleaseModel; import com.yami.trading.admin.model.OrderCancelModel; import com.yami.trading.bean.c2c.C2cOrder; import com.yami.trading.bean.model.C2cPaymentMethod; import com.yami.trading.common.constants.Constants; import com.yami.trading.common.domain.PageRequest; import com.yami.trading.common.domain.Result; import com.yami.trading.common.exception.YamiShopBindException; import com.yami.trading.common.util.C2cOrderLock; import com.yami.trading.common.util.StringUtils; import com.yami.trading.common.util.ThreadUtils; import com.yami.trading.security.common.util.SecurityUtils; import com.yami.trading.security.common.manager.PasswordManager; import com.yami.trading.service.AwsS3OSSFileService; import com.yami.trading.service.c2c.C2cAdvertService; import com.yami.trading.service.c2c.C2cOrderService; import com.yami.trading.service.chat.otc.OtcOnlineChatMessageService; import com.yami.trading.sys.model.SysUser; import com.yami.trading.sys.service.SysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("bankCardOrder") @Api(tags = "银行卡订单") public class BankCardController { @Autowired PasswordEncoder passwordEncoder; @Autowired private PasswordManager passwordManager; @Autowired C2cOrderService c2cOrderService; @Autowired SysUserService sysUserService; @Autowired AwsS3OSSFileService awsS3OSSFileService; @Autowired C2cAdvertService c2cAdvertService; @Autowired OtcOnlineChatMessageService otcOnlineChatMessageService; @ApiOperation(value = "列表") @PostMapping("list") public Result list(@RequestBody @Valid BankCardOrderModel model) { Page page = new Page(model.getCurrent(), model.getSize()); List list = new ArrayList<>(); if (StringUtils.isNotEmpty(model.getDirection())) { list.add(model.getDirection()); } else { list.add("recharge"); list.add("withdraw"); } c2cOrderService.pagedBankCardOrderQuery(page, list , model.getStatus(), model.getUser_code(), model.getRolename(), model.getOrder_no()); Map pmtMap = this.c2cAdvertService.getC2cSyspara("c2c_payment_method_type"); List nos = new ArrayList(); for (Map map : (List>) page.getRecords()) { nos.add(map.get("order_no").toString()); String methodType = String.valueOf((Integer) map.get("method_type")); if (map.containsKey("img")) { if (map.get("img") != null) { map.put("img", awsS3OSSFileService.getUrl(map.get("img").toString())); } } if (map.containsKey("method_img")) { if (map.get("method_img") != null) { map.put("method_img", awsS3OSSFileService.getUrl(map.get("method_img").toString())); } } if (map.containsKey("qrcode")) { if (map.get("qrcode") != null) { if ((!map.get("qrcode").toString().startsWith("http"))){ map.put("qrcode", awsS3OSSFileService.getUrl(map.get("qrcode").toString())); } } } map.put("method_type_name", pmtMap.containsKey(methodType) ? pmtMap.get(methodType) : methodType); } String order_nos = String.join(",", nos); Map unreadMsgs = this.otcOnlineChatMessageService.unreadMsgs(nos); for (Map map : (List>) page.getRecords()) { String orderNo = map.get("order_no").toString(); if (unreadMsgs.containsKey(orderNo)) { map.put("unread_msg", unreadMsgs.get(orderNo)); } if (null == map.get("rolename")) { map.put("roleNameDesc", ""); } else { String roleName = map.get("rolename").toString(); map.put("roleNameDesc", Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName); } } return Result.ok(page); } @ApiOperation(value = "手动放行") @PostMapping("orderPass") public Result manualRelease(@RequestBody @Valid ManualReleaseModel model) { String order_no = model.getOrderNo(); C2cOrder order = this.c2cOrderService.get(order_no); if (null == order) { throw new YamiShopBindException("订单不存在"); } boolean lock = false; try { if (!C2cOrderLock.add(order_no)) { throw new YamiShopBindException("系统繁忙,请稍后重试"); } lock = true; sysUserService.checkSafeWord(model.getSafeword()); c2cOrderService.manualRelease(order, SecurityUtils.getSysUser().getUsername()); ThreadUtils.sleep(100); } catch (Exception e) { return Result.failed(e.getMessage()); } finally { if (lock) { C2cOrderLock.remove(order_no); } } return Result.ok(null); } @ApiOperation(value = "取消订单") @PostMapping("orderCancel") public Result orderCancel(@RequestBody @Valid OrderCancelModel model) { C2cOrder order = this.c2cOrderService.get(model.getOrderNo()); if (null == order) { throw new YamiShopBindException("订单不存在"); } order.setRemark(model.getReason()); this.c2cOrderService.saveOrderCancel(order, "manager"); return Result.ok(null); } /** * 手动转账 */ @PostMapping("orderPay") @ApiOperation("手动转账") public Result orderPay(@RequestBody @Valid C2cOrderPayModel model) { boolean lock = false; try { if (!C2cOrderLock.add(model.getOrder_no())) { throw new YamiShopBindException("系统繁忙,请稍后重试"); } lock = true; sysUserService.checkSafeWord(model.getSafeword()); c2cOrderService.saveOrderPay(model.getOrder_no(), model.getSafeword(), SecurityUtils.getSysUser().getUsername(), model.getPayment_method_id_order_pay()); } catch (Exception e) { return Result.failed(e.getMessage()); } finally { if (lock) { C2cOrderLock.remove(model.getOrder_no()); } } return Result.succeed(); } /** * 获取 银行卡订单的支付方式 */ @GetMapping("getOrderPayments") @ApiOperation("获取 银行卡订单的支付方式") public Result getOrderPayments( @Valid GetOrderPaymentsModel request) { List methodList = c2cOrderService.getOrderPayments(request.getOrder_no(),false); return Result.succeed(methodList); } }