|
@@ -7,6 +7,7 @@ import com.caimei365.order.mapper.PayOrderMapper;
|
|
|
import com.caimei365.order.mapper.ReceiptMapper;
|
|
|
import com.caimei365.order.model.ResponseJson;
|
|
|
import com.caimei365.order.model.bo.ReceiptParamsBo;
|
|
|
+import com.caimei365.order.model.dto.ReceiptAssociateDto;
|
|
|
import com.caimei365.order.model.dto.ReceiptDto;
|
|
|
import com.caimei365.order.model.enums.OrderStatus;
|
|
|
import com.caimei365.order.model.enums.ReceiptStatus;
|
|
@@ -177,27 +178,8 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
if (StringUtils.isNotBlank(receiptDto.getSmsContent())) {
|
|
|
receiptPo.setSmsMd5Code(Md5Util.md5(receiptDto.getSmsContent()));
|
|
|
}
|
|
|
- // 收款作废
|
|
|
- if (null != receiptDto.getId() && StringUtils.isNotBlank(receiptDto.getDelFlag())) {
|
|
|
- // 收款状态receiptStatus:2已确认(待审核)、3审核通过
|
|
|
- if ("2".equals(receiptDto.getReceiptStatus()) || "3".equals(receiptDto.getReceiptStatus())) {
|
|
|
- // 收款款项类型receiptType:1订单款
|
|
|
- if ("1".equals(receiptDto.getReceiptType())) {
|
|
|
- return ResponseJson.error(-2, "该收款已关联了订单,不能作废!请刷新页面查看最新数据", null);
|
|
|
- }
|
|
|
- // 收款款项类型receiptType:3返佣款
|
|
|
- else if ("3".equals(receiptDto.getReceiptType())) {
|
|
|
- return ResponseJson.error(-2, "该收款已关联了返佣订单,不能作废!请刷新页面查看最新数据", null);
|
|
|
- }
|
|
|
- }
|
|
|
- // 收款款项类型receiptType:2非订单款
|
|
|
- if ("2".equals(receiptDto.getReceiptType())) {
|
|
|
- receiptPo.setReceiptStatus("2");
|
|
|
- receiptPo.setConfirmUserPermissionId(receiptUser.getId());
|
|
|
- receiptPo.setConfirmDate(time);
|
|
|
- }
|
|
|
- // 更新收款记录
|
|
|
- receiptMapper.updateReceipt(receiptPo);
|
|
|
+ if (null != receiptDto.getId()) {
|
|
|
+ return ResponseJson.error("接口调用错误,该接口用作保存收款信息", null);
|
|
|
} else {
|
|
|
// 如果是添加收款则判断是否存在重复添加
|
|
|
if (StringUtils.isNotBlank(receiptDto.getSmsContent()) && StringUtils.isNotBlank(receiptDto.getPayWay())) {
|
|
@@ -417,6 +399,57 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
return ResponseJson.success(receiptPo);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 操作收款信息(作废,设为返佣/普通/供应商退款)
|
|
|
+ *
|
|
|
+ * @param receiptDto {
|
|
|
+ * id:收款Id
|
|
|
+ * receiptType: 1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
|
|
|
+ * delFlag: 作废标记: 0否,其余是
|
|
|
+ * }
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<ReceiptPo> operateReceipt(ReceiptDto receiptDto) {
|
|
|
+ // 操作用户
|
|
|
+ ReceiptUserVo receiptUser = checkPermissions(2, receiptDto.getOpenid());
|
|
|
+ if (null == receiptUser) {
|
|
|
+ return ResponseJson.error("无权限操作!", null);
|
|
|
+ }
|
|
|
+ ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptDto.getId());
|
|
|
+ if (null == receipt) {
|
|
|
+ return ResponseJson.error("收款数据异常!", null);
|
|
|
+ }
|
|
|
+ String time = DateUtils.getDateTime();
|
|
|
+ ReceiptPo receiptPo = new ReceiptPo();
|
|
|
+ receiptPo.setId(receiptDto.getId());
|
|
|
+ receiptPo.setUpdateDate(time);
|
|
|
+ // 收款作废
|
|
|
+ if (StringUtils.isNotBlank(receiptDto.getDelFlag()) && !"0".equals(receiptDto.getDelFlag())) {
|
|
|
+ // 收款状态receiptStatus:2已确认(待审核)、3审核通过
|
|
|
+ if ("2".equals(receiptDto.getReceiptStatus()) || "3".equals(receiptDto.getReceiptStatus())) {
|
|
|
+ // 收款款项类型receiptType:1订单款
|
|
|
+ if ("1".equals(receiptDto.getReceiptType())) {
|
|
|
+ return ResponseJson.error(-2, "该收款已关联了订单,不能作废!请刷新页面查看最新数据", null);
|
|
|
+ }
|
|
|
+ // 收款款项类型receiptType:3返佣款
|
|
|
+ else if ("3".equals(receiptDto.getReceiptType())) {
|
|
|
+ return ResponseJson.error(-2, "该收款已关联了返佣订单,不能作废!请刷新页面查看最新数据", null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ receiptPo.setDelFlag(receiptDto.getDelFlag());
|
|
|
+ }
|
|
|
+ receiptPo.setReceiptType(receiptDto.getReceiptType());
|
|
|
+ // 收款款项类型receiptType:2非订单款
|
|
|
+ if ("2".equals(receiptDto.getReceiptType())) {
|
|
|
+ receiptPo.setReceiptStatus("2");
|
|
|
+ receiptPo.setConfirmUserPermissionId(receiptUser.getId());
|
|
|
+ receiptPo.setConfirmDate(time);
|
|
|
+ }
|
|
|
+ // 更新收款记录
|
|
|
+ receiptMapper.updateReceipt(receiptPo);
|
|
|
+ return ResponseJson.success(receiptPo);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取收款列表
|
|
|
*
|
|
@@ -577,7 +610,7 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
} else {
|
|
|
// 存在退款中的记录 (0:否,1:是)
|
|
|
Integer haveReturning = receiptMapper.countHaveReturning(order.getOrderId());
|
|
|
- if (null != haveReturning && haveReturning>0) {
|
|
|
+ if (null != haveReturning && haveReturning > 0) {
|
|
|
haveReturning = 1;
|
|
|
} else {
|
|
|
haveReturning = 0;
|
|
@@ -585,7 +618,7 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
order.setHaveReturning(haveReturning.toString());
|
|
|
// 存在收款中的记录 (0:否,1:是)
|
|
|
Integer haveReceipting = receiptMapper.countHaveReceipting(order.getOrderId());
|
|
|
- if (null != haveReceipting && haveReceipting>0) {
|
|
|
+ if (null != haveReceipting && haveReceipting > 0) {
|
|
|
haveReceipting = 1;
|
|
|
} else {
|
|
|
haveReceipting = 0;
|
|
@@ -644,6 +677,7 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
|
|
|
/**
|
|
|
* 获取收款订单详情
|
|
|
+ *
|
|
|
* @param orderId 订单Id
|
|
|
* @param openid 微信openid
|
|
|
*/
|
|
@@ -669,7 +703,7 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
shopOrder.setShopName(shopName);
|
|
|
List<OrderProductVo> orderProductList = orderCommonMapper.getShopOrderProduct(shopOrder.getShopOrderId());
|
|
|
for (OrderProductVo orderProduct : orderProductList) {
|
|
|
- if (null != orderProduct.getTotalAddedValueTax()){
|
|
|
+ if (null != orderProduct.getTotalAddedValueTax()) {
|
|
|
totalAddedValueTax = MathUtil.add(totalAddedValueTax, orderProduct.getTotalAddedValueTax()).doubleValue();
|
|
|
}
|
|
|
}
|
|
@@ -680,6 +714,189 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
return ResponseJson.success(order);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 关联收款信息
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public ResponseJson<ReceiptPo> receiptAssociate(ReceiptAssociateDto receiptAssociateDto) {
|
|
|
+ // 操作用户
|
|
|
+ ReceiptUserVo receiptUser = checkPermissions(2, receiptAssociateDto.getOpenid());
|
|
|
+ if (null == receiptUser) {
|
|
|
+ return ResponseJson.error("无权限操作!", null);
|
|
|
+ }
|
|
|
+ ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
|
|
|
+ // 删除之前与这个收款所有的关系
|
|
|
+ receiptMapper.deleteReceiptRelation(receipt.getId());
|
|
|
+ // ReceiptVo -- copy to --> ReceiptPo
|
|
|
+ String time = DateUtils.getDateTime();
|
|
|
+ ReceiptPo receiptPo = new ReceiptPo();
|
|
|
+ BeanUtils.copyProperties(receipt, receiptPo);
|
|
|
+ receiptPo.setUpdateDate(time);
|
|
|
+ receiptPo.setReceiptStatus("2");
|
|
|
+ receiptPo.setConfirmType(receiptAssociateDto.getConfirmType());
|
|
|
+ // 非订单款项确认
|
|
|
+ if (2 == receipt.getReceiptType()) {
|
|
|
+ if (StringUtils.isNotBlank(receiptAssociateDto.getNoOrderReason())) {
|
|
|
+ receiptPo.setNoOrderReason(receiptAssociateDto.getNoOrderReason());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 订单款项
|
|
|
+ if (1 == receipt.getReceiptType()) {
|
|
|
+ if (StringUtils.isNotBlank(receiptAssociateDto.getOrderIds())) {
|
|
|
+ String[] orderIDS = receiptAssociateDto.getOrderIds().split(",");
|
|
|
+ // 关联一个订单
|
|
|
+ if (orderIDS.length == 1) {
|
|
|
+ // 收款项和订单关系表
|
|
|
+ OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
|
|
|
+ relation.setRelationType(2);
|
|
|
+ relation.setAssociationType(1);
|
|
|
+ // 订单信息
|
|
|
+ OrderVo order = orderCommonMapper.getOrderByOrderId(Integer.parseInt(orderIDS[0]));
|
|
|
+ //设置订单未付金额(此处payableAmount用作实际应收)
|
|
|
+ order.setPayableAmount(getUnPayMoney(order, true));
|
|
|
+ // 收款金额 = 订单应付金额
|
|
|
+ if (0 == MathUtil.compare(receiptPo.getReceiptAmount(), order.getPayableAmount())) {
|
|
|
+ //确认关联
|
|
|
+ receiptPo.setConfirmType("4");
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(receiptPo.getReceiptAmount());
|
|
|
+ }
|
|
|
+ // 收款金额 < 订单应付金额
|
|
|
+ else if (-1 == MathUtil.compare(receiptPo.getReceiptAmount(), order.getPayableAmount())) {
|
|
|
+ // 小额抹平确认
|
|
|
+ if ("1".equals(receiptPo.getConfirmType())) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(receiptPo.getReceiptAmount());
|
|
|
+ }
|
|
|
+ // 部分收款确认
|
|
|
+ if ("4".equals(receiptPo.getConfirmType())) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(receiptPo.getReceiptAmount());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 收款金额 > 订单应付金额
|
|
|
+ else if (1 == MathUtil.compare(receiptPo.getReceiptAmount(), order.getPayableAmount())) {
|
|
|
+ // 大额抹平确认
|
|
|
+ if ("2".equals(receiptPo.getConfirmType())) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(order.getPayableAmount());
|
|
|
+ }
|
|
|
+ // 大额退款余额
|
|
|
+ if ("3".equals(receiptPo.getConfirmType())) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(order.getPayableAmount());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 保存 收款项和订单关系
|
|
|
+ baseMapper.insertOrderReceiptRelation(relation);
|
|
|
+ }
|
|
|
+ // 关联多个订单
|
|
|
+ else if (orderIDS.length > 1) {
|
|
|
+ // 先满足金额小的订单,如果金额相等就先满足ID较小的订单
|
|
|
+ List<OrderVo> list = receiptMapper.getOrderListByOrderIds(orderIDS);
|
|
|
+ for (OrderVo item : list) {
|
|
|
+ item.setPayableAmount(getUnPayMoney(item, true));
|
|
|
+ }
|
|
|
+ // 余下的收款金额
|
|
|
+ Double amount = receiptPo.getReceiptAmount();
|
|
|
+ if ("4".equals(receiptPo.getConfirmType())) {
|
|
|
+ // 确认关联
|
|
|
+ for (OrderVo order : list) {
|
|
|
+ if (amount > 0) {
|
|
|
+ OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
|
|
|
+ relation.setRelationType(2);
|
|
|
+ if (amount >= order.getPayableAmount()) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(order.getPayableAmount());
|
|
|
+ } else if (amount < order.getPayableAmount()) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(amount);
|
|
|
+ }
|
|
|
+ // 保存 收款项和订单关系
|
|
|
+ baseMapper.insertOrderReceiptRelation(relation);
|
|
|
+ amount -= order.getPayableAmount();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if ("1".equals(receiptPo.getConfirmType())) {
|
|
|
+ //小额抹平确认
|
|
|
+ for (OrderVo order : list) {
|
|
|
+ OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
|
|
|
+ relation.setRelationType(2);
|
|
|
+ if (amount >= order.getPayableAmount()) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(order.getPayableAmount());
|
|
|
+ } else if (amount < order.getPayableAmount()) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(amount < 0d ? 0d : amount);
|
|
|
+ }
|
|
|
+ // 保存 收款项和订单关系
|
|
|
+ baseMapper.insertOrderReceiptRelation(relation);
|
|
|
+ amount -= order.getPayableAmount();
|
|
|
+ }
|
|
|
+ } else if ("2".equals(receiptPo.getConfirmType())) {
|
|
|
+ //大额抹平确认
|
|
|
+ for (OrderVo order : list) {
|
|
|
+ OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
|
|
|
+ relation.setRelationType(2);
|
|
|
+ if (amount >= order.getPayableAmount()) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(order.getPayableAmount());
|
|
|
+ // 保存 收款项和订单关系
|
|
|
+ baseMapper.insertOrderReceiptRelation(relation);
|
|
|
+ amount -= order.getPayableAmount();
|
|
|
+ } else {
|
|
|
+ // 设置手动回滚事务
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ log.info("订单(Id:" + order.getOrderId() + ")大额抹平确认--金额不正确!");
|
|
|
+ return ResponseJson.error("订单(Id:" + order.getOrderId() + ")大额抹平确认--金额不正确!", null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if ("3".equals(receiptPo.getConfirmType())) {
|
|
|
+ //大额退款余额
|
|
|
+ for (OrderVo order : list) {
|
|
|
+ OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
|
|
|
+ relation.setRelationType(2);
|
|
|
+ if (amount >= order.getPayableAmount()) {
|
|
|
+ relation.setReceiptId(receiptPo.getId());
|
|
|
+ relation.setOrderId(order.getOrderId());
|
|
|
+ relation.setAssociateAmount(order.getPayableAmount());
|
|
|
+ // 保存 收款项和订单关系
|
|
|
+ baseMapper.insertOrderReceiptRelation(relation);
|
|
|
+ amount -= order.getPayableAmount();
|
|
|
+ } else {
|
|
|
+ // 设置手动回滚事务
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ log.info("订单(Id:" + order.getOrderId() + ")大额退款余额--金额不正确!");
|
|
|
+ return ResponseJson.error("订单(Id:" + order.getOrderId() + ")大额退款余额--金额不正确!", null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 设置手动回滚事务
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ log.info("关联订单为空!");
|
|
|
+ return ResponseJson.error("关联订单为空!", null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ receiptPo.setPayWay("2");
|
|
|
+ receiptPo.setConfirmUserPermissionId(receiptUser.getId());
|
|
|
+ receiptPo.setConfirmDate(time);
|
|
|
+ receiptMapper.updateReceipt(receiptPo);
|
|
|
+ return ResponseJson.success(receiptPo);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设置订单的款项信息
|
|
|
*/
|
|
@@ -712,7 +929,7 @@ public class ReceiptServiceImpl implements ReceiptService {
|
|
|
*/
|
|
|
public void setReceiptedAmount(ShopOrderVo shopOrder) {
|
|
|
OrderVo order = orderCommonMapper.getOrderByOrderId(shopOrder.getOrderId());
|
|
|
- if (null != order.getRebateFlag() && 1 == order.getRebateFlag()){
|
|
|
+ if (null != order.getRebateFlag() && 1 == order.getRebateFlag()) {
|
|
|
// 返佣订单
|
|
|
double associateAmount = receiptMapper.countAllPayAssociateAmount(order.getOrderId());
|
|
|
order.setReceiptAmount(associateAmount);
|