package com.vverp.controller.api; import com.vverp.base.Setting; import com.vverp.dto.OrderQuery; import com.vverp.entity.Admin; import com.vverp.entity.Product; import com.vverp.entity.PurchaseOrder; import com.vverp.entity.PurchaseOrderItem; import com.vverp.enums.OrderStatus; import com.vverp.form.OrderForm; import com.vverp.form.PurchaseOrderForm; import com.vverp.moli.util.Page; import com.vverp.moli.util.Pageable; import com.vverp.moli.util.RespData; import com.vverp.service.AdminService; import com.vverp.service.AttachFileService; import com.vverp.service.ProductService; import com.vverp.service.PurchaseOrderService; import com.vverp.util.DateUtil; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author * @date 2020/1/10 3:41 下午 */ @RestController("apiPurchaseOrderController") @RequestMapping("/api/purchaseOrder") public class PurchaseOrderController extends BaseController { @Resource private AdminService adminService; @Resource private ProductService productService; @Resource private PurchaseOrderService purchaseOrderService; @Resource private AttachFileService attachFileService; @RequestMapping(value = "/save", method = RequestMethod.POST) public RespData save(@RequestBody PurchaseOrderForm form) { return respDataWithHandle(() -> { PurchaseOrder purchaseOrder = fromForm(form); purchaseOrderService.savePurchaseOrder(purchaseOrder); }); } @RequestMapping(value = "/update", method = RequestMethod.POST) public RespData update(@RequestBody PurchaseOrderForm form) { return respDataWithHandle(() -> { PurchaseOrder purchaseOrder = fromForm(form); PurchaseOrder source = purchaseOrderService.find(form.getId()); purchaseOrderService.updatePurchaseOrder(purchaseOrder); if (source.getStatus().equals(OrderStatus.approved)) { purchaseOrderService.approveApplyForEdit(source); } }); } @RequestMapping(value = "/list", method = RequestMethod.GET) public RespData list(Pageable pageable, OrderQuery orderQuery) { Admin admin = adminService.getApp(); orderQuery.setVisibleCompanyIdsStr(admin.getVisibleCompanyIdsStr()); orderQuery.setVisibleDepartmentIdsStr(admin.getVisibleDepartmentIdsStr()); Page page = purchaseOrderService.findPage(pageable, orderQuery); List> list = getMapList(page.getContent()); return RespData.success(new Page<>(list, page.getTotal(), page.getPageable())); } @RequestMapping(value = "/listAll", method = RequestMethod.GET) public RespData listAll(OrderQuery orderQuery) { List purchaseOrderList = purchaseOrderService.findList(orderQuery); List> list = getMapList(purchaseOrderList); return RespData.success(list); } public List> getMapList(List purchaseOrderList) { List> list = new ArrayList<>(); for (PurchaseOrder purchaseOrder : purchaseOrderList) { Map map = new HashMap<>(); map.put("id", purchaseOrder.getId()); map.put("sn", purchaseOrder.getSn()); map.put("supplierId", purchaseOrder.getOwnerId()); map.put("supplierName", purchaseOrder.getOwnerName()); map.put("amount", purchaseOrder.getTotalAmount()); map.put("status", purchaseOrder.getStatus().getName()); map.put("createDate", DateUtil.formatDate(purchaseOrder.getCreateDate())); list.add(map); } return list; } @RequestMapping(value = "view", method = RequestMethod.GET) public RespData view(Long id) { PurchaseOrder purchaseOrder = purchaseOrderService.find(id); Map map = new HashMap<>(); map.put("id", purchaseOrder.getId()); map.put("sn", purchaseOrder.getSn()); map.put("supplierName", purchaseOrder.getOwnerName()); map.put("amount", purchaseOrder.getTotalAmount()); map.put("count", purchaseOrder.getTotalCount()); map.put("orderDate", DateUtil.formatDate(purchaseOrder.getOrderDate())); map.put("contractDeadline", DateUtil.formatDate(purchaseOrder.getContractDeadline())); map.put("creator", purchaseOrder.getAdminName()); map.put("status", purchaseOrder.getStatus()); map.put("departmentId", purchaseOrder.getDepartmentId()); map.put("departmentName", purchaseOrder.getDepartmentName()); map.put("companyId", purchaseOrder.getCompanyId()); map.put("companyName", purchaseOrder.getCompanyName()); map.put("deliveryType", purchaseOrder.getDeliveryType() != null ? purchaseOrder.getDeliveryType().getName() : ""); map.put("deliveryTypeValue", purchaseOrder.getDeliveryType()); map.put("remark", purchaseOrder.getRemark()); map.put("ownerId", purchaseOrder.getOwnerId()); map.put("ownerName", purchaseOrder.getOwnerName()); map.put("adminName", purchaseOrder.getAdminName()); map.put("adminId", purchaseOrder.getAdminId()); map.put("payMethod", purchaseOrder.getPayMethod()); map.put("lossType", purchaseOrder.getLossType() != null ? purchaseOrder.getLossType().getName() : ""); map.put("lossTypeValue", purchaseOrder.getLossType()); map.put("contractType", purchaseOrder.getContractType() != null ? purchaseOrder.getContractType().getName() : ""); map.put("contractValue", purchaseOrder.getContractType()); map.put("reservoir", purchaseOrder.getReservoir().getName()); map.put("reservoirValue", purchaseOrder.getReservoir()); map.put("settlement", purchaseOrder.getSettlement()); map.put("settlementAmount", purchaseOrder.getSettlementAmount()); map.put("amountPayable", purchaseOrder.getAmountPayable()); map.put("rationalLossRatio", purchaseOrder.getRationalLossRatio()); map.put("writeAddress", purchaseOrder.getWriteAddress()); map.put("attachFiles", attachFileService.getMapList(purchaseOrder.getAttachFileIds())); map.put("internationalTradeFlag", purchaseOrder.getInternationalTradeFlag()); map.put("tariffs", purchaseOrder.getTariffs()); map.put("exchangeRate", Setting.getData().getUsdToCnyExchange().add(new BigDecimal("0.06"))); map.put("pricingDiscount", purchaseOrder.getPricingDiscount()); map.put("agencyFee", purchaseOrder.getAgencyFee()); map.put("miscellaneousFee", purchaseOrder.getMiscellaneousFee()); map.put("pickupCount", purchaseOrder.getPickupCount()); map.put("pickupBarrel", purchaseOrder.getPickupBarrel()); map.put("pickupDate", DateUtil.formatDate(purchaseOrder.getPickupDate())); map.put("letterCreditDate", DateUtil.formatDate(purchaseOrder.getLetterCreditDate())); map.put("letterCreditAmount", purchaseOrder.getLetterCreditAmount()); map.put("letterCreditAcceptanceDate", DateUtil.formatDate(purchaseOrder.getLetterCreditAcceptanceDate())); map.put("letterCreditFee", purchaseOrder.getLetterCreditFee()); map.put("zijStartDate", DateUtil.formatDate(purchaseOrder.getZijStartDate())); map.put("zijRate", purchaseOrder.getZijRate()); map.put("zijTakeUpMoney", purchaseOrder.getZijTakeUpMoney()); map.put("zijInterest", purchaseOrder.getZijInterest()); List> list = new ArrayList<>(); for (PurchaseOrderItem item : purchaseOrder.getPurchaseOrderItemList()) { Map data = new HashMap<>(); data.put("id", item.getProductId()); data.put("name", item.getName()); data.put("price", item.getTaxPrice()); data.put("count", item.getCount()); data.put("itemId", item.getId()); data.put("realName", item.getRealName()); list.add(data); } map.put("list", list); return RespData.success(map); } @RequestMapping("/approve") public RespData approve(Long id) { PurchaseOrder purchaseOrder = purchaseOrderService.find(id); try { purchaseOrderService.approve(purchaseOrder); return RespData.success(); } catch (RuntimeException e) { return RespData.error(e.getMessage()); } } @RequestMapping("/statistics") public RespData statistics(Pageable pageable, OrderQuery query) { Page page = purchaseOrderService.findPage(pageable, query); List> list = purchaseOrderService.statistics(page.getContent()); return RespData.success(new Page<>(list, page.getTotal(), page.getPageable())); } private PurchaseOrder fromForm(PurchaseOrderForm form) { PurchaseOrder purchaseOrder = new PurchaseOrder(); BeanUtils.copyProperties(form, purchaseOrder); purchaseOrder.setId(form.getId()); Admin admin = adminService.getApp(); purchaseOrder.setAdminId(admin.getId()); purchaseOrder.setAdminName(admin.getName()); if (purchaseOrder.getReservoir() == null) { throw new RuntimeException("库区不能为空"); } List list = new ArrayList<>(); for (OrderForm.Item item : form.getList()) { PurchaseOrderItem purchaseOrderItem = new PurchaseOrderItem(); BeanUtils.copyProperties(item, purchaseOrderItem); purchaseOrderItem.setId(item.getItemId()); Product product = productService.find(item.getProductId()); purchaseOrderItem.setProductId(product.getId()); purchaseOrderItem.setTaxPrice(item.getPrice()); purchaseOrderItem.setRealName(item.getRealName()); purchaseOrderItem.setCount(item.getCount()); list.add(purchaseOrderItem); } purchaseOrder.setPurchaseOrderItemList(list); return purchaseOrder; } }