123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034 |
- package com.jsh.erp.service.impl;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.jsh.erp.constants.BusinessConstants;
- import com.jsh.erp.constants.ExceptionConstants;
- import com.jsh.erp.datasource.entities.*;
- import com.jsh.erp.datasource.mappers.DepotHeadMapper;
- import com.jsh.erp.datasource.mappers.DepotHeadMapperEx;
- import com.jsh.erp.datasource.mappers.DepotItemMapperEx;
- import com.jsh.erp.datasource.mappers.MaterialCurrentStockMapper;
- import com.jsh.erp.datasource.mappers.MaterialCurrentStockMapperEx;
- import com.jsh.erp.datasource.pda.dto.PDADepotHeadDTO;
- import com.jsh.erp.datasource.pda.dto.PDADepotMaterialDto;
- import com.jsh.erp.datasource.pda.vo.PDADepotHeadVO;
- import com.jsh.erp.datasource.vo.*;
- import com.jsh.erp.exception.BusinessRunTimeException;
- import com.jsh.erp.exception.JshException;
- import com.jsh.erp.query.LambdaQueryWrapperX;
- import com.jsh.erp.query.QueryWrapperX;
- import com.jsh.erp.service.*;
- import com.jsh.erp.util.QRCodeGenerator;
- import com.jsh.erp.utils.ExcelUtils;
- import com.jsh.erp.utils.HttpClient;
- import com.jsh.erp.utils.PageUtils;
- import com.jsh.erp.utils.StringUtil;
- import com.jsh.erp.utils.Tools;
- import jxl.Workbook;
- import jxl.write.WritableWorkbook;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.context.request.RequestContextHolder;
- import org.springframework.web.context.request.ServletRequestAttributes;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.File;
- import java.math.BigDecimal;
- import java.sql.Timestamp;
- import java.util.*;
- import java.util.stream.Collectors;
- import static com.jsh.erp.utils.Tools.getCenternTime;
- import static com.jsh.erp.utils.Tools.getNow3;
- @Service
- public class DepotHeadServiceImpl extends ServiceImpl<DepotHeadMapper, DepotHead> implements DepotHeadService {
- private Logger logger = LoggerFactory.getLogger(DepotHeadServiceImpl.class);
- @Resource
- private DepotHeadMapper depotHeadMapper;
- @Resource
- private DepotHeadMapperEx depotHeadMapperEx;
- @Resource
- private UserService userService;
- @Resource
- private RoleService roleService;
- @Resource
- private DepotService depotService;
- @Resource
- DepotItemService depotItemService;
- @Resource
- private SupplierService supplierService;
- @Resource
- private UserBusinessService userBusinessService;
- @Resource
- private SystemConfigService systemConfigService;
- @Resource
- private SerialNumberService serialNumberService;
- @Resource
- private OrgaUserRelService orgaUserRelService;
- @Resource
- private PersonService personService;
- @Resource
- private AccountService accountService;
- @Resource
- private AccountHeadService accountHeadService;
- @Resource
- private AccountItemService accountItemService;
- @Resource
- private SequenceService sequenceService;
- @Resource
- DepotItemMapperEx depotItemMapperEx;
- @Resource
- private LogService logService;
- @Resource
- private QRCodeGenerator qrCodeGenerator;
- @Resource
- private MaterialService materialService;
- @Resource
- private MaterialExtendService materialExtendService;
- @Resource
- private SyncTescoSystemService syncTescoSystemService;
- /**
- * PDA查询订单
- * @param pdaDepotHeadDTO 筛选条件
- * @return
- */
- @Override
- public List<PDADepotHeadVO> pdaList(PDADepotHeadDTO pdaDepotHeadDTO) {
- return depotHeadMapper.pdaList(pdaDepotHeadDTO);
- }
- @Override
- public PDADepotHeadVO pdaDetail(Long id) {
- return depotHeadMapper.pdaDetail(id);
- }
- @Override
- public DepotHead getDepotHead(long id)throws Exception {
- DepotHead result=null;
- try{
- result=depotHeadMapper.selectByPrimaryKey(id);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return result;
- }
- @Override
- public List<DepotHead> getDepotHead()throws Exception {
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- List<DepotHead> list=null;
- try{
- list=depotHeadMapper.selectByExample(example);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- @Override
- public List<DepotHeadVo4List> select(String type, String subType, String hasDebt, String status, String purchaseStatus, String number, String linkApply, String linkNumber,
- String beginTime, String endTime, String materialParam, Long organId, Long creator, Long depotId, Long accountId, String remark) throws Exception {
- List<DepotHeadVo4List> list = new ArrayList<>();
- try{
- HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
- Long userId = userService.getUserId(request);
- Role role = userService.getRoleTypeByUserId(userId);
- String priceLimit = role.getPriceLimit();
- String billCategory = getBillCategory(subType);
- String [] depotArray = getDepotArray(subType);
- String [] creatorArray = getCreatorArray();
- String [] statusArray = StringUtil.isNotEmpty(status) ? status.split(",") : null;
- String [] purchaseStatusArray = StringUtil.isNotEmpty(purchaseStatus) ? purchaseStatus.split(",") : null;
- String [] organArray = getOrganArray(subType, purchaseStatus);
- if ("采购订单".equals(subType) && "供应商".equals(role.getName())) {
- organArray = getOrganArrayByCurrentUser(userId);
- }
- //以销定购,查看全部数据
- creatorArray = StringUtil.isNotEmpty(purchaseStatus) ? null: creatorArray;
- Map<Long,String> personMap = personService.getPersonMap();
- Map<Long,String> accountMap = accountService.getAccountMap();
- beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
- endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
- PageUtils.startPage();
- list = depotHeadMapperEx.selectByConditionDepotHead(type, subType, creatorArray, hasDebt,
- statusArray, purchaseStatusArray, number, linkApply, linkNumber, beginTime, endTime,
- materialParam, organId, organArray, creator, depotId, depotArray, accountId, remark);
- if (null != list) {
- List<Long> idList = new ArrayList<>();
- List<String> numberList = new ArrayList<>();
- for (DepotHeadVo4List dh : list) {
- idList.add(dh.getId());
- numberList.add(dh.getNumber());
- }
- //通过批量查询去构造map
- Map<String,BigDecimal> finishDepositMap = getFinishDepositMapByNumberList(numberList);
- Map<Long,Integer> financialBillNoMap = getFinancialBillNoMapByBillIdList(idList);
- Map<String,Integer> billSizeMap = getBillSizeMapByLinkNumberList(numberList);
- Map<Long,String> materialsListMap = findMaterialsListMapByHeaderIdList(idList);
- Map<Long,BigDecimal> materialCountListMap = getMaterialCountListMapByHeaderIdList(idList);
- for (DepotHeadVo4List dh : list) {
- if(accountMap!=null && StringUtil.isNotEmpty(dh.getAccountIdList()) && StringUtil.isNotEmpty(dh.getAccountMoneyList())) {
- String accountStr = accountService.getAccountStrByIdAndMoney(accountMap, dh.getAccountIdList(), dh.getAccountMoneyList());
- dh.setAccountName(accountStr);
- }
- if(dh.getAccountIdList() != null) {
- String accountidlistStr = dh.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", "");
- dh.setAccountIdList(accountidlistStr);
- }
- if(dh.getAccountMoneyList() != null) {
- String accountmoneylistStr = dh.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", "");
- dh.setAccountMoneyList(accountmoneylistStr);
- }
- if(dh.getChangeAmount() != null) {
- dh.setChangeAmount(roleService.parseBillPriceByLimit(dh.getChangeAmount().abs(), billCategory, priceLimit, request));
- } else {
- dh.setChangeAmount(BigDecimal.ZERO);
- }
- if(dh.getTotalPrice() != null) {
- BigDecimal lastTotalPrice = BusinessConstants.SUB_TYPE_CHECK_ENTER.equals(dh.getSubType())||
- BusinessConstants.SUB_TYPE_REPLAY.equals(dh.getSubType())?dh.getTotalPrice():dh.getTotalPrice().abs();
- dh.setTotalPrice(roleService.parseBillPriceByLimit(lastTotalPrice, billCategory, priceLimit, request));
- }
- BigDecimal discountLastMoney = dh.getDiscountLastMoney()!=null?dh.getDiscountLastMoney():BigDecimal.ZERO;
- dh.setDiscountLastMoney(roleService.parseBillPriceByLimit(discountLastMoney, billCategory, priceLimit, request));
- BigDecimal backAmount = dh.getBackAmount()!=null?dh.getBackAmount():BigDecimal.ZERO;
- dh.setBackAmount(roleService.parseBillPriceByLimit(backAmount, billCategory, priceLimit, request));
- if(dh.getDeposit() == null) {
- dh.setDeposit(BigDecimal.ZERO);
- } else {
- dh.setDeposit(roleService.parseBillPriceByLimit(dh.getDeposit(), billCategory, priceLimit, request));
- }
- //已经完成的欠款
- if(finishDepositMap!=null) {
- BigDecimal finishDeposit = finishDepositMap.get(dh.getNumber()) != null ? finishDepositMap.get(dh.getNumber()) : BigDecimal.ZERO;
- dh.setFinishDeposit(roleService.parseBillPriceByLimit(finishDeposit, billCategory, priceLimit, request));
- }
- //欠款计算
- BigDecimal otherMoney = dh.getOtherMoney()!=null?dh.getOtherMoney():BigDecimal.ZERO;
- BigDecimal deposit = dh.getDeposit()!=null?dh.getDeposit():BigDecimal.ZERO;
- BigDecimal changeAmount = dh.getChangeAmount()!=null?dh.getChangeAmount():BigDecimal.ZERO;
- BigDecimal debt = discountLastMoney.add(otherMoney).subtract((deposit.add(changeAmount)));
- dh.setDebt(roleService.parseBillPriceByLimit(debt, billCategory, priceLimit, request));
- //是否有付款单或收款单
- if(financialBillNoMap!=null) {
- Integer financialBillNoSize = financialBillNoMap.get(dh.getId());
- dh.setHasFinancialFlag(financialBillNoSize!=null && financialBillNoSize>0);
- }
- //是否有退款单
- if(billSizeMap!=null) {
- Integer billListSize = billSizeMap.get(dh.getNumber());
- dh.setHasBackFlag(billListSize!=null && billListSize>0);
- }
- if(StringUtil.isNotEmpty(dh.getSalesMan())) {
- dh.setSalesManStr(personService.getPersonByMapAndIds(personMap,dh.getSalesMan()));
- }
- if(dh.getOperTime() != null) {
- dh.setOperTimeStr(getCenternTime(dh.getOperTime()));
- }
- //商品信息简述
- if(materialsListMap!=null) {
- dh.setMaterialsList(materialsListMap.get(dh.getId()));
- }
- //商品总数量
- if(materialCountListMap!=null) {
- dh.setMaterialCount(materialCountListMap.get(dh.getId()));
- }
- //以销定购的情况(不能显示销售单据的金额和客户名称)
- if(StringUtil.isNotEmpty(purchaseStatus)) {
- dh.setOrganName("****");
- dh.setTotalPrice(null);
- dh.setDiscountLastMoney(null);
- }
- }
- }
- } catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- /**
- * 根据单据类型获取仓库数组
- * @param subType
- * @return
- * @throws Exception
- */
- @Override
- public String[] getDepotArray(String subType) throws Exception {
- String [] depotArray = null;
- if(!BusinessConstants.SUB_TYPE_PURCHASE_APPLY.equals(subType)
- && !BusinessConstants.SUB_TYPE_PURCHASE_ORDER.equals(subType)
- && !BusinessConstants.SUB_TYPE_SALES_ORDER.equals(subType)) {
- String depotIds = depotService.findDepotStrByCurrentUser();
- depotArray = StringUtil.isNotEmpty(depotIds) ? depotIds.split(",") : null;
- }
- return depotArray;
- }
- /**
- * 根据角色类型获取操作员数组
- * @return
- * @throws Exception
- */
- @Override
- public String[] getCreatorArray() throws Exception {
- String creator = getCreatorByCurrentUser();
- String [] creatorArray=null;
- if(StringUtil.isNotEmpty(creator)){
- creatorArray = creator.split(",");
- }
- return creatorArray;
- }
- /**
- * 根据角色类型获取操作员数组
- * @param organizationId
- * @return
- * @throws Exception
- */
- @Override
- public String[] getCreatorArrayByOrg(Long organizationId) throws Exception {
- List<Long> userIdList = orgaUserRelService.getUserIdListByOrgId(organizationId);
- if(userIdList.size()>0) {
- List<String> userIdStrList = userIdList.stream().map(Object::toString).collect(Collectors.toList());
- return StringUtil.listToStringArray(userIdStrList);
- } else {
- return "-1".split(",");
- }
- }
- /**
- * 获取机构数组
- * @return
- */
- @Override
- public String[] getOrganArray(String subType, String purchaseStatus) throws Exception {
- String [] organArray = null;
- String type = "UserCustomer";
- Long userId = userService.getCurrentUser().getId();
- //获取权限信息
- String ubValue = userBusinessService.getUBValueByTypeAndKeyId(type, userId.toString());
- List<Supplier> supplierList = supplierService.findBySelectCus();
- if(BusinessConstants.SUB_TYPE_SALES_ORDER.equals(subType) || BusinessConstants.SUB_TYPE_SALES.equals(subType)
- ||BusinessConstants.SUB_TYPE_SALES_RETURN.equals(subType) ) {
- //采购订单里面选择销售订单的时候不要过滤
- if(StringUtil.isEmpty(purchaseStatus)) {
- if (null != supplierList && supplierList.size() > 0) {
- boolean customerFlag = systemConfigService.getCustomerFlag();
- List<String> organList = new ArrayList<>();
- for (Supplier supplier : supplierList) {
- boolean flag = ubValue.contains("[" + supplier.getId().toString() + "]");
- if (!customerFlag || flag) {
- organList.add(supplier.getId().toString());
- }
- }
- if(organList.size() > 0) {
- organArray = StringUtil.listToStringArray(organList);
- }
- }
- }
- }
- return organArray;
- }
- public String [] getOrganArrayByCurrentUser(Long userId) throws Exception {
- String[] organArray = userBusinessService.getUBValuByTypeAndKeyIdToArray("UserSupplier", userId.toString());
- return organArray;
- }
- /**
- * 根据角色类型获取操作员
- * @return
- * @throws Exception
- */
- @Override
- public String getCreatorByCurrentUser() throws Exception {
- String creator = "";
- User user = userService.getCurrentUser();
- String roleType = userService.getRoleTypeByUserId(user.getId()).getType(); //角色类型
- if(BusinessConstants.ROLE_TYPE_PRIVATE.equals(roleType)) {
- creator = user.getId().toString();
- } else if(BusinessConstants.ROLE_TYPE_THIS_ORG.equals(roleType)) {
- creator = orgaUserRelService.getUserIdListByUserId(user.getId());
- }
- return creator;
- }
- @Override
- public Map<String, BigDecimal> getFinishDepositMapByNumberList(List<String> numberList) {
- Map<String,BigDecimal> finishDepositMap = new HashMap<>();
- if(numberList.size()>0) {
- List<FinishDepositVo> list = depotHeadMapperEx.getFinishDepositByNumberList(numberList);
- if(list!=null && list.size()>0) {
- for (FinishDepositVo finishDepositVo : list) {
- if(finishDepositVo!=null) {
- finishDepositMap.put(finishDepositVo.getNumber(), finishDepositVo.getFinishDeposit());
- }
- }
- }
- }
- return finishDepositMap;
- }
- @Override
- public Map<String, Integer> getBillSizeMapByLinkNumberList(List<String> numberList) throws Exception {
- Map<String, Integer> billListMap = new HashMap<>();
- if(numberList.size()>0) {
- List<DepotHead> list = getBillListByLinkNumberList(numberList);
- if(list!=null && list.size()>0) {
- for (DepotHead depotHead : list) {
- if(depotHead!=null) {
- billListMap.put(depotHead.getLinkNumber(), list.size());
- }
- }
- }
- }
- return billListMap;
- }
- @Override
- public Map<Long,Integer> getFinancialBillNoMapByBillIdList(List<Long> idList) {
- Map<Long, Integer> billListMap = new HashMap<>();
- if(idList.size()>0) {
- List<AccountItem> list = accountHeadService.getFinancialBillNoByBillIdList(idList);
- if(list!=null && list.size()>0) {
- for (AccountItem accountItem : list) {
- if(accountItem!=null) {
- billListMap.put(accountItem.getBillId(), list.size());
- }
- }
- }
- }
- return billListMap;
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int insertDepotHead(JSONObject obj, HttpServletRequest request)throws Exception {
- DepotHead depotHead = JSONObject.parseObject(obj.toJSONString(), DepotHead.class);
- depotHead.setCreateTime(new Timestamp(System.currentTimeMillis()));
- depotHead.setStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT);
- User user = userService.getCurrentUser();
- depotHead.setTenantId(user.getId());
- int result=0;
- try{
- result=depotHeadMapper.insert(depotHead);
- logService.insertLog("单据", BusinessConstants.LOG_OPERATION_TYPE_ADD, request);
- }catch(Exception e){
- JshException.writeFail(logger, e);
- }
- return result;
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int updateDepotHead(JSONObject obj, HttpServletRequest request) throws Exception{
- DepotHead depotHead = JSONObject.parseObject(obj.toJSONString(), DepotHead.class);
- DepotHead dh=null;
- try{
- dh = depotHeadMapper.selectByPrimaryKey(depotHead.getId());
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- depotHead.setStatus(dh.getStatus());
- depotHead.setCreateTime(dh.getCreateTime());
- int result=0;
- try{
- result = depotHeadMapper.updateByPrimaryKey(depotHead);
- logService.insertLog("单据",
- new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(depotHead.getId()).toString(), request);
- }catch(Exception e){
- JshException.writeFail(logger, e);
- }
- return result;
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int deleteDepotHead(Long id, HttpServletRequest request)throws Exception {
- return batchDeleteBillByIds(id.toString());
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int batchDeleteDepotHead(String ids, HttpServletRequest request)throws Exception {
- return batchDeleteBillByIds(ids);
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int batchDeleteBillByIds(String ids)throws Exception {
- StringBuffer sb = new StringBuffer();
- sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE);
- List<DepotHead> dhList = getDepotHeadListByIds(ids);
- for(DepotHead depotHead: dhList){
- //只有未审核的单据才能被删除
- if(!"0".equals(depotHead.getStatus())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_UN_AUDIT_DELETE_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_UN_AUDIT_DELETE_FAILED_MSG));
- }
- }
- for(DepotHead depotHead: dhList){
- sb.append("[").append(depotHead.getNumber()).append("]");
- User userInfo = userService.getCurrentUser();
- //删除入库单据,先校验序列号是否出库,如果未出库则同时删除序列号,如果已出库则不能删除单据
- if (BusinessConstants.DEPOTHEAD_TYPE_IN.equals(depotHead.getType())) {
- List<DepotItem> depotItemList = depotItemMapperEx.findDepotItemListBydepotheadId(depotHead.getId(), BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED);
- if (depotItemList != null && depotItemList.size() > 0) {
- //单据明细里面存在序列号商品
- int serialNumberSellCount = depotHeadMapperEx.getSerialNumberBySell(depotHead.getNumber());
- if (serialNumberSellCount > 0) {
- //已出库则不能删除单据
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_SERIAL_IS_SELL_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_SERIAL_IS_SELL_MSG, depotHead.getNumber()));
- } else {
- //删除序列号
- SerialNumberExample example = new SerialNumberExample();
- example.createCriteria().andInBillNoEqualTo(depotHead.getNumber());
- serialNumberService.deleteByExample(example);
- }
- }
- }
- //删除出库数据回收序列号
- if (BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())
- && !BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubType())) {
- //查询单据子表列表
- List<DepotItem> depotItemList = depotItemMapperEx.findDepotItemListBydepotheadId(depotHead.getId(), BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED);
- /**回收序列号*/
- if (depotItemList != null && depotItemList.size() > 0) {
- for (DepotItem depotItem : depotItemList) {
- //BasicNumber=OperNumber*ratio
- serialNumberService.cancelSerialNumber(depotItem.getMaterialId(), depotHead.getNumber(), (depotItem.getBasicNumber() == null ? 0 : depotItem.getBasicNumber()).intValue(), userInfo);
- }
- }
- }
- List<DepotItem> list = depotItemService.getListByHeaderId(depotHead.getId());
- //删除单据子表数据
- depotItemMapperEx.batchDeleteDepotItemByDepotHeadIds(new Long[]{depotHead.getId()});
- //删除单据主表信息
- batchDeleteDepotHeadByIds(depotHead.getId().toString());
- //将关联的单据置为审核状态-针对采购入库、销售出库、盘点复盘、其它入库、其它出库
- if(StringUtil.isNotEmpty(depotHead.getLinkNumber())){
- if((BusinessConstants.DEPOTHEAD_TYPE_IN.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_PURCHASE.equals(depotHead.getSubType()))
- || (BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_SALES.equals(depotHead.getSubType()))
- || (BusinessConstants.DEPOTHEAD_TYPE_OTHER.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_REPLAY.equals(depotHead.getSubType()))
- || (BusinessConstants.DEPOTHEAD_TYPE_IN.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_OTHER.equals(depotHead.getSubType()))
- || (BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_OTHER.equals(depotHead.getSubType()))) {
- String status = BusinessConstants.BILLS_STATUS_AUDIT;
- //查询除当前单据之外的关联单据列表
- List<DepotHead> exceptCurrentList = getListByLinkNumberExceptCurrent(depotHead.getLinkNumber(), depotHead.getNumber(), depotHead.getType());
- if(exceptCurrentList!=null && exceptCurrentList.size()>0) {
- status = BusinessConstants.BILLS_STATUS_SKIPING;
- }
- DepotHead dh = new DepotHead();
- dh.setStatus(status);
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andNumberEqualTo(depotHead.getLinkNumber());
- depotHeadMapper.updateByExampleSelective(dh, example);
- }
- }
- //将关联的单据置为审核状态-针对请购单转采购订单的情况
- if(StringUtil.isNotEmpty(depotHead.getLinkApply())){
- if(BusinessConstants.DEPOTHEAD_TYPE_OTHER.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_PURCHASE_ORDER.equals(depotHead.getSubType())) {
- String status = BusinessConstants.BILLS_STATUS_AUDIT;
- //查询除当前单据之外的关联单据列表
- List<DepotHead> exceptCurrentList = getListByLinkApplyExceptCurrent(depotHead.getLinkApply(), depotHead.getNumber(), depotHead.getType());
- if(exceptCurrentList!=null && exceptCurrentList.size()>0) {
- status = BusinessConstants.BILLS_STATUS_SKIPING;
- }
- DepotHead dh = new DepotHead();
- dh.setStatus(status);
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andNumberEqualTo(depotHead.getLinkApply());
- depotHeadMapper.updateByExampleSelective(dh, example);
- }
- }
- //将关联的销售订单单据置为未采购状态-针对销售订单转采购订单的情况
- if(StringUtil.isNotEmpty(depotHead.getLinkNumber())){
- if(BusinessConstants.DEPOTHEAD_TYPE_OTHER.equals(depotHead.getType()) &&
- BusinessConstants.SUB_TYPE_PURCHASE_ORDER.equals(depotHead.getSubType())) {
- DepotHead dh = new DepotHead();
- //获取分批操作后单据的商品和商品数量(汇总)
- List<DepotItemVo4MaterialAndSum> batchList = depotItemMapperEx.getBatchBillDetailMaterialSum(depotHead.getLinkNumber(), "normal", depotHead.getType());
- if(batchList.size()>0) {
- dh.setPurchaseStatus(BusinessConstants.PURCHASE_STATUS_SKIPING);
- } else {
- dh.setPurchaseStatus(BusinessConstants.PURCHASE_STATUS_UN_AUDIT);
- }
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andNumberEqualTo(depotHead.getLinkNumber());
- depotHeadMapper.updateByExampleSelective(dh, example);
- }
- }
- //对于零售出库单据,更新会员的预收款信息
- if (BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())
- && BusinessConstants.SUB_TYPE_RETAIL.equals(depotHead.getSubType())){
- if(BusinessConstants.PAY_TYPE_PREPAID.equals(depotHead.getPayType())) {
- if (depotHead.getOrganId() != null) {
- //更新会员预付款
- supplierService.updateAdvanceIn(depotHead.getOrganId());
- }
- }
- }
- for (DepotItem depotItem : list) {
- //更新当前库存
- depotItemService.updateCurrentStock(depotItem);
- //更新当前成本价
- depotItemService.updateCurrentUnitPrice(depotItem);
- }
- }
- //路径列表
- List<String> pathList = new ArrayList<>();
- for(DepotHead depotHead: dhList){
- if(StringUtil.isNotEmpty(depotHead.getFileName())) {
- pathList.add(depotHead.getFileName());
- }
- }
- //逻辑删除文件
- systemConfigService.deleteFileByPathList(pathList);
- logService.insertLog("单据", sb.toString(),
- ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
- return 1;
- }
- /**
- * 删除单据主表信息
- * @param ids
- * @return
- * @throws Exception
- */
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int batchDeleteDepotHeadByIds(String ids)throws Exception {
- User userInfo=userService.getCurrentUser();
- String [] idArray=ids.split(",");
- int result=0;
- try{
- result = depotHeadMapperEx.batchDeleteDepotHeadByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray);
- }catch(Exception e){
- JshException.writeFail(logger, e);
- }
- return result;
- }
- @Override
- public List<DepotHead> getDepotHeadListByIds(String ids)throws Exception {
- List<Long> idList = StringUtil.strToLongList(ids);
- List<DepotHead> list = new ArrayList<>();
- try{
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andIdIn(idList);
- list = depotHeadMapper.selectByExample(example);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- /**
- * 校验单据编号是否存在
- * @param id
- * @param number
- * @return
- * @throws Exception
- */
- @Override
- public int checkIsBillNumberExist(Long id, String number)throws Exception {
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andIdNotEqualTo(id).andNumberEqualTo(number).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- List<DepotHead> list = null;
- try{
- list = depotHeadMapper.selectByExample(example);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list==null?0:list.size();
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public int batchSetStatus(String status, String depotHeadIDs)throws Exception {
- int result = 0;
- List<Long> dhIds = new ArrayList<>();
- List<Long> ids = StringUtil.strToLongList(depotHeadIDs);
- for(Long id: ids) {
- DepotHead depotHead = getDepotHead(id);
- if("0".equals(status)){
- //进行反审核操作
- if("1".equals(depotHead.getStatus()) && "0".equals(depotHead.getPurchaseStatus())) {
- dhIds.add(id);
- } else if("2".equals(depotHead.getPurchaseStatus())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_PURCHASE_STATUS_TWO_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_PURCHASE_STATUS_TWO_MSG));
- } else if("3".equals(depotHead.getPurchaseStatus())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_PURCHASE_STATUS_THREE_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_PURCHASE_STATUS_THREE_MSG));
- } else {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_MSG));
- }
- } else if("1".equals(status)){
- //进行审核操作
- if("0".equals(depotHead.getStatus())) {
- dhIds.add(id);
- } else {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_MSG));
- }
- }
- }
- if(dhIds.size()>0) {
- DepotHead depotHead = new DepotHead();
- depotHead.setStatus(status);
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andIdIn(dhIds);
- result = depotHeadMapper.updateByExampleSelective(depotHead, example);
- //更新当前库存
- if(systemConfigService.getForceApprovalFlag()) {
- for(Long dhId: dhIds) {
- List<DepotItem> list = depotItemService.getListByHeaderId(dhId);
- for (DepotItem depotItem : list) {
- depotItemService.updateCurrentStock(depotItem);
- }
- }
- }
- }
- return result;
- }
- @Override
- public Map<Long,String> findMaterialsListMapByHeaderIdList(List<Long> idList)throws Exception {
- Map<Long,String> materialsListMap = new HashMap<>();
- if(idList.size()>0) {
- List<MaterialsListVo> list = depotHeadMapperEx.findMaterialsListMapByHeaderIdList(idList);
- for (MaterialsListVo materialsListVo : list) {
- String materialsList = materialsListVo.getMaterialsList();
- if(StringUtil.isNotEmpty(materialsList)) {
- materialsList = materialsList.replace(",",",");
- }
- materialsListMap.put(materialsListVo.getHeaderId(), materialsList);
- }
- }
- return materialsListMap;
- }
- @Override
- public Map<Long,BigDecimal> getMaterialCountListMapByHeaderIdList(List<Long> idList)throws Exception {
- Map<Long,BigDecimal> materialCountListMap = new HashMap<>();
- if(idList.size()>0) {
- List<MaterialCountVo> list = depotHeadMapperEx.getMaterialCountListByHeaderIdList(idList);
- for(MaterialCountVo materialCountVo : list){
- materialCountListMap.put(materialCountVo.getHeaderId(), materialCountVo.getMaterialCount());
- }
- }
- return materialCountListMap;
- }
- @Override
- public List<DepotHeadVo4InDetail> findInOutDetail(String beginTime, String endTime, String type, String[] creatorArray,
- String[] organArray, List<Long> categoryList, Boolean forceFlag, Boolean inOutManageFlag,
- String materialParam, List<Long> depotList, Integer oId, String number,
- Long creator, String remark, String column, String order, Integer offset, Integer rows) throws Exception{
- List<DepotHeadVo4InDetail> list = null;
- try{
- list =depotHeadMapperEx.findInOutDetail(beginTime, endTime, type, creatorArray, organArray, categoryList, forceFlag, inOutManageFlag,
- materialParam, depotList, oId, number, creator, remark, column, order, offset, rows);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- @Override
- public int findInOutDetailCount(String beginTime, String endTime, String type, String[] creatorArray,
- String[] organArray, List<Long> categoryList, Boolean forceFlag, Boolean inOutManageFlag, String materialParam, List<Long> depotList, Integer oId, String number,
- Long creator, String remark) throws Exception{
- int result = 0;
- try{
- result =depotHeadMapperEx.findInOutDetailCount(beginTime, endTime, type, creatorArray, organArray, categoryList, forceFlag, inOutManageFlag,
- materialParam, depotList, oId, number, creator, remark);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return result;
- }
- @Override
- public DepotHeadVo4InDetail findInOutDetailStatistic(String beginTime, String endTime, String type, String[] creatorArray,
- String[] organArray, List<Long> categoryList, Boolean forceFlag, Boolean inOutManageFlag,
- String materialParam, List<Long> depotList, Integer oId, String number,
- Long creator, String remark) throws Exception{
- DepotHeadVo4InDetail item = new DepotHeadVo4InDetail();
- try{
- List<DepotHeadVo4InDetail> list =depotHeadMapperEx.findInOutDetailStatistic(beginTime, endTime, type, creatorArray, organArray, categoryList, forceFlag, inOutManageFlag,
- materialParam, depotList, oId, number, creator, remark);
- if(list.size()>0) {
- item.setOperNumber(list.get(0).getOperNumber());
- item.setAllPrice(list.get(0).getAllPrice());
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return item;
- }
- @Override
- public List<DepotHeadVo4InOutMCount> findInOutMaterialCount(String beginTime, String endTime, String type, List<Long> categoryList,
- Boolean forceFlag, Boolean inOutManageFlag, String materialParam,
- List<Long> depotList, Long organizationId, Integer oId, String column, String order,
- Integer offset, Integer rows)throws Exception {
- List<DepotHeadVo4InOutMCount> list = null;
- try{
- String [] creatorArray = getCreatorArray();
- if(creatorArray == null && organizationId != null) {
- creatorArray = getCreatorArrayByOrg(organizationId);
- }
- String subType = "出库".equals(type)? "销售" : "";
- String [] organArray = getOrganArray(subType, "");
- list =depotHeadMapperEx.findInOutMaterialCount(beginTime, endTime, type, categoryList, forceFlag, inOutManageFlag, materialParam, depotList, oId,
- creatorArray, organArray, column, order, offset, rows);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- @Override
- public int findInOutMaterialCountTotal(String beginTime, String endTime, String type, List<Long> categoryList,
- Boolean forceFlag, Boolean inOutManageFlag, String materialParam,
- List<Long> depotList, Long organizationId, Integer oId)throws Exception {
- int result = 0;
- try{
- String [] creatorArray = getCreatorArray();
- if(creatorArray == null && organizationId != null) {
- creatorArray = getCreatorArrayByOrg(organizationId);
- }
- String subType = "出库".equals(type)? "销售" : "";
- String [] organArray = getOrganArray(subType, "");
- result =depotHeadMapperEx.findInOutMaterialCountTotal(beginTime, endTime, type, categoryList, forceFlag, inOutManageFlag, materialParam, depotList, oId,
- creatorArray, organArray);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return result;
- }
- @Override
- public DepotHeadVo4InOutMCount findInOutMaterialCountStatistic(String beginTime, String endTime, String type, List<Long> categoryList,
- Boolean forceFlag, Boolean inOutManageFlag, String materialParam,
- List<Long> depotList, Long organizationId, Integer oId) throws Exception {
- DepotHeadVo4InOutMCount item = new DepotHeadVo4InOutMCount();
- try{
- String [] creatorArray = getCreatorArray();
- if(creatorArray == null && organizationId != null) {
- creatorArray = getCreatorArrayByOrg(organizationId);
- }
- String subType = "出库".equals(type)? "销售" : "";
- String [] organArray = getOrganArray(subType, "");
- List<DepotHeadVo4InOutMCount> list = depotHeadMapperEx.findInOutMaterialCountStatistic(beginTime, endTime, type, categoryList,
- forceFlag, inOutManageFlag, materialParam, depotList, oId, creatorArray, organArray);
- if(list.size()>0) {
- item.setNumSum(list.get(0).getNumSum());
- item.setPriceSum(list.get(0).getPriceSum());
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return item;
- }
- @Override
- public List<DepotHeadVo4InDetail> findAllocationDetail(String beginTime, String endTime, String subType, String number,
- String[] creatorArray, List<Long> categoryList, Boolean forceFlag, String materialParam, List<Long> depotList, List<Long> depotFList,
- String remark, String column, String order, Integer offset, Integer rows) throws Exception{
- List<DepotHeadVo4InDetail> list = null;
- try{
- list =depotHeadMapperEx.findAllocationDetail(beginTime, endTime, subType, number, creatorArray, categoryList, forceFlag,
- materialParam, depotList, depotFList, remark, column, order, offset, rows);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- @Override
- public int findAllocationDetailCount(String beginTime, String endTime, String subType, String number,
- String[] creatorArray, List<Long> categoryList, Boolean forceFlag, String materialParam, List<Long> depotList, List<Long> depotFList,
- String remark) throws Exception{
- int result = 0;
- try{
- result =depotHeadMapperEx.findAllocationDetailCount(beginTime, endTime, subType, number, creatorArray, categoryList, forceFlag,
- materialParam, depotList, depotFList, remark);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return result;
- }
- @Override
- public DepotHeadVo4InDetail findAllocationStatistic(String beginTime, String endTime, String subType, String number,
- String[] creatorArray, List<Long> categoryList, Boolean forceFlag, String materialParam, List<Long> depotList, List<Long> depotFList,
- String remark) throws Exception{
- DepotHeadVo4InDetail item = new DepotHeadVo4InDetail();
- try{
- List<DepotHeadVo4InDetail> list =depotHeadMapperEx.findAllocationStatistic(beginTime, endTime, subType, number, creatorArray, categoryList, forceFlag,
- materialParam, depotList, depotFList, remark);
- if(list.size()>0) {
- item.setOperNumber(list.get(0).getOperNumber());
- item.setAllPrice(list.get(0).getAllPrice());
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return item;
- }
- @Override
- public List<DepotHeadVo4StatementAccount> getStatementAccount(String beginTime, String endTime, Integer organId, String[] organArray,
- Integer hasDebt, String supplierType, String type, String subType, String typeBack,
- String subTypeBack, String billType, Integer offset, Integer rows) {
- List<DepotHeadVo4StatementAccount> list = null;
- try{
- list = depotHeadMapperEx.getStatementAccount(beginTime, endTime, organId, organArray, hasDebt, supplierType, type, subType,typeBack, subTypeBack, billType, offset, rows);
- } catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- @Override
- public int getStatementAccountCount(String beginTime, String endTime, Integer organId, String[] organArray,
- Integer hasDebt, String supplierType, String type, String subType, String typeBack, String subTypeBack, String billType) {
- int result = 0;
- try{
- result = depotHeadMapperEx.getStatementAccountCount(beginTime, endTime, organId, organArray, hasDebt, supplierType, type, subType,typeBack, subTypeBack, billType);
- } catch(Exception e){
- JshException.readFail(logger, e);
- }
- return result;
- }
- @Override
- public List<DepotHeadVo4StatementAccount> getStatementAccountTotalPay(String beginTime, String endTime, Integer organId, String[] organArray,
- Integer hasDebt, String supplierType, String type, String subType,
- String typeBack, String subTypeBack, String billType) {
- List<DepotHeadVo4StatementAccount> list = null;
- try{
- list = depotHeadMapperEx.getStatementAccountTotalPay(beginTime, endTime, organId, organArray, hasDebt, supplierType, type, subType,typeBack, subTypeBack, billType);
- } catch(Exception e){
- JshException.readFail(logger, e);
- }
- return list;
- }
- @Override
- public List<DepotHeadVo4List> getDetailByNumber(String number, HttpServletRequest request)throws Exception {
- List<DepotHeadVo4List> resList = new ArrayList<>();
- try{
- Long userId = userService.getUserId(request);
- String priceLimit = userService.getRoleTypeByUserId(userId).getPriceLimit();
- Map<Long,String> personMap = personService.getPersonMap();
- Map<Long,String> accountMap = accountService.getAccountMap();
- List<DepotHeadVo4List> list = depotHeadMapperEx.getDetailByNumber(number);
- if (null != list) {
- List<Long> idList = new ArrayList<>();
- List<String> numberList = new ArrayList<>();
- for (DepotHeadVo4List dh : list) {
- idList.add(dh.getId());
- numberList.add(dh.getNumber());
- }
- //通过批量查询去构造map
- Map<Long,Integer> financialBillNoMap = getFinancialBillNoMapByBillIdList(idList);
- Map<String,Integer> billSizeMap = getBillSizeMapByLinkNumberList(numberList);
- Map<Long,String> materialsListMap = findMaterialsListMapByHeaderIdList(idList);
- DepotHeadVo4List dh = list.get(0);
- String billCategory = getBillCategory(dh.getSubType());
- if(accountMap!=null && StringUtil.isNotEmpty(dh.getAccountIdList()) && StringUtil.isNotEmpty(dh.getAccountMoneyList())) {
- String accountStr = accountService.getAccountStrByIdAndMoney(accountMap, dh.getAccountIdList(), dh.getAccountMoneyList());
- dh.setAccountName(accountStr);
- }
- if(dh.getAccountIdList() != null) {
- String accountidlistStr = dh.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", "");
- dh.setAccountIdList(accountidlistStr);
- }
- if(dh.getAccountMoneyList() != null) {
- String accountmoneylistStr = dh.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", "");
- dh.setAccountMoneyList(accountmoneylistStr);
- }
- if(dh.getChangeAmount() != null) {
- dh.setChangeAmount(roleService.parseBillPriceByLimit(dh.getChangeAmount().abs(), billCategory, priceLimit, request));
- } else {
- dh.setChangeAmount(BigDecimal.ZERO);
- }
- if(dh.getTotalPrice() != null) {
- dh.setTotalPrice(roleService.parseBillPriceByLimit(dh.getTotalPrice().abs(), billCategory, priceLimit, request));
- }
- BigDecimal discountLastMoney = dh.getDiscountLastMoney()!=null?dh.getDiscountLastMoney():BigDecimal.ZERO;
- dh.setDiscountLastMoney(roleService.parseBillPriceByLimit(discountLastMoney, billCategory, priceLimit, request));
- BigDecimal backAmount = dh.getBackAmount()!=null?dh.getBackAmount():BigDecimal.ZERO;
- dh.setBackAmount(roleService.parseBillPriceByLimit(backAmount, billCategory, priceLimit, request));
- if(dh.getDeposit() == null) {
- dh.setDeposit(BigDecimal.ZERO);
- } else {
- dh.setDeposit(roleService.parseBillPriceByLimit(dh.getDeposit(), billCategory, priceLimit, request));
- }
- //欠款计算
- BigDecimal otherMoney = dh.getOtherMoney()!=null?dh.getOtherMoney():BigDecimal.ZERO;
- BigDecimal deposit = dh.getDeposit()!=null?dh.getDeposit():BigDecimal.ZERO;
- BigDecimal changeAmount = dh.getChangeAmount()!=null?dh.getChangeAmount():BigDecimal.ZERO;
- BigDecimal debt = discountLastMoney.add(otherMoney).subtract((deposit.add(changeAmount)));
- dh.setDebt(roleService.parseBillPriceByLimit(debt, billCategory, priceLimit, request));
- //是否有付款单或收款单
- if(financialBillNoMap!=null) {
- Integer financialBillNoSize = financialBillNoMap.get(dh.getId());
- dh.setHasFinancialFlag(financialBillNoSize!=null && financialBillNoSize>0);
- }
- //是否有退款单
- if(billSizeMap!=null) {
- Integer billListSize = billSizeMap.get(dh.getNumber());
- dh.setHasBackFlag(billListSize!=null && billListSize>0);
- }
- if(StringUtil.isNotEmpty(dh.getSalesMan())) {
- dh.setSalesManStr(personService.getPersonByMapAndIds(personMap,dh.getSalesMan()));
- }
- if(dh.getOperTime() != null) {
- dh.setOperTimeStr(getCenternTime(dh.getOperTime()));
- }
- //商品信息简述
- if(materialsListMap!=null) {
- dh.setMaterialsList(materialsListMap.get(dh.getId()));
- }
- User creatorUser = userService.getUser(dh.getCreator());
- if(creatorUser != null){
- dh.setCreatorName(creatorUser.getUsername());
- }
- resList.add(dh);
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return resList;
- }
- /**
- * 查询除当前单据之外的关联单据列表
- * @param linkNumber
- * @param number
- * @return
- * @throws Exception
- */
- @Override
- public List<DepotHead> getListByLinkNumberExceptCurrent(String linkNumber, String number, String type)throws Exception {
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andLinkNumberEqualTo(linkNumber).andNumberNotEqualTo(number).andTypeEqualTo(type)
- .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- return depotHeadMapper.selectByExample(example);
- }
- /**
- * 查询除当前单据之外的关联单据列表
- * @param linkApply
- * @param number
- * @return
- * @throws Exception
- */
- @Override
- public List<DepotHead> getListByLinkApplyExceptCurrent(String linkApply, String number, String type)throws Exception {
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andLinkApplyEqualTo(linkApply).andNumberNotEqualTo(number).andTypeEqualTo(type)
- .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- return depotHeadMapper.selectByExample(example);
- }
- /**
- * 根据原单号查询关联的单据列表(批量)
- * @param linkNumberList
- * @return
- * @throws Exception
- */
- @Override
- public List<DepotHead> getBillListByLinkNumberList(List<String> linkNumberList)throws Exception {
- if(linkNumberList!=null && linkNumberList.size()>0) {
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andLinkNumberIn(linkNumberList).andSubTypeLike("退货").andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- return depotHeadMapper.selectByExample(example);
- } else {
- return new ArrayList<>();
- }
- }
- /**
- * 根据原单号查询关联的单据列表
- * @param linkNumber
- * @return
- * @throws Exception
- */
- @Override
- public List<DepotHead> getBillListByLinkNumber(String linkNumber)throws Exception {
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andLinkNumberEqualTo(linkNumber).andSubTypeLike("退货").andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- return depotHeadMapper.selectByExample(example);
- }
- /**
- * 新增单据主表及单据子表信息
- * @param beanJson
- * @param rows
- * @param request
- * @throws Exception
- */
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public void addDepotHeadAndDetail(String beanJson, String rows,
- HttpServletRequest request) throws Exception {
- /**处理单据主表数据*/
- DepotHead depotHead = JSONObject.parseObject(beanJson, DepotHead.class);
- //校验单号是否重复
- if(checkIsBillNumberExist(0L, depotHead.getNumber())>0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_MSG));
- }
- //校验是否同时录入关联请购单号和关联订单号
- if(StringUtil.isNotEmpty(depotHead.getLinkNumber()) && StringUtil.isNotEmpty(depotHead.getLinkApply())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_MSG));
- }
- String subType = depotHead.getSubType();
- //结算账户校验
- if("采购".equals(subType) || "采购退货".equals(subType) || "销售".equals(subType) || "销售退货".equals(subType)) {
- if (StringUtil.isEmpty(depotHead.getAccountIdList()) && depotHead.getAccountId() == null) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_ACCOUNT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_ACCOUNT_FAILED_MSG));
- }
- }
- //判断用户是否已经登录过,登录过不再处理
- User userInfo=userService.getCurrentUser();
- depotHead.setCreator(userInfo==null?null:userInfo.getId());
- depotHead.setCreateTime(new Timestamp(System.currentTimeMillis()));
- if(StringUtil.isEmpty(depotHead.getStatus())) {
- depotHead.setStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT);
- }
- depotHead.setPurchaseStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT);
- depotHead.setPayType(depotHead.getPayType()==null?"现付":depotHead.getPayType());
- if(StringUtil.isNotEmpty(depotHead.getAccountIdList())){
- depotHead.setAccountIdList(depotHead.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", ""));
- }
- if(StringUtil.isNotEmpty(depotHead.getAccountMoneyList())) {
- //校验多账户的结算金额
- String accountMoneyList = depotHead.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", "");
- BigDecimal sum = StringUtil.getArrSum(accountMoneyList.split(","));
- BigDecimal manyAccountSum = sum.abs();
- if(manyAccountSum.compareTo(depotHead.getChangeAmount().abs())!=0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_MANY_ACCOUNT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_MANY_ACCOUNT_FAILED_MSG));
- }
- depotHead.setAccountMoneyList(accountMoneyList);
- }
- //校验累计扣除订金是否超出订单中的金额
- if(depotHead.getDeposit()!=null && StringUtil.isNotEmpty(depotHead.getLinkNumber())) {
- BigDecimal finishDeposit = depotHeadMapperEx.getFinishDepositByNumberExceptCurrent(depotHead.getLinkNumber(), depotHead.getNumber());
- //订单中的订金金额
- BigDecimal changeAmount = getDepotHead(depotHead.getLinkNumber()).getChangeAmount();
- if(changeAmount!=null) {
- BigDecimal preDeposit = changeAmount.abs();
- if(depotHead.getDeposit().add(finishDeposit).compareTo(preDeposit)>0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_DEPOSIT_OVER_PRE_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_DEPOSIT_OVER_PRE_MSG));
- }
- }
- }
- //校验附件的数量
- if(StringUtil.isNotEmpty(depotHead.getFileName())) {
- String[] fileArr = depotHead.getFileName().split(",");
- if(fileArr.length>4) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_FILE_NUM_LIMIT_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_FILE_NUM_LIMIT_MSG, 4));
- }
- }
- JSONArray rowArr = JSONArray.parseArray(rows);
- //商品数量
- int operNumber = 0;
- for (int i = 0; i < rowArr.size(); i++) {
- JSONObject rowObj = JSONObject.parseObject(rowArr.getString(i));
- operNumber = operNumber + rowObj.getInteger("operNumber");
- }
- depotHead.setGoodsQuantity(operNumber);
- //商品总类
- depotHead.setGoodsTypeCount(rowArr.size());
- //添加主表
- depotHeadMapper.insertSelective(depotHead);
- /**入库和出库处理预付款信息*/
- if(BusinessConstants.PAY_TYPE_PREPAID.equals(depotHead.getPayType())){
- if(depotHead.getOrganId()!=null) {
- BigDecimal currentAdvanceIn = supplierService.getSupplier(depotHead.getOrganId()).getAdvanceIn();
- if(currentAdvanceIn.compareTo(depotHead.getTotalPrice())>=0) {
- //更新会员的预付款
- supplierService.updateAdvanceIn(depotHead.getOrganId());
- } else {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_MEMBER_PAY_LACK_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_MEMBER_PAY_LACK_MSG));
- }
- }
- }
- //根据单据编号查询单据id
- DepotHeadExample dhExample = new DepotHeadExample();
- dhExample.createCriteria().andNumberEqualTo(depotHead.getNumber()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- List<DepotHead> list = depotHeadMapper.selectByExample(dhExample);
- if(list!=null) {
- Long headId = list.get(0).getId();
- /**入库和出库处理单据子表信息*/
- depotItemService.saveDetials(rows,headId, "add",request);
- }
- logService.insertLog("单据",
- new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(depotHead.getNumber()).toString(),
- ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
- }
- /**
- * 更新单据主表及单据子表信息
- * @param beanJson
- * @param rows
- * @param request
- * @throws Exception
- */
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public void updateDepotHeadAndDetail(String beanJson, String rows, HttpServletRequest request)throws Exception {
- /**更新单据主表信息*/
- DepotHead depotHead = JSONObject.parseObject(beanJson, DepotHead.class);
- //校验单号是否重复
- if(checkIsBillNumberExist(depotHead.getId(), depotHead.getNumber())>0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_MSG));
- }
- //校验是否同时录入关联请购单号和关联订单号
- if(StringUtil.isNotEmpty(depotHead.getLinkNumber()) && StringUtil.isNotEmpty(depotHead.getLinkApply())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_MSG));
- }
- //校验单据状态,如果不是未审核则提示
- if(!"0".equals(getDepotHead(depotHead.getId()).getStatus())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BILL_CANNOT_EDIT_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_BILL_CANNOT_EDIT_MSG));
- }
- //获取之前的会员id
- Long preOrganId = getDepotHead(depotHead.getId()).getOrganId();
- String subType = depotHead.getSubType();
- //结算账户校验
- if("采购".equals(subType) || "采购退货".equals(subType) || "销售".equals(subType) || "销售退货".equals(subType)) {
- if (StringUtil.isEmpty(depotHead.getAccountIdList()) && depotHead.getAccountId() == null) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_ACCOUNT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_ACCOUNT_FAILED_MSG));
- }
- }
- if(StringUtil.isNotEmpty(depotHead.getAccountIdList())){
- depotHead.setAccountIdList(depotHead.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", ""));
- }
- if(StringUtil.isNotEmpty(depotHead.getAccountMoneyList())) {
- //校验多账户的结算金额
- String accountMoneyList = depotHead.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", "");
- BigDecimal sum = StringUtil.getArrSum(accountMoneyList.split(","));
- BigDecimal manyAccountSum = sum.abs();
- if(manyAccountSum.compareTo(depotHead.getChangeAmount().abs())!=0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_MANY_ACCOUNT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_MANY_ACCOUNT_FAILED_MSG));
- }
- depotHead.setAccountMoneyList(accountMoneyList);
- }
- //校验累计扣除订金是否超出订单中的金额
- if(depotHead.getDeposit()!=null && StringUtil.isNotEmpty(depotHead.getLinkNumber())) {
- BigDecimal finishDeposit = depotHeadMapperEx.getFinishDepositByNumberExceptCurrent(depotHead.getLinkNumber(), depotHead.getNumber());
- //订单中的订金金额
- BigDecimal changeAmount = getDepotHead(depotHead.getLinkNumber()).getChangeAmount();
- if(changeAmount!=null) {
- BigDecimal preDeposit = changeAmount.abs();
- if(depotHead.getDeposit().add(finishDeposit).compareTo(preDeposit)>0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_DEPOSIT_OVER_PRE_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_DEPOSIT_OVER_PRE_MSG));
- }
- }
- }
- //校验附件的数量
- if(StringUtil.isNotEmpty(depotHead.getFileName())) {
- String[] fileArr = depotHead.getFileName().split(",");
- if(fileArr.length>4) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_FILE_NUM_LIMIT_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_FILE_NUM_LIMIT_MSG, 4));
- }
- }
- JSONArray rowArr = JSONArray.parseArray(rows);
- //商品数量
- int operNumber = 0;
- for (int i = 0; i < rowArr.size(); i++) {
- JSONObject rowObj = JSONObject.parseObject(rowArr.getString(i));
- operNumber = operNumber + rowObj.getInteger("operNumber");
- }
- depotHead.setGoodsQuantity(operNumber);
- //商品总类
- depotHead.setGoodsTypeCount(rowArr.size());
- //修改时间
- depotHead.setOperTime(new Date());
- //修改操作人
- depotHead.setOperId(userService.getCurrentUser().getId());
- //修改单据主表
- depotHeadMapper.updateByPrimaryKeySelective(depotHead);
- //如果存在多账户结算需要将原账户的id置空
- if(StringUtil.isNotEmpty(depotHead.getAccountIdList())) {
- depotHeadMapperEx.setAccountIdToNull(depotHead.getId());
- }
- /**入库和出库处理预付款信息*/
- if(BusinessConstants.PAY_TYPE_PREPAID.equals(depotHead.getPayType())){
- if(depotHead.getOrganId()!=null){
- BigDecimal currentAdvanceIn = supplierService.getSupplier(depotHead.getOrganId()).getAdvanceIn();
- if(currentAdvanceIn.compareTo(depotHead.getTotalPrice())>=0) {
- //更新会员的预付款
- supplierService.updateAdvanceIn(depotHead.getOrganId());
- if(null != preOrganId && !preOrganId.equals(depotHead.getOrganId())) {
- //更新之前会员的预付款
- supplierService.updateAdvanceIn(preOrganId);
- }
- } else {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_MEMBER_PAY_LACK_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_MEMBER_PAY_LACK_MSG));
- }
- }
- }
- /**入库和出库处理单据子表信息*/
- depotItemService.saveDetials(rows,depotHead.getId(), "update",request);
- logService.insertLog("单据",
- new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(depotHead.getNumber()).toString(),
- ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
- }
- @Override
- public Map<String, Object> getBuyAndSaleStatistics(String today, String monthFirstDay, String yesterdayBegin, String yesterdayEnd,
- String yearBegin, String yearEnd, HttpServletRequest request) throws Exception {
- Long userId = userService.getUserId(request);
- String priceLimit = userService.getRoleTypeByUserId(userId).getPriceLimit();
- Boolean forceFlag = systemConfigService.getForceApprovalFlag();
- String[] creatorArray = getCreatorArray();
- List<InOutPriceVo> inOutPriceVoList = depotHeadMapperEx.getBuyAndSaleStatisticsList(yearBegin, yearEnd, creatorArray, forceFlag);
- String[] periods = {"today", "month", "yesterday", "year"};
- String[] types = {"Buy", "BuyBack", "Sale", "SaleBack", "RetailSale", "RetailSaleBack"};
- Map<String, BigDecimal> statistics = new HashMap<>();
- // 初始化 statistics Map
- for (String period : periods) {
- for (String type : types) {
- statistics.put(period + type, BigDecimal.ZERO);
- }
- }
- Date todayDate = Tools.strToDate(today);
- Date monthFirstDate = Tools.strToDate(monthFirstDay);
- Date yesterdayStartDate = Tools.strToDate(yesterdayBegin);
- Date yesterdayEndDate = Tools.strToDate(yesterdayEnd);
- Date yearStartDate = Tools.strToDate(yearBegin);
- Date yearEndDate = Tools.strToDate(yearEnd);
- for (InOutPriceVo item : inOutPriceVoList) {
- Date operTime = item.getOperTime();
- BigDecimal discountLastMoney = item.getDiscountLastMoney();
- BigDecimal totalPriceAbs = item.getTotalPrice().abs();
- if (isWithinRange(operTime, todayDate, Tools.strToDate(getNow3()))) {
- updateStatistics(statistics, item, "today", discountLastMoney, totalPriceAbs);
- }
- if (isWithinRange(operTime, monthFirstDate, Tools.strToDate(getNow3()))) {
- updateStatistics(statistics, item, "month", discountLastMoney, totalPriceAbs);
- }
- if (isWithinRange(operTime, yesterdayStartDate, yesterdayEndDate)) {
- updateStatistics(statistics, item, "yesterday", discountLastMoney, totalPriceAbs);
- }
- if (isWithinRange(operTime, yearStartDate, yearEndDate)) {
- updateStatistics(statistics, item, "year", discountLastMoney, totalPriceAbs);
- }
- }
- Map<String, Object> result = new HashMap<>();
- for (String period : periods) {
- result.put(period + "Buy", roleService.parseHomePriceByLimit(statistics.get(period + "Buy").subtract(statistics.get(period + "BuyBack")), "buy", priceLimit, "***", request));
- result.put(period + "Sale", roleService.parseHomePriceByLimit(statistics.get(period + "Sale").subtract(statistics.get(period + "SaleBack")), "sale", priceLimit, "***", request));
- result.put(period + "RetailSale", roleService.parseHomePriceByLimit(statistics.get(period + "RetailSale").subtract(statistics.get(period + "RetailSaleBack")), "retail", priceLimit, "***", request));
- }
- return result;
- }
- private boolean isWithinRange(Date operTime, Date startDate, Date endDate) {
- return operTime.compareTo(startDate) >= 0 && operTime.compareTo(endDate) <= 0;
- }
- private void updateStatistics(Map<String, BigDecimal> statistics, InOutPriceVo item, String period, BigDecimal discountLastMoney, BigDecimal totalPriceAbs) {
- switch (item.getType()) {
- case "入库":
- switch (item.getSubType()) {
- case "采购":
- statistics.put(period + "Buy", statistics.get(period + "Buy").add(discountLastMoney));
- break;
- case "销售退货":
- statistics.put(period + "SaleBack", statistics.get(period + "SaleBack").add(discountLastMoney));
- break;
- case "零售退货":
- statistics.put(period + "RetailSaleBack", statistics.get(period + "RetailSaleBack").add(totalPriceAbs));
- break;
- }
- break;
- case "出库":
- switch (item.getSubType()) {
- case "采购退货":
- statistics.put(period + "BuyBack", statistics.get(period + "BuyBack").add(discountLastMoney));
- break;
- case "销售":
- statistics.put(period + "Sale", statistics.get(period + "Sale").add(discountLastMoney));
- break;
- case "零售":
- statistics.put(period + "RetailSale", statistics.get(period + "RetailSale").add(totalPriceAbs));
- break;
- }
- break;
- }
- }
- @Override
- public DepotHead getDepotHead(String number)throws Exception {
- DepotHead depotHead = new DepotHead();
- try{
- DepotHeadExample example = new DepotHeadExample();
- example.createCriteria().andNumberEqualTo(number).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- List<DepotHead> list = depotHeadMapper.selectByExample(example);
- if(null!=list && list.size()>0) {
- depotHead = list.get(0);
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return depotHead;
- }
- @Override
- public List<DepotHeadVo4List> debtList(Long organId, String materialParam, String number, String beginTime, String endTime,
- String status, Integer offset, Integer rows) {
- List<DepotHeadVo4List> resList = new ArrayList<>();
- try{
- String depotIds = depotService.findDepotStrByCurrentUser();
- String [] depotArray=depotIds.split(",");
- String [] creatorArray = getCreatorArray();
- beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
- endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
- List<DepotHeadVo4List> list=depotHeadMapperEx.debtList(organId, creatorArray, status, number,
- beginTime, endTime, materialParam, depotArray, offset, rows);
- if (null != list) {
- resList = parseDebtBillList(list);
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return resList;
- }
- @Override
- public int debtListCount(Long organId, String materialParam, String number, String beginTime, String endTime,
- String status) {
- int total = 0;
- try {
- String depotIds = depotService.findDepotStrByCurrentUser();
- String[] depotArray = depotIds.split(",");
- String[] creatorArray = getCreatorArray();
- beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME);
- endTime = Tools.parseDayToTime(endTime, BusinessConstants.DAY_LAST_TIME);
- total = depotHeadMapperEx.debtListCount(organId, creatorArray, status, number,
- beginTime, endTime, materialParam, depotArray);
- } catch(Exception e){
- JshException.readFail(logger, e);
- }
- return total;
- }
- @Override
- public void debtExport(Long organId, String materialParam, String number, String type, String subType,
- String beginTime, String endTime, String status, String mpList,
- HttpServletRequest request, HttpServletResponse response) {
- try {
- Long userId = userService.getUserId(request);
- String priceLimit = userService.getRoleTypeByUserId(userId).getPriceLimit();
- String billCategory = getBillCategory(subType);
- String depotIds = depotService.findDepotStrByCurrentUser();
- String[] depotArray = depotIds.split(",");
- String[] creatorArray = getCreatorArray();
- status = StringUtil.isNotEmpty(status) ? status : null;
- beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME);
- endTime = Tools.parseDayToTime(endTime, BusinessConstants.DAY_LAST_TIME);
- List<DepotHeadVo4List> dhList = new ArrayList<>();
- List<DepotHeadVo4List> list = depotHeadMapperEx.debtList(organId, creatorArray, status, number,
- beginTime, endTime, materialParam, depotArray, null, null);
- if (null != list) {
- dhList = parseDebtBillList(list);
- }
- //生成Excel文件
- String fileName = "单据信息";
- File file = new File("/opt/"+ fileName);
- WritableWorkbook wtwb = Workbook.createWorkbook(file);
- String oneTip = "";
- String sheetOneStr = "";
- if("采购".equals(subType)) {
- oneTip = "供应商对账列表";
- sheetOneStr = "供应商,单据编号,关联单据,商品信息,单据日期,操作员,单据金额,本单欠款,已付欠款,待付欠款,备注";
- } else if("出库".equals(type) && "销售".equals(subType)) {
- oneTip = "客户对账列表";
- sheetOneStr = "客户,单据编号,关联单据,商品信息,单据日期,操作员,单据金额,本单欠款,已收欠款,待收欠款,备注";
- }
- if(StringUtil.isNotEmpty(beginTime) && StringUtil.isNotEmpty(endTime)) {
- oneTip = oneTip + "(" + beginTime + "至" + endTime + ")";
- }
- List<String> sheetOneList = StringUtil.strToStringList(sheetOneStr);
- String[] sheetOneArr = StringUtil.listToStringArray(sheetOneList);
- List<Long> idList = new ArrayList<>();
- List<String[]> billList = new ArrayList<>();
- Map<Long, BillListCacheVo> billListCacheVoMap = new HashMap<>();
- for (DepotHeadVo4List dh : dhList) {
- idList.add(dh.getId());
- BillListCacheVo billListCacheVo = new BillListCacheVo();
- billListCacheVo.setNumber(dh.getNumber());
- billListCacheVo.setOrganName(dh.getOrganName());
- billListCacheVo.setOperTimeStr(getCenternTime(dh.getOperTime()));
- billListCacheVoMap.put(dh.getId(), billListCacheVo);
- String[] objs = new String[sheetOneArr.length];
- objs[0] = dh.getOrganName();
- objs[1] = dh.getNumber();
- objs[2] = dh.getLinkNumber();
- objs[3] = dh.getMaterialsList();
- objs[4] = dh.getOperTimeStr();
- objs[5] = dh.getUserName();
- BigDecimal discountLastMoney = dh.getDiscountLastMoney() == null ? BigDecimal.ZERO : dh.getDiscountLastMoney();
- BigDecimal otherMoney = dh.getOtherMoney() == null ? BigDecimal.ZERO : dh.getOtherMoney();
- BigDecimal deposit = dh.getDeposit() == null ? BigDecimal.ZERO : dh.getDeposit();
- objs[6] = parseDecimalToStr(discountLastMoney.add(otherMoney).subtract(deposit), 2);
- objs[7] = parseDecimalToStr(dh.getNeedDebt(), 2);
- objs[8] = parseDecimalToStr(dh.getFinishDebt(), 2);
- objs[9] = parseDecimalToStr(dh.getDebt(), 2);
- objs[10] = dh.getRemark();
- billList.add(objs);
- }
- ExcelUtils.exportObjectsManySheet(wtwb, oneTip, sheetOneArr, "单据列表", 0, billList);
- //导出明细数据
- if(idList.size()>0) {
- List<DepotItemVo4WithInfoEx> dataList = depotItemMapperEx.getBillDetailListByIds(idList);
- String[] mpArr = mpList.split(",");
- String twoTip = "";
- String sheetTwoStr = "";
- if ("采购".equals(subType)) {
- twoTip = "供应商单据明细";
- sheetTwoStr = "供应商,单据编号,单据日期,仓库名称,条码,名称,规格,型号,颜色,品牌,制造商,扩展信息,单位,序列号,批号,有效期,多属性,数量,单价,金额,税率(%),税额,价税合计,重量,备注";
- } else if ("销售".equals(subType)) {
- twoTip = "客户单据明细";
- sheetTwoStr = "客户,单据编号,单据日期,仓库名称,条码,名称,规格,型号,颜色,品牌,制造商,扩展信息,单位,序列号,批号,有效期,多属性,数量,单价,金额,税率(%),税额,价税合计,重量,备注";
- }
- if (StringUtil.isNotEmpty(beginTime) && StringUtil.isNotEmpty(endTime)) {
- twoTip = twoTip + "(" + beginTime + "至" + endTime + ")";
- }
- List<String> sheetTwoList = StringUtil.strToStringList(sheetTwoStr);
- String[] sheetTwoArr = StringUtil.listToStringArray(sheetTwoList);
- List<String[]> billDetail = new ArrayList<>();
- for (DepotItemVo4WithInfoEx diEx : dataList) {
- String[] objs = new String[sheetTwoArr.length];
- BillListCacheVo billListCacheVo = billListCacheVoMap.get(diEx.getHeaderId());
- objs[0] = billListCacheVo != null ? billListCacheVo.getOrganName() : "";
- objs[1] = billListCacheVo != null ? billListCacheVo.getNumber() : "";
- objs[2] = billListCacheVo != null ? billListCacheVo.getOperTimeStr() : "";
- objs[3] = diEx.getDepotId() == null ? "" : diEx.getDepotName();
- objs[4] = diEx.getBarCode();
- objs[5] = diEx.getMName();
- objs[6] = diEx.getMStandard();
- objs[7] = diEx.getMModel();
- objs[8] = diEx.getMColor();
- objs[9] = diEx.getBrand();
- objs[10] = diEx.getMMfrs();
- objs[11] = depotItemService.getOtherInfo(mpArr, diEx);
- objs[12] = diEx.getMaterialUnit();
- objs[13] = diEx.getSnList();
- objs[14] = diEx.getBatchNumber();
- objs[15] = Tools.parseDateToStr(diEx.getExpirationDate());
- objs[16] = diEx.getSku();
- objs[17] = parseDecimalToStr(diEx.getOperNumber(), 2);
- objs[18] = parseDecimalToStr(roleService.parseBillPriceByLimit(diEx.getUnitPrice(), billCategory, priceLimit, request), 2);
- objs[19] = parseDecimalToStr(roleService.parseBillPriceByLimit(diEx.getAllPrice(), billCategory, priceLimit, request), 2);
- objs[20] = parseDecimalToStr(roleService.parseBillPriceByLimit(diEx.getTaxRate(), billCategory, priceLimit, request), 2);
- objs[21] = parseDecimalToStr(roleService.parseBillPriceByLimit(diEx.getTaxMoney(), billCategory, priceLimit, request), 2);
- objs[22] = parseDecimalToStr(roleService.parseBillPriceByLimit(diEx.getTaxLastMoney(), billCategory, priceLimit, request), 2);
- BigDecimal allWeight = diEx.getBasicNumber() == null || diEx.getWeight() == null ? BigDecimal.ZERO : diEx.getBasicNumber().multiply(diEx.getWeight());
- objs[23] = parseDecimalToStr(allWeight, 2);
- objs[24] = diEx.getRemark();
- billDetail.add(objs);
- }
- ExcelUtils.exportObjectsManySheet(wtwb, twoTip, sheetTwoArr, "单据明细", 1, billDetail);
- }
- wtwb.write();
- wtwb.close();
- ExcelUtils.downloadExcel(file, file.getName(), response);
- } catch(Exception e){
- JshException.readFail(logger, e);
- }
- }
- @Override
- public List<DepotHeadVo4List> parseDebtBillList(List<DepotHeadVo4List> list) throws Exception {
- List<Long> idList = new ArrayList<>();
- List<DepotHeadVo4List> dhList = new ArrayList<>();
- for (DepotHeadVo4List dh : list) {
- idList.add(dh.getId());
- }
- //通过批量查询去构造map
- Map<Long,String> materialsListMap = findMaterialsListMapByHeaderIdList(idList);
- for (DepotHeadVo4List dh : list) {
- if(dh.getChangeAmount() != null) {
- dh.setChangeAmount(dh.getChangeAmount().abs());
- }
- if(dh.getTotalPrice() != null) {
- dh.setTotalPrice(dh.getTotalPrice().abs());
- }
- if(dh.getDeposit() == null) {
- dh.setDeposit(BigDecimal.ZERO);
- }
- if(dh.getOperTime() != null) {
- dh.setOperTimeStr(getCenternTime(dh.getOperTime()));
- }
- BigDecimal discountLastMoney = dh.getDiscountLastMoney()!=null?dh.getDiscountLastMoney():BigDecimal.ZERO;
- BigDecimal otherMoney = dh.getOtherMoney()!=null?dh.getOtherMoney():BigDecimal.ZERO;
- BigDecimal deposit = dh.getDeposit()!=null?dh.getDeposit():BigDecimal.ZERO;
- BigDecimal changeAmount = dh.getChangeAmount()!=null?dh.getChangeAmount().abs():BigDecimal.ZERO;
- //本单欠款(如果退货则为负数)
- dh.setNeedDebt(discountLastMoney.add(otherMoney).subtract(deposit.add(changeAmount)));
- if(BusinessConstants.SUB_TYPE_PURCHASE_RETURN.equals(dh.getSubType()) || BusinessConstants.SUB_TYPE_SALES_RETURN.equals(dh.getSubType())) {
- dh.setNeedDebt(BigDecimal.ZERO.subtract(dh.getNeedDebt()));
- }
- BigDecimal needDebt = dh.getNeedDebt()!=null?dh.getNeedDebt():BigDecimal.ZERO;
- BigDecimal finishDebt = accountItemService.getEachAmountByBillId(dh.getId());
- finishDebt = finishDebt!=null?finishDebt:BigDecimal.ZERO;
- //已收欠款
- dh.setFinishDebt(finishDebt);
- //待收欠款
- dh.setDebt(needDebt.subtract(finishDebt));
- //商品信息简述
- if(materialsListMap!=null) {
- dh.setMaterialsList(materialsListMap.get(dh.getId()));
- }
- dhList.add(dh);
- }
- return dhList;
- }
- @Override
- public String getBillCategory(String subType) {
- if(subType.equals("零售") || subType.equals("零售退货")) {
- return "retail";
- } else if(subType.equals("销售订单") || subType.equals("销售") || subType.equals("销售退货")) {
- return "sale";
- } else {
- return "buy";
- }
- }
- /**
- * 格式化金额样式
- * @param decimal
- * @param num
- * @return
- */
- private String parseDecimalToStr(BigDecimal decimal, Integer num) {
- return decimal == null ? "" : decimal.setScale(num, BigDecimal.ROUND_HALF_UP).toString();
- }
- private String parseStatusToStr(String status, String type) {
- if(StringUtil.isNotEmpty(status)) {
- if("purchase".equals(type)) {
- switch (status) {
- case "2":
- return "完成采购";
- case "3":
- return "部分采购";
- }
- } else if("sale".equals(type)) {
- switch (status) {
- case "2":
- return "完成销售";
- case "3":
- return "部分销售";
- }
- }
- switch (status) {
- case "0":
- return "未审核";
- case "1":
- return "已审核";
- case "9":
- return "审核中";
- }
- }
- return "";
- }
- @Override
- public List<DepotHeadVo4List> waitBillList(String number, String materialParam, String type, String subType,
- String beginTime, String endTime, String status, int offset, int rows) {
- List<DepotHeadVo4List> resList = new ArrayList<>();
- try{
- String [] depotArray = getDepotArray("其它");
- //给仓管可以看全部的单据(此时可以通过分配仓库去控制权限)
- String [] creatorArray = null;
- String [] subTypeArray = StringUtil.isNotEmpty(subType) ? subType.split(",") : null;
- String [] statusArray = StringUtil.isNotEmpty(status) ? status.split(",") : null;
- Map<Long,String> accountMap = accountService.getAccountMap();
- beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
- endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
- List<DepotHeadVo4List> list = depotHeadMapperEx.waitBillList(type, subTypeArray, creatorArray, statusArray, number, beginTime, endTime,
- materialParam, depotArray, offset, rows);
- if (null != list) {
- List<Long> idList = new ArrayList<>();
- for (DepotHeadVo4List dh : list) {
- idList.add(dh.getId());
- }
- //通过批量查询去构造map
- Map<Long,String> materialsListMap = findMaterialsListMapByHeaderIdList(idList);
- Map<Long,BigDecimal> materialCountListMap = getMaterialCountListMapByHeaderIdList(idList);
- for (DepotHeadVo4List dh : list) {
- if(accountMap!=null && StringUtil.isNotEmpty(dh.getAccountIdList()) && StringUtil.isNotEmpty(dh.getAccountMoneyList())) {
- String accountStr = accountService.getAccountStrByIdAndMoney(accountMap, dh.getAccountIdList(), dh.getAccountMoneyList());
- dh.setAccountName(accountStr);
- }
- if(dh.getOperTime() != null) {
- dh.setOperTimeStr(getCenternTime(dh.getOperTime()));
- }
- //商品信息简述
- if(materialsListMap!=null) {
- dh.setMaterialsList(materialsListMap.get(dh.getId()));
- }
- //商品总数量
- if(materialCountListMap!=null) {
- dh.setMaterialCount(materialCountListMap.get(dh.getId()));
- }
- resList.add(dh);
- }
- }
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return resList;
- }
- @Override
- public Long waitBillCount(String number, String materialParam, String type, String subType,
- String beginTime, String endTime, String status) {
- Long result=null;
- try{
- String [] depotArray = getDepotArray("其它");
- //给仓管可以看全部的单据(此时可以通过分配仓库去控制权限)
- String [] creatorArray = null;
- String [] subTypeArray = StringUtil.isNotEmpty(subType) ? subType.split(",") : null;
- String [] statusArray = StringUtil.isNotEmpty(status) ? status.split(",") : null;
- beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
- endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
- result=depotHeadMapperEx.waitBillCount(type, subTypeArray, creatorArray, statusArray, number, beginTime, endTime,
- materialParam, depotArray);
- }catch(Exception e){
- JshException.readFail(logger, e);
- }
- return result;
- }
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public void batchAddDepotHeadAndDetail(String ids, HttpServletRequest request) throws Exception {
- List<DepotHead> dhList = getDepotHeadListByIds(ids);
- StringBuilder sb = new StringBuilder();
- User userInfo=userService.getCurrentUser();
- for(DepotHead depotHead : dhList) {
- String prefixNo = BusinessConstants.DEPOTHEAD_TYPE_IN.equals(depotHead.getType())?"QTRK":"QTCK";
- //关联单据单号
- String oldNumber = depotHead.getNumber();
- //校验单据最新状态不能进行批量操作
- if("0".equals(depotHead.getStatus()) || "2".equals(depotHead.getStatus()) || "9".equals(depotHead.getStatus())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_NEW_STATUS_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_NEW_STATUS_FAILED_MSG, oldNumber, depotHead.getType()));
- }
- //校验是否是部分入库或者部分出库
- if("3".equals(depotHead.getStatus())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_MSG, oldNumber, depotHead.getType()));
- }
- depotHead.setLinkNumber(oldNumber);
- //给单号重新赋值
- String number = prefixNo + sequenceService.buildOnlyNumber();
- depotHead.setNumber(number);
- depotHead.setDefaultNumber(number);
- depotHead.setOperTime(new Date());
- depotHead.setSubType(BusinessConstants.SUB_TYPE_OTHER);
- depotHead.setChangeAmount(BigDecimal.ZERO);
- depotHead.setTotalPrice(BigDecimal.ZERO);
- depotHead.setDiscountLastMoney(BigDecimal.ZERO);
- depotHead.setCreator(userInfo==null?null:userInfo.getId());
- depotHead.setOrganId(null);
- depotHead.setAccountId(null);
- depotHead.setAccountIdList(null);
- depotHead.setAccountMoneyList(null);
- depotHead.setFileName(null);
- depotHead.setSalesMan(null);
- depotHead.setStatus("0");
- depotHead.setTenantId(null);
- //查询明细
- List<DepotItemVo4WithInfoEx> itemList = depotItemService.getDetailList(depotHead.getId());
- depotHead.setId(null);
- JSONArray rowArr = new JSONArray();
- for(DepotItemVo4WithInfoEx item: itemList) {
- if("1".equals(item.getEnableSerialNumber())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_MSG, oldNumber));
- }
- if("1".equals(item.getEnableBatchNumber())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_MSG, oldNumber));
- }
- item.setUnitPrice(BigDecimal.ZERO);
- item.setAllPrice(BigDecimal.ZERO);
- item.setLinkId(item.getId());
- item.setTenantId(null);
- String itemStr = JSONObject.toJSONString(item);
- JSONObject itemObj = JSONObject.parseObject(itemStr);
- itemObj.put("unit", itemObj.getString("materialUnit"));
- rowArr.add(itemObj.toJSONString());
- }
- String rows = rowArr.toJSONString();
- //新增其它入库单或其它出库单
- sb.append("[").append(depotHead.getNumber()).append("]");
- depotHeadMapper.insertSelective(depotHead);
- //根据单据编号查询单据id
- DepotHeadExample dhExample = new DepotHeadExample();
- dhExample.createCriteria().andNumberEqualTo(depotHead.getNumber()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- List<DepotHead> list = depotHeadMapper.selectByExample(dhExample);
- if(list!=null) {
- Long headId = list.get(0).getId();
- /**入库和出库处理单据子表信息*/
- depotItemService.saveDetials(rows, headId, "add", request);
- }
- }
- logService.insertLog("单据",
- new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_BATCH_ADD).append(sb).toString(),
- ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
- }
- @Override
- public String syncOrderToXsdd(DepotHeadXsddRequestVO depotHead, List<DepotItemXsddRequestVO> depotItemList) throws Exception {
- // 校验单号是否重复
- if (checkIsBillNumberExist(0L, depotHead.getNumber()) > 0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_CODE, String.format(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_MSG));
- }
- // 添加主表
- depotHeadMapper.insertSelective(depotHead);
- // 根据单据编号查询单据id
- DepotHeadExample dhExample = new DepotHeadExample();
- dhExample.createCriteria().andNumberEqualTo(depotHead.getNumber()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
- List<DepotHead> list = depotHeadMapper.selectByExample(dhExample);
- if (list != null) {
- Long headId = list.get(0).getId();
- /** 销售订单 单据子表信息 */
- depotItemService.saveOrderItem(depotHead, depotItemList);
- List<Long> mIdList = depotItemList.stream().map(DepotItemXsddRequestVO::getMaterialId).collect(Collectors.toList());
- //同步集采库存
- syncTescoSystemService.sycnTescoStock(mIdList);
- }
- logService.insertLog("销售订单", new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(depotHead.getNumber()).toString(), ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest());
- return "";
- }
- /**
- * 根据商品id获取最后一条销售订单
- * @param mid 商品id
- * @return 商品信息
- */
- @Override
- public DepotHead getDepotLastByMaterialId(long mid) {
- return depotHeadMapper.getDepotLastByMaterialId(mid);
- }
- /**
- * pda订单提交
- *
- * @param pdaDepotHeadDTO
- * @return
- */
- @Override
- @Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public boolean pdaOrderSubmit(PDADepotHeadDTO pdaDepotHeadDTO) throws Exception {
- //根据单据号获取单据信息
- DepotHead depotHead = depotHeadMapper.selectOne(new LambdaQueryWrapperX<DepotHead>().eq(DepotHead::getId, pdaDepotHeadDTO.getId()));
- //根据单据id获取单据子表信息
- List<DepotItem> depotItems = depotItemService.getListByHeaderId(depotHead.getId());
- //设置单据主表信息
- depotHead.setId(null);
- //设置关联订单
- depotHead.setLinkNumber(depotHead.getNumber());
- String number = sequenceService.buildOnlyNumber();
- //设置单号
- if ("采购订单".equals(depotHead.getSubType())){
- depotHead.setSubType("采购");
- depotHead.setType("入库");
- depotHead.setDefaultNumber("CGRK" + number) ;
- depotHead.setNumber("CGRK" + number);
- }else if ("销售订单".equals(depotHead.getSubType())){
- depotHead.setSubType("销售");
- depotHead.setType("出库");
- depotHead.setDefaultNumber("XSCK" + number) ;
- depotHead.setNumber("XSCK" + number);
- }
- //校验单号是否重复
- if(checkIsBillNumberExist(0L, depotHead.getNumber())>0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_BILL_NUMBER_EXIST_MSG));
- }
- //校验是否同时录入关联请购单号和关联订单号
- if(StringUtil.isNotEmpty(depotHead.getLinkNumber()) && StringUtil.isNotEmpty(depotHead.getLinkApply())) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_MSG));
- }
- String subType = depotHead.getSubType();
- //结算账户校验
- if("采购".equals(subType) || "采购退货".equals(subType) || "销售".equals(subType) || "销售退货".equals(subType)) {
- if (StringUtil.isEmpty(depotHead.getAccountIdList()) && depotHead.getAccountId() == null) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_ACCOUNT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_ACCOUNT_FAILED_MSG));
- }
- }
- //判断用户是否已经登录过,登录过不再处理
- User userInfo = userService.getCurrentUser();
- depotHead.setCreator(userInfo==null?null:userInfo.getId());
- depotHead.setCreateTime(new Timestamp(System.currentTimeMillis()));
- depotHead.setOperId(userInfo==null?null:userInfo.getId());
- depotHead.setOperTime(new Timestamp(System.currentTimeMillis()));
- if(StringUtil.isEmpty(depotHead.getStatus())) {
- depotHead.setStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT);
- }
- depotHead.setPurchaseStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT);
- depotHead.setPayType(depotHead.getPayType()==null?"现付":depotHead.getPayType());
- if(StringUtil.isNotEmpty(depotHead.getAccountIdList())){
- depotHead.setAccountIdList(depotHead.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", ""));
- }
- if(StringUtil.isNotEmpty(depotHead.getAccountMoneyList())) {
- //校验多账户的结算金额
- String accountMoneyList = depotHead.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", "");
- BigDecimal sum = StringUtil.getArrSum(accountMoneyList.split(","));
- BigDecimal manyAccountSum = sum.abs();
- if(manyAccountSum.compareTo(depotHead.getChangeAmount().abs())!=0) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_MANY_ACCOUNT_FAILED_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_MANY_ACCOUNT_FAILED_MSG));
- }
- depotHead.setAccountMoneyList(accountMoneyList);
- }
- //校验附件的数量
- if(StringUtil.isNotEmpty(depotHead.getFileName())) {
- String[] fileArr = depotHead.getFileName().split(",");
- if(fileArr.length>4) {
- throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_FILE_NUM_LIMIT_CODE,
- String.format(ExceptionConstants.DEPOT_HEAD_FILE_NUM_LIMIT_MSG, 4));
- }
- }
- //商品数量
- int operNumber = 0;
- List<PDADepotMaterialDto> list = pdaDepotHeadDTO.getMaterials();
- Map<String,PDADepotMaterialDto> materialMap = new HashMap<>();
- for (int i = 0; i < list.size(); i++) {
- operNumber = operNumber + list.get(i).getMaterialNumber().intValue();
- materialMap.put(list.get(i).getBatchNumber(),list.get(i));
- }
- depotHead.setGoodsQuantity(operNumber);
- //商品总类
- depotHead.setGoodsTypeCount(list.size());
- //设置凭证图片、备注
- depotHead.setVoucherPicture(pdaDepotHeadDTO.getVoucherPicture());
- depotHead.setRemark(pdaDepotHeadDTO.getRemark());
- User user = userService.getCurrentUser();
- depotHead.setTenantId(user.getId());
- depotHead.setCreateTime(new Timestamp(System.currentTimeMillis()));
- depotHead.setStatus("2");
- //添加主表
- depotHeadMapper.insertSelective(depotHead);
- //根据单据编号查询单据id
- long id = depotHeadMapper.selectOne(new QueryWrapperX<DepotHead>().eq("number",depotHead.getNumber())).getId();
- //设置单据子表信息
- for (DepotItem depotItem : depotItems) {
- //获取子表单商品
- MaterialExtend materialExtend = materialExtendService.getMaterialExtend(depotItem.getMaterialExtendId());
- //获取子表单批次号
- String batchNumber = materialExtend.getBatchNumber();
- //修改原先采购订单实际入库数量
- depotItemService.update(new UpdateWrapper<DepotItem>().set("actual_quantity_in_storage", materialMap.get(batchNumber).getMaterialNumber()).eq("id", depotItem.getId()));
- //设置单据主表id
- depotItem.setHeaderId(id);
- depotItem.setId(null);
- //设置实际入库数量
- depotItem.setActualQuantityInStorage(materialMap.get(batchNumber).getMaterialNumber());
- //以下进行单位换算
- Unit unitInfo = materialService.findUnit(depotItem.getMaterialId()); //查询多单位信息
- if (StringUtil.isExist(depotItem.getActualQuantityInStorage())) {
- //获取子表单商品单位
- String unit =depotItem.getMaterialUnit();
- BigDecimal oNumber = depotItem.getActualQuantityInStorage();
- //设置基础数量
- if (StringUtil.isNotEmpty(unitInfo.getName())) {
- String basicUnit = unitInfo.getBasicUnit(); //基本单位
- if (unit.equals(basicUnit)) { //如果等于基本单位
- depotItem.setBasicNumber(oNumber); //数量一致
- } else if (unit.equals(unitInfo.getOtherUnit())) { //如果等于副单位
- depotItem.setBasicNumber(oNumber.multiply(unitInfo.getRatio())); //数量乘以比例
- } else if (unit.equals(unitInfo.getOtherUnitTwo())) { //如果等于副单位2
- depotItem.setBasicNumber(oNumber.multiply(unitInfo.getRatioTwo())); //数量乘以比例
- } else if (unit.equals(unitInfo.getOtherUnitThree())) { //如果等于副单位3
- depotItem.setBasicNumber(oNumber.multiply(unitInfo.getRatioThree())); //数量乘以比例
- } else {
- depotItem.setBasicNumber(oNumber); //数量一致
- }
- } else {
- depotItem.setBasicNumber(oNumber); //其他情况
- }
- }
- depotItem.setWarehousingUser(user.getId());
- //添加单据子表
- depotItemService.insertDepotItemWithObj(depotItem);
- //修改商品生产日期
- materialExtendService.update(new UpdateWrapper<MaterialExtend>().set("production_date",materialMap.get(batchNumber).getProductionDate()).eq("id", materialExtend.getId()));
- }
- //修改采购订单状态完成
- this.update(new UpdateWrapper<DepotHead>().set("status", "2").eq("id", pdaDepotHeadDTO.getId()));
- return true;
- }
- }
|